Advertisement

Known limits

Where background removal struggles

Some pictures come out wrong, and the reasons are specific and knowable. Here is each case we know about, the actual mechanism behind it, and what to do instead — including the times when the honest answer is that nothing on this site will fix it.

Synthetic test cases

These deterministic fixtures are presentation and regression aids, not hand-picked claims about real photographs. Launch one with its known settings, then compare it with your own source.

Backlit hair synthetic transparent-result illustration
Backlit hair synthetic source fixture
Synthetic source
Target alpha
1 / 9

hair

Backlit hair

Fine strands against a textured studio wall.

What to inspect: Protect wisps without carrying the wall between them.

FastBest for hard-edged everyday subjects.
Best QualityRecommended for fine or partly transparent edges.
  1. Remove
  2. Refine
  3. Edit
  4. Upscale
  5. Export
Try this example

Deterministic NSS synthetic regression fixture; no personal or stock media. Known settings: Best Quality, glass mode off, soft edges refinement.

How to read this page

Every explanation below describes the processing this site actually runs — the specific pass, and the threshold it uses — rather than background removal in general. Where a number appears, it is the value that pass uses today. If we change the pipeline and forget to change this page, the page is wrong, and that is the failure mode we care most about.

The gallery uses synthetic fixtures, not selected customer photographs. Each before-and-after pair is a labelled target illustration and proves nothing about a real result. Your own image is the honest test, and it never leaves your browser. The bundled fixtures make the settings repeatable without presenting personal media or a favourable stock-photo selection as evidence.

Each case is tagged with how much of it is ours to fix. That distinction is the point of the page: a capture limit does not get a workaround that pretends otherwise.

Pipeline limit
The information is in your photo; our processing does not fully recover it. Better settings and hand repair genuinely help here.
Capture limit
The information is not in your photo. No setting recovers it — the fix is at the camera, or by hand afterwards.
Format limit
We compute the right answer and the file format cannot store it. The fix is a different output format.

One mechanism sits behind most of them

The model returns a value per pixel: how much of that pixel belongs to the subject. At a hard edge the answer is nearly always fully on or fully off. At a soft edge — hair, blur, glass, a translucent hem — there is a band of pixels that are genuinely part subject and part background, and that band is where every case on this page lives. Leftover background looks exactly the same to a colour-based test, so the cleanup passes that clear the halo also thin the band, and only one pass in the chain can put alpha back.

backgroundedgesubject interioropaqueclearpartly transparenthalo suppression, fringe trim, spill removalall act here, and all only reduce alphainterior snapraises alpha, but onlywhere it is already solidThe band is real: hair, blur and glass edges genuinely occupy part of a pixel.So does leftover background — which is why the passes above cannot tell them apart.
A schematic, not a screenshot. It shows the direction each cleanup pass can move alpha in, which is the shared cause behind most of the cases below — a soft edge and leftover background look identical to a colour-based pass, and the passes that resolve the ambiguity only ever resolve it downward.

Pipeline limit

Fine hair against a busy background

The information is in your photo; our processing does not fully recover it. Better settings and hand repair genuinely help here.

What you see

Individual strands blur into one grey-edged clump. Some wisps vanish entirely; between the ones that survive, patches of the old background come along for the ride. The hairline can look like it was cut out with scissors while the rest of the edge looks soft.

Why it happens

The mask is not computed at your photo's resolution. Best Quality runs its model on a 512×512 square, and the mask that comes back is stretched to your image's real size afterwards — bilinear across the body, bicubic through the partly-transparent edge band, then a sharpening pass on the edges. That enlargement never consults the full-resolution photograph. A strand thinner than one model pixel has nothing to be recovered from: it is interpolated, not reconstructed.

The second half is the background. The colour-based passes that would normally strip leftover background from between strands switch themselves off when the backdrop is busy — deliberately, because a single average colour is meaningless on a patterned background and keying against one damages real subject edges. So on a hedge, a bookshelf or a street you get the raw model edge plus one gentle colour blend, and none of the halo removal that makes a studio cutout look clean.

