VQ Radar Chart
One number can't describe a video, so draw a fingerprint instead
- radar_chart
- metrics_json
Every metric in this pack tells you one narrow thing. PSNR says fidelity, warping error says motion coherence, FVD says distributional realism. Trying to judge a workflow off a single one is like rating a movie on its runtime. This node is the answer: it collects whatever metric floats you feed it, normalizes them onto a common 0–1 scale, and draws a radar chart - a polygon whose shape is your workflow's "performance fingerprint."
The shape tells the story at a glance. A wide, even circle means balanced quality across every dimension you measured. A spade shape - high PSNR and SSIM but weak temporal scores - says "great for upscaling, but the motion is shaky." A skinny star says "creative generation that ignores fidelity entirely." You're not reading numbers; you're reading geometry.
How it works
The node normalizes each metric against a hardcoded expected range (psnr 20–50 dB, ssim 0–1, fvd 0–500, and so on), clamping to 0–1. For metrics where lower is better - ciede2000, warping error, flickering, fvd - it inverts the value so a bigger wedge is always better on the chart. Then it renders a polygon: grid rings, axis lines, the data polygon, all rasterized into an image tensor using pure PyTorch. No matplotlib, no PIL - which is why it's dependency-free but also visibly rough around the edges compared to a plotting library.
Inputs and outputs
Required:
psnr(FLOAT, default 0)ssim(FLOAT, default 0)
Optional (all FLOAT, default 0, and - key detail - only included if greater than zero):
ciede2000,warping_error,flickering_score,smoothness_score,fvdchart_size(INT, default 256, range 128–512) - output image resolution.
Outputs:
radar_chart(IMAGE) - the chart,[1, H, W, 3], ready for a preview node.metrics_json(STRING) - the raw and normalized values, useful if you want the numbers the chart is based on.
Installing
It's part of ComfyUI-VideoQuality-Metrics, one install for the whole pack:
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/Reporting. ComfyUI Manager can install it too.
Common issues
- Axes disappear when you wire in a metric that scores zero. The optional metrics are skipped when they're 0.0, so a genuinely terrible warping score of 0.0 will vanish from the chart rather than showing a deep valley. Feed the raw outputs from the metric nodes (they won't be exactly zero), and know that exact zeros get dropped.
- It's a rough renderer, not a publication tool. The rasterization is chunky - labels are minimal and there's no anti-aliasing. It's for eyeballing in the UI, not for your paper's figure folder. If you need pretty, grab the
metrics_jsonoutput and plot it elsewhere. - Small charts are hard to read. Default 256 is fine for a preview; bump
chart_sizetoward 512 if you're actually showing someone the result. - FID can't be charted. The node has no FID input - the normalization code knows about it, but the node itself doesn't accept it. Log FID separately (the Metrics Logger has a slot for it) if that's one of your tracked numbers.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| psnr | FLOAT | 0.00 | — |
| ssim | FLOAT | 0.00 | — |
| ciede2000opt | FLOAT | 0.00 | — |
| warping_erroropt | FLOAT | 0.00 | — |
| flickering_scoreopt | FLOAT | 0.00 | — |
| smoothness_scoreopt | FLOAT | 0.00 | — |
| fvdopt | FLOAT | 0.00 | — |
| chart_sizeopt | INT | 256128–512 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| radar_chart | IMAGE | — |
| metrics_json | STRING | — |