VSK VIRTUAL STUDIO KIT

Web remote & boards Field-tested

Open http://<machine>:8090/remote from any phone, tablet or laptop on the studio LAN (type the http:// explicitly; there is no page at the bare root). The page is served from the plugin’s Resources/WebRemote.html on every request - hot-editable, no recompile.

Boards & modules

A board is a tab; a module is a card on its 4-column grid (width 1-4; phones stack). The default Studio board is synthesized - your first edit materializes it, and deleting it restores stock. Module library: Health · Audio mixer · Scenes · Presets 1-16 · Cameras + Go Live · Transport · Record · SDI output · Timing & speed · Show triggers (Blueprint) · TV / screen router · Quick media shelf · Custom controls · Section label.

Editing happens on the page itself: ✎ Edit → add tabs, add modules, drag by the ≡ handle, rename/resize, 🗑 remove → SAVE BOARDS. Boards persist project-side and travel in show files. Long-press any trigger button to copy its Stream Deck URL.

Show-day lock & security - untick VSK Project ▸ Web remote ▸ Allow board editing from browsers before a show. The remote has no authentication - keep the studio LAN private; don't port-forward it.

Latency

Commands land in ≈25 ms (one LAN POST + a frame); indicators poll at 4 Hz, audio meters at 10 Hz. A CONNECTION LOST banner appears if the editor goes away.

HTTP API

Everything the page does is plain HTTP on the same port - usable from Bitfocus Companion, scripts, or anything that can POST:

RouteMethodDoes
/remoteGETThe control-board page
/api/stateGETFull UI state JSON (tally, presets, scenes, TVs, NDI list…)
/api/trigger?name=Cam.2POSTFire any bus trigger
/api/logical?name=X&v=1 · /api/scalar?name=X&v=0.5POSTSet bus values
/api/tv?name=Wall&source=SDI:2POSTRoute a screen (optional &fade=)
/api/boardsGET / POSTRead / save board layouts
/api/audio/levelsGETLive meter levels
/api/audio?src=SDI:1&volume=… · /api/audio/add?device=… · /api/audio/remove?src=…POSTMixer control
/api/upload?name=x.pngPOSTUpload media to the Quick Media shelf
Gotcha - UE's HTTP server rejects a POST without a body: send some body so Content-Length is present (curl -X POST -d "x" "http://host:8090/api/trigger?name=Play").