SATURN V ASCII LAUNCH

I wanted a rocket launch playing every time I opened my terminal. That turned into a renderer: every frame of the Apollo 11 liftoff in NASA's Saturn V launch footage (public domain), redrawn as truecolor ASCII, one character per cell, matched on the shape of the light inside that cell. The video streams in 2MB chunks, so playback starts on the first chunk. The homepage terminal still runs the fastfetch splash this all started as.

0:00 0:00

READY

Based on the shape-vector technique from Alex Harri's "Rendering ASCII Art".

1. SHAPE SAMPLING

s1 s2 s3 s4 s5 s6 CHARACTER CELL

Each cell in the source image is divided into 6 circular sampling regions (Harri, 2024). The average brightness inside each circle becomes one component of a 6-dimensional shape vector:

[s1, s2, s3, s4, s5, s6]

Two cells with the same average brightness get different vectors when the light sits in different corners of the cell. Average brightness alone cannot tell those two apart.

2. CHARACTER MATCHING

IMAGE CELL SHAPE VECTOR [.4 .1 .6 .3 .1 .5] min dist COMPARE TO ALL ASCII CHARS: / [.5 .0 .5 .5 .0 .5] d=0.42 \ [.0 .4 .3 .4 .5 .1] d=0.12 | [.5 .5 .5 .5 .5 .5] d=0.68 _ [.0 .0 .0 .0 .9 .9] d=0.91 BEST MATCH: \

Every printable ASCII character (32-126) is pre-rendered to a bitmap and encoded as the same 6D vector, so both sides of the comparison are six numbers. The character sitting nearest the image cell in that space, by Euclidean distance, takes the cell (Harri, 2024).

Before the match runs, a directional comparison against neighboring cells sharpens the edges.

3. ANIMATION PIPELINE

SCROLL 19 frames ease-in t^2 HOLD 3 frames flame flicker DISSIPATE 21 frames wave fade viewport rises like liftoff RGB + char perturbation top-down sweep chars -> smoke

Scroll: The viewport climbs the full-height ASCII image on a quadratic ease-in, so the first frames barely move and the last ones cover most of the distance.

Hold + Flicker: Then it stops, and the flame-masked cells do not: randomized character substitution and RGB jitter, every frame.

Dissipation: A wave front sweeps top-to-bottom, fading characters through smoke glyphs (. , ` ') to clear, while dimming RGB to black.