Nodes/ComfyUI-GGUF-Loader/LTX-2.3 Remove Person (inpaint) ⚡
ComfyUI Node

LTX-2.3 Remove Person (inpaint) ⚡

Remove a person from a video without wrecking the scene

By ChrisColeTech·Created 18 days ago·Updated about 23 hours ago· 7
LTX-2.3 Remove Person (inpaint) ⚡
  • model
  • clip
  • vae
  • audio_vae
  • video
  • mask
  • start_image
  • model
  • positive
  • negative
  • latent
  • frame_rate
  • source_frames
  • blend_mask
prompt
negative_prompt
width768
height512
batch_size1
inpaint_loranone
keep_original_audiotrue
mask_dilation5

Videos, unlike photos, come with motion - and removing a person from a moving clip is the kind of task that shows exactly why LTX-2.3's masked inpainting is built the way it is. This node is stage one of the pack's verified person-replacement pipeline: it regenerates the masked region (typically a person) using the official LTX-2.3 in/outpainting IC-LoRA, following the recipe Wan2GP proved out. The result is a clean plate: your person gone, the background reconstructed, and - because of the blend step that follows - every pixel outside the mask left pixel-identical.

The mechanism is worth understanding because it's nothing like img2img inpainting. The per-frame mask gets dilated 5px, painted chroma green (#66FF00), green-padded at the tail, and appended as clean guide tokens at strength exactly 1.0, alongside the ltx-2.3-22b-ic-lora-in-outpainting-0.9 LoRA (loaded in-node from your loras folder). The LoRA learned "green = regenerate"; the mask deliberately never touches the denoise mask. Sample, crop the guides, decode, and the green silhouette is what tells the model where to rebuild.

The inputs that matter

  • video, vae / audio_vae (the loader's video_vae and audio_vae outputs), model, clip - the kit stack. video sets length and frame rate from itself.
  • mask - per-frame mask, white = regenerate. Produce it with comfy-core's SAM3 nodes (SAM3_Detect with a prompt like "woman", or SAM3_VideoTrackSAM3_TrackToMask); a single-frame mask tiles across the clip. You'll need sam3.1_multiplex_fp16.safetensors from Comfy-Org/sam3 in models/checkpoints.
  • prompt - describe the scene without the removed subject: "An empty room with a wooden floor and beige walls, doorway in the background, static camera." This is where people trip up - describe what should fill the gap, not the person you're erasing.
  • inpaint_lora - the outpainting IC-LoRA, loaded at its trained strength 1.0. none disables the whole mechanism (for A/B only - the green fill would just be reproduced verbatim).
  • keep_original_audio (on) - keeps the source clip's own audio; off lets the model generate new audio.
  • mask_dilation (default 5) - the pre-fill dilation radius in pixels; the trained default.
  • start_image - optional identity anchor: becomes the control video's first frame verbatim (no green fill on frame 0). For person replacement, that's an image of the new person in the same scene and starting pose - the green silhouette carries the motion, this frame carries who fills it, and the prompt should then describe the scene with the new subject.

Outputs: model, positive, negative, latent, frame_rate for the sampler, plus source_frames and blend_mask, which you feed straight into LTX-2.3 Mask Blend afterward.

The chain

LTX-2.3 Remove PersonLTX-2.3 KSampler (distilled)LTX-2.3 Crop Video GuideLTX-2.3 AV DecodeLTX-2.3 Mask Blend (with source_frames/blend_mask). Decode's video → GetVideoComponents → Mask Blend's images. Then mux the original clip's audio into the final CreateVideo rather than the decoded audio latent - the round-trip through the audio VAE is lossy, and keep_original_audio only holds audio for conditioning, it doesn't guarantee the output track is bit-perfect.

Installing

cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
pip install --upgrade gguf

Restart. You need the LTX-2.3 A/V kit (DiT, Gemma-3 encoder, video + audio VAEs), the outpainting IC-LoRA, and the SAM3 checkpoint. Node under 🤖 CCTech/LTX-2.3.

Gotchas

Frame math again: width/height divisible by 32, frames divisible by 8 plus 1. If the removed-person region looks like it's being filled with the same content, check the mask isn't all-black (white = regenerate) and that inpaint_lora isn't none. And this node alone is not the whole job - without the Mask Blend stage, you'll see the regenerated region but also the subtle changes everywhere else.

Category🤖 CCTech/LTX-2.3

Inputs (15)

NameTypeDefaultDescription
modelMODEL
clipCLIP
vaeVAEThe loader's video_vae output.
audio_vaeVAEThe loader's audio_vae output.
videoVIDEOSource clip. Sets length/frame_rate from itself, same as LTXV23VidToVideo.
maskMASKPer-frame mask, white = regenerate (the person/object to remove). SAM3_Detect / SAM3_VideoTrack + SAM3_TrackToMask produce this. A 1-frame mask is tiled across the clip.
promptSTRINGDescribe the scene WITHOUT the removed subject - what the regenerated region should contain.
negative_promptSTRING
widthINT76864–16384
heightINT51264–16384
batch_sizeINT11–4096
inpaint_loraCOMBOnoneThe official ltx-2.3-22b-ic-lora-in-outpainting LoRA - loaded onto model HERE at strength 1.0 (the trained value). "none" disables the whole mechanism (for A/B only - the green fill would just be reproduced verbatim).
keep_original_audiooptBOOLEANtrueOn = output keeps the source clip's own audio unchanged. Off = the model generates new audio.
mask_dilationoptINT50–128Pre-fill mask dilation radius in pixels (trained default 5).
start_imageoptIMAGEOptional identity anchor: becomes the control video's FIRST frame verbatim (no green fill on frame 0). For person replacement: an image of the NEW person in the same scene and starting pose - the green silhouette in later frames carries the motion, this frame carries who fills it. The prompt should then describe the scene WITH the new subject.

Outputs (7)

NameTypeDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
latentLATENT
frame_rateFLOAT
source_framesIMAGE
blend_maskMASK