# CRT & VHS Effect Generator > Give an image CRT scanlines and phosphor masks or VHS tape artefacts. 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. Part of usefulweb.app (https://usefulweb.app/). Part of [Flipline](https://flipline.usefulweb.app/) (ownerApp: flipline). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://fliplinecrtvhsfilter.usefulweb.app/ (interactive tool at https://fliplinecrtvhsfilter.usefulweb.app/tool) - JSON API: POST https://fliplinecrtvhsfilter.usefulweb.app/api/v1/calculate with a JSON object of inputs (schema: https://fliplinecrtvhsfilter.usefulweb.app/api/v1/tool) - OpenAPI: https://fliplinecrtvhsfilter.usefulweb.app/openapi.json - MCP (Streamable HTTP): https://fliplinecrtvhsfilter.usefulweb.app/mcp - tool `flipline_crt_vhs_filter` ## Inputs - image (file, required): Image (PNG, JPEG or WebP) - effect (select): Display effect - resolution (select): Machine resolution - width (integer): Working width (px) - fit (select): Image fit for machine resolutions - scale (integer): Output scale (whole pixels) - scanlines (integer): Scanline strength (%) - mask (select): Phosphor mask - maskStrength (integer): Mask strength (%) - curvature (integer): Screen curvature (%) - bloom (integer): Bloom (%) - bloomRadius (integer): Bloom radius (source pixels) - vignette (integer): Vignette (%) - crtNoise (integer): CRT grain (%) - flicker (integer): Frame flicker (%) - lumaBlur (integer): Luma softness (%) - sharpen (integer): Edge ringing (%) - chromaBleed (integer): Chroma bleed (%) - chromaShift (number): Chroma delay (px at 640 px width) - tapeSaturation (integer): Tape colour saturation (%) - tracking (integer): Tracking error (%) - trackingPosition (integer): Tracking band position (% of height) - roll (number): Tracking roll per frame (% of height) - headSwitch (integer): Head-switching noise (%) - jitter (integer): Line jitter (%) - tapeNoise (integer): Tape noise (%) - seed (integer): Noise seed - frames (integer): Animation frames - fps (integer): Animation frame rate (FPS) - palette (select): Retro palette - customPalette (textarea): Custom palette (HEX list, GPL or JASC-PAL) - dither (select): Dithering method - strength (number): Dither strength (%) - serpentine (boolean): Serpentine scanning for error diffusion - match (select): Colour matching - cells (select): Attribute cells - brightness (number): Brightness - contrast (number): Contrast - gamma (number): Gamma - saturation (number): Saturation (%) ## Method - 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. ## Limits - Stylised effects, not a calibrated simulation of a particular monitor, tape or recorder.