Zero uploads · 100% in-browser No tracking · No watermarks · Free forever. Built for people who care about privacy.

Drop an image to start filtering

JPG, PNG, WEBP — see all 12 filters as thumbnails

What each filter does

  • Black & White — luminance-weighted desaturation. Better than CSS grayscale() because it weights green and red correctly.
  • Sepia — classic warm brown tint. Great for old-photograph aesthetics.
  • Vintage — sepia + reduced contrast + slight green shadows. The Lomography look.
  • Vivid — boosts saturation and contrast. Used for product shots that need to pop in social feeds.
  • Fade — washed-out highlights, faded blacks. The Instagram early-2010s aesthetic.
  • Dramatic — boosted contrast with crushed shadows and slightly desaturated highlights.
  • Cool — shifts whites toward blue. Good for technology, water, snow scenes.
  • Warm — shifts whites toward orange. Good for food, sunsets, indoor portraits.
  • High Contrast — pure tonal compression. Skips color shifts.
  • Matte — lifted shadows, lowered highlights. The "filmic" look.
  • Noir — high-contrast B&W with crushed blacks. Cinematic.

How filters work technically

Each filter is a per-pixel function: (r, g, b) → (r', g', b'). The tool reads pixel data via getImageData(), applies the function in JavaScript, and writes the result back via putImageData(). The intensity slider is implemented as a linear interpolation between the original and filtered pixel values: output = original × (1 - t) + filtered × t.

Tips for great results

  • Don't max out intensity — most filters look more natural at 70–85% than at 100%.
  • Match the filter to the subject — Warm + portraits, Cool + landscapes, Vintage + indoor scenes.
  • Strong contrast images filter best — washed-out source images stay washed out.
  • Reduce file size after — run the output through the Image Compressor before posting online.