Hair preservation, despite the name, does not add hair. It keeps soft alpha soft: it only touches pixels that are already partly transparent, that sit on a real gradient in the photo, and that are close to a genuine mask edge. It cannot invent a strand the mask never had.

The passes responsible

Mask enlargement (upscaleMask)
Bilinear for the body, bicubic for pixels between 0.05 and 0.95 alpha, then an unsharp pass on the edge band. The source photo is not used as a guide, so detail below the 512px model grid cannot come back.
Spill removal (smartEdgePass)
Samples the background colour from fully transparent pixels and returns the mask untouched when that colour’s standard deviation exceeds 45 — the definition of a busy background.
Uniform-background kill
Only runs when the sampled corners are near-white (every channel at or above 210) or light and uniform (brightest channel at or above 175, spread across channels no more than 30) and low-variance. A garden or a living room fails all three tests, and the pass does nothing at all.
Colour-evidence blend (guided filter)
Needs both confident foreground (above 0.85) and confident background (below 0.15) samples inside a 17-pixel-wide window before it will move a pixel. In a thicket of strands it often has one or neither, and skips.
Hair preservation
Acts only on alpha between 0.35 and 0.95, where the image gradient is strong, and only within about 4 pixels of a real mask edge. It nudges those pixels at most 35% toward half-transparent so the edge stays soft.

What to do instead

  • Use Best Quality, not Fast

    The two tiers are different models and the cleanup after them is tuned differently: Fast pulls edge pixels toward fully-on or fully-off harder than Best does, because its raw edges are softer. On hair that pull is exactly what you do not want.

    Fast vs Best Quality

  • Finish in the editor with the Soft edges preset

    Edge Refinement ships a Soft edges preset for hair, fur and feathers — a light feather and smooth with a much gentler decontamination strength, and soft-edge preservation left on. The Hard edges preset does the opposite and will eat wisps.

    Open the image editor

  • Separate the subject from the backdrop when you shoot

    Distance, a plainer wall, or a light behind the subject all raise the contrast at the strand level. This is the change that moves the mask itself rather than the cleanup afterwards.

  • Composite onto a background of similar tone

    A soft, slightly imperfect hair edge is invisible against a background close to the original and obvious against its opposite. Choosing the destination background is a legitimate fix, not a cheat.

    Add a background

What will not help

  • Enlarging the photo before removal

    The model resizes to its own input square either way, so the mask carries exactly the same detail — you have only spread it over more pixels. Upscaling after the cutout is a different and perfectly reasonable thing to do.

  • Running the same image again and hoping

    The attempt order is fixed: Best falls back to Fast, Fast falls back to the compatibility model, and a retry re-runs the same model rather than rolling a different one. Change the setting or change the input.

Still true after all of the above: Even with every one of these, a strand that occupied less than a model pixel was never in the mask. What you can win back is the halo and the hard clump — not the individual hairs.

Pipeline limit

Glass, acrylic and other see-through materials

The information is in your photo; our processing does not fully recover it. Better settings and hand repair genuinely help here.

What you see

The cutout has the right outline and none of the transparency. Whatever was behind the glass is still visible through it, but it is now part of the subject, so placing it on a new background looks like a sticker of the old photo.

Why it happens

The models are segmentation models. They answer "does this pixel belong to the subject", not "how much of this pixel is the subject". For a glass bottle the honest answer at every interior pixel is yes — so the interior comes back fully opaque, which is the model working correctly and giving you something you did not want.

Glass/plastic mode, the checkbox above the drop zone, is the switch built for this. It adds a pass that looks at interior pixels the model marked solid, measures how close each one is to the detected background colour, and makes the matching ones see-through — while protecting bright specular highlights so the material still reads as glass rather than as a hole.

Its weakness is that background estimate. The background colour is one average taken across every pixel the mask scored below 0.05. On an even backdrop that average is a good description of what is behind the glass. On a gradient, a texture or a real scene it is a colour that appears nowhere in the photograph, and the comparison has nothing correct to key on.

