Skip to content

VHS Camcorder Look (1987 Home Video)

Makes any animation look like a 1980s camcorder tape: soft picture, bleeding colour, tracking noise, a shaky hand and the red-orange date stamp in the corner.

Effect, V1 Effects2D387 lines of codev1.0.0

In Craft & heritage, Spooky & Halloween

Next: ASCII PortraitSurprise me

VHS Camcorder Look (1987 Home Video) preview
Starting live preview…
00:00:00:00 / 00:00:00:01

Live, running the real source.

Open in the title maker

Your current settings go with it. Combine several clips and hand them over together from your sequence.

Effect controls

Presets

What the demo films. Your own project can put anything through the tape.

Shown bottom right in the camcorder font. Letters, numbers, spaces and : . - / ' ! work.

Shown above the date. Leave empty to hide it.

0.35

Wobble, rolling tracking noise and white dropouts. 0 is a fresh tape.

0.8

How far colour smears to the right of bright things.

0.8

How much fine detail the tape loses.

0.4

The noisy strip where the video heads switch.

1
0.08

How far the camera slowly zooms in over the clip.

The picture blurs and snaps back sharp once near the start.

3

Changes the shake, the noise and the details of the demo picture.

The preview runs the same code your AI receives. These settings travel with the hand-off.

Info

What it is

The home-video look behind this autumn's 80s AI trend. Everything you draw is put through a simulated VHS tape: detail goes soft, colour smears to the right of bright things, highlights trail, lines wobble, a band of tracking noise rolls up the frame, white dropouts flick past and the bottom edge tears where the video heads switch. On top comes the camcorder's own display, burned into the picture: a blocky dot-matrix date and time, a blinking REC dot or PLAY and a tape counter. A helper adds the camcorder operator too: handheld drift, a slow zoom creep and the autofocus hunting once. Type your own date, pick the colour cast (warm tungsten, natural or faded old tape) and how worn the tape is. The demo films a spring-break sunset on the beach or a birthday cake with its candles lit; the same code degrades your own canvas, 3D scene or video frame.

Reuse it in your own idea

  • Make the 80s AI photo trend move: draw your restyled 1985 portrait (or each frame of the AI clip) on a canvas, let camcorderMove drift and zoom it, add drawCamcorderOSD with your own date, then apply().
  • Put Kinetic Title Reveal through the tape for a retro title card or end slate, with mode 'play' and the counter running.
  • Combine with Stop-Motion Feel for a home-made claymation clip that looks like it was found on an old cassette.

Which part is reusable

src/vhs-camcorder.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.

Good to know

  • It degrades what it is given: it cannot add 80s hair, clothes or rooms to footage. Pair it with an AI restyle for that.
  • The display font covers capital letters, digits and a few symbols only; there are no accented letters.
  • Square and widescreen frames are fine, but it does not crop to the 4:3 shape of real tape.

Technical details

Technical details
Implementation
Canvas 2D — plain browser JavaScript, no libraries · ES module src/vhs-camcorder.js
Exports
  • createVHS({ softness?, bleed?, sharpen?, smear?, noise?, wear?, headSwitch?, scanlines?, look?, seed? }) => { apply(ctx, width, height, info) }
  • drawCamcorderOSD(ctx, width, height, info, { date?, clock?, mode?, blinkDate?, color?, scale?, counterStart? })
  • camcorderMove(info, { shake?, zoomCreep?, focusHunt?, focusAt?, size?, seed? }) => { x, y, angle, zoom, focusBlur }
  • drawDotText(ctx, text, x, y, { dot?, color?, shadow?, tracking? }) => width
Dependencies (exact)
  • apw-runtime@1.0.0 (demo) — Demo harness and seeded random numbers. src/vhs-camcorder.js has no dependencies.
How it fits a scene

Coordinates: Pixels. Effect sizes are tuned at 1080 wide and scale with the canvas. The display sits 7.5% in from the edges.

Lighting: None of its own. The colour cast (warm, natural, faded) is applied after decoding the tape.

Timing: Pure function of info.frame and info.time: noise changes every frame, the tracking band drifts up, REC blinks once a second.

Output
1080×1080, 30 fps, 8 s · procedural (computed from the frame number) · not a loop — A continuous handheld take with a zoom creep; it does not loop.
Tested
Rendered 240 frames on 2026-10-04 in Chrome 154.0.8037.97 headless on Linux 7.0.0-38-generic (x64), Node 22.14.0 (Canvas 2D). Same frame twice from fresh pages: identical.
Performance
One pass over every pixel with a few running-sum blurs per line, plus the demo's own drawing: about 0.3–0.5 s a frame at 1080×1080 in headless Chrome on a CPU-only render machine. Fine for offline renders; live previews play at a few frames a second. Cost grows with pixel count. For live use, render at 540 or 720 and scale up (VHS was never sharp anyway); at 4K expect several seconds a frame.
Export a video yourself
Download the source, then in the folder: npm install npm run render -- vhs-camcorder/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.
Version
1.0.0 · sha256:b7f58d49eb84005a…
Files
License
MIT. Copyright (c) 2026 AI Pixel Wizard. Released under the MIT License. See LICENSE in this folder. License details
Provenance
Original code written for AI Pixel Wizard on 2026-10-04 by an automated agent (the daily trend routine), inspired by the 80s AI photo trend and its 'A Day in 1987' VHS home-video versions (see content/trends/2026-10-04-vhs-camcorder.md). The list of tells to reproduce (blinking red-orange date stamp lower right, chroma bleed, tracking noise along the bottom, handheld shake, zoom creep, autofocus hunting) follows https://www.getstarrd.app/blog/how-to-make-80s-ai-video. Separating brightness and colour (YIQ) and blurring colour more than brightness is the standard description of how VHS records video; the code, the dot-matrix font and the demo pictures were all written for this package. No code, images, fonts or shaders were copied.
BinMore like this