H3 Relay Person Remover
Delete someone from a clip without a reshoot
- model
- clip
- video_vae
- audio_vae
- masked_source
- clean_first_frame
- clean_frames
- generated_audio
MiniMax H3 is unusually good at video-to-video editing, and the thing it does best is arguably the least glamorous: you show it a clip, tell it the background is what you care about, and it paints the person out. Native synced audio, strong motion transfer, and short clips are exactly the shape of a removal job.
H3 Relay Person Remover is the wrapper that makes that practical - it hides the whole windowed continuation graph behind one node with six inputs you actually care about, and gives you a preview grid so you can judge each window before paying for the rest.
Credit where it's due: the author (akatz_ai on r/comfyui) has shipped a string of well-received video node packs - DepthFlow, DepthCrafter - and this one is a day-one H3 tool with no reddit chatter behind it yet. Read the limits below as the author's own, verified on one RTX 4090 with ComfyUI 0.37.0, not as community consensus.
What you feed it
model,clip,video_vae,audio_vae- same as any native H3 Ref2VA graph. Both VAEs matter; H3 generates picture and sound together.masked_source- the green-painted video from H3 Relay Green Mask.clean_first_frame- a version of source frame zero with the person gone, matching the source resolution and framing exactly. Make it externally (image editor, Qwen Image Edit, inpainting). This is a visual anchor, not a pixel lock.prompt- the removal description. The default is fine for a first test. Describe the person if you're also steering SAM earlier; this one steers the reconstruction.steps- 12 by default, and 12 is what was validated. Leave it.seed- the master seed. Each window derives its own value from it, so changing this wipes the window set. Keep it fixed and reroll individual windows instead.
Optionally window_frames (default "22") and window_controls (a JSON blob the frontend manages - don't hand-edit it).
What comes out
clean_frames (IMAGE) and generated_audio (AUDIO). Only generated raw frames and audio feed continuation, so the output is genuinely source-aligned: exactly your frame count, at 24 fps, with overlaps trimmed.
The output is silent by default, which surprises people: generated_audio exists for internal continuation, but the shipped workflow doesn't use it. Connect the original soundtrack to the final Create Video node - and remember that removing someone visually doesn't remove their voice.
How it works, roughly
It expands into native ComfyUI nodes per window: the clean boundary frame goes in as the image reference, the masked source window as the video reference, a guide node pins the source window at frame 0, and the sampler runs er_sde + simple at CFG 1 with positive and negative both set to the guided conditioning. The first window samples window_frames; every later window asks for window_frames + 17 and lets native H3 history shorten the target back down, importing 18 decoded frames of video and audio history from what it already generated.
That last bit is why the default is 22 frames and not 5 - continuation wants 18 frames of history, and a five-frame H3 clip can't supply it.
Each completed window publishes an MP4 preview card on the node - hover to play, tap on touch - before the next window starts. Every card has a seed field and a Reroll button: rerolling window four keeps one through three and rebuilds everything after it. There are no locks to manage; unchanged inputs reuse completed windows automatically, including after a restart.
Install
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/akatz-ai/h3-relay.git
or Manager → search H3 Relay → install → restart. Then pull the weights from the pack's manifest: H3 Ref2VA pruned INT8 ConvRot into models/diffusion_models, Qwen3VL 32B NVFP4 AWQ into models/text_encoders, H3 video VAE (fp16) and audio VAE (fp32) into models/vae, SAM 3.1 into models/checkpoints. FFmpeg and ffprobe must be on PATH - the preview and video plumbing shells out to them.
The catch: the Person Remover LoRA adapter (models/loras/H3-Person-Remover-V1.safetensors) is not in the repo and its public release is still pending. Right now this workflow installs cleanly and won't run end-to-end without it. LTX, RIFE, MMH3 Ultimate and the FastH3 VSA stack are all irrelevant to removal - don't install them for this.
Where it goes wrong
Person Remover V1 requires a 24 fps source/Use RGB source dimensions divisible by 32- both are hard requirements. Resize and resample before masking, or you'll be redoing the mask too.Clean anchor must match the source resolution and framing- your cleaned first frame drifted. Same dimensions, same crop, or it refuses.- The person survives the first window. Documented, not a fluke: in the author's 77-frame test with 39-frame windows, window one still contained the person even though timing and assembly were correct. Keep 22 frames; larger windows need more memory and remove less reliably.
- Memory climbs with clip length. This is ordinary ComfyUI graph execution, not the pack's disk-staged runner, so CPU RAM grows with the clip. Start around five seconds and cut at scene changes with a new clean anchor.
- Qwen encoder fell back to CPU. Load CLIP's
defaultcan pick CPU under low-VRAM settings; the shipped workflow routes it through native Select CLIP Device set togpu:0. The node logs the load device it got. - License, seriously. The H3 weights are under the MiniMax H3 Community License, whose Applicable Territory excludes the US, EU, UK and South Korea. The pack being GPL-3.0 does nothing about the model terms, and the adapter inherits them. Check where you stand before distributing anything.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| video_vae | VAE | — | |
| audio_vae | VAE | — | |
| masked_source | IMAGE | — | |
| clean_first_frame | IMAGE | — | |
| fps | FLOAT | 24.00 | — |
| prompt | STRING | Remove the green-masked person and reconstruct the background. Preserve the rest of the video, including its camera motion and frame timing. | — |
| seed | INT | 9042340–18446744073709550000 | Master seed. Windows derive distinct seeds from it. Changing it clears cached window selections; keep fixed for per-window rerolls. |
| steps | INT | 121–100 | — |
| window_framesopt | COMBO | 22 | H3 uses 17n + 5 frames at 24 fps: 22 (0.92s), 39 (1.63s), 56 (2.33s), 73 (3.04s), 90 (3.75s), 107 (4.46s), 124 (5.17s), up to 362 (15.08s). 22 is the proven removal default. Larger windows need more memory and may remove people less reliably. The relay always carries 18 generated history frames. |
| window_controlsopt | STRING | {} | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| clean_frames | IMAGE | — |
| generated_audio | AUDIO | — |