mirror of
https://github.com/digitalsamba/claude-code-video-toolkit.git
synced 2026-09-18 19:41:13 +08:00
290d7d345b
* Adopt uv for Python dependency management Replace manual pip/venv setup with `uv sync` (pyproject.toml + uv.lock), and switch all tool invocations across docs, skills, commands, and examples to `uv run`. Optional extras: --extra whisper, --extra modal. tools/requirements.txt is kept as a pip fallback. * FIX: bring uv migration current with main — post-June deps and docs Adds websocket-client (60db websocket transport) to core deps and a 'youtube' extra for the google-* packages (tools/youtube_upload.py), regenerates uv.lock, bumps pyproject version to 0.18.0, and converts the 51 'python3 tools/…' invocations added since the PR was opened (60db, YouTube, Kiro docs, publish command) to 'uv run'. Verified with uv sync --frozen --extra youtube; voiceover, sixtydb_tts, youtube_upload and migrate_to_kiro all run through the project environment. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Asharib Ali <asharibarain4@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
ds-crt-stinger
A 6-second brand stinger that opens with a pixel-art astronaut waving in an amber-phosphor CRT, then crossfades into the digitalsamba wordmark — grunged and glowing so it reads as part of the same CRT world rather than pasted over it.
What this example demonstrates
- LTX-2.3 with a style LoRA — uses the
crt-terminalLoRA (tools/ltx2.py --lora crt-terminal) to generate the CRT footage end-to-end from a text prompt. No reference image needed. - Post-processing a raster logo to match generated footage —
make_grungy_logo.pytints the monochrome-white wordmark, adds a phosphor halo, applies scanlines, chromatic aberration, and grain so it visually belongs next to the LTX-2 output. - Audio-anchored moviepy composite —
build.pycrossfades the CRT clip into the grunged logo with a coordinated audio fade, ending on a 1s hold on the brand mark.
Files
| File | Purpose |
|---|---|
build.py |
moviepy composite (CRT clip → crossfade → grungy logo hold) |
make_grungy_logo.py |
Tints the white SVG logo and applies CRT grunge effects |
logo-ds-white.svg |
Monochrome-white variant of the DS wordmark, derived from the brand SVG |
ds_boot_astro.mp4 |
Pre-rendered LTX-2 output (astronaut in amber CRT). Kept so you can run build.py without paying for a Modal generation. |
ds_stinger_astro.gif |
The final stinger as a 384px GIF for README embedding |
Run it
# From the toolkit root:
uv sync # moviepy, Pillow, numpy
brew install librsvg # rsvg-convert (one-time)
cd examples/ds-crt-stinger
uv run build.py # → ds_stinger_astro.mp4
The first run auto-rasterises the white SVG and bakes the grungy logo. Subsequent runs reuse the cached intermediates.
Regenerate the CRT footage
Skip this unless you want a different prompt, palette, or composition. The committed ds_boot_astro.mp4 works out of the box.
The LTX-2 step requires the Modal LTX-2 endpoint to be deployed (see docs/modal-setup.md) and costs ~$0.30 per take.
# From the toolkit root:
uv run tools/ltx2.py \
--lora crt-terminal --seed 42 \
--prompt 'a CRT aesthetic with heavy scanlines and bloom, warm amber phosphor glow, chromatic aberration, a chunky pixel-art cartoon astronaut in a rounded white spacesuit with a reflective dome helmet, slowly floating in zero gravity and waving cheerfully at the camera, a few small twinkling stars in the dark background, static centered composition, low choppy frame rate, friendly retro arcade mood' \
--output examples/ds-crt-stinger/ds_boot_astro.mp4
Palette swaps
The grungy-logo builder ships three palettes. Regenerate a different phosphor color:
uv run make_grungy_logo.py amber # warm orange — default
uv run make_grungy_logo.py coral # deeper red, closer to DS brand coral
uv run make_grungy_logo.py green # classic hacker phosphor
Then pass the palette to build.py:
uv run build.py astro coral # astro clip + coral-grunged wordmark
Tuning knobs
In make_grungy_logo.py:
| Constant | What it does | Try |
|---|---|---|
PALETTES[*]["tint"] |
Core glyph color | Brighter RGB for more pop |
PALETTES[*]["halo"] |
Bleed color around the glyphs | More saturated for neon; desaturated for subtle |
HALO_RADIUS |
How far the phosphor halo spreads | 15 tight / 45 dreamy |
SCANLINE_DARKEN |
Every-other-row darkening | 0.55 harsh / 0.85 gentle |
RGB_SHIFT_PX |
Chromatic aberration offset | 5–6 for more dramatic |
NOISE_STRENGTH |
Grain amount | 0–40 |
In build.py:
| Constant | What it does |
|---|---|
CROSSFADE |
Length of the clip→logo handoff (default 1.5s) |
LOGO_HOLD |
How long the logo holds after the crossfade (default 1.0s) |
See also
.claude/skills/ltx2/SKILL.md— LTX-2 prompting and thecrt-terminalstyle LoRA.claude/skills/moviepy/SKILL.md— audio-anchored timelines and single-filebuild.pyconventionsexamples/quick-spot/— the minimal moviepy example this pattern builds on
