FireRedAudio 成品语音 QA · T8star-Aix
The QA pass that catches the line nobody wants to listen to
- model
- audio_batch
- 语音 QA
- QA 报告
- 未通过条目
A batch of a hundred lines will always contain a few stinkers - the line where the model said the wrong word, clipped, swallowed, or ran way over its time slot. Listening to all of them to find the stinkers is a miserable job, so this pack doesn't make you. SpeechQA reads every successful take back with ASR, compares the transcript to the script (CER for Chinese, WER for English), and checks clipping, silence ratio, and duration against your time slots. Out comes a verdict per line and a failed_line_ids list you can feed straight into the repair node. It's the automated "did it actually say the right thing, cleanly, on time" gate that sits between generation and delivery.
How it works
For each line it loads the WAV, computes waveform metrics (duration, clipping, silence), and if the line has start_seconds/end_seconds it computes cue overrun - how much the audio overstays its slot. Then it runs ASR and compares against the script text with the language-appropriate metric. A line passes only if all four checks pass against the thresholds:
max_text_error_rate- default 0.20 (20% CER/WER).max_clipping_ratio- default 0.001 (basically zero clipping allowed).max_silence_ratio- default 0.80 (a line that's mostly silence fails).max_cue_overrun_seconds- default 0.50 (a take more than half a second over its slot fails).
The ASR transcripts are cached under output/fireredaudio/qa-cache/asr/, keyed on WAV SHA-256 + model revision + model fingerprint + prompt + token cap. The cache only stores transcripts - CER/WER, clipping, silence and time-slot checks are recomputed every run. use_asr_cache (on) reuses them; refresh_asr_cache forces a re-transcribe.
Outputs: 语音 QA (a structured QA object), QA 报告 (full JSON), and 未通过条目 - a newline-separated list of failed line IDs. That last output is the whole point: it plugs directly into the pack's QA 失败项定向返修 node.
Where it fits
In the production loop it's the checkpoint: 可恢复批量配音 → this → 逐句制作审核台 (which routes passes to delivery, failures to rework) → 定向返修 on failed_line_ids, then QA again. The README's 26_production_review_loop shows the full cycle, including the "only repair the failing line" behavior. Use it before any delivery export - a batch that ships with an un-QA'd stinker is the failure mode this node exists to prevent.
Installing and the honest caveat
Pack-wide install (ComfyUI Manager search comfyui-fireredaudio-T8, or clone + python scripts\setup_runtime.py), models downloaded; ASR runs on the main model (lite profile suffices for the readback). The caveat: ASR is the same model family that generated the audio, and its transcript is a best effort - a genuinely mispronounced word can still get "passed" if ASR hears what the script says. This gate is excellent at catching dropped words, clipped audio, and timing blowouts; it is not a substitute for a human listening to the final delivery. That's what the review board is for.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| model | T8_FIREREDAUDIO_MODEL | — | |
| audio_batch | T8_FIREREDAUDIO_AUDIO_BATCH | — | |
| max_text_error_rate | FLOAT | 0.200–1 | — |
| max_clipping_ratio | FLOAT | 0.00100–1 | — |
| max_silence_ratio | FLOAT | 0.800–1 | — |
| max_cue_overrun_seconds | FLOAT | 0.50–60 | — |
| max_new_tokens | INT | 5121–4096 | — |
| use_asr_cache | BOOLEAN | true | — |
| refresh_asr_cache | BOOLEAN | false | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| 语音 QA | T8_FIREREDAUDIO_SPEECH_QA | — |
| QA 报告 | STRING | — |
| 未通过条目 | STRING | — |