Files
Conal Mullan 3f7d2c1e0b EXAMPLE: add ds-crt-stinger — CRT LoRA + grunged logo stinger
Curated reference showing the LTX-2 crt-terminal LoRA producing amber
phosphor footage, plus a PIL post-processing chain that tints the white
SVG wordmark, adds a phosphor halo, scanlines, chromatic aberration and
grain so the brand mark reads as part of the same CRT world. moviepy
composites the crossfade + hold. Self-bootstraps from the committed SVG
and the one LTX-2 output we couldn't cheaply reproduce locally.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 22:25:00 +01:00
..

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.

ds-crt-stinger preview

What this example demonstrates

  1. LTX-2.3 with a style LoRA — uses the crt-terminal LoRA (tools/ltx2.py --lora crt-terminal) to generate the CRT footage end-to-end from a text prompt. No reference image needed.
  2. Post-processing a raster logo to match generated footage — make_grungy_logo.py tints the monochrome-white wordmark, adds a phosphor halo, applies scanlines, chromatic aberration, and grain so it visually belongs next to the LTX-2 output.
  3. Audio-anchored moviepy composite — build.py crossfades 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:
python3 -m pip install -r tools/requirements.txt   # moviepy, Pillow, numpy
brew install librsvg                               # rsvg-convert (one-time)

cd examples/ds-crt-stinger
python3 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:
python3 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:

python3 make_grungy_logo.py amber   # warm orange — default
python3 make_grungy_logo.py coral   # deeper red, closer to DS brand coral
python3 make_grungy_logo.py green   # classic hacker phosphor

Then pass the palette to build.py:

python3 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