Stream Deck Plugin
The FXCanvas Stream Deck plugin puts your show on physical keys. Pin the sources, palettes, and effects that you perform with to fixed positions. One press makes the item live. Each key shows a preview thumbnail, and a red border marks the item that drives the output. A folder view is also available, for the items that you did not pin in advance.
The plugin communicates with FXCanvas through the REST API only. It installs nothing into FXCanvas. The show machine needs only its REST server enabled.
The plugin drives the REST API. The REST API server runs only with an activated license. In the free tier FXCanvas disables the Enable REST API Server checkbox, and every plugin key stays on Offline. See What requires a license.
Requirements:
- Stream Deck software 6.5 or later (Windows 10+ or macOS 12+)
- FXCanvas with an active REST API server, reachable from the Stream Deck machine
Installation
The plugin ships as one .streamDeckPlugin package. Build it from the repository. Then give it to the Stream Deck software.
-
Install Node.js 20 or later. Then open a terminal in
integrations/streamdeckinside the FXCanvas repository. -
Run
npm installone time to get the workspace dependencies. -
Run
npm run pack. The script builds both packages, makes sure that the layering rules hold, and packs the plugin. After a success the script exits0and leaves one package atintegrations/streamdeck/dist/com.fxcanvas.streamdeck.streamDeckPlugin. After a failure the script names the step that failed and leaves no package. -
If the Stream Deck software runs, quit it. It then loads the plugin correctly at the next start.
-
Double-click the
.streamDeckPluginfile. The Stream Deck software asks for confirmation and installs the plugin.A Stream Deck must be connectedThe Stream Deck software starts a plugin only after you put one of its actions on a device. With no Stream Deck attached, FXCanvas still appears in the actions list. No key renders, and the plugin does not run.
-
Start the Stream Deck software. Make sure that FXCanvas appears in the actions list on the right, with the Pin, Browse, and Navigate actions.
-
Drag the actions onto the keys. See Laying out your deck below.
To uninstall the plugin, right-click FXCanvas in the actions list. Then select the uninstall command. This is the same procedure as for any other plugin.
Laying out your deck
The plugin ships three actions. Select between them by what you know in advance about the key.
| Action | Use it for |
|---|---|
| Pin | One key, one item. The sources, palettes, and effects that you perform with. |
| Browse | The folder view, to find an item that you did not pin. |
| Navigate | One level up, and the pages inside a folder. Useful only next to Browse keys. |
Start with Pin
A show runs on this surface. Drag Pin onto a key. Select the key to open the property inspector. Then select an entry from the Item list. The list holds every source, every palette, and every effect that FXCanvas can load. The key keeps that item, in that position, after every other change.
The list is long on a real installation, so make it shorter before you scroll. Type in the filter box to match on name. Then use the dropdown beside it to show one group only:
| Filter | Shows |
|---|---|
| All sources | Everything below, in one list |
| Shader sources | The built-in shader source types |
| ISF sources | Source types from standalone .isf / .fs files |
| Source presets | Your saved source presets |
| Live inputs | Cameras, capture cards, NDI senders |
| File media | Everything the media library indexed |
| Palettes | Your palettes, with their colors as swatches |
| Effects | Every effect type FXCanvas can load |
A useful 5×3 layout gives one row to each group:
row 1 the five sources you switch between
row 2 the five effects you drop in and out
row 3 four palettes, plus a Navigate "up" key
A pinned key shows the preview thumbnail of the item, its name, and a red border when it is live. Only one source and only one palette can be live, so each of these two groups shows one border at most. Effects are different. A row of effect keys shows the whole chain.
What an effect key does
Press once to add the effect to your chain. Press again to remove it. The red border means that the effect is loaded. The row is therefore also a readout of the chain that you run.
An effect key is bound to the effect type, not to a position in the chain. This has two results. A new chain order in the Effects panel does not re-point your keys. A layout from one machine also works on another machine, because a key can name an effect that the second machine never loaded. The press loads it.
FXCanvas adds the effect to the end of the chain, and the effect starts enabled. This is the same result as an effect that you add in the Effects panel. For finer control, use FXCanvas itself. A new chain order, or a hidden effect that stays loaded, needs the Effects panel. The deck offers the one switch only.
Add Browse only where it helps
Browse renders the content of the current folder page. The number of Browse keys that you place is the page size (1 to 32). This works well for small sets that change often, for example a new clip or a new camera. It works badly for large sets, because each page is a linear scan.
Large folders stay large. A folder of 30 source types is 30 items to page through. An alphabetic subdivision was tried and dropped, because it replaces one long scan with two short scans. The search still costs you time in the middle of a show. If you know which item you want, pin it.
Two Browse keys and a Navigate pair on one page, with all other keys pinned, works better than a deck of Browse keys.
Connection profile
The connection profile holds the host, the port, and the optional API key that the plugin uses to reach FXCanvas. Edit it in the property inspector of any FXCanvas key. The profile is plugin-wide, so one edit applies to every key.
| Field | Range | Default |
|---|---|---|
| Host | 1–253 characters (name or IP address) | 127.0.0.1 |
| Port | 1–65535 | 8080 |
| API key | 0–256 characters, optional | empty (no authentication header) |
| Refresh interval | off, 500, 1000, 2000, or 5000 ms | off |
| Key role | Node rendering, up, next page, previous page | Node rendering |
| Item (Pin keys only) | Any source, palette, or installable effect | nothing pinned |
Refresh interval is off by default. The keys still stay current. Source, preset, and palette previews are static until you edit them, so a timer gives no benefit. Each key re-reads its data on a press, and when the plugin requests a folder. Your next touch on the deck therefore shows the changes that you made in the FXCanvas UI. Set an interval only for two results. The first result is animated live-input previews on the key. The second result is borders that follow changes from elsewhere while nobody touches the deck.
To configure the profile:
- Select any FXCanvas key to open the property inspector. The profile is plugin-wide, so every action shows the same one.
- When the Stream Deck and FXCanvas run on the same computer, leave Host at
127.0.0.1and Port at8080. For a separate show machine, enter its address and the port from FXCanvas Settings → Remote Control. - If you enabled authentication in FXCanvas, enter the API key. The plugin then sends it as
X-API-Keyon every request. When the field is empty, the requests carry no authentication header. - If you do not know the port of FXCanvas, press Scan 127.0.0.1:8080-8089. The plugin tries each port for one second. It then lists the ports that answered, or reports that it found no FXCanvas instance.
- Save the profile. The plugin calls
GET /api/v1/statusat once. It shows the application name and version from the response in the inspector. - For animated previews only, change Refresh interval from
off. Then set the Key role on Navigate keys, or the Item on Pin keys.
The plugin rejects a value outside its range. The inspector names the field with the error, the last saved profile stays in force, and the plugin sends no request.
The state text on the keys shows the condition of the connection:
| State text | Meaning |
|---|---|
Offline | FXCanvas did not answer within 2 seconds, or the host and port are unreachable. The plugin tries again after 2 seconds, and it doubles the wait up to 30 seconds. |
Auth | FXCanvas answered 401. The API key is missing or wrong. |
Pro | The connected FXCanvas has no active license, so the REST API is unavailable. |
Update | The connected FXCanvas is too old to serve the browse and live-thumbnail routes. |
Top | You are at the root folder, so the up key has no destination. |
Empty | The folder that you opened has no entries. |
FXCanvas Remote Control settings
The FXCanvas REST server must run before a key can render. Configure the server in Edit → Settings → Remote Control.
- Open Edit → Settings and select the Remote Control tab.
- Select Enable REST API Server.
- Leave Port at
8080to match the plugin default. For another port, enter the same value in the property inspector. - You can also set an API Key. If you set one, enter the same key in the property inspector. If the two keys differ, every key shows
Auth. - Click Apply. Then make sure that the status reads Server Running.
- For a Stream Deck on a different computer, use the Network Address from the same panel as the plugin host. Also permit the port through the firewall of the show machine.
The plugin uses these FXC_API routes: GET /api/v1/status, GET /api/v1/capabilities, GET /api/v1/browse, GET /api/v1/sources, GET /api/v1/sources/current, GET /api/v1/palettes, GET /api/v1/effects, and GET /api/v1/effects/available. It also uses the thumbnail routes, and the activation routes, which include POST /api/v1/effects/add and /remove. The REST server gives all of these routes. The Browse & Inputs API Reference documents the routes that this feature added. The Effects & Palettes API Reference documents the effect catalog and the palette colors.
Troubleshooting
| Symptom | What to do |
|---|---|
Every key shows Offline | Make sure that the REST server is enabled and reads Server Running. Make sure that the host and port match. Make sure that the port is open in the firewall. |
Every key shows Auth | The API key in the property inspector must match the one in Settings → Remote Control exactly. |
Every key shows Pro | The REST API needs an activated license. See Licensing. |
Every key shows Update | Update FXCanvas. This build is older than the browse and live-thumbnail routes. |
| Keys show placeholder icons instead of previews | The thumbnail request failed, or it timed out. Look in the Log Viewer in FXCanvas, and try a longer refresh interval. |
Failed flashes on a key for 2 seconds | FXCanvas rejected the activation, or the activation took more than 5 seconds. The previous source still drives the output. |
| Only some entries appear in a folder | The browse response omits unavailable devices, unavailable media files, and unsupported media files. |
| A root folder is missing | FXCanvas omits a folder that has no children. Live Inputs appears after you attach a device. |
| A pinned key shows no red border while its item is live | Only one source and one palette can be live at a time. Make sure that you pinned the item that runs. An effect border means that the effect is loaded in the chain, not that it is visible. |
An effect key shows Failed | The chain is at the effect limit of your license tier, or the effect creation failed. Look in the Effects panel. |
| ISF sources is empty | This FXCanvas build is older than the isf source type field, so FXCanvas lists every source type under Shader sources instead. You can still pin all of them. |
A pinned key shows Pick… | The key has no pinned item. Select the key and select an Item. |
Related Topics
- REST API — The server, authentication, and name matching
- Browse & Inputs API Reference — The four routes that the plugin browses and activates with
- Effects & Palettes API Reference — Effects that you load and unload, and the palette colors
- REST API Reference — Full interactive endpoint documentation
- Video Inputs — Live inputs that the plugin can activate
- Video Playback — File media that the plugin can activate