iobroker.blackmagic-atem
v0.2.3
Published
Control Blackmagic ATEM video mixers (Mini, Mini Pro, Television Studio, Constellation, and more)
Readme
ioBroker.blackmagic-atem
Tests:
Control Blackmagic ATEM video mixers from ioBroker — supports all 21+ ATEM models from Mini to Constellation 4K+.
Description
This adapter controls Blackmagic Design ATEM video mixers over the network. It uses the reverse-engineered ATEM UDP protocol via the atem-connection library, and supports 21+ model variants — from ATEM Mini through Television Studio to Constellation 4K+ — with capability-based state creation that adapts to the connected device.
Features
- Program/Preview switching — change program and preview inputs
- Transitions — Cut, Auto, manual T-bar; Mix / Dip / Wipe / DVE / Sting styles with per-style rates
- Fade to Black — toggle and configure FTB rate
- Upstream Keyers (up to 4 per M/E) — on air, type, fill/key source, mask, fly
- Downstream Keyers (up to 4) — on air, tie, auto, rate, fill/key source
- Aux outputs (up to 48) — source routing
- Audio Mixer — master gain/balance, monitor, per-input gain/balance/mix (Classic + Fairlight)
- Color Generators — hue/saturation/luminance
- Streaming — start/stop, status, cache used (supported models)
- Recording — start/stop, switch disk, duration, remaining space (supported models)
- Media Players — source type, still/clip index, playback control
- Tally — program/preview tally state
- Macros — run, stop, continue, loop, named slots (up to 100)
- Input metadata — short/long names, port type
- Auto model detection — capabilities discovered from the connected device
Requirements
- js-controller >= 6.0.11
- ioBroker Admin >= 7.6.20
- Node.js >= 22
- Blackmagic ATEM switcher with network connectivity
Installation
Install via the ioBroker Admin UI: Adapters → search for blackmagic-atem → install.
Configuration
- Open the adapter instance configuration in ioBroker Admin
- Enter the IP address of your ATEM device
- Choose the model (or leave on Auto Detect)
- Adjust the reconnect and poll intervals if needed
- Save and start the adapter
State Tree
info.connection
device.{modelName, productId, videoMode, capabilities}
me[0-3].{programInput, previewInput, inTransition, transitionPosition}
me[0-3].transition.{style, mixRate, dipRate, wipeRate, dveRate, wipePattern}
me[0-3].fadeToBlack.{isFullyBlack, inTransition, rate}
me[0-3].usk[0-3].{onAir, type, fillSource, keySource, maskEnabled, flyEnabled}
commands.{cut, auto, ftb}
dsk[0-3].{onAir, tie, inTransition, rate, fillSource, keySource, auto}
aux[0-47].source
audio.master.{gain, balance, afv}
audio.monitor.{enabled, gain, mute, solo, dim}
audio.inputs.input[N].{gain, balance, mixOption}
audio.commands.resetPeaks
colorGenerator[0-1].{hue, saturation, luminance}
streaming.{status, start, stop, duration, cacheUsed}
recording.{status, start, stop, switchDisk, duration, remainingDiskSpace}
mediaPlayer[0-3].{sourceType, stillIndex, clipIndex, playing, loop, atBeginning}
tally.{programInputs, previewInputs}
macros.{run, stop, continue, isRunning, isWaiting, loop, runningIndex, recordedCount}
macros.slots[0-99].{name, isUsed, trigger}
inputs.input[N].{shortName, longName, inputId, portType}States are created conditionally based on detected/selected model capabilities. Orphans are cleaned up when the model changes.
Example Usage
// Switch program to camera 1
setState('blackmagic-atem.0.me0.programInput', 1);
// Perform a cut
setState('blackmagic-atem.0.commands.cut', true);
// Start streaming (supported models only)
setState('blackmagic-atem.0.streaming.start', true);
// Run macro 5
setState('blackmagic-atem.0.macros.run', 5);Input ID Reference
| ID | Source | | ------------- | ----------------------- | | 1–8 | Camera inputs | | 0 | Black | | 1000 | Color Bars | | 2001–2002 | Color Generators 1, 2 | | 3010, 3011 | Media Player 1, 2 | | 3020, 3021 | Media Player 1, 2 Key | | 7001–7002 | Clean Feed 1, 2 | | 10010, 10011 | Program, Preview |
Protocol Notes
This adapter uses the reverse-engineered ATEM UDP protocol (port 9910), as documented by the open-source community:
The ATEM protocol has no authentication — keep ATEM devices on a trusted, private network.
Changelog
0.2.3 (2026-05-21)
- (Alan Paris) Bump minimum Node.js to 22 and CI matrix to 22/24 for ioBroker community submission compliance
- (Alan Paris) Set
common.noGit: trueso the gitignoredbuild/tree does not trip the repochecker - (Alan Paris) Trim
common.newsto only versions published to npm
0.2.2 (2026-05-20)
- (Alan Paris) Switched CI publish to npm trusted publishing (OIDC)
0.2.1 (2026-05-20)
- (Alan Paris) Initial publication to npm registry
0.2.0 (2025-02-04)
- (Alan Paris) Added model selection, transition rates, auxiliary outputs, tally, audio per-input, color generators
0.1.0 (2025-01-29)
- (Alan Paris) Initial release: program/preview switching, DSK/USK, streaming and recording, media players, macros
License
MIT License — see LICENSE for details.
Copyright (c) 2024-2026 Alan Paris [email protected]
