VQ Video Frame-by-Frame FID
The name says FID, but check what it actually computes before you quote it
- video1
- video2
- mean_fid
- summary
Let's get the disclaimer out front: this node is named "Video Frame-by-Frame FID," but when your two videos have the same frame count it doesn't compute FID at all. It computes the mean per-frame feature difference - Inception V3 features of each frame, squared distance between the matching pair, averaged across the video. That's a perfectly reasonable "how different are these two clips" score. It's just not the Fréchet distance that FID stands for.
So what is it good for? When you have a source video and its transformed version - an upscaled copy, a video-to-video restyle, a loop you've inpainted - and you want a single number measuring how far the output drifted from the source frame-by-frame. Unlike global FID, which pools all frames into one soup, this one respects order: it's sensitive to whether frame 37 of the output still resembles frame 37 of the input. That ordering is the genuinely useful part.
How it works
Both videos get every frame encoded by Inception V3 (pretrained on ImageNet, auto-downloaded on first use, ~100 MB) into 2048-dimension feature vectors. If the two videos have the same number of frames, it pairs them up in order, sums the squared feature difference for each pair, and averages - that's your mean_fid. If the frame counts differ, it can't do the ordered pairing, so it falls back to a real pooled FID between the two frame feature sets and says so in the summary. The same-length path is the one you'll usually hit, and it's the one that isn't literally FID.
Inputs and outputs
Required:
video1(IMAGE) - your first clip,[T, H, W, 3].video2(IMAGE) - the second, ideally the same number of frames.
No optional inputs.
Outputs:
mean_fid(FLOAT) - mean per-frame feature distance (or pooled FID if lengths differ). Lower means more similar.summary(STRING) - includes the per-frame range or a note about the pooled fallback.
Because the number is a raw feature-space distance rather than a calibrated metric, treat it purely as a relative score: run the same comparison across different settings and rank them. The absolute value means nothing on its own.
Installing
One of the ComfyUI-VideoQuality-Metrics pack's nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/jajos12/ComfyUI-VideoQuality-Metrics
pip install -r ComfyUI-VideoQuality-Metrics/requirements.txt
Restart ComfyUI; it's under VideoQuality/Distributional. ComfyUI Manager can handle the install if you search the pack title.
Common issues
- Quoting it as "FID" in a benchmark. Don't - same-length comparisons aren't Fréchet distance. Say "mean per-frame feature distance" or just call it what the node actually outputs.
- Different frame counts change the meaning. The fallback to pooled FID is a different metric entirely. If you're comparing two versions of the same clip, make sure they're the same length so you stay on the ordered path; otherwise you're comparing apples to pears across runs.
- First run downloads Inception V3. Expect a stall while weights come down, then cached runs.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| video1 | IMAGE | — | |
| video2 | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| mean_fid | FLOAT | — |
| summary | STRING | — |