Nodes/FireRedAudio · T8star-Aix/FireRedAudio 同步 A/B 对比 · T8star-Aix
ComfyUI Node

FireRedAudio 同步 A/B 对比 · T8star-Aix

A/B two takes without the silence and volume lying to you

By T8mars·Created 23 days ago·Updated 20 days ago· 22
FireRedAudio 同步 A/B 对比 · T8star-Aix
  • audio_a
  • audio_b
  • 同步候选 A
  • 同步候选 B
  • A/B 对比报告
synchronize_onsettrue
match_loudnesstrue
target_lufs-20.0
onset_threshold_dbfs-42
preroll_ms20

Comparing two takes by ear sounds easy until you actually do it. Take A starts with half a second of silence and is a touch quiet; take B starts instantly and is a touch loud. Your brain doesn't compare the deliveries - it compares the dead air and the level, and you pick the louder, punchier one almost every time. SynchronizedAB removes that bias: it detects each clip's effective speech onset, aligns them, matches loudness with two-pass EBU R128, and pads both to the same length. What's left is a genuine side-by-side of the performance, not of the formatting. This is the node that makes your A/B judgment actually mean something.

How it works

Both inputs (audio_a, audio_b) get written to WAV and processed non-destructively - nothing touches the sources. Onset detection finds where speech actually starts (threshold onset_threshold_dbfs, default −42 dBFS), synchronize_onset aligns the two starts (with a small preroll_ms of 20 ms of lead-in so you don't chop the first phoneme), match_loudness normalizes both to target_lufs (default −20 LUFS, within −35…−12), and both clips are padded to equal length. Outputs are the two synced clips (同步候选 A, 同步候选 B) plus an A/B 对比报告 JSON recording exactly what was shifted and normalized.

The advanced inputs are the ones to tune if the auto-detection misreads: raise onset_threshold_dbfs if it's treating a breath or room noise as the onset, lower it if the start of the word is being missed. preroll_ms is the guard band so the alignment never cuts into speech.

Where it fits

The pack's 16_synchronized_ab example is the canonical use: two candidate takes → this node → two SaveAudio nodes (or a review board) for the listen. It's the step before the human decides - take two seeds out of SeedAudition, run them through here, and the listen you do afterward is honest. It also generalizes: any two audio candidates you're debating - different reference voices for a character, two editing styles - get the same fair treatment.

Installing and the honest limitation

Pack-wide install (ComfyUI Manager search comfyui-fireredaudio-T8, or clone + python scripts\setup_runtime.py). No model needed - this is pure worker-side audio math (and honestly the closest thing to a "runs before you've downloaded weights" node in the comparison family). The limitation: onset alignment and loudness matching make the fight fair, but they don't make your ears calibrated. This fixes the silence/level confound; it can't fix that you'll still prefer the louder-sounding take if one is more energetic. That's a taste question, and this node is deliberately agnostic about it.

CategoryT8star-Aix/Audio/FireRedAudio

Inputs (7)

NameTypeDefaultDescription
audio_aAUDIO
audio_bAUDIO
synchronize_onsetBOOLEANtrue
match_loudnessBOOLEANtrue
target_lufsFLOAT-20.0-35–-12
onset_threshold_dbfsFLOAT-42-70–-10
preroll_msINT200–500

Outputs (3)

NameTypeDescription
同步候选 AAUDIO
同步候选 BAUDIO
A/B 对比报告STRING