Premium apps Part of Flipline

CRT & VHS Effect Generator

Give an image CRT scanlines and phosphor masks or VHS tape artefacts.

More options

Try an example: A living-room CRT at three times scale · A six-frame VHS loop with a rolling tracking band · C64 colours on a curved shadow-mask screen

More about this tool

How it works

Render a still or a short seeded loop with CRT scanlines, aperture-grille, shadow or slot masks, curvature and bloom, or VHS chroma bleed, tracking noise, head switching and line jitter. Optionally quantise to a retro palette first. Download PNG, animated GIF and APNG.

  • The source is area-resampled to the working grid in linear light, developed, and optionally quantised exactly as in the dither tool. Frame n uses seed + n, so the same inputs always give the same frames.
  • CRT: each output pixel maps through a barrel curvature, interpolates the two nearest source lines horizontally and weights them with Gaussian beams whose width grows with channel brightness, normalised so flat areas keep their level. A phosphor mask dims the other channels per subpixel column, with mean-brightness compensation; bloom screen-blends a blurred, squared copy; vignette, grain and flicker follow. Light is mixed in linear light.
  • VHS: each line is shifted by seeded jitter, a rolling tracking band and bottom head-switching skew, then converted to YIQ (FCC matrix). Luma is low-passed with an edge-ringing term; chroma is blurred more widely, delayed to the right and averaged with the previous line. Tape noise, dropout streaks and band snow use hashed noise.
  • Exports: PNG of frame 1, and for animations an animated GIF (adaptive 256-colour palette, 10 ms timing, at most 1600 px per side) and a lossless APNG. Requests are limited to 4 MP per frame and 12 MP in total.

Stylised effects, not a calibrated simulation of a particular monitor, tape or recorder.

Sources

Part of Flipline

  • Flipline Drawing, storyboards & animation

    A few drawings. A little life. Make a flipbook in your browser.

    Open Flipline

How to use the CRT & VHS Effect Generator

Add CRT scanlines, phosphor masks, curvature and bloom, or VHS chroma bleed and tracking noise, and export a still or a seeded GIF/APNG loop.

What it is for

The CRT & VHS Effect Generator gives a picture the look of an old television or a worn video tape. In CRT mode it draws each image line as a glowing beam, adds the coloured stripes or dots of a phosphor mask, bends the picture like a curved tube and lets bright areas bloom. In VHS mode it smears the colour sideways, shifts lines, rolls a tracking band through the frame and skews the last lines like a recorder's head switch.

Use it for thumbnails, retro game trailers, music visuals or to show how an image would have looked on a living-room set. It is a stylised effect, not a measured model of a particular monitor or tape deck. You can also put a retro palette in front of the effect, for example C64-style colours on a curved screen.

Worked example

I uploaded a 1600 × 1068 px alpine photo and kept Display effect "CRT monitor", Working width 320 px and Output scale 3. The result was "A 960 × 642 px CRT still." The tool first shrank the photo to 320 × 214 px, then drew three output rows per image line, so the scanline gaps are clearly visible. With the defaults (scanlines 70 %, aperture grille at 35 %, curvature 30 %, bloom 35 %), the corners turn black where the curved picture no longer covers the frame.

Then I chose "VHS tape", a 480 px working width, scale 1, Animation frames 8, 12 FPS and a tracking roll of 6 % per frame. The answer: "An 8-frame VHS loop at 480 × 320 px and 12 FPS." It came with a first-frame PNG, an animated GIF (487,572 bytes) and a lossless APNG (2,205,300 bytes). Each frame lasts 83 ms, and the tracking band moves 6 % of the picture height per frame.

Finally I tried a CRT with a 480 px width, scale 4 and two frames. The output was 1920 × 1280 px, so the tool skipped the GIF with a warning (GIFs are limited to 1600 px per side) and returned the APNG only.

How to read the result

  • Download first frame PNG is frame 1 at full size. With one frame, it is the whole result.
  • Download animated GIF appears for loops of up to 1600 px per side. GIF has one adaptive 256-colour palette and 10 ms timing steps.
  • Download animated PNG (APNG) keeps every colour of every frame; it is larger but exact.
  • Frames and Frame duration confirm the timing. 12 FPS means 83 ms per frame.
  • The recipe and the Open this look in Retro Lab link carry all settings, including the seed, so the app renders the same frames.

Tips and common mistakes

  • Scanlines need room: use Output scale 3 or more. At scale 1 there is only one output row per line and the effect mostly darkens the image.
  • A strong phosphor mask dims the picture. The tool compensates the average brightness, so raise Bloom rather than brightness if the image looks flat.
  • For VHS, a working width between 320 and 640 px looks most convincing. The softness, bleed and jitter settings scale with width, so they look similar at any size.
  • Keep Noise seed fixed while you adjust other settings. Change it only when you want a different pattern of noise.
  • A short loop with a gentle Tracking roll per frame (3–8 %) looks natural; large values make the band jump.

FAQ

Why are the corners black?

Screen curvature maps each output pixel inward like a curved tube. Parts that fall outside the picture are drawn black. Set Screen curvature to 0 for a flat screen.

Will the same settings give the same video again?

Yes. Noise, jitter and the tracking band come from the seed and the frame number, so the same input and settings give identical frames on the website, the API and in Flipline.

Can I get a video file?

The tool returns GIF and APNG. Flipline's Era effects can also record the loop as a WebM video in the browser.

Does the effect add sound or interlacing?

No. There is no audio, interlacing or field timing; the effect works on still frames.

Guide last updated:

For scripts and AI agents

  • JSON API: POST https://fliplinecrtvhsfilter.usefulweb.app/api/v1/calculate (same calculation as this page)
  • Interface description: OpenAPI 3.1 · AI guide: llms.txt
  • MCP server (Streamable HTTP): https://fliplinecrtvhsfilter.usefulweb.app/mcp · tool name flipline_crt_vhs_filter
Example request
curl -s -X POST https://fliplinecrtvhsfilter.usefulweb.app/api/v1/calculate \
  -H 'content-type: application/json' \
  -d '{…see OpenAPI examples…}'
Feedback · ideas & bug reports welcome