Prism.
Agentic creative-agency tooling for YouTube.
A single Client Service Director running more of the YouTube creative workflow that normally takes several people. Static brand assets in, platform-ready 16:9 + 9:16 video variants out, compliance-judged and campaign-ready. Built to compress the part of the agency workflow that doesn't need three meetings.
Setup · Create · Recut · Distribute.
The cockpit splits the workflow into four explicit sections — the operator always knows which stage of the process they're in, and the safety contracts attach to the sections, not to individual buttons.
| Section | What it does |
|---|---|
| 01 · Setup | Onboarding wizard (per-client OAuth), Brand Kit extraction from PDFs or website URLs, client doc linkage. Skip-OAuth path lets a client onboard without Google linkage. |
| 02 · Create | Brief form with cost-cap + budget tier. Generate service renders 16:9 variants via Veo 3 + Imagen 3 with cost pre-projection before any provider call. |
| 03 · Recut | Reframe service produces 9:16 Shorts via vigenair + an FFmpeg worker. Dub service handles translation (Ariel) + Chirp 3 HD voice (no voice cloning in MVP). |
| 04 · Distribute | Judge service runs compliance scoring (Gemini-as-judge, binary pass/fail). Ads service pushes the campaign — always PAUSED — and uploads to YouTube as UNLISTED. Insights service rolls VTR signals + creative DNA + prompt hints back into the Signal Wall. |
Nine services + shared foundations.
Each service is its own Cloud Run revision with a strict/healthz probe. Every service registers through the same shared contract; every action is audit- logged through the same wrap(). One platform shape across nine surfaces — not nine accidental architectures.
| Service | Directory | Job |
|---|---|---|
| Shared foundations | services/_shared/ | Audit logging via wrap(), shared JobState contract, register_service(), strict /healthz probe enforced on every revision. |
| Brand Kit | services/brand_kit/ | Gemini-based brand-asset extraction from PDFs OR website URL distillation (v1.2). |
| Onboarding Wizard | services/onboarding_wizard/ | Per-client OAuth + prechecks + linked client doc. Skip-OAuth path supported. |
| Generate | services/generate/ | Veo 3 + Imagen 3 variant rendering (16:9). Cost-cap pre-projected before any provider call. |
| Reframe | services/reframe/ | 9:16 Smart-Reframe via vigenair + the FFmpeg worker. |
| FFmpeg worker | services/ffmpeg_worker/ | Internal Cloud Run worker — pixel ops + keyframe extraction. Invoker-locked to Reframe + Judge. |
| Dub | services/dub/ | Ariel-powered translation + Chirp 3 HD dubbing. No voice cloning in MVP. |
| Judge | services/judge/ | Compliance scoring (Gemini-as-judge) — binary pass/fail; never a third state. |
| Ads | services/ads/ | Google Ads campaign push (always PAUSED) + UNLISTED YouTube upload. |
| Insights | services/insights/ | VTR signals, creative DNA, prompt hint generation. Cost rollup + 7d-trailing VTR mart + brand-colour segmentation. |
The safety contracts.
Most of these aren't features — they're decisions that make the tool trustable on a deadline day. The platform is the contract; the cockpit just enforces it on the operator side.
- Strict /healthz probe on every revision
- Every Cloud Run service registers itself through a shared contract and ships a strict /healthz. A revision that doesn't pass doesn't get promoted. Healthchecks are infrastructure, not lore.
- Cost-cap pre-projected before any provider call
- Generate doesn't call Veo or Imagen until the projected cost has been computed against the budget tier in the Brief. The cost gate is the contract, not a warning after the fact.
- Always PAUSED, always UNLISTED
- Ads pushes campaigns in PAUSED state. YouTube uploads default to UNLISTED. Two safety defaults that make the difference between a tool you trust and a tool you watch closely. The Launch confirm modal in the cockpit makes the operator acknowledge the PAUSED state explicitly before push.
- Binary pass/fail compliance — never a third state
- Judge returns pass or fail. No 'maybe', no yellow/amber on compliance surfaces. The review gallery's design language enforces this — there is no third colour. Compliance ambiguity is the bug; remove the bug by removing the third state.
- Keyboard-first review
- The Review gallery uses j/k to navigate, a to approve, r to reject. Hover preview, structured toast errors. The Client Service Director is meant to clear a queue, not click through it.
- Type-the-name safety modal on destructive actions
- Revoking a client soft-deletes; restoring brings it back. But the revoke modal requires typing the client name. The pattern is borrowed from GitHub repo deletion — the friction is the feature.
- Audit-log everything via wrap()
- Every service action is wrapped through a shared audit-logging helper. The platform has a single audit shape, not 10 different per-service ones. Forensics work because the log shape is uniform.
- Industrial, restrained aesthetic
- Industrial restraint, no decorative gradients, no compliance yellow. The interface reads as something a working CSD trusts at 18:30 on a deadline day. It stays quiet on purpose.
What runs underneath.
| Layer | Detail |
|---|---|
| Web cockpit | Next.js 14. Surfaces: Flight Deck (dashboard), Brand Kit, Brief, Review gallery, Launch confirm, Insights Signal Wall, Client Settings. |
| Services | 9 FastAPI services + _shared foundations. Each ships a strict /healthz; each registers via the shared contract. |
| Generative | Veo 3 + Imagen 3 (Generate). Gemini for brand-kit extraction + compliance judging. Ariel + Chirp 3 HD (Dub). No voice cloning in MVP. |
| Worker pipelines | vigenair + the FFmpeg worker for 9:16 Smart-Reframe. Invoker-locked so only Reframe + Judge can call the worker. |
| Ingestion | Composer DAGs + dbt mart (fact_creative_performance). Synthetic backfill loader for environments without live ad data. |
| Infra | Terraform for the iamagency GCP project, europe-west4. Single-region MVP. |
| Vendored OSS | ariel, vigenair, dreamboard, copycat — pulled in as forks/ submodules and built into the Reframe + Dub paths. |
| Testing | 943 frontend tests + 146 backend tests passing on MVP close. Per-service test suites run through Makefile targets. |
Built with a multi-agent setup.
Prism is also a working example of how the project was built. Specialist agents work in separate git worktrees, a review agent checks every PR, and I gate the merges at module boundaries. Locked contracts live in FOR_AGENTS.md: what the audit shape must be, what the strict /healthz contract is, what the cost- cap projection rule says. The same agent discipline that ships the four sections of the cockpit ships the codebase.
A YouTube-first creative workflow normally takes several people — director, editor, dubber, compliance, ads ops. A lot of that work is mechanical and shouldn't require a meeting. Prism absorbs the mechanical layer so the Client Service Director keeps the creative call — what we're saying, to whom, with what cost cap — and the platform handles the rest. It runs on the same principle that holds Luminary together — the machinery is stable, the human's call is the only variable that moves — pointed this time at the busiest day in an account director's week.