What this tool does
The Background Remover takes one photo, asks a segmentation model which pixels belong to the subject, turns that answer into an alpha channel, and renders a PNG in which everything else is transparent or a flat colour. Every step runs in this browser tab: the model files are fetched from this site, the photo is decoded here, the mask is computed here and the download is composited here. Nothing about the image is sent anywhere.
The quality picker names the three engines for what they are — Fast — people (auto), Click the subject and Best quality — any subject— and prints what each costs to download on first use. Quality costs download size, and the choice is yours. The sections below set out the rules behind those labels, the inputs, the refinement and the points where the tool stops. The on-device background removal guide walks the same ground from the photo’s side; the methodology records every engine rule the site applies.
Three engines, three downloads — measured from the files
The download label beside each tier is not an estimate. When the site is built, the page measures every file that tier fetches and formats the sum on the SI basis browser download dialogs use (one megabyte is one million bytes), to one decimal, so a label can never disagree with the files actually served. The catalog as measured for this build:
- Fast — people (auto) — ~11.7 MB on first use: the MediaPipe Tasks Vision runtime (a WebAssembly binary plus its loader, 11.5 MB) and the selfie segmenter model (0.2 MB), 11,734,025 bytes in all. It is people-only.
- Click the subject — ~17.7 MB on first use: the same runtime plus the MagicTouch interactive segmenter (6.2 MB), 17,712,372 bytes. The point you click is passed to the model as a normalised coordinate, and it returns a confidence mask for whatever sits there. Clicking again picks a different subject.
- Best quality — any subject — ~86.9 MB on first use: the BiRefNet_lite model (59.1 MB) and the onnxruntime-web WebAssembly runtime with its loader (27.8 MB), 86,912,327 bytes. It finds the main subject of any photo without a click.
The two MediaPipe tiers share one runtime, so the gap between them is exactly the difference between their models: 5,978,347 bytes, or 6.0 MB. Each label counts the runtime in full — it is that tier’s own cost, not the increment after another tier has loaded — and “on first use” is literal: an engine is created once per tab and reused for every photo that follows.
The best tier’s engine header records two measured decisions: the model artifact is a reduced-size export with quantised weights, because the larger exports need more working memory than a browser’s WebAssembly heap can hold; and inference is pinned to the WebAssembly CPU provider, inside the runtime’s own worker so the page stays responsive, because in testing the WebGPU provider resolved as if it had succeeded and returned an all-background mask.
What it accepts, and the name it gives back
The input module accepts PNG, JPEG, or WebP (image/png, image/jpeg, image/webp) up to 20,971,520 bytes — 20 MiB on the binary basis the validator uses; the same count reads as 21.0 MBin the SI style of the download labels, so the limit and the labels should not be compared digit for digit. Anything else is refused before decoding, with the engine’s own sentence. Three fictional files:
- A GIF named launch-poster.gif: launch-poster.gif is not a supported PNG, JPEG, or WebP image.
- A JPEG one byte over the limit: hero-shot.jpg is larger than the 20 MB limit.
- The same JPEG at exactly 20,971,520bytes: accepted — the limit is inclusive.
A HEIC, AVIF, GIF or BMP file can be written to PNG first with the image converter, which also works locally. Once accepted, the photo is decoded with its orientation metadata respected; a very large photo is scaled down to a fixed longest-edge cap for processing, and the tool then prints the working size and says the original is untouched. A PNG source keeps its transparency in the working copy.
The download is always a PNG named from the source: the base name is lower-cased, every run of characters outside a–z and 0–9 becomes one hyphen, leading and trailing hyphens are trimmed, and -cutout.png is appended. Speaker Portrait (Final).JPG downloads as speaker-portrait-final-cutout.png; C:\shoot\DSC_0421.jpeg keeps only its last path segment and becomes dsc-0421-cutout.png; !!!.webp, with nothing usable in it, falls back to image-cutout.png.
From a soft prediction to a clean edge
Every engine returns a confidence between zero and one per pixel at the working resolution (the best tier’s mask is resized back bilinearly from the model’s input size). Used directly as transparency, that confidence smears wherever the model was unsure, so the tool never does that: the raw mask is cached and passed through the refinement module, whose documented defaults are a threshold of 0.5, a feather of 3 px on each side of the boundary and an island fraction of 0.005. Four rules apply in order.
- Binarize. Confidence at or above the threshold is subject; below it is background. The comparison is inclusive: on a fictional two-pixel mask, 0.49 becomes alpha 0 and exactly 0.50 becomes alpha 255.
- Despeckle and fill. Regions are labelled with four-way adjacency. A subject island smaller than the island fraction of the largest subject region is dropped; a background hole enclosed by subject and under the same cutoff is filled; a hole reaching the image border never is. On a fictional subject of 1,200,000 pixels the cutoff is 6,000 pixels — 0.5% of the subject.
- Feather. The hard boundary is rebuilt as a linear ramp over a band 6 px wide, symmetric inside and out, from a city-block distance transform. On a fictional one-row mask of 14 pixels, half background then half subject, the defaults give the alpha sequence 0, 0, 0, 0, 21, 64, 106, 149, 191, 234, 255, 255, 255, 255. The last background pixel and the first subject pixel read 106 and 149, summing to 255; every mirrored pair across the boundary does, by construction.
- Snap to colour edges.A box guided filter re-estimates only the ramp pixels from the photo’s luminance; fully opaque and fully transparent pixels pass through untouched. Its window radius follows the feather, 3 px at the defaults. Take the ramp above, repeated on every row of a fictional 14×8image, and read the middle row between the last background pixel and the first subject pixel — the pair that read 106 and 149 before the filter, a step of 43 levels. Over a fictional photo of one flat mid-grey the filtered row is 0, 0, 0, 0, 61, 86, 113, 142, 169, 194, 255, 255, 255, 255 and that pair steps 29 levels. Over a fictional photo that is black on the background half and white on the subject half, changing exactly where the mask does, the row is 0, 0, 0, 0, 33, 44, 57, 198, 211, 222, 255, 255, 255, 255 and the pair steps 141 levels. The ramp moves to where the picture changes.
How to read the controls and the output
Edge (tightness & softness)is one knob moving two refinement parameters together. Toward the low end the threshold is permissive and the feather narrow, so more pixels count as subject and the edge is crisp; toward the high end the threshold is strict and the feather wide. The guided filter’s window follows the feather width, and the island fraction stays at the engine default throughout. A faint semi-transparent fringe along the edge is the feather ramp doing its job, not a failed cut.
Restore and Erase paint a separate override mask that is merged after refinement, so strokes survive Edge changes and even a switch of engine. There is one level of undo, and clearing all strokes is itself undoable.
Output backgroundis transparent by default or a solid colour you pick, drawn behind the subject exactly as picked. The download renders the final merged mask over the working copy at the processing size and encodes a fresh PNG — it is not the original file with pixels removed.
Where it stops
- No engine is guaranteed to get every photo right; even the best tier can miss fine detail such as stray hair. The Edge slider and brushes exist because the last few pixels are left to you.
- Fast is people-only. When it finds no person the whole image becomes transparent, and the tool says so and points to the other two tiers rather than guessing.
- Click the subject segments one region per click. If nothing is detected at the spot, the tool asks you to click nearer the middle of the subject; a second click replaces the first.
- The best tier is the largest download by design and takes seconds. If inference runs out of memory, the message names memory, not your connection, and recommends the two smaller tiers.
- The fill is a flat colour. Placing the subject on another scene belongs in the Studio, where the cutout becomes the CTA image.
- Nothing persists except the tier you last chose, remembered in this browser. The photo, mask and strokes exist only while the tab is open.
The guide covers choosing a tier for a given photo; the methodology lists these limits beside every other engine’s.
Common misreadings
- “The label is per photo.” It is per tier, per tab, once. Later photos reuse the engine.
- “Best quality means a guaranteed result.” It means the largest on-device model, finding any subject. Its result is still a prediction you check.
- “Moving Edge re-runs the model.” It re-refines the cached confidence mask. Only changing the engine, or loading a new photo, runs a model.
- “20 MB and 21.0 MB are different limits.” They are the same 20,971,520 bytes on two bases: the validator counts binary mebibytes, the download labels count SI megabytes.
- “The download is my original with the background deleted.” It is a new PNG rendered from the working copy, at the processing size the tool reported when the photo loaded.
Questions
- Is my photo uploaded anywhere?
- No. The model and runtime files are fetched from this site; the photo is decoded, segmented, refined and composited in your browser tab. The only network traffic is the first-use download of the tier you pick.
- Why does Click the subject cost more to download than Fast?
- Both tiers use the same MediaPipe runtime (11.5 MB); the models differ. The selfie segmenter is 0.2 MB and the MagicTouch segmenter is 6.2 MB, so the labels differ by 6.0 MB — every figure measured from the files when the site is built.
- Which files can I use?
- PNG, JPEG, or WebP, up to 20 MiB (20,971,520 bytes, inclusive). Other formats are refused before decoding with the engine’s own message — for example “launch-poster.gif is not a supported PNG, JPEG, or WebP image.”. Convert HEIC, AVIF, GIF or BMP to PNG first with the image converter.
- What does the Edge slider actually change?
- It moves the binarize threshold and the feather width together and re-runs the refinement on the cached mask; the island fraction stays at the engine default of 0.005. The model itself is not run again.
- Why did the whole photo turn transparent?
- In Fast mode, no person was detected — that model is people-only; try Click the subject or Best quality. In Click mode, nothing was detected at the spot you clicked; click nearer the middle of the subject. In Best quality, the model found no subject; point at it with Click the subject.
- Why is Best quality slower, and can it fail?
- It runs the largest model on the WebAssembly CPU provider inside a worker, so it takes seconds while the page stays responsive. Failures are reported by phase — download, engine start-up, or inference (which the tool attributes to memory, the usual cause) — and the message says which. Nothing was uploaded in any case, and the two smaller tiers may still work.
Everything here runs in your browser: the tools compute on your device and the Studio’s package is assembled on the device. The methodology documents every rule the tools apply.