Glass mode also switches off three things that exist to make cutouts look solid and clean: speckle closing, the pass that snaps confident interiors to fully opaque, and halo suppression. That is the right trade — each of them would undo the transparency — but the honest consequence is that glass results carry more residual fringe than opaque ones.

One more surprise, if your upload already has an alpha channel: the exported alpha is capped at the source pixel’s own alpha, so a semi-transparent input can never come out more opaque than it arrived.

The passes responsible

Interior transparency estimate
Runs only in glass/plastic mode. Compares each interior pixel against the detected background colour in Lab space and ramps alpha down for the matching ones, keeping high-luminance low-saturation specular pixels.
Background colour detection
A single mean red/green/blue value averaged over every pixel with alpha below 0.05. Accurate on an even backdrop; meaningless on a gradient or a scene.
Passes disabled in glass mode
Speckle closing, the confident-interior snap and fringe decontamination are all skipped, because each one would destroy the partial alpha the mode exists to produce.
Source-alpha clamp (composite)
Output alpha is the smaller of the computed mask and the source pixel’s own alpha, so an already-transparent input constrains the result.

What to do instead

  • Turn on Glass/plastic mode before you process

    It is a checkbox in the row above the drop zone, and it is the only setting that changes how interiors are treated. It applies to every image in the batch, so run glass and opaque products as separate batches.

    Background remover

  • Shoot on a plain, evenly lit backdrop

    This is not general advice here — it is the specific condition that makes the single-background-colour estimate correct, which is what the interior pass depends on.

  • Repair by hand at partial opacity

    The erase and restore brushes take an opacity below 100%, which makes a genuine partial-alpha edit rather than snapping pixels fully on or off. For a bottle interior that is often faster than fighting the estimate.

    Open the image editor

  • Check what you actually got

    Confirms whether the file carries real alpha or a baked-in background, which is the difference between "the glass looks solid" and "the glass is solid".

    Check transparency

What will not help

  • Switching to Best Quality and expecting transparency

    Both tiers emit an opaque silhouette for clear material. The quality tier changes edge fidelity; the glass checkbox is the control that changes interiors.

  • Leaving glass mode on for opaque products

    It will punch holes wherever the subject happens to match the background colour — which is exactly what you asked it to do.

Still true after all of the above: Real transparency depends on knowing what was behind the object, and a single photograph does not contain that. Glass mode approximates it from one background colour; where that approximation is wrong, no setting on this site fixes it.

Capture limit

Motion blur

The information is not in your photo. No setting recovers it — the fix is at the camera, or by hand afterwards.

What you see

The still parts of the subject cut out cleanly and the moving part does not. A waving hand ends early, a wagging tail becomes a translucent stub, a swinging hem picks up a dirty band of half-erased background.

Why it happens

A motion-blurred edge is genuinely mixed. Across a wide band, every pixel is part subject and part background, and the correct answer really is a fraction per pixel. The problem is that a wide band of partly-transparent pixels is also exactly what leftover background looks like — and the cleanup chain is built to remove that.

Two passes act on the band. Halo suppression cuts a fringe pixel to 40% of its alpha when most of its neighbours are fully transparent and its colour matches the border background: a blur band thinning toward the direction of travel fits that description precisely. The fringe trim then drags partly-transparent pixels toward the lowest alpha nearby, removing most of the difference. Thin structures such as wires are explicitly protected from that trim — a broad blur band has no thin spine, so it is not.

And nothing downstream can put alpha back. Only one pass in the whole chain raises alpha, and it requires the entire neighbourhood to be nearly solid — which a blur band never is, by definition. The band can lose alpha at several points and gain it at none.

The passes responsible

Halo suppression (fringe decontamination)
A partly-transparent pixel with at least 5 of its 8 neighbours fully transparent, whose colour is close to the sampled border background, has its alpha multiplied by 0.4.
Fringe trim
For alpha between 0.03 and 0.90, moves the pixel 72% of the way toward the lowest alpha in its window. Free-standing thin structures are detected and skipped; a wide blur band is not one.
Confident-interior snap
The only pass that increases alpha. It fires on pixels that are already confidently foreground and surrounded by a near-solid neighbourhood, so it never rescues a soft ramp.

