VQ DOVER Quality (Aesthetic + Technical)
One number can't tell you why a video is bad. DOVER splits the answer
- video
- aesthetic_score
- technical_score
- overall_score
- summary
Most quality scores hand you a single number and leave you to guess what it means. DOVER is the one that actually separates the problem. It gives you an aesthetic score - composition, color harmony, "does this look like someone framed it?" - and a technical score - sharpness, noise, compression artifacts, "is it actually clean?" - plus a weighted overall. That split is the whole point, and it's why DOVER is the model people actually name when they ask how to evaluate generated video without a reference.
You'd reach for this in text-to-video evaluation: you have a clip, no ground truth, and you want to know not just whether it's good but which part is failing. A video can score high aesthetically while being technically a mess, and a one-number metric will hide exactly that.
How it works
DOVER is a Swin-Transformer-based video quality model from the VQAssessment group, trained on user-generated content. The pack downloads the official pretrained weights automatically on first use (roughly 100 MB from the DOVER GitHub releases) into ~/.cache/video_quality_metrics, then runs the model over a sample of your frames. The overall score is a fixed blend: roughly 0.428 × aesthetic + 0.572 × technical. The node even flags imbalance - if the gap between aesthetic and technical is bigger than ~0.2, the summary calls it out ("good composition but blurry/noisy" vs "sharp but boring"). That diagnostic is genuinely useful and rare in this corner of ComfyUI.
Inputs and outputs
Required:
video(IMAGE) - your[T, H, W, 3]frame tensor.
Optional:
num_frames(INT, default 8, range 1–32) - how many frames get analyzed. This is your cost knob: fewer frames, faster run, slightly noisier estimate.
Outputs:
aesthetic_score(FLOAT) - composition/artistic quality, 0–1.technical_score(FLOAT) - sharpness/noise/artifact quality, 0–1.overall_score(FLOAT) - the weighted blend, 0–1.summary(STRING) - full report including the imbalance flag. Put it in a text display.
The pack's rough calibration: overall above 0.6 is excellent, 0.45–0.6 good, 0.3–0.45 fair, below 0.3 poor. Scores track human opinion reasonably well (the paper reports high correlation with MOS), but treat them as relative, not courtroom-grade evidence.
Installing
This is one node of the ComfyUI-VideoQuality-Metrics pack, installed once:
cd ComfyUI/custom_nodes
git clone https://github.com/jajos12/ComfyUI-VideoQuality-Metrics
pip install -r ComfyUI-VideoQuality-Metrics/requirements.txt
Restart ComfyUI, and it lands under Video Quality/DOVER in the node menu. ComfyUI Manager can install the pack too - search "VideoQuality Metrics". Two gotchas: the ~100 MB DOVER weights download on first run (not at install), and the model needs a recent torchvision (0.15+) for the Swin backbone - an older install silently falls back to a less accurate ResNet backbone.
Common issues
- Returns zeros with "DOVER dependencies not available" - your torchvision is too old. Upgrade it.
- First run stalls - that's the weight download from GitHub. If it dies mid-download, delete
~/.cache/video_quality_metrics/doverand retry. - Scores hover in a narrow band - normal. DOVER is trained on real UGC, and generated video is a distribution it didn't see much of; use it for A/B comparisons, not absolute truth.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| video | IMAGE | — | |
| num_framesopt | INT | 81–32 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| aesthetic_score | FLOAT | — |
| technical_score | FLOAT | — |
| overall_score | FLOAT | — |
| summary | STRING | — |