Skip to main content

[!WARNING] This is an experimental project to add DirectML and Windows ML support to rembg. This repository is for internal verification purposes only and must not be used by third parties. After verification, the changes here will be fed back to the upstream rembg project.


Rembg Logo

Rembg is a tool to remove image backgrounds. It can be used as a CLI, Python library, HTTP server, or Docker container.

License Hugging Face Spaces Streamlit App Open in Colab RepoMapr

danielgatis%2Frembg | Trendshift

Sponsors

PhotoRoom PhotoRoom Remove Background API
https://photoroom.com/api

Fast and accurate background remover API

If this project has helped you, please consider making a donation.

Requirements

python: >=3.11, <3.14

Installation

Choose one of the following backends based on your hardware:

CPU support

pip install "rembg[cpu]" # for library
pip install "rembg[cpu,cli]" # for library + cli

GPU support (NVIDIA/CUDA)

First, check if your system supports onnxruntime-gpu by visiting onnxruntime.ai and reviewing the installation matrix.

onnxruntime-installation-matrix

If your system is compatible, run:

pip install "rembg[gpu]" # for library
pip install "rembg[gpu,cli]" # for library + cli

Note: NVIDIA GPUs may require onnxruntime-gpu, CUDA, and cudnn-devel. See #668 for details. If rembg[gpu] doesn't work and you can't install CUDA or cudnn-devel, use rembg[cpu] with onnxruntime instead.

GPU support (AMD/ROCm)

ROCm support requires the onnxruntime-rocm package. Install it by following AMD's documentation.

Once onnxruntime-rocm is installed and working, install rembg with ROCm support:

pip install "rembg[rocm]" # for library
pip install "rembg[rocm,cli]" # for library + cli

GPU support (Windows/DirectML)

DirectML support requires the onnxruntime-directml package, which is only available on Windows.

pip install "rembg[dml]" # for library
pip install "rembg[dml,cli]" # for library + cli

When onnxruntime-directml is installed, the DirectML execution provider is selected automatically.

GPU/NPU support (Windows ML)

Windows ML dynamically downloads and manages hardware-specific execution providers (GPU and NPU) on Windows 11. It requires the onnxruntime-windowsml and windowsml packages, which are only available on Windows.

pip install "rembg[winml]" # for library
pip install "rembg[winml,cli]" # for library + cli

When these packages are installed, the best execution provider for the device is selected automatically from the installed providers. Hardware-specific providers can be listed and downloaded with the e command (downloading can take a few minutes; without it, the bundled DirectML provider is used):

rembg e        # download execution providers
rembg e --list # list execution providers and their state

Note: Acquiring execution providers through the Windows ML catalog requires Windows 11, version 24H2 or greater. Execution providers are delivered through Windows Update, so rembg e fails (after a long wait) while Windows Update is paused.

Note: Some execution providers (e.g. NVIDIA TensorRT-RTX) compile the model at session creation. For large models this can take more than a minute, and it happens on every process start. If startup time matters more than inference speed, pin the bundled DirectML provider instead:

session = new_session("birefnet-general", providers=["DmlExecutionProvider", "CPUExecutionProvider"])

or with the CLI: rembg i -x '{"providers": ["DmlExecutionProvider", "CPUExecutionProvider"]}' ...

ONNX Runtime can also pre-compile a model once and reuse the result (onnxruntime.ModelCompiler), which eliminates this startup cost. rembg does not implement this compilation cache yet.

Usage as a CLI

After installation, you can use rembg by typing rembg in your terminal.

The rembg command has 4 subcommands, one for each input type:

  • i - single files
  • p - folders (batch processing)
  • s - HTTP server
  • b - RGB24 pixel binary stream

You can get help about the main command using:

rembg --help

You can also get help for any subcommand:

rembg <COMMAND> --help

rembg i

Used for processing single files.

Remove background from a remote image:

curl -s http://input.png | rembg i > output.png

Remove background from a local file:

rembg i path/to/input.png path/to/output.png

Omit the output path (writes <input_stem>.out.png next to the input):

rembg i path/to/input.png
# → path/to/input.out.png

If stdout is redirected (e.g. rembg i input.png > out.png), the output is written to stdout instead.

Specify a model:

rembg i -m u2netp path/to/input.png path/to/output.png

Return only the mask:

rembg i -om path/to/input.png path/to/output.png

Apply alpha matting:

rembg i -a path/to/input.png path/to/output.png

Pass extra parameters (SAM example):