What to do instead

  • A faster shutter, if you can re-shoot

    This is the only true fix. Blur is missing information rather than a processing mistake, and every option below works around it instead of solving it.

  • Sharpen the frame before removing the background

    A direction-aware sharpen runs instantly and a heavier reconstruction model is available as an optional download. This gives the model a more defined edge to find. We have not measured how much it improves the resulting mask, and it cannot recover detail the sensor never captured — treat it as worth trying, not as a fix.

    Deblur an image

  • Paint the band back at low opacity

    The restore brush at reduced opacity and hardness makes a partial-alpha repair, which is the right shape of edit for a blur band. Full-opacity restoration looks like a cut-out limb pasted on.

    Open the image editor

  • Crop the blur out

    Often the honest answer for a product or portrait shot: if the blurred limb is not the point of the picture, framing it out costs less than repairing it.

What will not help

  • Upscaling the blurred frame first

    Enlargement assumes there is edge structure to sharpen. A blur band has none, so you get a larger blur band.

  • Switching to Fast to get a crisper edge

    Fast’s cleanup pulls edge pixels toward fully-on or fully-off harder than Best’s does. On a blur band that produces a cleaner-looking but more wrong edge.

Still true after all of the above: A blurred edge has no true boundary in the source frame, so no mask can find one. What is achievable is a soft, plausible edge — not the edge the subject had while it was still.

Capture limit

Low contrast between subject and background

The information is not in your photo. No setting recovers it — the fix is at the camera, or by hand afterwards.

What you see

The boundary drifts into the subject in places and into the background in others. Whole regions may be missing, or a slab of background may be kept. In the worst case nothing is found and you get an empty result.

Why it happens

Every recovery pass after the model is a colour comparison, and when subject and background are the same colour there is nothing to compare. This case is unusual in that most of the pipeline behaves correctly and still cannot help you.

The colour-evidence blend measures how close an edge pixel is to the local foreground colour versus the local background colour. When those two distances are nearly equal it now deliberately does nothing, instead of splitting the difference and dragging the pixel toward half-transparent. That restraint is a fix — an earlier version of this pipeline did drag, and solid interiors exported translucent because of it — but doing nothing correctly is still doing nothing.

Spill removal has the same shape of problem: it classifies an edge pixel as background spill below a colour-difference threshold and as a genuine subject edge above a higher one. A colour-matched subject sits on the spill side of that line, which is the wrong side.

And the pass that reclaims background connected to the image border floods through any pixel the model was unsure about, as long as the colour steps between neighbours stay small — which is what a smooth, colour-matched subject body looks like from the outside. A guard reverts the entire reclaim when it swallows too much of the likely subject, so a whole body is no longer deleted. The price of that guard is visible: background that should have been removed stays.

The passes responsible

Colour-evidence blend (guided filter)
Skips the pixel entirely when the difference between its foreground and background distances is under 15% of their sum — the deliberate no-guess rule for ambiguous evidence.
Spill removal (smartEdgePass)
Colour difference below 10 in Lab space is treated as background spill and pushed to transparent; above 22 it is treated as a subject edge and preserved. A colour-matched subject falls below 10.
Border reclaim
Floods inward through pixels the model scored at or below 0.45 while colour steps between neighbours stay small, and reverts wholesale if it consumes more than a fifth of the likely-subject alpha. Safe, and consequently conservative.

What to do instead

  • Try both quality settings

    They are genuinely different models, not two speeds of one. Where one has no signal the other sometimes does, and this is the case where it is worth spending the download to find out.

    Fast vs Best Quality

  • Crop tighter before you upload

    A subject that fills more of the frame occupies more of the model’s input square, so the boundary is decided at a finer effective resolution.

  • Select by hand where the automatic edge wanders

    The magic wand plus the erase and restore brushes are the intended path for this case. There is no threshold or sensitivity control in the background remover — the quality tier and glass mode are the only settings — so hand repair is not a fallback, it is the tool.

    Open the image editor

  • Add separation at capture

    A step away from the wall, a light on the subject, or a different backdrop. For products this is usually faster than any amount of repair.

