🎨 Image and Design Free Forever

Free Background Remover

Cut any subject out of its background using a real AI segmentation model that runs right in your browser. Get a clean transparent PNG, swap in a solid color or new background image, and feather the edges for a natural blend.

AI model

Fast works well for most images. Switch to High quality if a result comes back rough around the edges, it downloads once and is slower to run.

Drop an image, or click to choose
JPG, PNG, WebP · runs entirely in your browser, nothing is uploaded

Why edges used to look dirty. A camera records every edge pixel as a blend of the subject and whatever was behind it. Photograph someone pale against a dark backdrop and the half-covered pixels around their outline are genuinely dark, whatever mask you apply. Drop that on a white page and you see a dark rim.

Most tools try to hide this by blurring and shrinking the cutout, which trades a visible rim for lost hair. This one un-mixes instead: it estimates the old background colour near each edge pixel and solves for what the subject colour must have been underneath. The rim goes away without eroding anything.

Two models, pick the one the image needs. Fast (4.4 MB) is the default and handles most photos well. High quality (167 MB) is the same architecture with more parameters, better at holding fine detail like stray hair or a low-contrast edge. It costs a bigger one-time download and a slower run, so it's opt-in rather than default.

Why a logo sometimes keeps its caption and sometimes loses it. The model looks for the one salient object in a frame, not everything that isn't background. A logo above a line of text, or a chart next to a wordmark, can lose the text or bars entirely because they don't read as "the subject." Turning on Keep all elements fixes this on solid-background graphics by adding a colour-based mask alongside the model's, so anything clearly not the background colour is kept regardless of what the model thought.

Everything runs on your device. The AI model is downloaded once and cached, then all processing happens in your browser. No image is ever uploaded, and there is no per-image cost or limit.

About This Tool

A neural network that runs in your browser tab, not on somebody's server

Most background removers upload your photo, process it on a GPU somewhere, and send back a cutout. This one does not, because there is nothing to upload to. It loads u2netp.onnx, a compact version of the U^2-Net salient object detection model, and runs it through onnxruntime-web inside the page using WebAssembly.

The first cutout on a fresh visit is slower because the model weights download once and then cache in the browser. Every run after that skips straight to inference. Close the tab and the photo, the mask and the output are gone.

What actually gets composited

The output you download is three things drawn on top of each other in a fixed order. Understanding the stack explains most of the controls.

layer 3Cleaned cutoutThe subject, with a shaped alpha edge and colour-decontaminated pixels near the boundary.
layer 2Chosen backgroundTransparent, a flat colour, a gradient, a blurred copy of your original, or an uploaded image.
layer 1Working canvasYour photo decoded onto a canvas and downscaled if it's larger than the working resolution ceiling.

One compose() function draws this stack, and it's the same function used for the live preview and the final export. That's deliberate. What you see on screen comes from the identical code path that produces the file, so there's no category of bug where the preview and the download disagree.

The pipeline, left to right

01NormaliseThe image is drawn onto a canvas and, if either dimension exceeds the working resolution ceiling, scaled down to keep memory and inference time predictable.
02SegmentThe canvas is resized to 320x320, normalised with ImageNet mean and std, and fed to the ONNX session as an NCHW tensor. The model returns a single channel saliency map.
03UpscaleThe 320x320 mask is bilinearly upscaled back to full working resolution, pixel by pixel, so the edge doesn't stair-step.
04Shape and decontaminateA smoothstep curve pushes confident pixels to fully in or fully out, and a local colour solve removes background residue from semi-transparent edge pixels.

The decontamination step

// solve C = aF + (1-a)B for F, using nearby background colour as B function decontaminate(rgba, alpha, w, h, radius, strength) { // for every partially covered edge pixel: var B = averageColourNearby(alpha < 0.04); var F = (C - (1 - a) * B) / a; out = C + (clamp(F, 0, 255) - C) * strength; }

Cutouts made from a matte alone tend to carry a faint ring of the old background colour, dark hair against a white wall keeps a grey fringe, a subject on green keeps a green tint. This step estimates what the background colour was near each edge pixel and algebraically removes its contribution, so the leftover colour belongs to the subject rather than the wall behind it. Pixels with no clean background nearby, a subject touching the frame edge for instance, fall back to a global background average.

The one slider

Edge cleanup is a single 0 to 1 value that drives three things at once rather than exposing three separate sliders: how aggressively the alpha curve clamps weak and strong pixels to 0 and 1, how much colour decontamination strength and radius to apply, and, only near the top of the range, a small feather blur on the alpha channel. Balanced settings favour the curve and decontamination; pushing toward Maximum adds feathering for a softer edge on hair and fur, at some cost to crispness on hard product edges.

Two models, because one size doesn't fit every photo

The tool ships two versions of the same architecture. Fast is u2netp, 4.4 MB, and is the default for everyone. High quality is the full u2net, 167 MB, about 38 times heavier. Same network shape, more parameters, better at holding onto fine detail: stray hair, low contrast edges, subjects that don't stand cleanly apart from their background.

Fast is right most of the time and there's no reason to make everyone pay a 167 MB download for photos that don't need it. High quality is there when a result comes back rough, picked once per session and cached after that, same as Fast. The tradeoff is real: a bigger download the first time it's selected, and a slower run on every image afterward, since there's more network to push through WebAssembly. The download progress bar and cancel button below exist mainly because of this option, a 167 MB fetch on a slow connection is not something you want to sit through with no feedback and no way out.

Why a logo keeps its caption sometimes and loses it other times

