I ran a photo of a dog through a background remover and looked at the edges. The fur was still there — individual strands of it.
That surprised me, because most cutouts I've seen look like someone took scissors to them.
Then I checked the settings panel: edge shrink 0, mask feather 0px, decontaminate off. It hadn't post-processed anything. It just handed me the model's raw mask.
Those three defaults are an unusual choice. Here's why they matter.
The mask is a range, not a switch
A segmentation model outputs an alpha mask — per pixel, "how much of this belongs to the subject."
Fully subject: 255. Fully background: 0. Edges land in between.
A hair strand covering 60% of a pixel should be alpha 153. Same for glass rims, sheer fabric, motion-blurred outlines.
Those in-between values are the quality of the cutout. Getting the middle of the subject right is trivial — every model does it. What separates them is that one-pixel band around the edge.
Three switches that are usually on
Most tools do three things by default:
- Edge shrink — pull the mask inward a pixel or two. Kills the halo of leftover background. Also kills the hair tips, which live exactly there.
- Mask feather — blur the alpha for a softer transition. Hides model jaggies. Also softens edges that were legitimately sharp.
- Decontaminate — remove background color bleeding into edge pixels. Misfires when subject and background colors are close.
None of these are bad features. The problem is doing them by default, because it's one-way: what you get is already processed, and the original mask is gone.
Ship them off, and the user who needs them turns them on. Ship them on, and the user who needs the raw mask has no way back.
There's a "restore original alpha channel" button next to the manual brush, which is what makes this design actually work — you can over-edit and get back.
The honest cost: default output looks less "clean" than auto-optimized results. That's true. But that cleanliness is paid for with information, and information doesn't come back.
Three tiers, and what the size actually buys
Models download into the browser, so size is a hard constraint. Three tiers:
| Tier | Model | Size | Positioned for |
|---|---|---|---|
| Fast | ISNet INT8 | ~42 MB | general subject detection |
| Pro | BEN2 FP16 | ~219 MB | hair, semi-transparent materials, complex edges |
| Max | BiRefNet HR-Matting FP16 | ~447 MB | 2048px; hair, sheer fabric, glass |
Read those descriptions again. Every tier above the first is described in terms of edges — hair, sheer, glass, semi-transparent. Not one says "more accurate subject detection."
That's the whole selection criterion: subject detection isn't the bottleneck. Edges are.
What I measured running two of them:
| Fast | Pro | |
|---|---|---|
| Actual download | 42.2 MB | 209.0 MB |
| Backend | WebGPU | WebGPU |
| POST requests | 0 | 0 |
Models cache in the browser — same tier won't re-download. But open an incognito window or clear site data and you're downloading again. I ran these in a fresh context, and the tier I'd downloaded earlier had lost its "downloaded" badge.
So "download once, reuse forever" doesn't hold for multi-device users or anyone who clears storage. Worth knowing before you model your conversion funnel.
The other path: no model at all
When the background is uniform, you don't need a model.
There's a connectivity-based path: delete colors similar to the background that connect inward from the canvas edges. Not "delete everything close to white" — that distinction matters. White text sitting on the subject survives, because it's enclosed by the subject and doesn't connect to the outer background.
I ran a screenshot with a light-gray-white background through it. The auto-detected background color came back as #F2F6F5, not pure white. It samples rather than assumes — which saves you a round-trip of tolerance tuning.
Two runs, POST count 0, no model files downloaded. Seconds, not minutes.
How to check whether a tool touched your mask
Three samples, a few minutes:
A product shot with same-color content inside the subject. White background, white text on the product. Run the algorithmic path. Holes in the subject mean it's doing color thresholding, not connectivity.
Hair or fur. Composite the result onto a dark background. Auto-shrunk edges are obvious — they're cut with a knife.
Something semi-transparent. Glass, sheer fabric, smoke. If the mask got flattened to binary, these either vanish or turn into solid blocks.
And if you're working with unreleased product shots or client material: open DevTools, filter Network by POST, run one image. That check takes five seconds and beats any privacy policy.
The numbers above are from actual runs while writing this.
Top comments (0)