One entry point, deliberate forks at the rendering stage, shared assembly/QA/persistence. As of 2026-05-15.
MCP · portal · CLI — same surface for every video type
wv_generate(brand, type, config)Shared across every video type
brands.brand_config (voice, tagline, URL, SKUs, typography, caption_style, flavor_palette, caption_aliases)brands.avatars[avatar_id] (core_problems, messaging_hooks, best_skus)assets table (product_shots + product_renders + lifestyle + video_clips w/ moment-level DNA: structural beats, transcript segments, product-visible windows, broll-safe windows, text overlays)clients/<brand>/asset_excludes.json (per-brand reserved-asset list)Two paths, both end with a topic string
topic directlyangle becomes the topic.Claude Sonnet 4.6 — turns the angle into a committed storyboard
scene_type · target_duration · voiceover_text · text_overlay · method · asset_ref · audio_rolemethod is the fork — passthrough · fal_i2v · fal_t2v · arcads_actor · solid_colorWhy first: scene durations follow audio truth, not estimates. Prevents mid-sentence cuts and black tails.
voiceover_text for each scene — one mp3 per scene._expand_for_tts() runs caption_aliases first so abbreviations speak right ("NIC" → "nicotine", "B12" → "B twelve", "vitabark" → "VitaBar").retime_blueprint_from_audio() rewrites every scene.start_time / scene.end_time from the measured audio + a 0.3s breath buffer.Now executes at the audio-corrected durations. The director decides; the executor renders. Mix methods in one video.
Real existing UGC clip trimmed to a specific timestamp window. Zero AI regeneration; zero hallucination risk.
$0 / clipfal/Kling 2.6 Pro. Animates a real product/lifestyle still (i2v) or generates from text (t2v) when no asset fits.
~$0.35 / clipArcads OmniHuman 1.5 talking-head with b-roll cut-ins on top. Highest-fidelity UGC.
~$0.30 / sec
Deprecated: solid_color — flat brand-color background w/ pill overlay. Used to be a 4th branch but caused
"black screen" defects (brand-green reads as black on most screens). Director now auto-upgrades any CTA solid_color
request to product_shot. Reserved only for rare text-only hook moments where the line IS the moment.
Generated at the now-known total duration; can run in parallel with the fork's clip jobs
audio_mood field, length = sum of retimed scenes.ENABLE_SFX=1 to opt in — Kling sometimes generates SFX that bleeds, kept off).Shared captions + render
common/captions.py: pick_caption_colors() (flavor → emphasis → default), apply_caption_aliases(), load_overlay_font() with typography.overlay_weight.volume:"0%"). Audio = video duration exact. 1080×1920 @ 30fps.No video reaches the user without passing
tools/qa/gemini_review.py)~/Desktop/NEW VB Vids/ + open (VitaBar workflow rule)Type (wv_generate) | Director? | Method per scene | Body shape | Status |
|---|---|---|---|---|
video_remix |
✓ Sonnet | passthrough + fal_i2v + fal_t2v mixed | TTS-driven scenes | Wired |
arcads_video_ads |
— Internal LLM (gpt-4o JSON) | arcads_actor + passthrough b-roll | Actor speaks · b-roll cut-ins ~60% | Wired (just shipped) |
video_ads (narrated b-roll) |
— Standalone | passthrough + fal_i2v | TTS VO over b-roll | Independent path |
ai_video_ads |
— Direct Kie.ai/Veo3 | fal_t2v only | Single AI-generated clip | Independent path |
video_supercut (script only, not yet a wv_generate type) |
— Transcript-driven | passthrough only | UGC montage from existing clips | Not in MCP |
| Shared module | Used by | Not yet used by |
|---|---|---|
common/brand_db.fetch_brand() |
arcads · narrated · supercut · video_v2 | ai_video_ads |
common/captions.py |
arcads · narrated · supercut · video_v2 (just wired) | ai_video_ads |
Sonnet director (video_engine/director.py) |
video_v2 only | arcads · narrated · supercut · ai_video_ads |
| Asset library moment-level summary | video_v2 director | Could feed all the others |
Opus ideator (video_engine/ideator.py) |
CLI only | None of the wv_generate types surface it |
| Creatomate assembly | video_v2 only | Others use ffmpeg locally |
| Gemini review gate | None — manual today | Should be ALL paths |
Today the director outputs a video_v2-shaped storyboard. It should output scenes whose method is one of a fixed enum (passthrough_clip | fal_i2v | fal_t2v | arcads_actor | solid_color) — and the EXECUTOR picks up its scenes. Today Arcads/narrated/supercut bypass the director entirely.
The ideator only fronts generate_video_v2 today. wv_generate with any type should accept an --ideate flag that runs Opus first across brand+avatar context, then feeds the chosen angle into whichever executor.
tools/qa/gemini_review.py is a CLI run by hand today. To meet the SOP, every assembly path should END with the Gemini review baked in — configurable score threshold (default 7/10) — and the platform should refuse to mark a Creative as "ready" until it passes.