🖼️ Edited entirely in your browser

Simple Photo Editor

Crop, rotate, adjust, and add text — the 90% of edits most people actually need, without learning Photoshop. Not trying to replace a full editor; just the quick stuff, done well and privately.

Drop a photo here, or click to choose one

How it works

Brightness, contrast, saturation, and the preset filters are all combined into one CSS `filter` string and applied to the canvas on every redraw, so adjusting a slider or picking Sepia never destroys your original image data. Rotate and flip work the same way, redrawing from the original source with a canvas transform. Crop and the text tool are different: cropping reads the visible pixels with getImageData and writes them into a smaller canvas, and adding text bakes it directly onto the canvas with fillText/strokeText — both then re-encode the result as a new source image via toDataURL, so later edits build on that flattened version rather than the untouched original. Export to PNG or JPG goes through canvas.toBlob, with the JPG quality slider passed straight through as the compression level.

FAQ

Why can't I undo a crop or added text after applying it?
Both the crop and text tools bake their result into a brand-new source image using canvas.toDataURL(), so later edits (rotate, filters, another crop) build on top of that flattened image rather than the original — there's no separate undo history layer underneath it.
Does increasing the JPG export quality slider always make a bigger file?
Generally yes — the quality value is passed straight to the browser's JPEG encoder (canvas.toBlob with a quality argument from 0.1 to 1.0), which trades file size for compression artifacts, so higher settings produce a larger but cleaner file.

Free, unlimited, no account. If this saved you a paid tool, a small thanks is appreciated.

Say thanks — $3