SEGSDetailer For Video (SEGS/pipe)
Run the face-fix loop across every frame at once
- image_frames
- segs
- basic_pipe
- refiner_basic_pipe_opt
- scheduler_func_opt
- segs
- cnet_images
SEGSDetailer For Video is the detailer built for moving pictures. It runs the same detect-crop-resample refinement the still-image detailers do, but on a batch of frames where the masks in the SEGS span the whole clip - so a face gets cleaned up consistently across every frame instead of one image. It was written for AnimateDiff (hence the class name SEGSDetailerForAnimateDiff), and it works for any video that's just a stack of image frames.
The problem it targets is that video makes small-face mangling worse, not better: a face that's mushy in one frame is mushy in all of them, and it flickers as it changes frame to frame. Detailing per-frame independently would make the flicker worse. This node processes the frame batch together so the refinement stays coherent across time. One important structural note: it outputs refined SEGS, not a finished image - it does the detailing on the SEGS without pasting back. You paste the result onto your frames afterward with SEGS Paste. That split is deliberate and lets the video pipeline composite on its own terms.
How it works
You feed it the image frames and a SEGS whose masks are batch masks covering the clip (produced by MASK to SEGS for Video or a video detector). For each region, it crops, scales toward guide_size, and runs a sampling pass - across the frame batch - then writes the refined crops back into the SEGS. The refinement uses a BASIC_PIPE (model, clip, vae, conditioning bundled) rather than loose wires. Because it operates on the whole batch, VRAM and especially system RAM scale with frame count; video detailing is famously memory-hungry, and the community rule of thumb for these per-frame Impact Pack workflows is to have plenty of system RAM (64GB gets cited as the floor for the heavier ones).
The inputs and outputs that matter
image_frames(required) - the clip, as a batch of frames.segs(required) - detected regions with batch masks spanning the frames.basic_pipe(required) - model/clip/vae/positive/negative in one bundle.guide_size(default 512) - the size each crop is scaled to before resampling.denoise(default 0.5) - how far each region departs from the original. Keep it modest (0.3–0.4) on video; high denoise reintroduces the frame-to-frame flicker you're trying to remove.max_size(default 768) - the upper bound on the crop's resample size, a little lower than the still detailers to keep video memory in check.cfg,steps,sampler_name,scheduler,seed- the standard sampling controls for the refinement pass.
Optional refiner_basic_pipe_opt and noise_mask_feather cover refiner and edge-blend tuning. Outputs: segs (the refined SEGS - feed this to SEGS Paste) and cnet_images.
How to install it
Install the pack via ComfyUI Manager (search ComfyUI Impact Pack, install, restart), or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack comfyui-impact-pack
cd comfyui-impact-pack
python -m pip install -r requirements.txt # ComfyUI's python; python_embeded on portable
then restart. For the video stack itself you'll also want an AnimateDiff node pack (AnimateDiff-Evolved) or whatever drives your frames - though note AnimateDiff is largely superseded by Wan 2.2 now, and people run this same per-frame detailing on Wan clips too. The detector that builds your SEGS needs the Impact Subpack. Linux: libgl1-mesa-glx and libglib2.0-0.
Common issues & troubleshooting
My machine ran out of memory. Expected on long clips - this holds and processes frames as a batch. Cut the frame count, lower max_size, and make sure you have generous system RAM, not just VRAM; these workflows are RAM-hungry more than VRAM-hungry. 64GB is the commonly cited comfort floor for the heavier ones.
The detailed face flickers. Push denoise down. A high denoise per region reinvents detail each pass and the reinvention differs frame to frame. Low denoise keeps it anchored to the source and coherent.
Nothing showed up on my final video. This node outputs SEGS, not an image - you have to composite it back with SEGS Paste onto your original frames. If you wired the segs output expecting a finished clip, that's the missing step.
Is the detail even visible? Honest answer: sometimes barely. The loudest reaction to a video-detailing demo was that the before and after looked identical at normal viewing size, and the rebuttal had to zoom to the eyes. Detail passes pay off on small faces; on a face that's already large in frame, you're mostly spending compute.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| image_frames | IMAGE | — | |
| segs | SEGS | — | |
| guide_size | FLOAT | 51264–16384 | — |
| guide_size_for | BOOLEAN | true | — |
| max_size | FLOAT | 76864–16384 | — |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 8.000–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 17 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +11 | |
| denoise | FLOAT | 0.500.0001–1 | — |
| basic_pipe | BASIC_PIPE | If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped. | |
| refiner_ratio | FLOAT | 0.200–1 | — |
| refiner_basic_pipe_optopt | BASIC_PIPE | — | |
| noise_mask_featheropt | INT | 200–100 | — |
| scheduler_func_optopt | SCHEDULER_FUNC | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| segs | SEGS | — |
| cnet_images | IMAGE | — |