🚀 Professional Timeline-Based Show Controller & Intercom system — directly linked to OBS
Mini-Pilot Studio is a powerful, web-based control room designed to automate and manage live broadcasts, talk shows, and events. It transforms your browser into a fully-fledged Director Station with a Non-Linear Timeline Editor (NLE), automating OBS scene switches, triggering external devices via Webhooks, and providing real-time cues for your crew.
Think of it as an automated brain for your live production:
- 🎬 Timeline Automation: Plan your show in advance with precise durations
- 🔴 OBS Auto-Switching: Automatically cuts and transitions between OBS scenes
- 🎚️ Studio Mode Switcher: A real Preview/Program bus — send a scene to Preview (PRV), then TAKE it live via OBS's Studio Mode transition, or CUT straight to Program
- 📋 Live Auto-Scrolling Rundown: A dynamic script that follows the show in real-time
- 🎙️ Realtime Intercom: Low-latency streamed Push-To-Talk audio to your crew
- 🌐 Webhook Triggers: Fire external events (lights, audio, Resolume, etc.)
- 🎛️ Manual Override: Take control anytime with Quick Cuts
- 🔁 Loop Groups: Define named groups of scenes that auto-cycle on their own timer, while still going through the normal Preview/Program pipeline
- 🧹 Manual View Only: Declutter the Director Station to just the switcher, intercom, and transport controls
- 🔄 Resilient to refresh: Reloading any screen (F5) re-syncs it to the live show automatically
The system is powered by a Python backend (Flask + Socket.IO) that communicates with OBS Studio via WebSockets.
It serves different interfaces:
- Director Station (
/) → Timeline, controls, NLE, Preview/Program switcher - Cameraman View (
/camera) → Current/next shots, tally (including a "you're in preview" warning when the director arms your camera), intercom — responsive on phones/tablets - Talent View (
/talent) → Prompter, cues, alerts — responsive on phones/tablets
Every screen re-syncs itself from the server on load/reconnect, so refreshing the page or reconnecting after a dropped connection picks the show back up automatically.
- Install OBS Studio
- Go to:
Tools → WebSocket Server Settings - Enable WebSocket server
- Set port (default:
4455) - Enable authentication and generate password
Install Python 3.8+
pip install -r requirements.txtpython app.pyOpen:
- Open settings in UI
- Enter:
- Host:
localhost - Port:
4455 - Password: your OBS password
- Host:
- Click Connect
✅ Status → OBS Connected
ℹ️ You don't need to enable Studio Mode yourself — the app switches it on in OBS automatically the first time you send a scene to Preview.
🔄 If OBS closes or the connection drops mid-show, the app keeps checking in the background and reconnects automatically as soon as OBS is reachable again — no need to reopen Settings.
- Add timeline items:
- Camera shots
- Lyrics / cues
- Webhooks
- Set duration & transitions
- Drag to adjust timing
- Select mode (Auto / Manual / Record)
- Click ARM SHOW
- Press GO! (SPACE)
Each scene has its own PRV / CUT buttons, stacked like a real switcher bus:
- CUT (or its hotkey) → instant cut straight to Program
- PRV (or Shift + hotkey) → send the scene to Preview first
- TAKE → push whatever is in Preview to Program via OBS's Studio Mode transition (falls back to a direct cut if Studio Mode isn't available)
Pressing any of these while the show is in Auto automatically switches it to Manual, so you're never fighting the automation.
Click ⚙ Loops to open the Loop Groups panel, where you can create, edit, and delete named groups of scenes (e.g. "Wide Cams" = Scene 1/2/3), each with its own switch interval (in seconds) and a Random Order option.
Every configured group shows up as its own dashed button in both the PRV and PROGRAM rows, right alongside the real scenes:
- PRV on a group → arms its first scene as Preview
- PROGRAM on a group (or the global TAKE button, once armed) → cuts that scene live and starts auto-cycling through the group at its configured interval, picking each next scene sequentially or at random
- The button pulses with a live countdown while its group is cycling
- Only one group cycles at a time; taking any manual PRV/CUT/TAKE action on a real scene pauses it, and pressing PROGRAM on the group again restarts cycling from its first scene
- Camera and talent screens show the same auto-cycling switches as regular Preview/Program changes, including a countdown to the next switch
Click 🧹 Manual View Only in the toolbar to hide the rundown editor, rundown table, timeline, and SYNC SETUP panel, leaving only the switcher, intercom, and show transport (ARM/GO/Stop) — enlarged for fast, hands-on vision mixing. Click it again to restore the full layout; the choice is remembered across reloads.
- 🔔 Stage Pager → send alerts
- 🎙️ Hold PTT → talk to crew in realtime with streamed audio
- 💾 Save project
- 🗂️ Export CSV
- 🖨️ Print script
app.py
requirements.txt
templates/
├── index.html Director Station page shell
├── camera.html Cameraman View page shell
└── talent.html Talent View page shell
static/
├── css/
│ ├── index.css
│ ├── camera.css
│ ├── talent.css
│ └── receiver-common.css shared by camera.html + talent.html
└── js/
├── index.js
├── camera.js
├── talent.js
└── receiver-common.js shared by camera.html + talent.html
- 🖥️ Dual monitor: OBS + Director UI
- 📱 Use local network for mobile access
- 🎥 Auto-record on GO
Pull requests welcome!
Ideas: vMix, MIDI, PTZ integrations 🚀

