video-productionComplete A/B video pipeline ā storyboard, Veo 3 batch generation, browser preview with feedback loop, and ffmpeg assembly into final videos. Use when creatin...
Install via ClawdBot CLI:
clawdbot install omerflo/video-productionGenerate cinematic video clips with Veo 3, review them in a browser preview, iterate with feedback, and assemble final A/B test videos ā all with minimal token spend.
cd ~/.openclaw/workspace/skills/video-production
# 1. Generate all clips from storyboard
.venv/bin/python3 scripts/batch_generate.py --storyboard /path/to/storyboard.json
# 2. Open browser preview
.venv/bin/python3 scripts/generate_preview.py --storyboard /path/to/storyboard.json
# 3. (After feedback) Re-generate only revised scenes
.venv/bin/python3 scripts/apply_feedback.py --storyboard storyboard.json --feedback feedback.json
# 4. Assemble final video
.venv/bin/python3 scripts/ffmpeg_assembler.py --storyboard storyboard.json
Target: 15-second videos, 3 clips Ć 5s each
[HOOK: 5s] ā [CORE: 5s] ā [CTA/PAYOFF: 5s]
ā ā
swap for A/B swap for A/B
Economics:
storyboard.json
ā
batch_generate.py ā clips/scene_01.mp4 ... scene_05.mp4
ā
generate_preview.py ā preview.html (opens in browser, zero tokens)
ā
[review + paste feedback JSON to Muffin]
ā
[Muffin suggests revised prompts, updates storyboard.json]
ā
apply_feedback.py ā re-generates only 'revise' scenes
ā
ffmpeg_assembler.py ā final_AA.mp4, final_BA.mp4, final_AB.mp4, final_BB.mp4
Token cost: Only when writing storyboard + interpreting feedback. Preview, generation, and assembly are all zero tokens.
{
"project": "my-video",
"output_dir": "clips",
"final_output": "final.mp4",
"scenes": [
{
"id": "scene_01",
"role": "hook_a",
"label": "Hook A",
"order": 1,
"duration": 5,
"aspect_ratio": "16:9",
"prompt": "..."
}
],
"_ab_combinations": {
"video_1_AA": ["scene_01", "scene_03", "scene_04"],
"video_2_BA": ["scene_02", "scene_03", "scene_04"],
"video_3_AB": ["scene_01", "scene_03", "scene_05"],
"video_4_BB": ["scene_02", "scene_03", "scene_05"]
}
}
See scripts/storyboard_template.json for full template.
Paste this JSON to Muffin after reviewing preview.html:
{
"scenes": [
{ "id": "scene_01", "action": "approve", "notes": "" },
{ "id": "scene_02", "action": "revise", "notes": "slower camera, warmer light" }
]
}
| Parameter | Supported |
|---|---|
| aspect_ratio | ā
|
| number_of_videos | ā
|
| negative_prompt | ā
|
| duration_seconds | ā Broken (throws 400 even with valid values) |
| fps | ā Vertex AI only |
| compression_quality | ā Vertex AI only |
| enhance_prompt | ā Vertex AI only |
Models: veo-3.1-generate-preview (best) | veo-3.1-fast-generate-preview | veo-3.0-generate-001
SDK: google-genai (NOT google-generativeai)
Motion in every sentence ā Veo produces laggy output from static prompts. Every sentence should describe camera OR subject movement.
Character continuity ā Veo can't maintain exact characters across clips. Describe physical details explicitly in every scene that includes the same character.
ā "The same client character from the opening ā dark jacket, professional bearing, 30s-40s"
Stitch continuity ā For seamless cuts, open each prompt with the color/light state the previous clip ends on.
ā "Warm amber light, a direct visual continuation from the post-production suite..."
Single continuous shot ā Each prompt is one continuous clip. Design it as one camera move that reveals multiple elements ā not a montage description.
Content policy ā Environmental/prop-only scenes generate reliably. Stressed people on phones can silently return no video. Keep humans calm or describe the environment instead.
When you hit the daily limit (429 RESOURCE_EXHAUSTED), use the quota watcher:
# Sets a cron that retries every 30 min, texts Master when done
chmod +x scripts/quota_watcher.sh
# Add to crontab:
(crontab -l 2>/dev/null | grep -v quota_watcher; \
echo "*/30 * * * * /path/to/quota_watcher.sh >> /tmp/quota_watcher.log 2>&1") | crontab -
See api-quota-watcher skill for the generic pattern.
| Script | Purpose |
|---|---|
| scripts/batch_generate.py | Generate all scenes from storyboard, skip existing |
| scripts/generate_preview.py | Build preview.html with video players + feedback form |
| scripts/apply_feedback.py | Re-generate only scenes marked 'revise' |
| scripts/ffmpeg_assembler.py | Stitch approved clips ā final MP4 (cut or crossfade) |
| scripts/quota_watcher.sh | Retry + notify cron for quota recovery |
| scripts/storyboard_template.json | Starting storyboard template |
cd ~/.openclaw/workspace/skills/video-production
uv venv .venv
uv pip install google-genai Pillow requests
# API key must be in ~/.zshenv:
export GOOGLE_API_KEY="AIza..."
After all scenes approved, run assembler for each combo:
# Assemble all 4 A/B videos
for combo in AA BA AB BB; do
# Edit storyboard or pass scene list directly
.venv/bin/python3 scripts/ffmpeg_assembler.py \
--storyboard storyboard.json \
--output "final_${combo}.mp4"
done
Or hardcode in _ab_combinations in storyboard.json ā assembler reads it automatically.
| Format | Notes |
|---|---|
| 16:9 (master) | Default ā all scripts use this |
| 9:16 (vertical) | Change aspect_ratio to "9:16" in storyboard |
| 1:1 (square) | Change aspect_ratio to "1:1" |
Generate separate storyboards per format for best results. Don't crop 16:9 to 9:16 in post ā re-generate with proper aspect.
Every new campaign starts fresh. No inherited characters, no assumed cast, no prompt weights from previous runs. If you want continuity from a past campaign, explicitly say so:
"Use HERO_01 from the MMM campaign"
If no cast is defined, use these placeholders:
HERO_01 ā Primary UGC creatorFRIEND_01 ā Recurring side characterHAND_MODEL_01 ā Hands-only product handlerFirst approved output becomes the canonical identity baseline for that campaign.
When characters are defined, maintain a character_registry.json in the project folder:
{
"HERO_01": {
"identity": {
"age_range": "28-35",
"gender": "male",
"skin_tone": "...",
"hair": "...",
"build": "..."
},
"wardrobe": {
"preferred": [],
"avoid": [],
"signature": ""
},
"camera_rules": {
"preferred_framing": "medium close-up",
"avoid": []
},
"negative_constraints": [],
"reference_frames": [],
"phrase_weights": {}
}
}
When characters are defined, every prompt must include:
CAST:
- HERO: HERO_01 (identity locked; must match reference frames exactly)
Do not alter identity traits across frames or across future assets.
After generation, run vision model consistency check against reference frames:
After every human review decision, update:
Append every attempt to generation_log.jsonl (never deleted):
{
"timestamp": "...",
"campaign": "...",
"scene_id": "...",
"engine": "veo-3.1-generate-preview",
"attempt": 1,
"characters": ["HERO_01"],
"prompt": "...",
"output": "clips/scene_01.mp4",
"verification_score": 88,
"drift_notes": "",
"decision": "auto_pass",
"human_outcome": "approved",
"worked_phrases": [],
"failed_phrases": []
}
Escalate to Master via Telegram (never silently loop) when:
Escalation message must include: scene ID, engine, score, drift notes, and 2ā3 options.
Even though each campaign starts clean, these persist in the skill folder:
generation_log.jsonl ā full audit trailapproved_references/ ā canonical frames by campaign, available to load on requestcampaign_phrase_weights/ ā weight archives per campaign, loadable for continuityGenerated Mar 1, 2026
A digital marketing agency creates 15-second video ads for Instagram and TikTok, testing different hooks and calls-to-action to optimize engagement and conversion rates. They generate multiple A/B variants efficiently, preview them in-browser for client feedback, and assemble final videos for targeted campaigns.
An online retailer produces short video demos for new products, swapping out opening hooks and payoff scenes to highlight different features or benefits. This allows for rapid iteration based on customer feedback, ensuring high-quality visuals without high token costs.
An edtech company develops video lessons with varied introductions and conclusions to test student engagement across different demographics. They use the pipeline to generate clips, review them for clarity, and assemble final videos for A/B testing in learning platforms.
A corporate training firm creates instructional videos with alternative hooks and CTAs to improve employee retention and compliance. The skill enables quick revisions based on stakeholder feedback, assembling multiple versions for different departments or regions.
A real estate agency produces short video tours of properties, experimenting with different opening scenes and closing calls-to-action to attract buyers. They generate clips, preview them for aesthetic appeal, and stitch together final videos for listings and social media.
Offer a cloud-based platform where users upload storyboards to generate and test A/B video variants, charging a monthly fee based on video output volume and features like analytics integration. Revenue streams include tiered subscriptions and pay-per-use credits for high-volume clients.
Provide video production as a service, using this skill to deliver rapid A/B testing for clients in marketing or e-commerce, with pricing tied to campaign performance metrics like click-through rates or conversions. Revenue is generated through project-based fees and success-based bonuses.
Develop a user-friendly interface around this skill, offering free basic video generation with limits, and premium plans for advanced features like unlimited A/B tests, custom transitions, and API access. Revenue comes from upgrades, enterprise licenses, and affiliate marketing for related services.
š¬ Integration Tip
Integrate this skill into existing content management systems by automating storyboard generation from text inputs and feeding final videos directly to social media schedulers or ad platforms.
Generate spectrograms and feature-panel visualizations from audio with the songsee CLI.
Best practices for Remotion - Video creation in React
Best practices for Remotion - Video creation in React
Long-form AI video production: the frontier of multi-agent coordination. CellCog orchestrates 6-7 foundation models to produce up to 4-minute videos from a single prompt ā scripted, filmed, voiced, lipsync'd, scored, and edited automatically. Create marketing videos, product demos, explainer videos, educational content, spokesperson videos, training materials, UGC content, news reports.
HeyGen AI video creation API. Use when: (1) Using Video Agent for one-shot prompt-to-video generation, (2) Generating AI avatar videos with /v2/video/generat...
Complete toolkit for programmatic video creation with Remotion + React. Covers animations, timing, rendering (CLI/Node.js/Lambda/Cloud Run), captions, 3D, charts, text effects, transitions, and media handling. Use when writing Remotion code, building video generation pipelines, or creating data-driven video templates.