skillZs
LIVE SKILL TAGS
>>> LIVE SKILLS INDEX <<<
* OPEN SOURCE *
NO LOGIN, NO TRACKING
REAL INSTALL DATA
← back to all skills
damionrashford/media-os5 installs

workflow-live-production

End-to-end live production — OBS as the mixer with obs-websocket control, MIDI/OSC cue triggers, DMX lighting sync, PTZ camera moves, system audio routing, NDI/SDI I/O, and multi-protocol egress via MediaMTX. Use when the user says "go live", "run a live show", "live stream", "wire up OBS", "scene switch on MIDI", "OBS + lighting + PTZ", "broadcast webinar", or anything involving real-time production with multiple control surfaces firing together.

How do I install this agent skill?

npx skills add https://github.com/damionrashford/media-os --skill workflow-live-production
view source ↗

Is this agent skill safe to install?

  • Gen Agent Trust Hubpass

    The skill is a comprehensive workflow guide for live media production, orchestrating tools like OBS Studio, MediaMTX, and various hardware protocols (MIDI, DMX, VISCA). It uses specialized scripts and environment variables for configuration and control without exhibiting malicious patterns.

  • Socketpass

    No alerts

  • Snykpass

    Risk: LOW · No issues

What does this agent skill do?

Workflow — Live Production

What: Run a live show end-to-end. OBS is the mixer; MIDI controllers trigger scenes; DMX lighting and PTZ cameras follow scene changes; system audio is correctly routed; MediaMTX fans the output to HLS + RTSP + SRT + WebRTC + RTMP.

Who: Streamers, broadcasters, church/corporate AV, venue operators, esports shoutcasters.

Skills used

RoleSkill
Scene authoringobs-config
Remote controlobs-websocket (auto-discovers URL+password from local OBS)
In-OBS scriptingobs-scripting
Native plugin authoringobs-plugins
Doc lookup guardrailobs-docs
MIDI surfacemedia-midi
OSC surfacemedia-osc
Stage lightingmedia-dmx (via OLA daemon)
PTZ camerasptz-visca, ptz-onvif
System audioaudio-coreaudio / audio-wasapi / audio-pipewire / audio-jack
Multi-protocol egressmediamtx-server
WebRTC contributionffmpeg-whip
Captureffmpeg-capture
Hardware encodeffmpeg-hwaccel
NDI ingestndi-tools
SDI ingestdecklink-tools

Pipeline

Step 1 — Build the scene collection

Author the scene tree as JSON under the active OBS profile via the obs-config skill. Lock scene names early — downstream skills reference them by exact spelling (case-sensitive in the websocket protocol).

Step 2 — Route system audio BEFORE launching OBS

OBS caches audio devices at startup. Create virtual sinks first so OBS sees them as inputs.

  • macOS: create an aggregate device combining BlackHole + mic (audio-coreaudio skill).
  • Linux (PipeWire): create a sink and link source apps into it (audio-pipewire skill).
  • Windows: install VB-Cable / VoiceMeeter, enumerate devices (audio-wasapi skill).

Step 3 — Start OBS and verify obs-websocket

OBS 28+ bundles obs-websocket v5. Use the obs-websocket skill's wsctl.py check + ping — it auto-discovers the password from the local OBS config. For remote OBS, export OBS_WEBSOCKET_URL and OBS_WEBSOCKET_PASSWORD.

Step 4 — Wire MIDI / OSC triggers to scene switches

Use media-midi (midictl.py monitor --json) piped to obs-websocket (wsctl.py scene-switch). For TouchOSC / Reaper, use media-osc (oscctl.py listen --port 8000 --json) with the same fan-out pattern.

Step 5 — Lighting cue on scene change (DMX)

Subscribe to OBS's CurrentProgramSceneChanged event via wsctl.py events --subscribe scenes, then drive DMX through media-dmx (dmxctl.py send/fade --universe N --channel M).

Step 6 — PTZ preset recall on scene change

