demo 1 of 17

🎆fireworks

Rockets, bursts, a twinkling sky, and a city skyline.

Recordings

Both captures below are real iTerm2 sessions running the demo — the same binary renders at pixel resolution where the terminal speaks the kitty graphics protocol, and as ASCII cells everywhere else.

kitty graphics — fireworks-gfx

Renders into an RGBA framebuffer transmitted to the terminal every frame. Sparks are radial gradients that sum additively, so overlapping bursts get hot in the middle. Every channel decays toward zero each frame instead of clearing, so rockets and sparks leave natural fading trails. Alpha follows the glow, so your terminal background shows through where nothing is burning. Frames are double-buffered and wrapped in synchronized output (DECSET 2026) so cells and pixels land atomically — tear-free.

fireworks in kitty graphics mode
fireworks — kitty pixel mode
ASCII cells — fireworks

Pure termpaint: particles pick a glyph by intensity (✸ ● • ·), positions are tracked at half-cell vertical resolution, and the skyline windows flicker. This is also what fireworks-gfx falls back to on terminals without graphics support.

fireworks in ASCII cell mode
fireworks — ASCII cell mode

Controls

KeyAction
spacelaunch a rocket
mouse clickrocket at the pointer
atoggle the auto show
+ / -auto launch rate
q / Escquit

Tuning env vars use the FIREWORKS_* prefix — e.g. FIREWORKS_MAXDIM=1024 for sharper frames, FIREWORKS_CELLS=1 to force cell rendering even on kitty terminals. See the overview for the full tuning table.