U^2-Net is a salient object detector. It was trained to find the one thing in a frame that draws the eye, not to separate "everything that isn't background" from the background. Point it at an emblem sitting above a line of text, or a chart with a small logo in the corner, and it will often keep the emblem and score the text or the bars as background, because they're thinner, lower contrast, and don't read as a single object the way the model was trained to prioritise.

That's not a bug in this tool, it's what the model is for, and no amount of slider tuning fixes it because the mask genuinely doesn't cover those pixels. Switching to the High quality model helps somewhat, since it holds detail better, but it's the same kind of model underneath and can still drop a low-contrast secondary element entirely.

The real fix here is the Keep all elements toggle. When it's on, the tool samples a ring of pixels around the border of the image to estimate the background colour, then builds a second mask from plain colour distance: any pixel that's clearly not that background colour is treated as foreground, independent of whatever the model thought. The final matte is the maximum of the two masks, so the model still supplies the clean, shaped edge around the main subject, and the colour mask fills in whatever the model dropped elsewhere in the frame. If the border sampling finds the background isn't actually flat, a busy photo bleeding to the frame edge, colour distance would just tag half the scene as foreground, the tool skips the merge and falls back to the model's mask alone rather than making things worse. This is why the toggle is off by default and works best on the kind of graphic it was built for: a logo, a wordmark, a chart, or a diagram sitting on a solid or near-solid background, not a photograph.

Controls, and what each one actually changes

ModelFast (4.4 MB, default) or High quality (167 MB). Downloaded the first time you pick it and stored in your browser, so later visits load it from your device. Switching models re-runs the current photo with the new model.
Keep all elementsUnions the model's mask with a background-colour-distance mask, to stop logos, text, and chart elements on a flat background from being dropped as "not the salient object." Off by default; only engages when the border of the image reads as a genuinely flat colour.
Edge cleanupOne slider, four labelled bands (Light, Balanced, Strong, Maximum). Adjusts the alpha curve clamp points, the decontamination radius and strength, and whether a feather blur is applied.
Background modeTransparent, flat colour, an eight stop gradient library, a blurred version of your own photo, or an uploaded image cover fitted to the frame. All render live rather than being applied only at export.
Export formatCanvas toBlob() to PNG, WebP or JPEG.
JPEG has no alpha channel. Export a transparent cutout as JPG and the tool flattens it onto white first, because the format physically cannot store transparency. If the subject needs to sit on top of something later, keep PNG or WebP.

Progress and cancelling

Model downloads are read through a streamed fetch() rather than handed straight to the ONNX runtime, so actual bytes received against the model's known size drive the progress bar, not a guess. Cancel aborts that fetch immediately through an AbortController. Once the model has downloaded and inference starts, cancel stops the pipeline at the next checkpoint, between segmentation and mask upscaling, between upscaling and the optional colour merge, rather than killing the run mid-frame, since a single WebAssembly inference call can't be interrupted once it starts. In practice that means Cancel is closest to instant during the download, which is also the slow part on the High quality model, and takes effect within a beat once inference is underway.

Why local inference matters here

Background removal is one of the few image tasks where the privacy argument is concrete rather than theoretical. The photos people cut out are ID photos, internal product mockups, medical documentation, family pictures. A server side tool means those files sit in someone's request logs and object storage, governed by a retention policy you did not read.

Running the model client side removes that question entirely. The tradeoff is honest: WebAssembly inference on a single thread is slower than a datacentre GPU, and the model has to download once. For a handful of images that's a good trade. For a batch of five hundred it isn't, and a server pipeline is the right tool.

Where the work happens

Model downloadOne time fetch of the ONNX weights from your server, then cached by the browser.
InferenceYour device, through WebAssembly, single threaded for compatibility with pages that aren't cross-origin isolated. No image data is transmitted.
Compositing and exportCanvas 2D, in the page.

Model and runtime

  • rembg is the source of the u2netp.onnx weights this tool loads, released under the MIT licence.
  • U^2-Net is the salient object detection architecture the model is built on, if you want the underlying research. u2netp is the pruned, lighter variant, sized for a browser rather than a server.
  • ONNX Runtime Web executes the model as WebAssembly. It's the same runtime used server side, compiled for the browser, MIT licensed.
  • toBlob for the export step and its quality parameter behaviour across formats.

Where cutouts get used

Product photos for a marketplace listing that demands a white background, headshots for a company directory that need to match each other, isolating a logo from a scanned letterhead, building a sticker pack from phone photos, or replacing a cluttered room behind a property photo before it goes to a client. The local processing also makes it usable for anything with a confidentiality question attached, which server based tools quietly rule out.

Common Questions

FAQ: Free Background Remover

Both. The underlying AI model was trained to recognize a broad range of subjects, people, animals, products, vehicles, and general objects, so it handles portraits and product photography equally well.

Yes, set Replace Background With to Solid Color and pick any color from the picker. When you download using the Download With Background button, that color is filled in behind your cutout automatically.

Fine detail like loose hair strands or fur is genuinely difficult for any segmentation model to trace perfectly. Try raising the Edge Feathering slider a couple of pixels, it softens small rough spots so the transition reads more naturally.

Download PNG keeps a transparent background. WebP also keeps transparency and makes smaller files. JPG cannot store transparency, so a transparent result is placed on white. Pick a colour, gradient, blurred or image background first if you want it baked in. You can also copy the result straight to the clipboard.

No. The segmentation model runs locally in your browser using WebAssembly. Your photo is processed entirely on your own device and is never transmitted anywhere.