What will not help

  • Looking for a sensitivity or tolerance slider

    There is not one. The background remover exposes the quality tier and glass/plastic mode; the rest of the chain has no user-facing knobs by design.

  • Assuming an error on the item means the upload was rejected

    A mask with almost no confident subject is treated as a failed attempt rather than saved as a blank cutout, and the fallback model is tried next. The message means the model found nothing it was sure of — your file was read fine.

Still true after all of the above: When a boundary is invisible to a colour-based method, only a better model or a better photograph changes the answer. Nothing in the cleanup chain can create a signal that is not in the pixels.

Format limit

GIF’s one-bit transparency

We compute the right answer and the file format cannot store it. The fix is a different output format.

What you see

The animation looks right at normal size and wrong when you zoom in: the edge is a fine pattern of dots rather than a smooth fade. On the wrong background it can also carry a pale rim.

Why it happens

GIF stores one transparency bit per pixel. A pixel is either fully opaque or fully gone; there is no 40%. This is the container, not the model — the mask we compute carries full soft alpha and the file simply cannot hold it.

What we do about it is the classical answer: alpha in the ambiguous band is dithered with an ordered pattern, so a 40%-transparent edge becomes roughly 40% of pixels kept. At normal size and at animation speed that reads as a smooth edge. Zoomed in, it reads as dots, because that is what it is.

Soft pixels that are kept get their colour blended toward a matte colour first, which is what stops the pale rim. The default matte is the average colour of the source image’s own outer border. That is a commitment: the edge is now correct against a background of that colour and slightly wrong against any other.

The passes responsible

Ordered dithering of the alpha band
Alpha between 0.25 and 0.65 is thresholded against a Bayer 4×4 pattern, converting partial transparency into partial pixel coverage. Outside that band the decision is unambiguous and no dithering happens.
Matte pre-compositing
Kept pixels that were partly transparent have their colour mixed toward the matte in proportion to their alpha, which removes the bright halo one-bit GIF cutouts are known for — at the cost of baking in an assumption about the destination background.
Edge cutoff control
The keep-versus-drop midpoint is adjustable per job between 20% and 70%, default 45%. Lower keeps more of the soft band; higher trims tighter.

What to do instead

  • Export APNG instead

    Same per-frame processing, different container: APNG carries a full 8-bit alpha channel, so the soft edge survives exactly as computed. Every current browser plays it, but a good number of chat and marketplace uploaders still reject it — check your destination before committing.

    GIF background remover

  • Set the de-halo matte to the background you will actually use

    The matte has auto, custom and off settings, with a colour picker for custom. If you already know the GIF will sit on a dark header, telling it so is the difference between a clean edge and a pale outline.

    GIF background remover

  • Tune the edge cutoff for the subject

    A hard-edged logo tolerates a tighter cutoff; a soft plush toy needs a looser one. It is a per-job slider, so you can compare without re-processing from scratch.

  • Design for the format

    Hard-edged subjects — logos, packshots, flat illustration — survive one-bit alpha intact. If the softness is the point of the image, GIF is the wrong container for it and no setting changes that.

What will not help

  • Raising the quality tier to fix dotted edges

    The model is not the constraint. A better mask still has to be reduced to one bit per pixel on the way into the file.

  • Turning the matte off to avoid "changing" the colours

    Off keeps the original edge pixels, which still carry the old background colour mixed in. That is what produces the halo the matte exists to remove.

Still true after all of the above: One bit is one bit. Dithering and matting make it look right in context; they do not give GIF a soft edge, and zooming in will always show the pattern.

Pipeline limit

Mesh, wire and other thin repeated structures

The information is in your photo; our processing does not fully recover it. Better settings and hand repair genuinely help here.

What you see

