Dragonflight - self-hosted broadcast media asset management. SRT/RTMP/SDI ingest via Blackmagic DeckLink, FFmpeg proxy generation, growing-file editing via SMB + Premiere Pro CEP panel, BullMQ job queue, S3-compatible storage (RustFS). Replaces Grass Valley AMPP FramelightX.
Find a file
ZGaetano 72fc9cb755 feat(home): restore launcher home page; move current home to Dashboard
The original first-version home page (big-button launcher with the
Dragonflight wordmark) is back at /. The Frame.io-style metrics +
recent-activity layout we've been treating as "home" is now the
Dashboard, reachable from the sidebar and from the launcher's
"Open dashboard" button.

- Renames existing Home → Dashboard (all the cards, sparklines, live
  feed, job-queue, cluster mini-list are unchanged).
- New Home component: hero with the dragon-coiled-D logo (existing
  img/dragon-logo.png), wordmark "DRAGONFLIGHT", a tag line, and 5
  big tiles (Library, Recorders, Editor, Jobs, Settings) plus a
  smaller Dashboard tile. Live cluster + recorder status pip at the
  bottom mirrors what's in the topbar.
- The launcher pulls /metrics/home so the tile counts ("34 assets",
  "0 live", "0 running") reflect reality.
2026-05-23 10:48:06 -04:00
deploy test: deploy/api-smoke.sh — exercises every API surface 2026-05-23 04:24:10 +00:00
docs docs: growing-files + Premiere panel quickstart 2026-05-22 19:16:34 -04:00
services feat(home): restore launcher home page; move current home to Dashboard 2026-05-23 10:48:06 -04:00
.env.example fix(infra+workers): S3 creds, ffprobe, BullMQ awaits, thumbnail seek, bin optional, docker-compose vars, jobs Redis, recorders stop codes: .env.example 2026-05-16 00:29:45 -04:00
.gitignore capture: custom FFmpeg 7.1 build with DeckLink + D-Bus mounts + SDI deinterlace 2026-05-22 00:01:43 +00:00
docker-compose.gpu.yml feat: docker-compose.gpu.yml overlay — NVIDIA GPU pass-through + NVENC worker 2026-05-20 14:19:02 -04:00
docker-compose.worker.yml fix(decklink): mount /dev/blackmagic in sidecar + remote node routing via node-agent 2026-05-21 18:51:11 -04:00
docker-compose.yml feat: SDK deployment UI, proxy encoding global settings, S3 env fallback 2026-05-23 02:58:32 +00:00
README.md polish: schedule edit + README refresh 2026-05-23 04:26:03 +00:00
setup-repo.sh add setup-repo.sh 2026-04-07 21:58:16 -04:00

Dragonflight

Self-hosted broadcast media-asset management. Replaces Grass Valley AMPP FramelightX. SDI / SRT / RTMP ingest, growing-file editing via Premiere Pro, S3-compatible storage, scheduling, and a queue-driven proxy pipeline.

Repo renamed from wild-dragondragonflight (2026-05-23). The old URL still redirects.

Features

  • Ingest — SRT (caller + listener), RTMP, and SDI capture via Blackmagic DeckLink cards (FFmpeg patched against SDK 16.x); per-recorder codec settings (ProRes / H.264 / DNxHR / HEVC) and audio routing
  • Growing-file editing — capture writes the hi-res master to a local SMB landing zone; editors can mount the share in Premiere Pro and edit the live file via the included CEP panel, then relink to the final S3 master after promotion
  • Recorder scheduler — one-shot, daily, or weekly windows; a 15s tick loop fires the existing /recorders/:id/start + /stop endpoints
  • Library — projects, bins, asset detail with frame-anchored persistent comments, right-click context menu (move-to-bin, rename, delete), and a global cmd/ctrl-K search across assets / projects / recorders / jobs / users
  • Jobs — BullMQ-backed proxy + thumbnail queue with per-job retry, bulk "retry all failed", and inline error messages
  • Settings — S3 (with env-var fallback), global proxy encoder (CPU/libx264 or GPU/NVENC/VAAPI), growing-files config, capture SDK uploader (Blackmagic / AJA / Deltacast)
  • Cluster — primary + worker topology with heartbeat health, remote node-agent for off-host DeckLink capture
  • APIdeploy/api-smoke.sh exercises every endpoint (27 routes, pass/fail summary)

Services

Service Port Description
web-ui 47434 Browser SPA + capture controls
mam-api 47432 REST API + recorder orchestration + scheduler tick
capture 47433 / 9000 / 1935 DeckLink/SRT/RTMP capture sidecar
worker BullMQ proxy + thumbnail workers
db 5432 PostgreSQL 16
queue 6379 Redis 7

Quick start

# Clone (repo renamed; old URL still redirects)
git clone https://forge.wilddragon.net/zgaetano/dragonflight.git
cd dragonflight

# Configure
cp .env.example .env
# Edit .env — S3 credentials + SESSION_SECRET at minimum

# Launch
docker compose up -d

# Open
open http://localhost:47434

Architecture

SDI / SRT / RTMP ──► capture (FFmpeg)
                       ├─ HLS preview tee ──► /live/<assetId>/index.m3u8
                       └─ master output
                            ├─ growing_enabled=true:
                            │    /growing/<projectId>/<clip>.mov
                            │      (Premiere mounts SMB, edits live)
                            │      └─► promotion worker uploads to S3
                            │
                            └─ growing_enabled=false:
                                 multipart stream → S3

assets POST ──► proxy job ──► worker
                                ├─ libx264 (CPU) or NVENC/VAAPI (GPU)
                                ├─ thumbnail job
                                └─ status: ingesting → processing → ready

Tech stack

  • Runtime: Node.js 22, Docker Compose
  • Backend: Express, PostgreSQL 16, Redis 7 + BullMQ
  • Frontend: Vanilla React via in-browser Babel (no bundler), hls.js
  • Media: FFmpeg 7.1 with SDK 16 DeckLink patches; ProRes, H.264, HEVC, DNxHR, MOV/MP4/MXF containers
  • Storage: S3-compatible (RustFS) for masters + proxies + thumbnails

Operations

  • deploy/api-smoke.sh — verify every API endpoint after a deploy
  • deploy/onboard-node.sh — provision a remote worker host (DeckLink cards on a separate machine)
  • deploy/test-cluster.sh — primary↔worker connectivity smoke
  • docs/GROWING_FILES_QUICKSTART.md — Premiere CEP panel install + growing-file capture flow

License

Proprietary — Wild Dragon LLC, all rights reserved.