MOSS 转写质量门 · T8star-Aix
The 'is this garbage?' boolean — and the fail-fast switch that saves the day
- transcript
- 已评估 MOSS_TRANSCRIPT
- 结果可用
- 质量报告 JSON
Some transcription runs come back perfect. Some come back as confident-sounding garbage - the model hallucinated a loop, stopped fifteen seconds early, or tagged half the segments as unknown speakers. T8_MOSS_QualityGate is the node that tells you which one you got, and it does it as a simple boolean: 结果可用 (is_usable). Wire that into a switch, and your workflow can route good transcripts to the exporter and bad ones to a retry path without you babysitting it.
It evaluates the transcript against a small set of checks that map directly to the failure modes MOSS actually has:
- End coverage - did the last segment reach near the end of the audio, or did the model stop early? Controlled by min_end_coverage (default 0.75 - the last segment should cover the final 75% of the timeline).
- Unknown speakers - what fraction of segments came back as
S00? Capped by max_unknown_speaker_ratio (default 0.50). - Repetition - a looping transcript is the classic hallucination. reject_repetition (default on) catches repeated-text loops. The author's own test suite feeds a looped audio clip and the gate correctly rejects it as
repeated_text. - Truncation - reject_truncation (default on) refuses transcripts that look cut off at the token cap.
- Format errors - inherited from validation, so a structurally broken transcript never sneaks through as "usable."
The input that changes the game: fail_on_unusable
This is the one to know about. It's an advanced toggle, off by default. Flip it on and a failed quality check raises an error that blocks downstream execution - which in practice means the subtitle export node never writes a bad file. If you're running unattended batches and you'd rather a run die loudly than produce a wrong SRT, this is your switch. Leave it off while you're iterating so you can see what's happening.
Inputs: the MOSS_TRANSCRIPT plus the four quality knobs above. Outputs: the transcript passed through (with the quality report attached to its metadata), the is_usable boolean, and a 质量报告 JSON explaining the decision - read the report when the boolean surprises you, because it lists exactly which check failed and why.
Installing it
Standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-MOSS-Transcribe-Diarize-T8.git comfyui-MOSS-Transcribe-Diarize-T8
cd comfyui-MOSS-Transcribe-Diarize-T8
pip install -r requirements.txt
python scripts/check_transformers.py # requires Transformers >= 5.5.0
python scripts/download_models.py --comfyui-root ..\..
Restart and it's in the same category as the other eight nodes.
Where people get confused
- "It passed validation but the gate says unusable." Working as intended. Validation checks structure; the gate checks whether the result is worth exporting. A transcript can be perfectly formatted and still be a truncated, looped hallucination.
- The defaults are opinionated.
min_end_coverage0.75 andmax_unknown_speaker_ratio0.50 are the author's sensible defaults for clean speech. If your source is noisy or music-heavy, you may need to loosen them - and that's fine, they're sliders for a reason. Just don't loosen them before you've read the quality report and understood what you're allowing through. - The boolean is your wiring hook. It's a real BOOLEAN output, so it plays perfectly with ComfyUI's switch/reroute nodes or the fail-on-unusable path. That's the intended integration, not a debugging nicety.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| transcript | T8_MOSS_TRANSCRIPT | — | |
| min_end_coverage | FLOAT | 0.750–1 | — |
| max_unknown_speaker_ratio | FLOAT | 0.500–1 | — |
| reject_repetition | BOOLEAN | true | — |
| reject_truncation | BOOLEAN | true | — |
| fail_on_unusable | BOOLEAN | false | 启用后质量检查失败会抛出错误,阻止后续字幕写盘节点执行。 |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| 已评估 MOSS_TRANSCRIPT | T8_MOSS_TRANSCRIPT | — |
| 结果可用 | BOOLEAN | — |
| 质量报告 JSON | STRING | — |