MiniMax-Remover (BMO)
Erase people and objects from video locally, no API key required
- images
- masks
- images
The one-sentence pitch
Somebody walked through your otherwise-perfect shot and now you have to get them out frame by frame. That's the whole job this node exists for. It's a ComfyUI wrapper around MiniMax-Remover, a research model from Fudan University (arXiv 2505.24873) that does diffusion-based video object removal - and despite the name it has nothing to do with the MiniMax company. No API, no key, CC0 weights, runs on your own GPU. The "BMO" fork by casterpollux is the version you'll find in ComfyUI Manager, and its real contribution is making the thing usable: auto-downloading models and killing the resolution errors that plagued the original.
Why reach for it in a workflow
Image inpainting has mostly been eaten by instruction-editing models - tell Qwen-Image-Edit or Flux Kontext what to change and the whole frame gets re-rendered. Video is different: there's no locally-runnable "just describe it away" substitute at this quality, and a full-frame re-render would make the rest of the clip flicker. So mask-based video inpainting stays the real answer when a moving object needs to vanish while the camera, lighting and background stay put. This node is the last mile of that pipeline - frames and a mask in, masked pixels regenerated consistently across all frames, so the removal tracks the object instead of leaving a smear.
How it works
Under the hood this is essentially Wan architecture wearing a different name: a Wan-style 3D transformer, the Wan VAE, and a UniPC scheduler running fp16 on your default ComfyUI device (peek at transformer_minimax_remover.py and you'll spot the Wan rotary-embedding stack). Your frames become the fixed "known good" context; the masked regions are denoised from noise over num_inference_steps. The bit people don't expect: before that, the iterations setting expands your mask via binary dilation - the model paints a slightly larger area than you drew so it can blend the hole shut cleanly instead of leaving a hard seam. The node caches the loaded pipeline, so after the first run in a session it's instant. Output is a single IMAGE tensor: same frames back, object gone.
The inputs that actually matter
Most of them you can leave alone. The two you must get right are images (your video frames, straight from VHS_LoadVideo or similar) and masks (one binary mask per frame, in the same resolution). After that:
iterations(default 6) - mask expansion. If you see artifacts hugging the edge of the removed area, the README's own troubleshooting says nudge it up to 6–10.num_inference_steps(default 12, range 6–50) - the quality/speed dial. 12 is the official sweet spot; you rarely gain from going higher.seed(default 42) - reproducible, and the cheap lever when one removal comes back ugly.- Optional:
auto_download(default on) and the three model paths, all defaulting to"auto". Leave them until you know why you need them - auto-detection checks the node folder, thenComfyUI/models, then your cache.
The only output is images; wire it into VHS_VideoCombine and you're done.
Installing
Easiest: ComfyUI Manager → "Install Custom Nodes" → search "MiniMax-bmo" → install, restart. Manual is equally short:
cd ComfyUI/custom_nodes
git clone https://github.com/casterpollux/MiniMax-bmo
cd MiniMax-bmo
pip install -r requirements.txt
Two traps right out of the gate. First, the README tells you to cd MiniMax-Remover after cloning - the folder is actually MiniMax-bmo; use the right name or you'll get a confusing error. Second, first use triggers a model download of roughly 2–3 GB (a ~500 MB VAE plus a ~2 GB transformer) from HuggingFace's zibojia/minimax-remover repo - don't mistake that progress bar for a hang. (One README line claims 25–30 GB; that's stale text from the original model.)
Where people get burned
Dependency pins. This pack pins diffusers==0.33.1, transformers==4.41.2, accelerate==0.30.1, opencv-python==4.9.0.80. The repo is essentially a monument to the OpenCV and DWPose conflicts those pins cause. If installing it seems to downgrade your torch to CPU, reinstall CUDA torch first, then:
pip install -r requirements.txt --no-deps --force-reinstall diffusers transformers accelerate
If other nodes start misbehaving after the install, blame these pins first - a dedicated venv is a legitimate strategy here.
Temper your expectations on quality. The model is good, but it is not magic. A real user in the wild put it plainly: results are "nowhere near their perfect examples" and the output "invariably leaves artifacts." The fix everyone lands on is better masks, not better luck - track the object properly (DaVinci, Nuke, or Mocha all work) and export a clean white-on-black mask, because the remover faithfully respects whatever sloppiness you feed it.
VRAM. It processes the whole clip at once, and long 1080p clips get hungry. Drop resolution, enable model offloading, close other GPU hogs, and run a short clip first to sanity-check the mask.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| masks | MASK | — | |
| num_inference_steps | INT | 126–50 | — |
| iterations | INT | 61–20 | — |
| seed | INT | 420–18446744073709550000 | — |
| auto_downloadopt | BOOLEAN | true | Automatically download models if not found |
| vae_pathopt | STRING | auto | Path to VAE model directory (auto = automatic detection) |
| transformer_pathopt | STRING | auto | Path to Transformer model directory (auto = automatic detection) |
| scheduler_pathopt | STRING | auto | Path to Scheduler config directory (auto = automatic detection) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |