Sno Station
Sno Station은 AI 에이전트를 하나의 팀으로 묶는 오픈소스 워크스테이션으로, 로컬 머신에서 에이전트 협업을 가능하게 함
Bitfocus Companion 모듈로 출력 라우팅·신 호출·블랙아웃·무대 메모·슬라이드 앞뒤 이동을 Stream Deck에서 제어합니다
A Bitfocus Companion module for routing outputs, recalling scenes, blacking out, sending stage notes and moving to the next or previous slide from a Stream Deck.
플러그인JavaScriptGitHub @stoatworks-labs온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
A Bitfocus Companion module for Presentation Commander: route outputs, recall scenes, black out screens, send stage notes and change slides on the presentation laptops. Details: https://stoatworks-labs.com/software/companion-presentation-commander-server/
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
AI-assisted project. This codebase was created with Claude
(Anthropic), directed and reviewed by a human author — including implementation
and documentation. Check it over before you rely on it for a show.
A Bitfocus Companion module for
Presentation Commander.
It controls a running Master Server from a Stream Deck (or any other Companion surface), so
you can route outputs, recall scenes, black out, send stage notes, and drive
next/previous slide on the connected Client Nodes.README 전문 보기 ↗AI-assisted project. This codebase was created with Claude (Anthropic), directed and reviewed by a human author — including implementation and documentation. Check it over before you rely on it for a show.
A Bitfocus Companion module for Presentation Commander. It controls a running Master Server from a Stream Deck (or any other Companion surface), so you can route outputs, recall scenes, black out, send stage notes, and drive next/previous slide on the connected Client Nodes.
It talks to the Master Server's existing JSON-RPC automation API (:9700)
over plain HTTP, so there's nothing extra to install on the server end.
flowchart LR
Deck["Stream Deck / any<br/>Companion surface"] --> COMP["Bitfocus Companion"]
COMP --> MOD["This module"]
MOD -- "GET /state · POST /rpc<br/>JSON-RPC over HTTP :9700" --> SRV["Presentation Commander<br/>Master Server"]
This release contains:
companion-module-presentationcommander-server-pkg.tgz — npm package, 8 KBpresentationcommander-server-1.1.4.tgz — npm package, 8 KBAll builds, checksums and release notes: github.com/stoatworks-labs/companion-module-presentationcommander-server/releases.
connection_status, client_count, and one
routed_<output-id> variable per output holding the name of whatever
it's routed to right now (or Unrouted).| Doc | Contents |
|---|---|
| docs/USER-GUIDE.md | Building a surface, and where the feedbacks can mislead you |
| docs/API.md | Every action, feedback and variable, the config fields, and the poll loop |
| docs/DEVELOPING.md | The three-repo protocol, the module conventions, and the behaviours to preserve |
127.0.0.1, meaning Companion's on the same
machine as the Master Server).9700, which matches the Master
Server's built-in automation API.GET /state.The Master Server's automation API only listens on 127.0.0.1, on purpose.
It runs routing and scene commands with no authentication at all, so putting it
on the network is something an operator has to choose to do, and Presentation
Commander won't do it for you. If your Stream Deck / Companion setup is on a
different machine from the Master Server, reach port 9700 through an SSH
tunnel or a reverse proxy that adds its own authentication, then point this
module's Master Server host/port fields at the tunnel or proxy rather
than the raw port.
A GitHub Actions release workflow builds the
distributable .tgz with companion-module-build whenever a v* tag is pushed
(or when someone runs the workflow by hand from the Actions tab). Grab the
.tgz from the Releases page
and import it through Companion's module import
(Modules → Import module package in current Companion versions). You can
also build the same package yourself with npm install && npm run package.
git clone https://github.com/stoatworks-labs/companion-module-presentationcommander-server.git
cd companion-module-presentationcommander-server
npm install
Then in Companion, go to Settings → Developer Modules (or wherever your Companion version keeps it) and add this folder as a local module.
src/main/services/automationApi.ts
is the HTTP surface this module talks to (GET /state, POST /rpc), and
it's shared with the in-app Control Surface panel, so both paths behave the
same.next-slide/
previous-slide actions here get passed on to whichever Client Node you
target.Installed from the release package, the module crashed on load. Companion
showed Connection is not running, kept restarting it, and the log said
Cannot find module '../package.json'. The About block at the bottom of the
connection's config panel read package.json relative to its own source file,
which is fine in a checkout and wrong once the module's bundled for release.
Every packaged release since the About block arrived had it; a checkout on the
developer modules path didn't, which is how it went unnoticed. The About block
now finds what it needs either way and can't stop the module loading.
No change to what the module does. npm test no longer stubs
parseVariablesInString and parseVariablesInField, which
@companion-module/base 2.x doesn't have, so a call to either would now fail the
suite instead of passing it. This module never made one. Also in this release:
@companion-module/base 2.1.3 and @companion-module/tools 3.1.0.
Packaging only; the module's code didn't change.
companion-module-presentationcommander-server-pkg.tgz was made by
re-tarring the build tool's staging folder, which put package.json one
folder down from where Companion looks. It's now a copy of the archive
companion-module-build makes, and both archives are checked for
package.json and companion/manifest.json at their root before a release
goes out.companion/HELP.md.Maintenance only: the release workflow's actions were updated. The module's code didn't change.
New: presets, built from the Master Server's live outputs, sources, scenes and clients. There's one section per output with a button for each routable target and the tally already wired up, one section for the Client Nodes, and stage notes.
Two details worth knowing about them:
routedSourceId, so it didn't need a feedback of its own.New: npm test, which runs the module's actual code against a pretend
automation API on a real HTTP server. It covers the generated presets, the tally
feedbacks, and a rejected command being treated as a failure rather than a
success.
MIT
This project is built on other people's work — see ATTRIBUTIONS.md.