Rockets, bursts, a twinkling sky, and a city skyline.
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.
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
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.
| Key | Action |
|---|---|
| space | launch a rocket |
| mouse click | rocket at the pointer |
| a | toggle the auto show |
| + / - | auto launch rate |
| q / Esc | quit |
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.