vdo-streamdeck

Onboarding and Configuration Review

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.

Sources Checked

Setup Patterns Seen Elsewhere

Action Property Inspector First

Most plugins rely on the Stream Deck property inspector as the main setup surface. The normal user flow is:

  1. Install plugin.
  2. Drag an action onto a key or dial.
  3. Configure that action in the property inspector.
  4. The action stores global settings or per-action settings.

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.

External App Connection

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.

Account Authorization

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.

Device Pairing and Discovery

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.

Profiles and Templates

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

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:

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.

First Screen

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:

Provide 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.

Connection Feedback

The setup panel should show one of these states:

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.

Explain Scope Without Overloading

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.

Room and Roomless Modes

The wizard should explicitly support all common page modes:

Configuration Model Recommendation

MVP

This is simple and matches most Stream Deck users’ expectations.

Next

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.

Later

Add an onboarding wizard action or command:

Marketplace Page Copy Direction

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.

Required Product Changes

Copy Drafts

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.