Review date: 2026-06-30.
This file captures how Stream Deck plugins usually guide setup, and what that implies for the VDO.Ninja native plugin.
Most plugins rely on the Stream Deck property inspector as the main setup surface. The normal user flow is:
This matches the Stream Deck SDK model. Property inspectors are local HTML views that can read/write plugin settings and talk to the plugin over Stream Deck’s local WebSocket bridge.
Implication for VDO.Ninja: the first Connection Status action should double as the setup screen. Users should not need to read external docs before seeing what &api=... means.
OBS-style plugins usually require a companion app or local service to be running. The setup docs tell users to enable a local WebSocket/server, then configure host, port, and password in Stream Deck. BarRaider’s OBS Tools explicitly sends users through a setup wizard after they drag an action.
Implication for VDO.Ninja: our equivalent is not a local app server. It is a VDO.Ninja browser page opened with the same &api=KEY. The wizard should explain that the controlled page must stay open.
Twitch-style integrations use Stream Deck’s account flow: users add an account in Stream Deck preferences, sign in through a browser, then select that account per action.
Implication for VDO.Ninja: do not copy an OAuth/account model. VDO.Ninja is free, browser-based, no sign-in, and no account token is required for normal use. The plugin only needs a private API key shared between Stream Deck and the VDO.Ninja URL.
Philips Hue-style plugins often discover local devices, prompt a hardware pairing step, then populate action dropdowns from discovered devices. Failure modes are mostly discovery/pairing confusion.
Implication for VDO.Ninja: we can avoid discovery complexity. Once the API key is known, connection status can prove whether a matching VDO.Ninja page is present.
Elgato supports bundling profiles into plugins. Profiles are useful when a plugin has many actions and a first-time user should not have to build a layout from scratch. StreamYard uses a profile/hotkey workflow rather than a native API plugin.
Implication for VDO.Ninja: include default profiles by device class later:
QR codes are common for pairing Stream Deck Mobile to the desktop Stream Deck app. They are not the normal configuration path for desktop plugins.
Implication for VDO.Ninja: QR codes should be optional and task-specific:
push link so a phone can join with &api=KEY.permaid/push link.The plugin can generate QR codes locally in the property inspector from the setup URL. This does not require a VDO.Ninja account or external service.
When the user selects any VDO.Ninja action and no API key exists, show a compact setup panel:
VDO.Ninja is free, browser-based, and does not require a login.
To control a VDO.Ninja page from Stream Deck:
1. Choose or generate an API key.
2. Open your VDO.Ninja link with &api=that-key.
3. Keep that VDO.Ninja page open while using Stream Deck.
Then provide:
Generate keyCopy keyOpen VDO.NinjaTest connectionAdvanced API hostProvide a link builder instead of making users edit URLs manually:
Example outputs:
https://vdo.ninja/mixer?director=ROOM&api=KEY
https://vdo.ninja/?push=STREAMID&api=KEY
https://vdo.ninja/?view=STREAMID&api=KEY
https://vdo.ninja/?room=ROOM&scene=custom-scene&api=KEY
Use &api= when appending to an existing URL that already has ?. Use ?api= only when adding API to a URL with no query string.
The setup panel should show one of these states:
Missing key: no API key configured.Waiting for page: API relay reachable, but no VDO.Ninja page has answered.Connected: at least one callback/update has returned.Timeout: a command was sent but no page answered in time.Disconnected: WebSocket closed; reconnecting.Error: host/network/configuration error.This language matters because users may confuse “plugin connected to relay” with “VDO.Ninja page connected”. For VDO.Ninja, the second state is what matters.
Use plain setup copy:
The API key is like a private remote-control channel. Use a different key for each VDO.Ninja page you want to control separately.
Avoid leading with implementation details like WebSockets, callbacks, getDetails, or relay rooms. Put those under an “Advanced” disclosure.
The wizard should explicitly support all common page modes:
This is simple and matches most Stream Deck users’ expectations.
Add named connections:
Director Room A
Guest Phone Push
OBS Clean Output
Backup Room
Each action can use:
This is better than same-key multi-page aggregation because current VDO.Ninja callbacks do not identify the responding page.
Add an onboarding wizard action or command:
Setup VDO.NinjagetDetails.Use approachable copy:
Control VDO.Ninja from Stream Deck. VDO.Ninja is free, browser-based, and requires no account. Add &api=your-key to the VDO.Ninja page you want to control, paste the same key into Stream Deck, and start controlling mic, camera, guests, scenes, PTZ, and production actions from physical keys and dials.
Avoid promising “auto-discovers every room” until multi-connection and page identity are implemented.
plugin/ui/action-settings.html.sendToPlugin / sendToPropertyInspector messages and a real getDetails test.SupportURL in manifest.json before marketplace packaging.Short intro:
VDO.Ninja is free, browser-based, and does not require a login. This plugin controls a VDO.Ninja page that has been opened with a matching &api key.
API key help:
Use the same private key in Stream Deck and in your VDO.Ninja URL. Example: https://vdo.ninja/mixer?director=myshow&api=abc123
Waiting state:
Waiting for a VDO.Ninja page using this API key. Open your generated link and keep that page open.
QR help:
Scan this to open the generated VDO.Ninja link on a phone or guest device.
Multiple pages warning:
Use different API keys for pages you want to control separately. Reusing one key on multiple pages can make feedback ambiguous.