rembg i -m sam -x '{ "sam_prompt": [{"type": "point", "data": [724, 740], "label": 1}] }' examples/plants-1.jpg examples/plants-1.out.png

Pass extra parameters (custom model):

rembg i -m u2net_custom -x '{"model_path": "~/.u2net/u2net.onnx"}' path/to/input.png path/to/output.png

Use the withoutBG cloud API:

Get 50 free credits with signup. Sample results.

export WITHOUTBG_API_KEY=sk_...
rembg i -m withoutbg path/to/input.png path/to/output.png

Or pass the key via extras:

rembg i -m withoutbg -x '{"api_key":"sk_..."}' path/to/input.png path/to/output.png

rembg p

Used for batch processing entire folders.

Process all images in a folder:

rembg p path/to/input path/to/output

Watch mode (process new/changed files automatically):

rembg p -w path/to/input path/to/output

rembg s

Used to start an HTTP server.

rembg s --host 0.0.0.0 --port 7000 --log_level info

For complete API documentation, visit: http://localhost:7000/api

Disable the Gradio UI (reduces idle CPU usage):

rembg s --no-ui

Remove background from an image URL:

curl -s "http://localhost:7000/api/remove?url=http://input.png" -o output.png

Remove background from an uploaded image:

curl -s -F file=@/path/to/input.jpg "http://localhost:7000/api/remove" -o output.png

rembg b

Process a sequence of RGB24 images from stdin. This is intended to be used with programs like FFmpeg that output RGB24 pixel data to stdout.

rembg b <width> <height> -o <output_specifier>

Arguments:

Argument Description
width Width of input image(s)
height Height of input image(s)
output_specifier Printf-style specifier for output filenames (e.g., output-%03u.png produces output-000.png, output-001.png, etc.). Omit to write to stdout.

Example with FFmpeg:

ffmpeg -i input.mp4 -ss 10 -an -f rawvideo -pix_fmt rgb24 pipe:1 | rembg b 1280 720 -o folder/output-%03u.png

Note: The width and height must match FFmpeg's output dimensions. The flags -an -f rawvideo -pix_fmt rgb24 pipe:1 are required for FFmpeg compatibility.

Usage as a Library

Input and output as bytes:

from rembg import remove

with open('input.png', 'rb') as i:
    with open('output.png', 'wb') as o:
        input = i.read()
        output = remove(input)
        o.write(output)

Input and output as a PIL image:

from rembg import remove
from PIL import Image

input = Image.open('input.png')
output = remove(input)
output.save('output.png')

Input and output as a NumPy array:

from rembg import remove
import cv2

input = cv2.imread('input.png')
output = remove(input)
cv2.imwrite('output.png', output)

Force output as bytes:

from rembg import remove

with open('input.png', 'rb') as i:
    with open('output.png', 'wb') as o:
        input = i.read()
        output = remove(input, force_return_bytes=True)
        o.write(output)

Batch processing with session reuse (recommended for performance):

from pathlib import Path
from rembg import remove, new_session

session = new_session()

for file in Path('path/to/folder').glob('*.png'):
    input_path = str(file)
    output_path = str(file.parent / (file.stem + ".out.png"))

    with open(input_path, 'rb') as i:
        with open(output_path, 'wb') as o:
            input = i.read()
            output = remove(input, session=session)
            o.write(output)

withoutBG cloud API:

Get 50 free credits with signup. Sample results.

from rembg import remove, new_session

session = new_session("withoutbg", api_key="sk_...")
# or set WITHOUTBG_API_KEY and omit api_key=

with open('input.png', 'rb') as i:
    with open('output.png', 'wb') as o:
        output = remove(i.read(), session=session)
        o.write(output)

For more examples, see the examples page.

Usage with Docker

CPU Only

Replace the rembg command with docker run danielgatis/rembg:

docker run -v .:/data danielgatis/rembg i /data/input.png /data/output.png

NVIDIA CUDA GPU Acceleration

Requirements: Your host must have the NVIDIA Container Toolkit installed.

CUDA acceleration requires cudnn-devel, so you need to build the Docker image yourself. See #668 for details.

Build the image:

docker build -t rembg-nvidia-cuda-cudnn-gpu -f Dockerfile_nvidia_cuda_cudnn_gpu .

Note: This image requires ~11GB of disk space (CPU version is ~1.6GB). Models are not included.

Run the container:

sudo docker run --rm -it --gpus all -v /dev/dri:/dev/dri -v $PWD:/data rembg-nvidia-cuda-cudnn-gpu i -m birefnet-general /data/input.png /data/output.png

