It removes the background from a photo so you're left with just the subject (a person, an object, an animal) on a transparent or custom background. You can use AI to do most of the work automatically, then clean up anything it missed using a set of manual tools.
You can also use it as a general image cutout tool: remove specific colors, fill in regions, paint over edges, and export the result in several formats.
Most image editors change the actual pixels of your photo when you edit. This one doesn't. Instead, it keeps your original image untouched at all times and builds a separate mask on top of it β think of the mask as a stencil that says which parts should be visible and which should be hidden.
When you erase, paint, or run the AI, you're modifying that stencil, not your photo. Your original is always there underneath, pixel-perfect. When you export, the original is combined with the stencil at full resolution to produce the final image.
This means you can edit as much as you want without losing image quality. Undo as many times as you like, try different things, throw it all away with Reset Mask β your source photo never gets damaged.
πͺ Smart AI Remove β Click this first if your photo has an obvious subject (a person, an animal, an object). The AI looks at your image, decides what the subject is, and removes everything else in a few seconds. The first time you use it, it has to download a small model file (~40MB). After that, it's fast.
This section uses two color slots, similar to Find/Replace in a text editor:
The Find color is also editable manually by clicking the swatch and picking from the system color picker. Same for Fill.
Once both slots are set:
Manual paint tools for cleanup work after the automated tools have done their job.
Brush settings:
[ and ] on the keyboard to resize without leaving the canvas.After you've removed the background, these sliders fine-tune the cutout edge. They're "live" β you can drag them around and see the effect immediately, and they don't permanently change anything until you export.
Edge Refinement only does something visible after you've already removed something β it adjusts existing edges, it doesn't create them.
Replace the (now transparent) background with a solid color or another image.
Save your finished cutout to your computer. Three formats:
Space to pan with any tool active.[ and ] to resize the brush quickly.E for Erase, R for Restore, βZ/Ctrl+Z to undo.For people who want to know how the internals work.
Three-canvas pipeline at the source resolution:
imgCanvas β pristine source, never modifiedimgClean β optional working RGB layer for tools that change colors (Paint Color, Extend Edge, Decontaminate)maskCanvas β alpha channel encoding which pixels are keptThe visible composite is rebuilt on every change as (imgClean || imgCanvas) combined with a derived mask via destination-in. The derived mask is the raw maskCanvas passed through any active edge refinement and cleanup operations on every frame β refinement is non-destructive, the underlying mask is never modified.
All operations work at full source resolution. The AI model resizes its input internally for inference, but the resulting matte is upscaled with high-quality smoothing back to the original size and used as alpha. Exports read the composite at the original resolution, not what's shown on screen.
A pure-JavaScript separable box blur on the alpha channel. Two O(n) passes with a sliding-window sum, independent of radius β a 50px blur costs the same as a 5px blur. This replaced an earlier ctx.filter='blur()' approach that had a browser quirk where blurring a binary-alpha source could fail to produce a visible gradient. JS blur is bulletproof.
Stack-based scanline algorithm with edge-clamped color distance test. Operates on the pristine source colors so the test is deterministic regardless of prior edits. Sensitivity additively widens or shrinks the effective threshold; the visited region is hard-cut so there's never a hazy boundary.
Multi-pass dilation. Each pass, partially-transparent pixels adjacent to fully-opaque pixels take the average color of their opaque 8-neighbors and are themselves marked as filled. Four passes cover most real-world fringe.
Snapshots both mask alpha and imgClean RGB. Uses a version counter to dedupe snapshots β entries that share an unchanged imgClean reuse one backing buffer by reference, so a long sequence of brush strokes that don't touch RGB only stores one shared RGB snapshot. This keeps memory bounded by the number of distinct RGB states, not the number of history entries.
Currently uses @imgly/background-removal v1.5.8 β an ISNet model running in the browser via ONNX-WASM. The library is MIT-licensed and the bundled model is Apache 2.0. The matte output is gamma-corrected (0.85) before becoming the mask alpha to crisp soft edges.