README.md
March 27, 2026 · View on GitHub
OmniPaint: Mastering Object-Oriented Editing via Disentangled Insertion-Removal Inpainting
ICCV 2025
Features
- 🧹 Object Removal - Remove foreground objects and their effects using only object masks
- 🖼️ Object Insertion - Seamless generative insertion of objects into existing scenes
- 📊 Novel CFD Metric - Reference-free evaluation of object removal quality
Setup
Install dependencies and download OmniPaint weights:
bash scripts/setup.sh
Run this from the repository root.
Code Usage
Object Removal
- Single image:
python scripts/omnipaint_remove.py \
--input ./demo_assets/removal_samples/images/5.jpg \
--mask ./demo_assets/removal_samples/masks/5.png \
--output_dir ./outputs \
--seed 42 \
--steps 28 \
--device cuda:0
- Directory:
python scripts/omnipaint_remove.py \
--input ./demo_assets/removal_samples/images \
--mask ./demo_assets/removal_samples/masks \
--output_dir ./outputs \
--seed 42 \
--steps 28 \
--device cuda:0
Object Insertion
- Single image:
python scripts/omnipaint_insert.py \
--background ./demo_assets/insertion_samples/backgrounds/background-2.png \
--mask ./demo_assets/insertion_samples/masks/mask-2.png \
--subject ./demo_assets/insertion_samples/subjects/subject-2.png \
--output_dir ./outputs \
--seed 42 \
--steps 28 \
--device cuda:0 \
--carvekit_device cuda:0
- Directory:
python scripts/omnipaint_insert.py \
--background ./demo_assets/insertion_samples/backgrounds \
--mask ./demo_assets/insertion_samples/masks \
--subject ./demo_assets/insertion_samples/subjects \
--output_dir ./outputs \
--seed 42 \
--steps 28 \
--device cuda:0 \
--carvekit_device cuda:0
Demo App
The demo app supports both manual mask drawing and automatic mask generation using segmentation model.
-
Gradio environment setup:
bash scripts/app_setup.shRun this if you plan to launch
app.py. The installation may take around 15 minutes due to SAM2 setup and weight downloads. -
Run the app:
python app.py
Notes
- Directory mode expects the following structure by default:
- Removal:
demo_assets/removal_samples/images/*.{jpg,png,...}with matching masks indemo_assets/removal_samples/masks/*.{jpg,png,...}(same basenames). - Insertion:
demo_assets/insertion_samples/backgrounds/background-XX.png, masks indemo_assets/insertion_samples/masks/mask-XX.png, subjects indemo_assets/insertion_samples/subjects/subject-XX.png. Direct basename alignment also works.
- Removal:
- Mask quality strongly affects insertion performance. Prefer a single connected-component mask; avoid multiple disconnected masks.
Evaluation - CFD Score
See cfd_score for setup and usage.
Citation
If you find OmniPaint useful, please cite our paper:
@inproceedings{yu2025omnipaint,
title={Omnipaint: Mastering object-oriented editing via disentangled insertion-removal inpainting},
author={Yu, Yongsheng and Zeng, Ziyun and Zheng, Haitian and Luo, Jiebo},
booktitle={ICCV},
pages={17324--17334},
year={2025}
}