VELVET VICE LTX — Ghost Analyzer
Find the ghost frames in your RIFE-smoothed clip before you ship it
- images
- ghost_analysis
- ghost_mask
- mask_preview
- average_score
- maximum_score
- analysis_report
Ghosting is the classic frame-interpolation artifact: you insert synthetic frames between real ones, motion gets blurred or double-exposed, and the clip looks like it's trailing smoke. You can't always see it on a 720p preview, but it's unmistakable on the final render. VelvetViceLTXGhostAnalyzer is the pack's experimental tool for finding those frames automatically - it's a motion-compensated temporal ghost detector that runs on a low-res copy of your clip, never touches the original frames, and hands you a mask, scores, and a report.
How it works
The pipeline, roughly: it downscales your clip to a bounded analysis resolution (default 256px on the long edge) and converts to grayscale - that's why it's fast even on long clips; it's analyzing thumbnails, not pixels. Then it walks frame pairs, compensating for motion (a motion search with a configurable radius) and measuring how much each interior frame deviates from what the motion model predicts. Deviations above a threshold are flagged as ghosting.
Three things keep it from crying wolf:
- Endpoints are protected - the first and last frames are never analyzed (they have no full motion context).
- Scene cuts are protected -
scene_cut_protection(default on) measures inter-frame change, and frames adjacent to a hard cut (abovescene_cut_threshold, default 0.24) are skipped, because a cut looks like a huge "ghost" to a naive detector. minimum_ghost_areafilters out tiny blips so noise doesn't register.
The profile sets the detection threshold - SAFE (0.08), BALANCED (0.06), STRONG (0.043) - and sensitivity (default 1.0) divides it, so higher sensitivity catches more. The mode matters for interpolated clips: SOURCE 24 FPS analyzes the interior frames of your original clip; RIFE INSERTED FRAMES analyzes only the odd-indexed frames - i.e., the ones RIFE inserted - which is the whole point if your ghosting came from interpolation.
Inputs and outputs
The important ones:
- images - the frame batch.
- mode - SOURCE 24 FPS or RIFE INSERTED FRAMES. Pick by whether your clip is interpolated.
- profile / sensitivity - detection aggressiveness.
- frame_rate, analysis_long_edge (128–512), motion_search_radius (1–12), minimum_ghost_area, scene_cut_protection / scene_cut_threshold, analysis_chunk_size (1–16), memory_mode (AUTO / GPU / CPU) - the rest of the tuning.
Outputs: ghost_analysis (a custom VELVET_VICE_GHOST_ANALYSIS object for the pack's anti-ghost nodes), ghost_mask (MASK), mask_preview (IMAGE), average_score and maximum_score (FLOATs - the headline numbers), and analysis_report (STRING).
Where it fits
It's in the Experimental category for a reason - it's a diagnostic, and the pack pairs it with VelvetViceLTXTemporalAntiGhost (the fixer). In practice: run the analyzer on your final frames, look at maximum_score and the mask preview, and if the ghosting is real, route the mask into the anti-ghost pass before encoding. If the score is low, your clip is clean and you skip the fix. It's a "measure, then act" node rather than a blind cleanup.
Installing it
Part of VELVET VICE - LTX (velvet-vice-ltx) via ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Velvet-Vice/velvet-vice-ltx
Restart and hard-refresh with Ctrl+F5. No pip deps.
Gotchas
- It never modifies your input. Feed it anything; the frames come back untouched - the outputs are analysis, not processed video.
- Low-res analysis can miss fine ghosting. 256px is a thumbnail; hair-thin artifacts might not register. Bump
analysis_long_edgeif you suspect false negatives. - STRONG profile on noisy footage = false positives. Start SAFE, look at the mask, then tighten.
- It's experimental. Version 0.2.0, niche pack, essentially no community feedback to lean on. Treat scores as a signal, not a verdict.
For anyone who's ever shipped a video with a muddy RIFE frame in the middle, this is a genuinely useful second set of eyes - and at 256px it costs seconds to run.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| mode | COMBO | SOURCE 24 FPS | 2 options: SOURCE 24 FPS, RIFE INSERTED FRAMES |
| profile | COMBO | SAFE | 3 options: SAFE, BALANCED, STRONG |
| frame_rate | FLOAT | 241–240 | — |
| sensitivity | FLOAT | 1.000.25–2 | — |
| analysis_long_edge | INT | 256128–512 | — |
| motion_search_radius | INT | 51–12 | — |
| minimum_ghost_area | INT | 241–512 | — |
| scene_cut_protection | BOOLEAN | true | — |
| scene_cut_threshold | FLOAT | 0.240.05–0.75 | — |
| analysis_chunk_size | INT | 41–16 | — |
| memory_mode | COMBO | AUTO | 3 options: AUTO, GPU, CPU |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| ghost_analysis | VELVET_VICE_GHOST_ANALYSIS | — |
| ghost_mask | MASK | — |
| mask_preview | IMAGE | — |
| average_score | FLOAT | — |
| maximum_score | FLOAT | — |
| analysis_report | STRING | — |