OmniPaint
[ICCV 25] OmniPaint: Mastering Object-Oriented Editing via Disentangled Insertion-Removal Inpainting
Install / Use
/learn @yeates/OmniPaintREADME
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.
<div align="center"> <img src="https://visitor-badge.laobi.icu/badge?page_id=yeates.OmniPaint" width="1"> </div>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}
}
Related Skills
node-connect
342.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
342.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.7kCommit, push, and open a PR
