Skip to content

Roadmap

Goal: Frame-accurate EDL generation from vision mixers with professional recorder integration. Vision: A vendor-agnostic, broadcast-grade equivalent to ATEM Mini ISO for professional environments. Timeline: Aggressive — MVP in days, not weeks.


Architecture Principles

Based on docs/ANALYSIS.md:

  1. Event-driven logging — Not video analysis
  2. External ISO recording — Devices do what they do best
  3. Single, coherent timecode domain — LTC/house sync preferred
  4. Standards-based edit formats — CMX 3600, FCP7 XML
  5. Minimal complexity, maximum determinism — Predictable behaviour
  6. Low long-term maintenance cost — No exotic dependencies

Phase 0: Foundation ✅

Status: Complete

TaskDescriptionStatus
Repository setupGit repo, licence, README✅ Done
Project structureTypeScript scaffold, folders, configs✅ Done
Build toolingESM, Vitest, Pino✅ Done
Configuration schemaZod-validated YAML config✅ Done
ATEM adapterConnect via atem-connection✅ Done
Event typesTypeScript types with timestamps✅ Done
CMX 3600 generatorBasic EDL output✅ Done
Timecode utilitiesSMPTE with drop-frame✅ Done

Deliverable: Buildable TypeScript project with core components.


Phase 1: MVP — Working End-to-End

Goal: Connect to real ATEM, capture real cuts, generate valid EDL.

TaskDescriptionPriority
Timeline modelInternal representation between events and exportP0
Frame-offset compensationPer-device latency adjustmentP0
Event store persistenceJSONL append-only logP0
CLI commandsStart, stop, generate EDLP0
Integration testReal ATEM connection testP0

Success Criteria

  • Connects to ATEM switcher on startup
  • Logs all programme bus changes with frame-accurate timestamps
  • Generates valid CMX 3600 EDL file
  • EDL imports into DaVinci Resolve without errors
  • Frame offsets configurable per device

Deliverable: Command-line tool that captures ATEM cuts and outputs EDL.


Phase 2: HyperDeck + FCP7 XML

Goal: Query HyperDecks for filenames/timecode. Add FCP7 XML export.

TaskDescriptionPriority
HyperDeck adapterTCP connection to Ethernet Protocol port 9993P0
Clip name queryFetch active recording filenameP0
Timecode queryGet current deck timecode as master sourceP0
Input mappingMap ATEM inputs to HyperDeck sourcesP0
FCP7 XML exportDaVinci Resolve / Premiere compatibleP0
Multi-deck supportHandle 4+ HyperDecks simultaneouslyP1

Success Criteria

  • Connects to multiple HyperDecks on startup
  • EDL/XML includes correct clip names for each source
  • Source timecode matches HyperDeck recordings
  • FCP7 XML imports into Resolve with all clips linked
  • EDL relinks successfully in Premiere Pro

Deliverable: EDLs and XMLs that automatically match ISO recording files.


Phase 3: Web Interface

Goal: Browser-based configuration and monitoring.

TaskDescriptionPriority
Express serverStatic file serving and API routesP0
Status dashboardConnection status, event count, current inputP0
Live event feedWebSocket-powered scrolling event logP0
EDL/XML downloadGenerate and download via browserP0
Session managementNamed sessions with separate logsP1
Settings pageRuntime configurationP2
Dark modeBroadcast-friendly low-light UIP2

Success Criteria

  • Web UI accessible at http://localhost:3000
  • Shows real-time connection status for all devices
  • One-click EDL and FCP7 XML generation
  • Works on tablet in control room
  • Multiple sessions manageable

Deliverable: Production-ready web interface for operators.


Phase 4: TSL Universal Mixer Support

Goal: Vendor-agnostic cut detection via TSL UMD protocol.

TaskDescriptionPriority
TSL UMD v5 adapterListen for tally state changesP0
TSL UMD v3.1 supportLegacy protocol compatibilityP1
Programme bus detectionMap tally ON AIR to programme changeP0
Source name mappingTSL display names to reel namesP0
Multi-mixer supportSimultaneous ATEM + TSL sourcesP2

Success Criteria

  • Detects programme changes from Ross Carbonite via TSL
  • Detects programme changes from Grass Valley via TSL
  • Works with any TSL-compliant mixer
  • Can run alongside ATEM adapter for redundancy

Deliverable: Universal vision mixer support via industry-standard protocol.


Phase 5: LTC Timecode Integration

Goal: External LTC as primary timecode source for broadcast environments.

TaskDescriptionPriority
LTC decoderSoftware decode from audio inputP1
USB LTC reader supportESE, Ambient, etc.P2
HyperDeck as LTC proxyUse deck timecode when LTC unavailableP0
Timecode source priorityLTC > HyperDeck > SystemP0
Drift monitoringAlert on timecode discontinuityP1

Success Criteria

  • Locks to external LTC within 1 frame
  • Falls back gracefully when LTC lost
  • Logs timecode source changes
  • Frame-accurate to house sync

Deliverable: Broadcast-grade timecode integration.


Phase 6: Production Hardening

Goal: Broadcast-grade reliability and observability.

TaskDescriptionPriority
Auto-reconnectExponential backoff for all adaptersP0
Health checksLiveness and readiness endpointsP0
Prometheus metricsConnection uptime, event rate, latencyP1
Graceful shutdownComplete pending writes before exitP0
Docker packagingMulti-stage build, minimal imageP1
Systemd serviceLinux service unit fileP2

Success Criteria

  • Survives network blips without data loss
  • Metrics visible in Grafana
  • Zero manual intervention during 8-hour broadcast
  • Clean shutdown preserves all captured events

Deliverable: Service that runs unattended in production.


Phase 7: Extended Device Support

Goal: Support additional recording devices.

TaskDescriptionPriority
AJA Ki Pro adapterREST API integrationP2
vMix integrationAPI for MultiCorder recordingsP2
Atomos supportLTC trigger-based integrationP3
NDI input supportTrack NDI source namesP3

Success Criteria

  • Works with AJA Ki Pro recorders
  • Configurable per-project device selection
  • Graceful degradation if device unavailable

Deliverable: Multi-vendor recording device support.


Phase 8: Advanced Features

Goal: Professional-grade output with full transition support.

TaskDescriptionPriority
Transition captureDetect dissolves, wipes with durationP1
Multi-M/E supportMonitor multiple mix/effect busesP2
Audio follows videoTrack AFV switching decisionsP2
AAF exportAvid Media Composer formatP3
FCPXML exportApple Final Cut Pro X formatP3
Resolve projectNative DaVinci Resolve .drp filesP3

Success Criteria

  • EDL includes dissolve durations
  • Exports to multiple NLE formats
  • Round-trips through Resolve without issues

Deliverable: Feature parity with ATEM Mini ISO (and beyond).


Non-Goals (Out of Scope)

FeatureReason
Video recordingUse HyperDecks — we capture metadata only
Live switching controlUse ATEM Software Control or Companion
SDI capture via DeckLinkHigh failure impact, high maintenance
ffmpeg-based recordingOutside core competency
Audio mixingOutside scope — EDL is video-focused
Cloud deploymentLatency-sensitive — must be on-premise

Version Milestones

VersionPhaseDescription
v0.1.01MVP — ATEM capture + CMX 3600 EDL
v0.2.02HyperDeck integration + FCP7 XML
v0.3.03Web interface
v0.4.04TSL universal mixer support
v0.5.05LTC timecode integration
v1.0.06Production-ready release
v1.1.07AJA Ki Pro + vMix support
v1.2.08Full transition capture

Dependencies

Runtime Dependencies

PackagePurposeVersion
atem-connectionATEM protocol^3.x
zodSchema validation^3.x
pinoStructured logging^8.x
expressWeb server^4.x
wsWebSocket server^8.x
yamlConfig parsing^2.x

Planned Dependencies

PackagePurposePhase
tsl-umd or customTSL protocol4
LTC decoder TBDTimecode input5

Risk Register

RiskLikelihoodImpactMitigation
ATEM protocol changesLowHighPin atem-connection version
HyperDeck firmware breaks APIMediumHighTest against multiple firmware versions
Network latency causes timing driftMediumMediumLTC sync, frame-offset compensation
TSL implementation varies by vendorMediumMediumTest with multiple mixers
User misconfigures input mappingHighLowValidation warnings in web UI
Event log grows unboundedLowLowDaily rotation, compression

Decision Log

DateDecisionRationale
2026-01-28Use atem-connection not raw protocolMature library, maintained by NRK/Sofie
2026-01-28CMX 3600 as baseline formatUniversal NLE support despite limitations
2026-01-28JSONL for event storageHuman-readable, appendable, replayable
2026-01-28Express over FastifySimpler, more middleware available
2026-01-28No Companion dependencyDirect device connection for lower latency
2026-01-28FCP7 XML as primary rich formatBetter than CMX 3600 for multicam, widely supported
2026-01-28TSL UMD for vendor-agnostic supportIndustry standard, enables Ross/GV/Sony
2026-01-28Internal Timeline ModelDecouples events from export format specifics
2026-01-28LTC as preferred timecode sourceBroadcast standard, frame-accurate
2026-01-28Frame-offset compensation requiredReal-world devices have measurable latency

Prior Art & References

ProjectTypeNotes
ATEM Logger (Télio Tortay)Open sourceSimilar concept
Multicam Logger (Franz Wegner)Open sourceNode.js, hard cuts only
ATEM Exporter (Swift)Open sourceFCP-specific
Softron Multicam LoggerCommercialFeature reference
Ross Carbonite LiveEDLBuilt-inRoss native solution
TSL UMD Protocol v3.1/v5StandardTally/UMD specification

Roadmap updated 2026-01-28 based on docs/ANALYSIS.md insights.