Tips:

  • You can create your own NVIDIA CUDA image and install rembg[gpu,cli] in it.
  • Use -v /path/to/models/:/root/.u2net to store model files outside the container, avoiding re-downloads.

Models

Local ONNX models are automatically downloaded and saved to ~/.u2net/ on first use. The withoutbg model is a cloud API backend and does not download a local model.

Available Models

  • u2net (download, source): A pre-trained model for general use cases.
  • u2netp (download, source): A lightweight version of u2net model.
  • u2net_human_seg (download, source): A pre-trained model for human segmentation.
  • u2net_cloth_seg (download, source): A pre-trained model for Cloths Parsing from human portrait. Here clothes are parsed into 3 category: Upper body, Lower body and Full body.
  • silueta (download, source): Same as u2net but the size is reduced to 43Mb.
  • isnet-general-use (download, source): A new pre-trained model for general use cases.
  • isnet-anime (download, source): A high-accuracy segmentation for anime character.
  • sam (download encoder, download decoder, source): A pre-trained model for any use cases.
  • birefnet-general (download, source): A pre-trained model for general use cases.
  • birefnet-general-lite (download, source): A light pre-trained model for general use cases.
  • birefnet-portrait (download, source): A pre-trained model for human portraits.
  • birefnet-dis (download, source): A pre-trained model for dichotomous image segmentation (DIS).
  • birefnet-hrsod (download, source): A pre-trained model for high-resolution salient object detection (HRSOD).
  • birefnet-cod (download, source): A pre-trained model for concealed object detection (COD).
  • birefnet-massive (download, source): A pre-trained model with massive dataset.
  • bria-rmbg (download, source): A state-of-the-art background removal model by BRIA AI.
  • withoutbg (API, sample results): Cloud API backend. Get 50 free credits with signup. Pass api_key via -x / new_session(...), or set WITHOUTBG_API_KEY. Images are sent to withoutBG's servers; max upload size is 20 MB.

Environment Variables

Variable Description
U2NET_HOME Path to the directory where models are stored. Defaults to $XDG_DATA_HOME/.u2net (or ~/.u2net if XDG_DATA_HOME is not set).
XDG_DATA_HOME Base data directory used when U2NET_HOME is not set. Defaults to ~.
MODEL_CHECKSUM_DISABLED When set (e.g. MODEL_CHECKSUM_DISABLED=1), disables hash verification for downloaded models. This is useful if you want to use your own custom/converted model files without rembg re-downloading the originals.
OMP_NUM_THREADS Sets the number of threads used by ONNX Runtime for inference.
WITHOUTBG_API_KEY API key for the withoutbg cloud session. Get 50 free credits with signup.

Using custom model files

If you need to use a modified version of a model (e.g. converted to a different ONNX IR version for compatibility with an older CUDA toolkit), you can prevent rembg from overwriting it:

  1. Set MODEL_CHECKSUM_DISABLED=1
  2. Place your custom .onnx file in the models directory (~/.u2net/ by default) with the expected filename (e.g. u2net.onnx)
  3. Rembg will detect the file exists and use it without re-downloading

FAQ

When will this library support Python version 3.xx?

This library depends on onnxruntime. Python version support is determined by onnxruntime's compatibility.

Support

If you find this project useful, consider buying me a coffee (or a beer):

Buy Me A Coffee

License

Copyright (c) 2020-present Daniel Gatis

Licensed under the MIT License.

Metadata

Release files for rembg-directml 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rembg-directml 1.1.0
File Size Uploaded
rembg_directml-1.1.0.tar.gz 38.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rembg-directml 1.1.0
File Interpreter ABI Platform
rembg_directml-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 91.7 kB

Release files / rembg_directml-1.1.0.tar.gz

Download URL rembg_directml-1.1.0.tar.gz
Size 38.4 kB
Tags Source
SHA-256 checksum
How to use checksums
de1fbab31c3260aa7e444ddc78aca04cb896183a18b6c76ddee6735982ceb381
BLAKE2b-256 checksum
How to use checksums
47f711afff2e904fc8296328ac61b43fc96484b3ffc38a483952d61bb3a46729
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.2

Release files / rembg_directml-1.1.0-py3-none-any.whl

Download URL rembg_directml-1.1.0-py3-none-any.whl
Size 53.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
91731314bc45b84eee9549c3be41ac7989b684046b173825ce0ceac9ec2a36b8
BLAKE2b-256 checksum
How to use checksums
bbbea18205a9c7267156d637f84520ca3d422d5fb089fbe80c7fb26e72a5153c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.2

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page