Create professional videos autonomously using claude-code-video-toolkit — AI voiceovers, image generation, music, talking heads, and Remotion rendering.
Create professional videos autonomously using claude-code-video-toolkit — AI voiceovers, image generation, music, talking heads, and Remotion rendering.
Create professional explainer videos from a text brief. The toolkit uses open-source AI models on cloud GPUs (Modal or RunPod) for voiceover, image generation, music, and talking head animation. Remotion (React) handles composition and rendering.
CRITICAL: Toolkit Path
The toolkit lives at a fixed path. ALWAYS cd here before running any tool command.
cd ~/.openclaw/workspace/claude-code-video-toolkit
python3 tools/verify_setup.py
All tools should show [x]. Then run a quick test to confirm the GPU pipeline works:
cd ~/.openclaw/workspace/claude-code-video-toolkit
python3 tools/qwen3_tts.py --text "Hello, this is a test." --speaker Ryan --tone warm --output /tmp/video-toolkit-test.mp3 --cloud modal
If you get a valid .mp3 file, setup is complete. If it fails, check:
.env has the correct MODAL_QWEN3_TTS_ENDPOINT_URL
Run python3 tools/verify_setup.py --json and check modal_tools for which endpoints are missing
Cost: Modal includes $30/month free compute. A typical 60s video costs $1-3.
Creating a Video
Step 1: Create Project
cd ~/.openclaw/workspace/claude-code-video-toolkit
cp -r templates/product-demo projects/PROJECT_NAME
cd projects/PROJECT_NAME
npm install
Scene types: title, problem, solution, demo, feature, stats, cta.
Duration rule: Estimate durationSeconds as ceil(word_count / 2.5) + 2. You will adjust this after generating audio in Step 4.
Step 3: Write Voiceover Script
Create projects/PROJECT_NAME/VOICEOVER-SCRIPT.md:
## Scene 1: Title (9s, ~17 words)
Build videos with AI. The product name toolkit makes it easy.
## Scene 2: Problem (14s, ~30 words)
The problem statement goes here. Keep it punchy and relatable.
Word budget per scene:(durationSeconds - 2) * 2.5 words. The -2 accounts for 1s audio delay + 1s padding.
Step 4: Generate Assets
CRITICAL: All commands below MUST be run from the toolkit root, not the project directory.
cd ~/.openclaw/workspace/claude-code-video-toolkit
Generate ONE .mp3 file PER SCENE. Do NOT generate a single voiceover file.
cd ~/.openclaw/workspace/claude-code-video-toolkit
# Scene 01
python3 tools/qwen3_tts.py \
--text "The voiceover text for scene one." \
--speaker Ryan --tone warm \
--output projects/PROJECT_NAME/public/audio/scenes/01.mp3 \
--cloud modal
# Scene 02
python3 tools/qwen3_tts.py \
--text "The voiceover text for scene two." \
--speaker Ryan --tone warm \
--output projects/PROJECT_NAME/public/audio/scenes/02.mp3 \
--cloud modal
# ... repeat for each scene
cd ~/.openclaw/workspace/claude-code-video-toolkit
python3 tools/image_edit.py \
--input projects/PROJECT_NAME/public/images/title-bg.png \
--prompt "Make it darker with red tones, more ominous" \
--output projects/PROJECT_NAME/public/images/problem-bg.png \
--cloud modal
ALWAYS do this after generating voiceover. Audio duration differs from estimates.
cd ~/.openclaw/workspace/claude-code-video-toolkit
for f in projects/PROJECT_NAME/public/audio/scenes/*.mp3; doecho"$(basename $f): $(ffprobe -v error -show_entries format=duration -of csv=p=0 "$f")s"done
Update each scene's durationSeconds in demo-config.ts to: ceil(actual_audio_duration + 2).
Example: if 01.mp3 is 6.8s, set scene 1 durationSeconds to 9 (ceil(6.8 + 2) = 9).
Step 6: Review Still Frames
cd ~/.openclaw/workspace/claude-code-video-toolkit/projects/PROJECT_NAME
npx remotion still src/index.ts ProductDemo --frame=100 --output=/tmp/review-scene1.png
npx remotion still src/index.ts ProductDemo --frame=400 --output=/tmp/review-scene2.png
Check: text truncation, animation timing, narrator PiP positioning, background contrast.
Step 7: Render
cd ~/.openclaw/workspace/claude-code-video-toolkit/projects/PROJECT_NAME
npm run render
Output:out/ProductDemo.mp4
Composition Patterns
Per-Scene Audio
Use per-scene audio with a 1-second delay (from={30} = 30 frames = 1s at 30fps):