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
Zac ea28c5189d feat: in-library asset preview + Premiere plugin installer
Click any asset card to open a modal with the H.264 proxy playing inline (or audio/image, per media_type). Esc or click outside closes. Sidebar shows status/codec/resolution/fps/duration/size/created plus tags and notes.

Plugin install side: added install-windows.ps1 that copies the CEP panel to %APPDATA%\Adobe\CEP\extensions, flips PlayerDebugMode=1 across the CSXS.8-13 hives, and prints the next steps. Plugin already wired against the current API.

* services/web-ui/public/js/preview.js: standalone IIFE that lazy-injects the modal markup + CSS on first use. Renders <video controls> (or <audio>, <img>) sourced from /api/v1/assets/:id/stream, with sidebar from /api/v1/assets/:id. Falls back to a clear empty state when proxy is still processing.
* services/web-ui/public/index.html: loads preview.js, wires asset-card click to window.openAssetPreview(asset.id), guards against delete-button clicks bubbling.
* services/premiere-plugin/install-windows.ps1: one-shot Windows installer for the CEP extension.
2026-05-17 08:55:14 -04:00
services feat: in-library asset preview + Premiere plugin installer 2026-05-17 08:55:14 -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 add .gitignore 2026-04-07 21:58:17 -04:00
docker-compose.yml chore: use env-var port bindings — no hardcoded host ports 2026-05-16 08:27:25 -04:00
README.md add README.md 2026-04-07 21:58:16 -04:00
setup-repo.sh add setup-repo.sh 2026-04-07 21:58:16 -04:00

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