Local-first · domain-agnostic · open source
The AI plans the edit.
The compiler renders it.
Point Catalogue Orchestrator at a folder of media and an intent. It indexes everything into rich cards, retrieves the right moments with RAG, and an AI authors a schema-validated Edit Decision List — which a deterministic ffmpeg compiler turns into a finished MP4.
The problem
Every media pipeline is a one-off.
You can hand-build a bespoke render pipeline for one job. But there is no generic engine that takes an arbitrary catalogue of media plus an intent and produces a finished cut. Catalogue Orchestrator is that engine: retrieval-driven, catalogue-first, domain-agnostic.
Catalogue-first
The unit of value is an indexed library of rich cards, not a single input file. A flat filename list is not a catalogue.
Retrieval-driven
What goes into a cut is selected by RAG, not hard-coded by a template. Domain-agnostic falls out of this.
Local-first
Heavy ingest and render run on your machine. No upload requirement, no hosted vector DB, no accounts.
The rule that makes it work
AI proposes. The compiler disposes.
The single most important boundary in the system. It keeps output reproducible and the model's mistakes bounded.
Emits only a validated EDL
The model never writes ffmpeg. It authors one structured Edit Decision List, validated with zod on the way out. If validation fails, it is re-prompted with the error, never hand-patched.
Owns 100% of ffmpeg
One compiler turns any valid EDL into arg arrays and renders the MP4. Pure and unit-tested, so the same EDL always yields the same cut. No hallucinated filtergraphs.
The pipeline
Six stages, one vertical engine.
Ingest and index are shared. Only retrieval and the orchestrator's prompt switch per mode.
The contract
One structured artifact: the EDL.
It is the only thing the model produces and the only thing the compiler consumes — validated in both directions.
// the AI authors this — nothing else EDL = { title: "...", mode: "highlights" | "assembly", target: { aspect: "9:16", width: 1080, height: 1920, fps: 30 }, clips: [{ segmentId: "<must exist in the catalogue>", sourceIn: 4.2, sourceOut: 9.0, layout: "fit" | "fill" | "blurpad", captions: [{ text: "...", startSec: 0, endSec: 2.5 }] }], rationale: "why these clips, in this order" }
Two modes, one engine
Highlights and assembly share everything.
Long-form → highlights
Ingest one long recording, score the salient moments, and auto-cut the best of them into short vertical clips that land on coherent beats.
Brief → assembled reel
A text brief plus a catalogue. RAG retrieves the relevant assets across the library, the orchestrator orders them, and the compiler assembles a finished reel.
They differ only in the orchestrator's planning prompt and which retrieval runs. One codebase, not two.
No keys required
The whole pipeline runs offline.
Every AI seam sits behind an interface with a deterministic local implementation:
hashed embeddings, stub captions, a heuristic planner. With no keys, the engine still ingests, retrieves,
plans, and renders a real MP4 — in CI and offline.
Deterministic, no network
Runs the full catalogue → cut loop with zero accounts. Perfect for tests, demos, and an offline machine.
Whisper · vision · Claude
Add keys to .env and the same interfaces swap to real transcription, captions, embeddings, and EDL authoring. No code change.
Built on
A small, sharp local stack.
See the engine.
catalogue + intent → AI-planned EDL → deterministic ffmpeg cut · built by Bar Moshe