
CCTV Night Cam (Security Camera Footage)
Effect3D10 seconds
A sculpted head made of thousands of glowing text characters decodes out of scrambled symbols, slowly turns, and types a caption underneath.
Your current settings go with it. Combine several clips and hand them over together from your sequence.
Presets
Typed out under the portrait. Leave empty for no caption.
Height of one character in pixels. Smaller shows more detail, larger reads more as text.
If it is lighter than the characters, the picture flips to ink on paper.
Soft bloom around bright characters. 0 for a clean print look.
The portrait starts as random characters that settle into the image.
How far the head turns over the clip, in degrees.
The preview runs the same code your AI receives. These settings travel with the hand-off.
The ASCII portrait look from this week's feeds: a picture redrawn with monospace characters, faint dots in the shadows and dense symbols in the light, like a terminal screen or a typewriter print. The demo is a classical marble bust that unscrambles out of random symbols, turns slowly under a moving light and then types a line of text with a blinking cursor. Change the characters (classic, code, binary or blocks), their size, the colours (green screen, amber, ink on paper), the glow and the caption. The renderer also works on anything already drawn on a canvas, so you can turn your own footage or 3D scene into text.
src/ascii-portrait.js, src/sculpted-head.js is the ingredient your AI reuses. demo.js is only the example scene around it, and uses the demo harness only for the demo.
src/ascii-portrait.jscreateAscii({ cellSize?, charset?, background?, ink?, dim?, contrast?, gamma?, glow?, fontFamily?, weight? }) => { grid(w, h), drawBuffer(ctx, w, h, buffer, opts?), drawField(ctx, w, h, field, opts?), applyToCanvas(ctx, w, h, opts?), caption(ctx, w, h, text, opts?), ramp, cellW, cellH }{ classic, code, binary, blocks }createSculptedHead({ hair?, zoom?, offsetY? }) => { render(cols, rows, { yaw?, pitch?, aspect?, light?, background? }) => Float32Array }apw-runtime@1.0.0 (demo) — Demo harness and easing. src/ascii-portrait.js and src/sculpted-head.js have no dependencies.Coordinates: A grid of characters centred in the frame; grid(width, height) gives cols, rows and cell size. Buffers are row-major, top row first.
Lighting: The bust has a key light from the upper left that swings with the turn, a rim light from behind and contact occlusion; brightness is mapped to character density.
Timing: Pure function of time and parameters. Decode is already under way on the first frame and settles by about 2 s; the caption starts typing at 1.5 s at 18 characters a second.
npm install
npm run render -- ascii-portrait/1.0.0 --out my-video.mp4Needs Node 18+, ffmpeg and Chrome/Chromium. Add --params my-settings.json (from Copy settings) for your own settings.sha256:b3488dcd88c7cc37…
Effect3D10 seconds

Effect2D8 seconds

Text layer2DSeamless loop6 seconds

Text layer3D9 seconds

Text layer3D6 seconds

Full example2D5 seconds

Text layer2D4 seconds

Text layer2D5 seconds