mirror of
https://github.com/digitalsamba/claude-code-video-toolkit.git
synced 2026-09-18 19:41:13 +08:00
6db40e9299
* Add concept-explainer-short template: 9:16 TikTok/Reels explainer shorts (Python/moviepy) First non-Remotion template. The whole video derives from scenes.json (per-scene narration text + visual asset); a three-script pipeline turns it into a finished vertical short: - gen_vo.py — per-scene TTS via tools/voiceover.py (clone or built-in speaker, batch mode, --max-wpm pacing clamp), writes the vo_durations.json timeline anchor; warns past the 3-minute Shorts/Reels ceiling - gen_captions.py — burned karaoke caption timing: whisper word timestamps force-aligned to the ground-truth script text via difflib (never burns whisper's own transcription, which mishears TTS) - build.py — audio-anchored moviepy composite: Ken Burns on stills, boomerang-looped clips (asset extension decides), caption pills with width cap and platform-safe positioning, ducked looped music; renders at every stage (gradient placeholder cards before assets exist, word-count timing estimates before VO, silent before audio) Pattern proven on a 3:41 hallucinations explainer; tested end-to-end (out-of-box placeholder render + full Modal clone pipeline with three takes auto-clamped 181-188→165 wpm). Registered in the toolkit registry, CLAUDE.md, and /video (with Python-flow notes); openai-whisper documented as an optional dependency. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Add sky-blue-short showcase example + fix Modal qwen3-tts batch custom_voice examples/sky-blue-short: complete worked example of the concept-explainer-short template — a 52s vertical "Why is the sky blue?" short with Qwen3 VO (built-in Ryan, warm tone), two Ideogram diagram/CTA cards, two LTX sky clips, ACE-Step music bed, and burned aligned captions (~$0.80 total generation cost). All source assets committed; re-renders in place with python3 build.py. Building it surfaced two real bugs, fixed here: - Modal qwen3-tts handler: batch custom_voice hit the same qwen-tts tensor-aliasing crash the clone path already works around — now iterates per text with the shared speaker (redeployed and verified) - gen_vo.py: failed batch scenes crashed with KeyError instead of reporting which scenes failed and why Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Add hallucinations-short and sky-blue-short demo videos to README showcase Both produced with the concept-explainer-short pipeline: sky-blue-short uses the stock Qwen3-TTS Ryan voice; hallucinations-short uses a Qwen3 voice clone from a Pixabay voice-over sample. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
34 lines
1.1 KiB
JSON
34 lines
1.1 KiB
JSON
{
|
|
"title": "Why Is the Sky Blue?",
|
|
"scenes": [
|
|
{
|
|
"id": "01",
|
|
"slug": "hook",
|
|
"visual": "ltx",
|
|
"asset": "clips/01_hook.mp4",
|
|
"text": "Look up on a clear day and you see blue in every direction. But sunlight is white. So where does the blue come from?"
|
|
},
|
|
{
|
|
"id": "02",
|
|
"slug": "scattering",
|
|
"visual": "ideogram",
|
|
"asset": "images/02_scattering.png",
|
|
"text": "Sunlight is a mix of every color, and air molecules scatter short blue wavelengths far more than long red ones. The sky is blue light, bounced toward your eyes from everywhere at once."
|
|
},
|
|
{
|
|
"id": "03",
|
|
"slug": "sunset",
|
|
"visual": "ltx",
|
|
"asset": "clips/03_sunset.mp4",
|
|
"text": "At sunset the light travels through far more air, the blue scatters away before it reaches you, and only the reds and oranges survive the trip."
|
|
},
|
|
{
|
|
"id": "04",
|
|
"slug": "cta",
|
|
"visual": "ideogram",
|
|
"asset": "images/04_cta.png",
|
|
"text": "So the sky isn't blue. It's blue light, scattered. If that made the world a little clearer, follow for one concept every week."
|
|
}
|
|
]
|
|
}
|