VELVET VICE MiniMax H3 — Temporal Anti-Ghost
Cleaning up the double-exposure smears that frame interpolation leaves behind
- images
- ghost_analysis
- corrected_images
- repair_report
Push a video model's output through frame interpolation - RIFE or anything like it - and you'll eventually meet the ghost. Fast-moving hands, hair, or fabric leave translucent double-exposure trails behind them, because the interpolator guessed a middle frame that doesn't quite belong to either neighbor. The VELVET VICE MiniMax H3 Temporal Anti-Ghost is the repair stage that hunts those frames down and patches them, driven by its sibling, the H3 Ghost Analyzer.
The workflow pairing is the whole trick. The Ghost Analyzer looks at your finished frame sequence and scores how much each frame looks like a temporal artifact. Anti-Ghost consumes that analysis and, critically, does not re-render or blur the whole clip - it only repairs the frames the analysis flagged. That's the difference between this and a blanket temporal blur, which would eat real motion detail along with the artifacts.
Inputs:
- images (IMAGE) - the frame sequence to fix.
- ghost_analysis - the custom
VELVET_VICE_GHOST_ANALYSISobject from the Ghost Analyzer node. Without it this node has nothing to go on; wire the analyzer's output here. - enabled (true) - its own on/off so you can keep the node in the graph and disable it per-run.
- strength (0.55) - how aggressively corrected frames are blended back in. Lower keeps more of the original pixels.
- maximum_pixel_change (0.2) - the gate for what counts as a ghost. If a frame's pixel change from its neighbors stays under 20%, it's probably real motion and gets left alone. Raise it to repair more aggressively, lower it to protect fast-but-legit motion.
- minimum_frame_score (1.0) - the analyzer's frame-quality score below which a frame is considered worth repairing.
- memory_mode (AUTO / GPU / CPU) - where the analysis runs. AUTO picks based on whether the tensor is already on CUDA; if you're VRAM-starved and it keeps spilling, pin it to CPU.
Outputs: corrected_images (IMAGE) - the repaired sequence, ready to feed your encoder - and repair_report (STRING), a rundown of how many frames got touched, which is how you sanity-check that it isn't nuking your whole clip.
Mechanically it's a frame-index game with endpoints protected: the first and last frames are never touched (there's no neighbor on one side to trust), and in RIFE mode the original anchor frames are excluded from repair while the inserted frames are the candidates. That maps exactly to where ghosts live - in the invented frames, not the real ones.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Velvet-Vice/velvet-vice-minimax-h3
Restart ComfyUI (or Manager → "velvet-vice-minimax-h3"). No pip dependencies; it's torch operations over an IMAGE tensor. It lives in the pack's finishing path alongside the Output/Finishing Hub.
When to leave it off
Straight answer: if your H3 output isn't going through interpolation, you don't have this artifact class, and the node is wasted work - its default presence in a shared workflow doesn't mean you must run it. The repair costs real time and a memory pass over every candidate frame, and at high strength it can soften genuine motion. Start with enabled off, inspect a few suspect frames, then let the report tell you how many frames it actually fixed. If that number is zero, your clip was clean - count it as a win and move on.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| ghost_analysis | VELVET_VICE_GHOST_ANALYSIS | — | |
| enabled | BOOLEAN | true | — |
| strength | FLOAT | 0.550–1 | — |
| maximum_pixel_change | FLOAT | 0.200.02–1 | — |
| minimum_frame_score | FLOAT | 1.00–100 | — |
| memory_mode | COMBO | AUTO | 3 options: AUTO, GPU, CPU |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| corrected_images | IMAGE | — |
| repair_report | STRING | — |