How to add a VHS effect to a photo
- Drop a photo onto the canvas, paste it, or click to choose one. It never leaves your browser.
- Keep VHS Tape selected and move Detail to set the tape condition: high is a fresh tape, low is a worn rental.
- Export the PNG. No account, no watermark.
How the VHS effect works
A VHS frame does not look old because of a texture laid on top. It looks old because of the path the signal took through the tape, so the filter rebuilds that path in one pass over the pixels:
- Luma and chroma are split. Each pixel is converted to YIQ, the brightness-plus-colour encoding analogue video used. Brightness and colour then get different treatment, which is the core of the look.
- Soft brightness with a halo. Brightness is blurred along each row only, by 1–3px on a 1400px image, because tape loses horizontal resolution, not vertical. A VCR's edge enhancement is added back on top, so hard edges get the light and dark halo you see on rented tapes.
- Colour bleed. Colour is smeared horizontally by 7–14px and lands about 3–4px to the right of the shape it belongs to. Saturation drops to 70% with a slight warm-magenta cast, and blacks are lifted, so nothing is fully black.
- Transport faults. Every row is nudged sideways by a small, smooth wobble. The bottom 6% of the frame tears to the right like the head-switching band on a paused tape. One tracking band sits about two-thirds of the way down, with displaced rows and streaks of snow, and a few rows get a bright dropout streak.
- Grain and fields. Fine grain is added to brightness, and every other row is about 7% darker, like the two interlaced fields of a TV picture.
- On-screen display. A camcorder date and time sit in the bottom corner, with either a playback screen (PLAY ▶ and SP) or a recording screen (a red ● REC and a battery meter) on top. You can switch the style, hide the text or set any date and time; with your own photo the date starts at the file's time.
| Slider | What it controls | Practical range |
|---|---|---|
| Detail | Tape condition: blur, colour smear, wobble, tear, tracking band and dropouts | 70–100 for a clean recording, 20–50 for a worn tape |
| Intensity | Blend against the original, including the on-screen text | 90–100 for a full tape frame, 50–70 for a subtle wash |
| Contrast | Tone curve applied before the signal is encoded | Raise it for punchier night shots |
Everything runs in a Canvas 2D buffer inside your browser. The image is never uploaded, and the PNG export keeps your image size up to a 1400px long edge. The result is a still image: the noise does not move. CRT Scanlines on the same page adds the TV the tape was played on, and Pixel Sort smears rows further, like tracking that has fully slipped. Filters do not stack in one pass, so export, drop the PNG back in and apply the second filter.
Best for
- Nostalgic family-video and 90s home-movie posts
- Album covers, mixtape art and music-video stills
- Found-footage and analogue-horror visuals
- Thumbnails and posters with a 90s camcorder look








