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.
Asset detail: - Download now fetches /assets/:id/hires presigned URL and triggers a named browser download instead of doing nothing - More icon now opens a kebab menu (Copy ID, Delete permanently) - Approve button removed (no backend); audio + fullscreen icons in the player controls now actually toggle mute / requestFullscreen Shell: - Sidebar Sign-out now POSTs /auth/logout + reloads (no-op when auth disabled, by design) - Topbar Notifications bell removed (dead, no backend) - Topbar search wired: typing + Enter routes to Library with the term pre-loaded into Library's own search box - Cluster-healthy pip now polls /metrics/home every 30s so it reflects real online-vs-total instead of always showing green Editor: - Dead Export / Publish / Mark in / Mark out / Add to timeline / Step buttons are now visibly disabled with explanatory titles; a PREVIEW badge sits next to the sequence name so the WIP state is obvious Containers / Cluster admin: - Logs button opens a modal with the docker tail command + Copy button instead of a JS alert - Restart now shows an inline toast (pending/ok/fail) instead of alerts - Cluster Add Node / Drain / Logs replace alert() with a styled advice modal that supports multi-line commands + Copy - Dead Cluster topology Graph/List tab toggle removed (only Graph is implemented anyway) |
||
|---|---|---|
| deploy | ||
| docs | ||
| services | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.gpu.yml | ||
| docker-compose.worker.yml | ||
| docker-compose.yml | ||
| README.md | ||
| setup-repo.sh | ||
Wild Dragon
Self-hosted Media Asset Management platform built to replace Grass Valley AMPP FramelightX.
Services
| Service | Port | Description |
|---|---|---|
| web-ui | 8080 | Browser-based MAM interface + capture controls |
| mam-api | 3000 | REST API — assets, projects, bins, jobs |
| capture | 3001 | SDI capture daemon (Blackmagic DeckLink + FFmpeg) |
| worker | — | Async job processor (proxy gen, thumbnails, conform) |
| db | 5432 | PostgreSQL 16 metadata store |
| queue | 6379 | Redis 7 job queue (BullMQ) |
Quick Start
# Clone
git clone https://forge.wilddragon.net/zgaetano/wild-dragon.git
cd wild-dragon
# Configure
cp .env.example .env
# Edit .env with your S3 credentials and secrets
# Launch
docker compose up -d
# Open
open http://localhost:8080
Architecture
SDI Input (DeckLink) → capture service → dual FFmpeg streams
├─ HiRes (ProRes) → S3
└─ Proxy (H.264) → S3
↓
web-ui ← mam-api ← PostgreSQL ← worker (BullMQ)
├─ proxy_gen
├─ thumbnail
└─ conform (EDL → FFmpeg → export)
Tech Stack
- Backend: Node.js / Express
- Frontend: Vanilla HTML/CSS/JS
- Database: PostgreSQL 16
- Queue: Redis 7 + BullMQ
- Storage: S3-compatible (RustFS)
- Media Processing: FFmpeg
- Capture: Blackmagic DeckLink SDK
- Deployment: Docker Compose
License
MIT