ComfyUI Node

VQ Radar Chart

One number can't describe a video, so draw a fingerprint instead

By jajos12·Created 7 months ago·Updated 7 months ago· 1
VQ Radar Chart
    • radar_chart
    • metrics_json
    psnr0.00
    ssim0.00
    ciede20000.00
    warping_error0.00
    flickering_score0.00
    smoothness_score0.00
    fvd0.00
    chart_size256

    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, fvd
    • chart_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_json output and plot it elsewhere.
    • Small charts are hard to read. Default 256 is fine for a preview; bump chart_size toward 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.
    CategoryVideoQuality/Reporting

    Inputs (8)

    NameTypeDefaultDescription
    psnrFLOAT0.00
    ssimFLOAT0.00
    ciede2000optFLOAT0.00
    warping_erroroptFLOAT0.00
    flickering_scoreoptFLOAT0.00
    smoothness_scoreoptFLOAT0.00
    fvdoptFLOAT0.00
    chart_sizeoptINT256128–512

    Outputs (2)

    NameTypeDescription
    radar_chartIMAGE
    metrics_jsonSTRING