CRT ASCII Terminal — our demo

One example among many. Don't reuse its story, arc, shots, props or timings.

Demo: TRANQUILITY.LOG (59.8 s) · ascii-crt.mp4 · source in demo/

Brief the demo was made to: a 30–60 second film in the CRT ASCII Terminal style.

Story & structure

A machine left on the Moon has logged NO SIGNAL for 40 years. A message arrives; it replies I AM STILL HERE., and the letters of that reply become an earthrise. The story is one where text is the only way the character can act: a machine, a remote operator, a message across distance or time. How the native powers were used:

Native power Story use
The picture is made of words The climax is a sentence turning into an image. The reply I AM STILL HERE. breaks apart and its letters, sorted by ink density, become an earthrise. The image contains only the letters of that sentence.
Font size = camera Push in until one character fills the screen. That character is itself made of smaller text, which reveals scale and meaning. One M is made of 40 years of NO SIGNAL logs.
Typing rhythm = editing rhythm Machine typing is even and fast. Human typing is uneven, with pauses and bursts. A cursor blinking three times is the most important performance in the film.
CRT physics The screen powers on as a dot, then a line, then the full frame, and powers off by collapsing to a dot. Used for the opening and the ending.
A single color change Blue-white #BFE4FF for Earth, the only non-amber thing, is the emotional peak. Switched on a musical downbeat.

Other adaptations (examples, not rules): a product launch becomes a spec sheet that assembles into the product's silhouette; a love letter becomes its own words raining into a face; a history lesson becomes a log file whose dates zoom out into a map.

Emotional arc (59.8 s): dark and a cursor, then waking (boot log, a date jumping), then disturbance (handshake noise, a line of text), then holding breath (cursor blinks), then setback (NOT FOUND ×3 on three beats), then decision (typing the reply), then near-silence for 1–1.5 s, then the climax (letters become the image, the one color appears), then the scale reveal, then waiting, then a tiny reply, then an echo (pull out of the screen, power off to a dot).

Shots

Beat Camera
Opening CRT off, then a dot, a line and the full frame. A giant cursor blinks 3× in empty space.
Title The title is the file the machine opens, typed at 20 columns. It then pulls out to 80 columns as it becomes line 1 of the boot log.
Suspense Static 80-column terminal. The only motion is text and the cursor. Hold on blinks.
Decision Push in from 21 px to 80 px cells around the prompt. The reply is typed huge and centered.
Climax The grid shrinks while falling (80 px letters become 8 px cells). Hold on the finished picture, and switch color on the downbeat.
Scale reveal Push into one glyph until it becomes its own sub-grid of text, then snap back.
Ending The only shot outside the screen: pull back until the screen image sits inside a character-drawn terminal in a dark room. Next to it is a large porthole showing the real Earth (18–20 rows tall). Only two things glow: the tiny reply and the planet. Then power off to a dot.

Why this route, for this story: the title typed as a file the machine opens made the machine the narrator; the push-in on the reply made the decision intimate; the only shot outside the screen came last, so the room and the real Earth were a reveal. Each of these is one choice from STYLE.md §6, not the style's default opening or ending.

The letter fall (the demo's climax, step by step)

  1. Hold the sentence for 1.5 s with the cursor blinking.
  2. At the split, letters jitter and throw a ghost copy.
  3. Each target cell spawns a particle from a random point inside a matching source letter (only letters of the sentence exist in the ramp). The particle starts at 18 px, shrinks to the grid size and fades in over 0.2 s so particles never stack into a bright bar. Its path eases smoothly in x, with y = u·(0.6 + 0.4u).
  4. Ground lands bottom to top.
  5. Earth letters first all fall behind the horizon, then rise into place from bottom to top, so the planet literally rises.
  6. Source letters dim as they are used up.
  7. The landing flash is 1.9× brightness decaying over 0.12 s.

Fractal push-in: push to a framing where the whole M is clear and hold 1 s, then push further until the log text is readable (cell 450 px, sub-text about 28 px). Text inside the glyph is at full brightness, text outside is at 3–6%, and neighbor glyphs are at 20%.

Typing speeds used: boot lines 12 ms/char, commands 38 ms, title and reply 120–150 ms (sixteenth notes at 100 BPM). Human typing uses hand-timed offsets with pauses.

Score structure

Palette & props

End card

Typed over the final room shot (ASCII / CRT TERMINAL, LemoLab × Claude Opus 5.5), followed by the CRT power-off. The "LemoLab × Claude Opus 5.5" sign-off belongs to this library's demo only; a user's film carries no LemoLab credit and no copy of this card.

Build notes

styles/ascii-crt/demo/
  term.js    glyph atlas, grid drawing, density ramps, image → cells
  art.js     continent texture, earth shading, lunar ground, craters
  crt.js     monochrome phosphor CRT post (WebGL2)
  main.js    the whole timeline: boot, handshake, message, reply, letter fall, fractal, room, end card, EV, SUBS
  voice_fx.py  AI voice processing      mix.py  synthesized foley + ducking + score
  music/score.py  original analog-synth score      tools/subs.mjs  export window.SUBS
  1. node core/render/still.mjs styles/ascii-crt/demo --range 33.4:37.4:0.2 renders frames of any section; ?frame=earth|fractal|base|poster renders single tests; ?nosub=1 renders without the LOG strip.
  2. sh styles/ascii-crt/demo/build.sh goes from zero to the finished film: TTS, voice FX, whisper, score, events, mix, SRT, render (1435 frames in about 50 s with 3 workers), mux, styleframe, poster.

Pitfalls tied to this demo's props: