Image Editor

Adjust colors, apply filters, and enhance your images

Drop images here or click to upload

Adjust filters across one image or many; redact regions for single image

Blur / Mosaic regions

Available for a single image at a time. Remove all but one to use.

Presets

Adjustments

100%
100%
100%
0°
0px
0%
0%
0%

Output Settings

100% Private: Your images are processed entirely in your browser. No data is ever uploaded to any server. Your files stay on your device.

What the brightness, contrast, and saturation sliders actually do

This editor uses CSS filter functions (brightness(), contrast(), saturate(), hue-rotate(), blur()) applied to a Canvas, which maps to well-defined math in the W3C Filter Effects spec. Knowing the math matters because it explains why two sliders that "look similar" behave completely differently.

Brightness is a pure multiply in linear-ish sRGB: out = in × amount. So brightness=1.2 multiplies every channel by 1.2 and clips at 255 — highlights blow out before shadows meaningfully lift. That's why it's a bad tool for "make this dark photo usable"; a tone-curve or log exposure adjustment in a real editor handles that much better. Contrast is an affine map pivoting on middle gray: out = (in − 0.5) × amount + 0.5. Values above 1 push bright brighter and dark darker; clipping happens at both ends, so contrast=1.5 on an already-punchy image will crush shadow detail.

Saturation is the interesting one. The spec defines it via the luminance-preserving matrix from SMPTE C primaries (roughly Y = 0.213R + 0.715G + 0.072B), interpolating between the gray axis and the original color. That means increasing saturation past ~1.4 shifts blues toward cyan and reds toward orange in subtle ways — pure hue rotation requires hue-rotate, which does the full HSL roundtrip (RGB → HSL, add degrees to H, back to RGB). The common mistake: cranking saturation to "pop" a sunset, then the sky drifts slightly teal because you crossed the blue-to-cyan boundary.

Two limits of this tool worth knowing: CSS filters operate in sRGB, not linear light, so blends and blurs will look slightly different from a color-managed editor like Lightroom or Affinity Photo. And canvas.toBlob() bakes the filters in — there's no edit history, no undo-beyond-reset, and you can't revisit your adjustments. Keep the original.

Related Articles