Prism.
Agentische tooling voor creatieve bureaus, gericht op YouTube.
Eén Client Service Director die meer draait van de creatieve YouTube-workflow die normaal meerdere mensen kost. Statische merkassets erin, platform-klare 16:9 + 9:16-videovarianten eruit, beoordeeld op compliance en klaar voor de campagne. Gebouwd om het deel van de bureauworkflow samen te persen dat geen drie vergaderingen nodig heeft.
Setup · Create · Recut · Distribute.
De cockpit splitst de workflow op in vier expliciete secties — de operator weet altijd in welke fase van het proces hij zit, en de veiligheidscontracten hangen aan de secties, niet aan losse knoppen.
| Sectie | Wat het doet |
|---|---|
| 01 · Setup | Onboarding-wizard (OAuth per klant), Brand Kit-extractie uit PDF's of website-URL's, koppeling van het klantdocument. Een skip-OAuth-pad laat een klant onboarden zonder Google-koppeling. |
| 02 · Create | Briefformulier met cost-cap + budgettier. De Generate-service rendert 16:9-varianten via Veo 3 + Imagen 3, met een kostenprojectie vooraf, vóór elke provider-call. |
| 03 · Recut | De Reframe-service maakt 9:16 Shorts via vigenair + een FFmpeg-worker. De Dub-service verzorgt vertaling (Ariel) + Chirp 3 HD-stem (geen voice cloning in de MVP). |
| 04 · Distribute | De Judge-service draait compliance-scoring (Gemini-as-judge, binair pass/fail). De Ads-service pusht de campagne — altijd PAUSED — en uploadt naar YouTube als UNLISTED. De Insights-service rolt VTR-signalen + creative DNA + prompt hints terug de Signal Wall in. |
Negen services + gedeelde fundamenten.
Elke service is een eigen Cloud Run-revisie met een strikte/healthz-probe. Elke service registreert via hetzelfde gedeelde contract; elke actie wordt audit-gelogd via dezelfde wrap(). Eén platformvorm over negen oppervlakken — niet negen toevallige architecturen.
| Service | Directory | Taak |
|---|---|---|
| Shared foundations | services/_shared/ | Audit logging via wrap(), gedeeld JobState-contract, register_service(), strikte /healthz-probe afgedwongen op elke revisie. |
| Brand Kit | services/brand_kit/ | Gemini-gebaseerde extractie van merkassets uit PDF's OF distillatie van een website-URL (v1.2). |
| Onboarding Wizard | services/onboarding_wizard/ | OAuth per klant + prechecks + gekoppeld klantdocument. Skip-OAuth-pad ondersteund. |
| Generate | services/generate/ | Veo 3 + Imagen 3 variant-rendering (16:9). Cost-cap vooraf geprojecteerd vóór elke provider-call. |
| Reframe | services/reframe/ | 9:16 Smart-Reframe via vigenair + de FFmpeg-worker. |
| FFmpeg worker | services/ffmpeg_worker/ | Interne Cloud Run-worker — pixelbewerkingen + keyframe-extractie. Invoker-locked op Reframe + Judge. |
| Dub | services/dub/ | Vertaling op basis van Ariel + Chirp 3 HD-dubbing. Geen voice cloning in de MVP. |
| Judge | services/judge/ | Compliance-scoring (Gemini-as-judge) — binair pass/fail; nooit een derde staat. |
| Ads | services/ads/ | Push van Google Ads-campagne (altijd PAUSED) + UNLISTED YouTube-upload. |
| Insights | services/insights/ | VTR-signalen, creative DNA, generatie van prompt hints. Kosten-rollup + 7-daagse trailing VTR-mart + segmentatie op merkkleur. |
De veiligheidscontracten.
De meeste hiervan zijn geen features — het zijn beslissingen die de tool betrouwbaar maken op een deadline-dag. Het platform is het contract; de cockpit dwingt het alleen af aan de operator-kant.
- Strikte /healthz-probe op elke revisie
- Elke Cloud Run-service registreert zichzelf via een gedeeld contract en levert een strikte /healthz. Een revisie die niet slaagt, wordt niet gepromoveerd. Healthchecks zijn infrastructuur, geen folklore.
- Cost-cap vooraf geprojecteerd vóór elke provider-call
- Generate roept Veo of Imagen pas aan als de geprojecteerde kosten zijn berekend tegen het budgettier in de Brief. De kostenpoort is het contract, geen waarschuwing achteraf.
- Altijd PAUSED, altijd UNLISTED
- Ads pusht campagnes in de staat PAUSED. YouTube-uploads staan standaard op UNLISTED. Twee veilige standaarden die het verschil maken tussen een tool die je vertrouwt en een tool die je scherp in de gaten houdt. De Launch-bevestigingsmodal in de cockpit dwingt de operator om de PAUSED-staat expliciet te erkennen voordat er gepusht wordt.
- Binair pass/fail bij compliance — nooit een derde staat
- Judge geeft pass of fail terug. Geen 'misschien', geen geel/oranje op compliance-oppervlakken. De ontwerptaal van de review-galerij dwingt dit af — er is geen derde kleur. Compliance-ambiguïteit is de bug; haal de bug weg door de derde staat weg te halen.
- Keyboard-first review
- De Review-galerij gebruikt j/k om te navigeren, a om goed te keuren, r om af te keuren. Hover-preview, gestructureerde toast-foutmeldingen. De Client Service Director hoort een wachtrij leeg te werken, niet erdoorheen te klikken.
- Type-de-naam-veiligheidsmodal bij destructieve acties
- Een klant intrekken is een soft-delete; herstellen brengt hem terug. Maar de intrek-modal vereist dat je de klantnaam intypt. Het patroon is geleend van het verwijderen van een GitHub-repo — de wrijving is de feature.
- Audit-log alles via wrap()
- Elke service-actie loopt door een gedeelde audit-logging-helper. Het platform heeft één enkele audit-vorm, niet 10 verschillende per service. Forensisch onderzoek werkt omdat de log-vorm uniform is.
- Industriële, ingetogen esthetiek
- Industriële ingetogenheid, geen decoratieve gradiënten, geen compliance-geel. De interface leest als iets wat een werkende CSD om 18:30 op een deadline-dag vertrouwt. Hij blijft bewust rustig.
Wat eronder draait.
| Laag | Detail |
|---|---|
| Web cockpit | Next.js 14. Surfaces: Flight Deck (dashboard), Brand Kit, Brief, Review-galerij, Launch confirm, Insights Signal Wall, Client Settings. |
| Services | 9 FastAPI-services + _shared foundations. Elk levert een strikte /healthz; elk registreert via het gedeelde contract. |
| Generative | Veo 3 + Imagen 3 (Generate). Gemini voor brand-kit-extractie + compliance-beoordeling. Ariel + Chirp 3 HD (Dub). Geen voice cloning in de MVP. |
| Worker pipelines | vigenair + de FFmpeg-worker voor 9:16 Smart-Reframe. Invoker-locked zodat alleen Reframe + Judge de worker kunnen aanroepen. |
| Ingestion | Composer DAGs + dbt mart (fact_creative_performance). Synthetic backfill-loader voor omgevingen zonder live advertentiedata. |
| Infra | Terraform voor het iamagency GCP-project, europe-west4. Single-region MVP. |
| Vendored OSS | ariel, vigenair, dreamboard, copycat — als forks/-submodules binnengehaald en ingebouwd in de Reframe- + Dub-paden. |
| Testing | 943 frontend-tests + 146 backend-tests slagen bij MVP-afsluiting. Test-suites per service draaien via Makefile-targets. |
Gebouwd met een multi-agent-opzet.
Prism is ook een werkend voorbeeld van hoe het project is gebouwd. Specialistische agents werken in aparte git worktrees, een review-agent controleert elke PR, en ik bewaak de merges op modulegrenzen. Vastgelegde contracten staan in FOR_AGENTS.md: wat de audit-vorm moet zijn, wat het strikte /healthz-contract is, wat de cost-cap-projectieregel zegt. Dezelfde agent-discipline die de vier secties van de cockpit oplevert, levert ook de codebase op.
Een YouTube-first creatieve workflow kost normaal meerdere mensen — een regisseur, editor, dubber, compliance, ads ops. Veel van dat werk is mechanisch en hoort geen vergadering nodig te hebben. Prism neemt de mechanische laag over, zodat de Client Service Director de creatieve keuze houdt — wat we zeggen, tegen wie, met welke cost cap — en het platform doet de rest. Het draait op hetzelfde principe dat Luminary bij elkaar houdt — de machinerie is stabiel, de keuze van de mens is de enige variabele die beweegt — deze keer gericht op de drukste dag in de week van een account director.