Crop it, compress it, annotate it, gallop. Free in your browser. No account.

The Image Horse editor open on a photo of a red Viper parked by the ocean, split down the middle between Original and Edited, with the Presets panel on the left previewing Enhance and History, Layers and a histogram on the right — eight cars in the gallery strip below, the Viper tagged −92%.

Aug 2025Sep 2026

17 Sep 20269 of 9

Today: presets you preview on the photo before you keep them, an Original / Edited split to see what changed, and a Viper shrunk 92% without leaving the tab.v8.79


Nothing leaves your tab by accident.

Image Horse is a Rust engine compiled to WebAssembly. Editing happens on your own CPU, in the page, on every tier — including the free demo. Some things do reach a server. This table is where we say exactly which, so the choice is yours to make rather than ours to bury.

Every operation, and the machine it runs on.
OperationRuns onDetail
Crop, filters, transformsYour machineRust → WASM, SIMD128 kernels
Layers, annotations, Bézier penYour machineReal layer stacks, per-layer opacity
Encode PNG · JPEG · WebP · AVIFYour machineResize and re-compress in one round-trip
Originals and edit historyYour machineIndexedDB, undo to 1000 steps
Camera metadataYour machineKeep it, strip it, or drop GPS only
Background removal, object removal, OCRServer, signed inrembg · LaMa · Convex → Replicate
Cloud sync and share linksServer, signed inOptional — the demo never uploads

The engine is roughly 310 KB gzipped. That is the whole download, and after it lands the tab does the work.

In the editor

Brightness · Contrast · Blur · Crop · Align · Magic-wand select · Live histogram · Stroke stabilizer · Rectangles · Ellipses · Arrows · Bézier pen with fill · Callout pins · Text with drop shadows · Emoji · Blur, pixelate and black-box redaction · Layer masks · Eraser · Rulers and grids · Batch logo stamping · Grid mosaic gallery · OpenRaster export · Light, dark and system themes

Everything above is free and local. Sign in only when you want persistence, share links, or the AI passes — and the padlock in the UI tells you which is which before you click.

Your GPU does this blur 17× faster.

Measured against the engine's own SIMD blur on real hardware, not estimated: 5.3× at 512 pixels, 17.6× at 2048, and 53.8× once the radius gets wide. There is no crossover — the GPU wins on a single image.

None of it touches a pixel in the editor yet. It sits behind an opt-in flag while the correctness harness runs, because the GPU library does not fit the engine's size budget and the path has to live outside the WebAssembly boundary. When it lands it will be the same picture, sooner.

The letters are the real thing. Click, drag or press a key — they spring back.

From the blog

The Trail Log says what shipped. These are the ones that needed the argument written out — the decision, what it cost, and the measurements it was made on.

  1. v8.32

    We moved the engine off the main thread. The pixels stayed put.

    How Image Horse moved its Rust engine into a worker without ever sending a frame across a thread boundary — and why the obvious way to do it is impossible.

Open an image. No account, no upload.

Once it loads, the network is optional. Drop your connection mid-edit and nothing stops — none of the work was leaving this machine anyway. The editing happens in this tab, not on a server, so there is nothing to be slow and nothing to go down.