Free Image Filters & Effects
Apply filters, adjust brightness, contrast, saturation, and more.
Drag & drop an image here
or click to browse · JPEG, PNG, WebP, GIF, BMP, AVIF & more
What an "image filter" actually does to your pixels
An image filter is a mathematical operation applied to every pixel. Each filter on this tool corresponds to a specific transformation. Brightness 150% multiplies each colour channel by 1.5 (clamped at the maximum), making the whole image lighter. Contrast 150% stretches values around the midpoint, pulling dark pixels darker and light pixels lighter. Saturation shifts colours toward or away from grey while preserving overall lightness. Hue rotate spins every colour around the colour wheel by a chosen angle. Sepia applies a fixed 3x3 matrix that maps RGB to a warm brown-tinted palette (R' = 0.393R + 0.769G + 0.189B, and similar formulas for G' and B'). Grayscale collapses each pixel to its luminance-weighted average using the ITU-R BT.601 coefficients (0.299, 0.587, 0.114), the same weights human vision uses to perceive brightness. Blur is a Gaussian convolution: each output pixel becomes a weighted average of the surrounding pixels. Invert flips every channel: c' = 1 minus c.
Each preset on this tool is a named combination of these operations. "Vivid" stacks elevated contrast and saturation; "B&W" sets grayscale to 100%; "Sepia" sets sepia to 100% and reduces saturation; "Warm" adds a sepia tint and gentle saturation; "Cool" rotates the hue toward blue; "Vintage" reduces contrast and saturation while warming slightly; "Dramatic" pushes contrast and saturation hard; "Fade" softens contrast and brightens slightly. Behind the scenes each preset just writes a different CSS filter string. You can start from any preset and tweak the individual sliders to find the exact look you want.
All filters here apply through the browser's standardised CSS filter functions (W3C Filter Effects Module Level 1), implemented via the GPU on every modern browser since 2016-2019. The preview updates in real time as you move sliders because the operations are computed on the graphics card, not the CPU. The download step bakes the filter result into a fresh PNG, JPEG, or WebP at the original image dimensions, so the exported file already has the look applied; no separate render step is needed.
How this tool works under the hood
The filter engine is the browser's Canvas API combined with the CSS filter functions. When you drop an image, the browser's built-in decoder turns the file (JPEG, PNG, WebP, GIF, BMP, AVIF, or SVG) into raw pixels on an in-memory HTMLImageElement. The pixels are drawn onto a <canvas> element. To apply a filter, the tool sets ctx.filter = "brightness(150%) contrast(110%) saturate(120%) sepia(20%) ..." and re-draws the source image; the browser applies the filter chain on the GPU and the canvas shows the result.
Presets are pre-defined filter strings stored in the script. "B&W" is grayscale(100%) contrast(105%). "Vintage" might be sepia(35%) saturate(75%) contrast(95%) brightness(102%). Selecting a preset writes one of these strings into the canvas filter; the individual sliders are then updated to match, so you can fine-tune from there. "Hold to Compare" temporarily sets ctx.filter = "none" and re-draws the original image, then restores the chosen filter when you release.
The download step re-draws the source image at its original dimensions (not the on-screen preview size) onto a fresh canvas with the current filter applied, then canvas.toBlob() exports the result as a new PNG, JPEG, or WebP. The output has the filter effects baked into the pixel data, so the recipient sees the same look without needing any of the tool's state. Nothing leaves the tab during any of this; no library is loaded for the filtering itself.
A brief history of photo filters
- Darkroom toning, 1860s-1920s. Long before software, photographers applied "filters" with chemistry: sepia toning, gold toning, selenium toning, hand-colouring tinted prints. The Polaroid SX-70 (1976) baked a recognisable colour shift into instant photography. The conceptual ancestor of every modern preset.
- Photoshop 1.0, 1990. Adobe shipped the first version of Photoshop with adjustment dialogs: Brightness/Contrast, Hue/Saturation, Color Balance, Variations. Filters became a software category; photographers could now apply non-physical transformations and undo them.
- Adjustment Layers, 1994. Photoshop 3.0 introduced Adjustment Layers, allowing filters to be stacked non-destructively. The conceptual ancestor of every modern preset stack: each "filter" is now a re-orderable, individually tunable transformation rather than a destructive bake.
- Instagram launches with named presets, October 2010. Instagram launched with 11 (later 17) named presets: Amaro, Rise, Hudson, Valencia, X-Pro II, Sierra, Willow, Lo-Fi, Earlybird, Sutro, Toaster, Brannan, Inkwell, Walden, Hefe, and the obligatory "Normal." Each preset was a specific combination of pixel-math operations conceptually similar to what this tool exposes. The cultural impact was massive: "filter" entered everyday language as a verb, and mobile photo editing became a mass-market category.
- The mobile filter explosion, 2011-2015. VSCO (2011), Snapseed (2011), Afterlight (2012), Lightroom Mobile (2014). Each app added its own preset library, often emulating specific film stocks (Kodak Portra, Fuji Velvia, Kodachrome) or trying to define new visual styles. Photo editing left the desktop.
- CSS filters in browsers, 2016-2026. The W3C Filter Effects Module Level 1 standardised CSS filter functions in 2014, and major browsers shipped support in Chrome 52 (2016), Firefox 49 (2016), Safari 13 (2019). By 2026 every browser has GPU-accelerated CSS filters universally, which is what makes this tool real-time and library-free.
How Image Filters Work
Image filters modify the pixel values of a photograph to change its visual appearance. Brightness adjusts overall lightness, contrast controls the difference between light and dark areas, and saturation determines color intensity. Hue rotation shifts all colors around the color wheel, while sepia and grayscale convert images to classic tonal styles. Blur applies a Gaussian smoothing effect, and invert reverses all colors.
This tool uses your browser's native Canvas CSS filter engine, which is GPU-accelerated for real-time performance. All processing happens locally · your images are never uploaded to any server.
Common Uses
- Enhance photos before sharing on social media
- Convert images to black-and-white or sepia for a classic look
- Adjust brightness and contrast for web-ready product photos
- Apply warm or cool tones to match a brand aesthetic
- Create consistent visual styles across a batch of images
- Quick photo corrections without installing software
Real-world filter workflows
- Polishing snapshots for social media. A phone snapshot direct from the camera looks flat compared to professional posts because the camera optimises for fidelity, not aesthetic punch. A 10-15% boost in contrast and saturation, sometimes a touch of warm tone, transforms an ordinary photo into something feed-ready. Instagram's most-used presets in its first decade were Valencia, Mayfair and Inkwell, all of which combine these operations.
- Brand-consistent visual styles. If your brand publishes with a recognisable look (consistently warm tones for a hospitality brand, cool desaturated tones for a tech publication, high-contrast B&W for a journalism outlet), saving the exact slider values as a personal preset lets you apply that look to every new photo in seconds. Set the sliders once, note the values, and reapply them as your starting template.
- Classic black-and-white conversion. For portraits, journalism, or any subject where colour is a distraction rather than the point, the B&W preset (grayscale 100% plus a small contrast boost) produces the classic monochrome look. Photographers in the darkroom era spent entire careers refining B&W tonality with selective burning and dodging; you can approximate the punch with a quick contrast bump and a small lift in shadows-by way of brightness.
- Web-prep brightness corrections. Phone photos taken indoors or in mixed light often look dim on a calibrated monitor. A small brightness bump (105-115%) and a contrast boost (110-115%) recovers the punch without making the image look unnaturally bright. For low-light photos where the dark areas are crushed, a contrast reduction (90-95%) plus a brightness lift recovers shadow detail.
- Vintage and retro emulation. Film looks of the 1970s-90s share a common DNA: slightly reduced contrast, warmer white balance, gently muted saturation, sometimes a small blur to soften grain. The Vintage and Fade presets exposed here are recipes for these looks. Cross-process effects (X-Pro II in Instagram terms) come from combining hue rotation with high contrast and a specific saturation curve.
- Accessibility and contrast checks. Designers occasionally use these sliders to verify how a layout would appear to users with low vision or colour-blindness simulations. Cranking grayscale to 100% reveals whether a design relies on colour alone to convey information; pushing contrast verifies that thin text remains legible at low-vision viewing conditions. Not a substitute for proper accessibility tools but useful as a quick sanity check.
Common pitfalls and what they mean
- Filters compound, easy to overdo. Pushing brightness, contrast, and saturation each to 150% does not produce three times the effect of one 150% setting; it produces an enormous, gaudy effect, often visibly degrading the image with clipped highlights and crushed shadows. Start with one slider, evaluate, then add a second only if needed. Restraint produces better-looking results than maximalism.
- Most filters commute, but blur does not. Mathematically, brightness then contrast gives the same result as contrast then brightness; the order of most CSS filter functions doesn't change the output. Blur is the exception: blur applied before colour adjustments diffuses the edges of the original image, while blur after colour adjustments diffuses the edges of an already-colour-shifted image, which can produce visibly different results. Set blur last in your mental order, or after the colour adjustments are set.
- JPEG export adds lossy re-encoding. Downloading as JPEG at quality 92 introduces fresh DCT quantisation noise on top of the filter result. For maximum quality export PNG (lossless); for smaller files with imperceptible loss, JPEG 92 is fine. Don't iterate on a downloaded JPEG (re-import, tweak, re-export); each round adds another generation of loss.
- EXIF and ICC metadata are stripped on export. Canvas re-encoding removes EXIF (camera, GPS, capture date), XMP, IPTC, and the embedded ICC colour profile. For social-media sharing this is usually a privacy gain (GPS coordinates and camera serial numbers don't leak). For archival or printing workflows where metadata matters, use a desktop tool that preserves them explicitly.
- Very large images strain mobile GPUs. Real-time GPU filters on a 24 megapixel photo (6000x4000) require ~96 MB of texture memory just for the source image, plus working space for the filter passes. Older mobile devices may stutter, drop frames, or run out of GPU memory. If the preview is sluggish, resize the image first (use the Image Resizer) before filtering.
- Filters are global, not selective. Every filter on this tool applies to the entire image. There is no way to brighten only the foreground or saturate only the sky. For selective edits use a layer-based editor like Photoshop, Affinity Photo, or GIMP with masking. This tool is for whole-image adjustments and presets, not local edits.
Privacy: images never leave your device
Every cloud-based photo filter service (Pixlr, Fotor, BeFunky, online "Instagram-filter" sites) uploads your photo to the operator's server, applies the filter on their hardware, and returns the filtered image as a download. Photos routinely embed sensitive metadata even after filtering: GPS coordinates of where the photo was taken, camera and device information, capture date and time, and the photo content itself, which often includes faces, locations, screenshots of internal interfaces, or other identifiable material. Most operators publish privacy policies committing to delete uploads within an hour or two and to encrypt in transit, and the larger ones hold ISO/IEC 27001 certification. They have strong commercial reasons to honour those policies. But "deleted within an hour" is not "never seen." During that hour the image content sits in operator infrastructure, accessible to any process or person with the right permissions, and visible in logs and backups according to the operator's retention policy.
This filter tool never uploads anything. The entire pipeline (file pick, decode via the browser's built-in decoders, Canvas filter via the GPU, optional download via the browser's encoders) runs inside your browser tab using JavaScript and the standardised CSS Filter Effects API. No upload, no network request carrying image data, no log entry. You can verify by opening the browser developer tools to the Network tab before filtering: no request fires with image content. The only network traffic is the initial page load itself; no library is downloaded for the filtering operation. Switch the browser to airplane mode after the page loads and the filter tool keeps working on local images.
When another tool is the right choice
- RAW workflows with proper colour science. If you're working with .CR2, .NEF, .ARW, .DNG or other RAW files from a real camera, use Adobe Lightroom, Capture One, RawTherapee, or darktable. RAW conversion needs camera-specific colour profiles, white-balance handling, and dynamic-range mapping that browser-side CSS filters can't do. This tool operates on already-decoded RGB pixels.
- Selective edits with masking. If you need to brighten only the subject, change the colour of one object, or apply different filters to different parts of the image, use Photoshop, Affinity Photo, or GIMP with layer masks. CSS filters are global and cannot do local edits without rendering and re-importing.
- Professional colour grading. For commercial photography, brand campaign work, or film/video grading, use DaVinci Resolve (free for stills and video), Lightroom with custom presets, or Capture One with style packs. These provide LUT support, soft proofing, calibrated displays, and the toolset professional colourists expect.
- Batch automation across hundreds or thousands of files. Use ImageMagick with the
-modulateand related operators, or Sharp/libvips in Node.js, or Pillow with its ImageEnhance module. CLI tools apply identical adjustments to thousands of files without browser memory limits and run from CI, deploy hooks, or cron tasks.
Frequently Asked Questions
Do filters reduce image quality?
The filters are applied at your image's full resolution, so there is no quality loss. When you download, the image is exported at the original dimensions with the filters baked in. JPEG exports use 92% quality to maintain excellent fidelity.
Can I combine multiple filters?
Yes. All eight adjustment sliders work together simultaneously. You can also start from a preset and then fine-tune individual sliders to achieve the exact look you want.
What does "Hold to Compare" do?
While you press and hold the "Hold to Compare" button, the preview temporarily shows your original unfiltered image. Release the button to see the filtered version again. This lets you quickly compare before and after.
Are my images uploaded anywhere?
No. All filter processing uses your browser's built-in Canvas API. Your images stay entirely on your device and are never sent to a server.
More frequently asked questions
Why does my image look posterised at extreme settings?
Because the math runs out of headroom. Each colour channel only has 256 possible values (0 to 255 in 8-bit RGB). Pushing brightness or contrast far above the original range clips at 0 or 255 instead of preserving graceful gradients. The result is banding (visible steps in what should be smooth transitions) and posterisation (areas collapsing to a single colour). Solution: pull back the most extreme slider, or start from a higher-bit-depth source if you have one (raw or 16-bit TIFF, edited in a desktop tool that preserves the bit depth).
Can I save a custom preset?
Not in this tool's UI directly. But the slider values themselves are your "preset": note the eight numbers (brightness, contrast, saturation, sepia, grayscale, hue rotate, blur, invert) and you can recreate the look in seconds on any future photo. For multi-photo workflows where you want the same look across a batch, this manual approach scales until about 5-10 photos; beyond that, Photoshop, Lightroom, Capture One, or VSCO with saved preset packs are the right tool.
Does the order of filters matter?
For most filters, no: brightness then contrast produces the same output as contrast then brightness. The CSS filter functions for brightness, contrast, saturate, sepia, grayscale, hue-rotate, and invert all commute with each other. Blur is the exception: blur applied before colour changes affects the original edges; blur applied after affects the colour-shifted edges, and the two outputs differ visibly. In practice this tool applies all filters in a fixed order, so the question only matters if you're trying to replicate the exact effect of a different tool that uses a different order.
Does this tool work offline?
Yes. The CSS filter engine, the Canvas API, and the decoders/encoders for JPEG, PNG, WebP, GIF, BMP, and AVIF are all built into every modern browser. No external library is downloaded for the filtering. After the page itself has loaded once, subsequent visits work entirely offline as long as the page remains in the browser cache. Verify by enabling airplane mode after the first visit and applying filters to a local image.
Will EXIF metadata be preserved in the downloaded image?
No. Canvas-based re-encoding discards EXIF (camera, lens, exposure, GPS, capture date), XMP, IPTC metadata blocks, and the embedded ICC colour profile. The downloaded image carries only pixel data. For social-media sharing this is usually desirable (GPS coordinates and device serial numbers don't leak). For archival or photographic workflows where metadata matters, use a desktop editor like Photoshop or Lightroom that preserves metadata across the export.
Is there a desktop or command-line equivalent?
Several. For batch automation, ImageMagick's -brightness-contrast, -modulate and related operators apply the same transformations from any shell. Sharp in Node.js has a complete adjustment API. Pillow in Python provides ImageEnhance.Brightness, ImageEnhance.Contrast, ImageEnhance.Color and similar classes. For interactive desktop work, Photoshop, Lightroom (the professional standard), Affinity Photo, GIMP, and Pixelmator Pro all offer the same operations plus layer masking for selective edits.