A wire grille, a chain-link fence or a mesh bag comes out mostly intact, with the strands slightly shortened at every loose end and the occasional crossing point looking thinner than its neighbours.

Why it happens

The fringe trim exists to tighten partly-transparent edges, and it works by pulling a pixel toward the lowest alpha nearby. For a strand one or two pixels wide, every pixel of the strand has background in its window — so an unguarded trim multiplies the whole strand down to roughly a quarter of its alpha and the mesh disappears. That is not a hypothetical; it is the failure this protection was written to stop.

The image pipeline therefore turns on thin-structure protection. A pixel is spared when it is itself at least half opaque, when opposite neighbours along one of four axes are both solidly foreground, when background is reachable within two pixels on both perpendicular sides, and when no nearly-opaque pixel sits within two pixels of it. That combination describes a free-standing strand and nothing else — blob interiors, one-sided halo ramps and fringe hugging a solid body all fail it and are still trimmed, which is the point. Note the first condition: protection covers 0.5–0.90 alpha, not the whole 0.03–0.90 trim band, so the faintest half of a strand gets no shelter.

The predicate is strict, and its cost is written down in the code rather than hidden: the pixel at the very end of a strand has no symmetric axis, so protected strands still lose about a pixel at each free end and at ends that run into the image border. The centre pixel where two strands cross can fail the perpendicular test the same way. It is recorded as an accepted cosmetic limitation, and it is strictly better than the total crush it replaced.

Separately, none of this applies to a mesh finer than the model grid. A weave that never resolved in the mask is not a trim problem — there is nothing there to trim.

The passes responsible

Fringe trim
Moves a partly-transparent pixel 72% of the way toward the lowest alpha in its window. Unprotected, this reduces a 1–2 pixel strand to about 28% of its alpha.
Thin-structure protection
Skips the trim for a pixel that is itself at or above 0.5 alpha, whose opposite neighbours along an axis are both at or above 0.5 alpha, that has background within 2 pixels on both perpendicular sides, and that has no pixel at or above 0.9 alpha within 2 pixels. The first of those four conditions means protection only covers the upper half of the 0.03–0.90 trim band: a strand already faded below half opacity is trimmed like anything else.
Known cost of that predicate
Terminal pixels at a strand’s free end, and junction centres where strands cross, can fail the test — so roughly a pixel is still lost at each free end. Recorded in the source as accepted and cosmetic.

What to do instead

  • Use Best Quality for anything with real fine structure

    Its raw edges are sharper, so the strands enter the cleanup chain with more alpha to spare.

    Fast vs Best Quality

  • Frame the mesh larger

    The strands are resolved at the model’s input size before anything else happens. A tighter crop spends more of that grid on the structure you care about.

  • Repair the ends by hand

    The loss is roughly a pixel at each free end, which is a few seconds of restore brush at a small radius rather than a rebuild.

    Open the image editor

  • Ask whether you need per-strand transparency at all

    For a product listing, a mesh that reads as mesh usually beats a mesh that is technically transparent between every strand and visually noisy.

What will not help

  • Feathering or smoothing in the editor to "even it out"

    Both operations widen the soft band, and a strand that is one pixel wide has no room for a wider band. They soften exactly the structure you are trying to keep.

Still true after all of the above: A strand narrower than the model grid was never in the mask, and a protected strand still loses about a pixel at each free end. Both are accepted limits, not bugs waiting to be fixed.

What this page does not claim

  • That the list is complete. These are the failure modes we have traced to a specific cause in our own pipeline. Others certainly exist; they are simply not understood well enough to write down honestly yet.
  • That we have measured how much each workaround helps. The mechanisms are read from the code. The remedies are reasoned from those mechanisms and from ordinary practice — where we have not measured an improvement, the case says so rather than implying a number.
  • That a competitor would do better. Some of these are inherent to segmentation from a single photograph and some are inherent to the file format. We are not in a position to test anyone else’s product, so we make no claim about it.
  • That any of it is a reason to send us your files. NSS Background Remover has no image-processing server to send them to. A hard case is processed on your device exactly like an easy one.