Same subscription stream. For VISCA cameras (UDP port 52381), use ptz-visca (viscactl.py preset-recall --host <ip> --preset N). For ONVIF, use ptz-onvif after discovery (onvifctl.py discover).

Step 7 — Multi-protocol egress via MediaMTX

Configure the mediamtx-server skill once: RTMP ingest from OBS, auto-republish to HLS (8888), RTSP (8554), SRT (8890), WebRTC/WHEP (8889). Optional runOnReady spawns an ffmpeg forwarder to YouTube/Twitch/Facebook.

Step 8 — WebRTC low-latency path (alternative to RTMP)

Skip OBS's RTMP output and go straight to WHIP via ffmpeg-whip — sub-second latency for contribution.

Variants

  • Pure-software — skip DMX/PTZ/DeckLink; software MIDI (Keyboard Maestro) + virtual audio + OBS only.
  • Broadcast SDI — swap screen capture for DeckLink input via decklink-tools; playout back to SDI with ffmpeg's -f decklink output.
  • NDI-first facility — replace RTMP ingest with NDI via obs-ndi plugin; MediaMTX still bridges to external delivery.
  • Remote producer + FOH operator — both run OBS; operator drives producer's OBS over obs-websocket by setting OBS_WEBSOCKET_URL to the producer's LAN address.

Gotchas

  • obs-websocket auto-discovery is local-only. For a remote OBS, export OBS_WEBSOCKET_URL + OBS_WEBSOCKET_PASSWORD.
  • obs-websocket v5 only. v4 is EOL. Close code 4010 = client/server version mismatch.
  • OBS caches audio devices at launch. Create virtual sinks before starting OBS.
  • HighVolume events (bits 16–19) are deliberately excluded from All (=4095). InputVolumeMeters fires every 50 ms. Only subscribe if you're rendering a meter UI.
  • PTZ presets are camera-stored. preset-set once, preset-recall forever.
  • VISCA-over-IP is UDP:52381. No handshake. Firewalls between camera and controller silently drop.
  • ONVIF WS-Discovery is multicast on 239.255.255.250:3702. Does NOT cross VLAN boundaries without an IGMP-aware switch.
  • DMX via OLA requires olad running. Art-Net controllers often want a dedicated 2.0.0.0/8 subnet per spec.
  • Art-Net universe is 0-indexed; DMX channel is 1-indexed. --universe 0 --channel 1 = first channel of universe 0.
  • MediaMTX ports: 8888 (HLS), 8889 (WebRTC), 8554 (RTSP), 8890 (SRT), 1935 (RTMP), 9997 (API). Overlap with another service = silent boot failure.
  • MediaMTX runOnReady inherits stdin from the daemon. Always pass -nostdin to ffmpeg inside those commands or the encoder blocks.
  • NDI runtime (NewTek/Vizrt) is a separate install from the NDI SDK.
  • BlackHole / Loopback on macOS appear as both input and output. App routes to output side, OBS picks it up from input side. Wrong direction = silence.
  • OBS scene names are case-sensitive in the websocket protocol. Enumerate with GetSceneList for canonical spelling.
  • MIDI 1.0 vs 2.0 UMP are different wire formats. Most tools speak 1.0 by default.
  • OSC bundles vs single messages. TouchOSC sends bundles by default — parse {"type":"bundle"} before reaching into .elements.

Example — MIDI note 36 triggers full-stack cue

On MIDI note 36: switch OBS to scene "Main", fade DMX channel 1 up to full, recall PTZ preset 3. Use media-midi monitor piped through jq to fan out three parallel actions (obs-websocket scene-switch, media-dmx fade, ptz-visca preset-recall). Core live-production value: one event → coordinated multi-device response.

Related

  • workflow-streaming-distribution — what to do with the stream once OBS emits it.
  • workflow-audio-production — deeper system-audio recipes.
  • workflow-broadcast-delivery — SDI + HDR dynamic metadata upstream.
  • workflow-analysis-quality — monitor the live stream for drift.

Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.

<a href="https://skillzs.dev/skills/damionrashford/media-os/workflow-live-production">View workflow-live-production on skillZs</a>