Spectrum H3 Objective Quality Compare (Staged One-Shot / Full Media)
Same verdict, cleaner wiring — the staged H3 quality compare
- reference_media
- legacy_media
- candidate_media
- summary
- report_json_path
- report_markdown_path
- aggregate_json_path
- aggregate_markdown_path
This node exists to make the one-shot quality compare tidier on the wire. Where Spectrum H3 Objective Quality Compare takes three raw IMAGE batches, this one takes three SPECTRUM_H3_OBJECTIVE_MEDIA objects - which is the exact type that the pack's Spectrum H3 Objective Media Stage node produces. The verdict machinery underneath is identical; only the plumbing differs.
Why the staging step exists
Media Stage is the pack's helper for "move one decoded result to CPU." You drop one Media Stage node per branch, feed it that branch's IMAGE (and optionally AUDIO), and it hands back a staged media object that keeps the video and audio together. So the layout becomes:
R branch IMAGE -> Spectrum H3 Objective Media Stage -> reference_media ---+
A branch IMAGE -> Spectrum H3 Objective Media Stage -> legacy_media ---+--> this node
B branch IMAGE -> Spectrum H3 Objective Media Stage -> candidate_media ---+ |
v
summary + report paths
Three Stage nodes, three SPECTRUM_H3_OBJECTIVE_MEDIA outputs, one compare node. If you're building a workflow where the three branches are physically separate anyway, this keeps each branch self-contained instead of running three IMAGE cables (and three optional AUDIO cables) to one compare node.
The honest caveat is in the node description: it's a one-shot, CPU-staged comparison that retains full decoded media, and the pack explicitly says to use the bounded sequential capture for ordinary testing. This is the convenience path for when you already have all three clips in one execution and just want the verdict.
Inputs and outputs
Required inputs are reference_media, legacy_media, and candidate_media - all SPECTRUM_H3_OBJECTIVE_MEDIA - plus the same fps, benchmark_id, seed, provenance_json, and frame_chunk_size widgets as the direct compare. No audio inputs here: audio comes along inside each staged media object, so if a branch staged audio, it gets compared.
Outputs are the identical five: summary (the verdict text), then report_json_path, report_markdown_path, aggregate_json_path, and aggregate_markdown_path. Same metric panel as the direct version - MS-SSIM/PSNR/temporal/detail for video, MR-STFT/normalized-correlation/SI-SDR for audio - and the same verdict rules: a role wins only if a primary metric improves materially and nothing regresses past its guardrail. Reports land under ComfyUI's system user cache, grouped by group_id.
Gotchas
- This is
OUTPUT_NODE=trueand the full-resolution metric profile, so treat it as the heavyweight one-shot path - not the one to run a dozen times on an 8 GB card. - The compare node calls through to
SpectrumH3ObjectiveQualityCompareinternally; if a staged object is missing its audio or video, the comparison just runs on what's there. - Same trust caveat as the direct node: R/A/B must be identical except for Spectrum settings, and
provenance_jsonis how you record that you did it right. Fill it in before you cite the aggregate.
Reach for this when you've built a three-branch workflow and want the wiring to stay readable. Reach for the sequential capture when you're actually benchmarking.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| reference_media | SPECTRUM_H3_OBJECTIVE_MEDIA | — | |
| legacy_media | SPECTRUM_H3_OBJECTIVE_MEDIA | — | |
| candidate_media | SPECTRUM_H3_OBJECTIVE_MEDIA | — | |
| fps | FLOAT | 24.000.01–240 | — |
| benchmark_id | STRING | h3-objective-seed-1 | Unique ID for one same-input R/A/B triad. |
| seed | INT | 00–18446744073709550000 | — |
| provenance_json | STRING | {"compatibility":{"model":"MiniMax-H3","model_weights":"same-workflow","precision":"same-workflow","sampler":"er_sde","scheduler":"same-workflow","steps":20,"conditioning":"same-workflow","video_vae":"same-workflow","audio_decoder":"same-workflow","generation_settings":{"provenance_status":"user-unverified-same-workflow"}},"R":{"spectrum":"bypassed","role":"native_full_compute_reference"},"A":{"spectrum":"enabled","generic_correction_mode":"legacy","generic_correction_attenuation":"mode_default","generic_correction_limiter":"rational","generic_correction_limit":0.25},"B":{"spectrum":"enabled","generic_correction_mode":"coordinate_rls","generic_correction_attenuation":"no_attenuation","generic_correction_limiter":"hard_clip","generic_correction_limit":0.4}} | R/A/B generation provenance plus compatibility metadata. The default is valid but marked user-unverified; fill exact values before using cross-seed aggregate evidence. |
| frame_chunk_size | INT | 41–32 | — |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| summary | STRING | — |
| report_json_path | STRING | — |
| report_markdown_path | STRING | — |
| aggregate_json_path | STRING | — |
| aggregate_markdown_path | STRING | — |