Prism.
Agentic creative-agency tooling for YouTube.
One Client Service Director keeps the creative call. The tool runs the mechanical steps in between: turning static brand assets into 16:9 and 9:16 video variants, dubbing, the compliance check, and a paused campaign ready for review. 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. |
| 03 · Recut | Reframe service produces 9:16 Shorts via vigenair + an FFmpeg worker. Dub service handles translation (Ariel) + Chirp 3 HD voice. |
| 04 · Distribute | Judge service runs compliance scoring (Gemini-as-judge, binary pass/fail). Ads service pushes the campaign and the YouTube upload. 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. Every service registers through the same shared contract, and every action is audit-logged through the same wrap(), so all nine share one platform shape.
| 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.
These are the defaults that let someone use the tool on a deadline day without double-checking it.
- 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.
- 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.
- 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.
- 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 asks you to type the client name, the same pattern GitHub uses for deleting a repo.
- Audit-log everything via wrap()
- Every service action is wrapped through a shared audit-logging helper. There is one audit shape across all nine services, and that uniform shape is what makes forensics work.
- 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.
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. |
| Generative | Veo 3 + Imagen 3 (Generate). Gemini for brand-kit extraction + compliance judging. Ariel + Chirp 3 HD (Dub). |
| 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 a dedicated 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, such as the audit shape and the cost-cap projection rule, live in FOR_AGENTS.md. 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's built for the busiest day in an account director's week.