MOSS 转写与说话人分离 · T8star-Aix
Transcribe + speaker IDs in one pass
- model
- audio
- prompt
- 原音频透传
- 模型原始文本
- 结构化 JSON
- SRT 字幕
- ASS 字幕
- MOSS_TRANSCRIPT
Most "transcribe audio" nodes in ComfyUI are Whisper wrappers. You get words, you get timestamps, and then you're on your own figuring out who said what. T8_MOSS_TranscribeDiarize is the node that doesn't stop there. It runs the OpenMOSS MOSS-Transcribe-Diarize model - a ~0.9B model that does speech-to-text and speaker diarization in a single generative pass, locally, offline, no API key. The output is a transcript where each segment carries a speaker label ([S01], [S02], …) and sentence-level start/end timestamps.
That's the whole pitch, and it's a genuinely useful one if you've ever transcribed a podcast or meeting and then spent an hour matching lines to people by hand. The tradeoff to know up front: timestamps are sentence/segment-level, not word-level, and speaker IDs are anonymous relative labels - S01 means "first voice the model heard," not "Alice." Fine for subtitles and search, not fine for legal-grade attribution.
How it works
Feed it a standard ComfyUI AUDIO wire (from a VHS load, a video decode, whatever). It downmixes and resamples to 16kHz internally, then runs a WebRTC VAD preflight before the model even loads - it checks whether there's actual speech in there and warns you if the input looks like silence. Then it prefers whole-clip inference in a single pass so speaker numbering stays consistent across the whole file. It reports native ComfyUI progress and honors queue interrupts.
The inputs that matter
- model - the handle from
T8_MOSS_ModelLoader. No loader, no run. - audio - standard
AUDIO. It'll take a video's audio track directly. - max_new_tokens -
0means auto, and auto estimates from audio duration. If the run hits the cap, the diagnostics explicitly flag possible truncation. Leave it at 0 unless you have a reason. - prompt - optional; wire in
T8_MOSS_PromptHotwordsto control format, hotwords, and language. Skip it and you get the default strict format, which is fine to start. - silence_policy -
warn(default: continue, flag it),reject(refuse before loading the model), orignore. If you know your clip has real speech but the VAD is skittish,warnkeeps you moving while still telling you. - retry_policy - the safety net.
invalid_format(default) re-runs once with a stricter prompt if the output is malformed or missing speaker tags;quality_failurealso retries on quality failures;neverif you want it fast and loud. It's one retry, not a retry loop - you're not paying for this twice on every run.
Outputs: audio passthrough, the model's raw text, structured JSON, ready-to-use SRT and ASS strings, and a typed MOSS_TRANSCRIPT you can chain into validation, the quality gate, and subtitle export.
Installing it
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 # enforces Transformers >= 5.5.0, < 6
python scripts/download_models.py --comfyui-root ..\..
Then restart and load the example workflow from example_workflows/ui/01_basic_transcribe.json - it already covers hotwords, strict retry, and subtitle styling. The model (~1.8GB) lands in ComfyUI/models/moss_transcribe_diarize/.
Where people get burned
- The GPU baseline is real. The pack's official target is NVIDIA with 12GB+ VRAM. A 5-minute clip ran ~4.5GB peak on the author's 24GB card; 8–10GB cards are only a short-audio compatibility tier. If you're on a 8GB card, keep clips short or move to
T8_MOSS_SmartLongAudioand accept the speed. - "It transcribed but there are no speaker tags." That's the retry path telling you the first pass came back malformed. Check the diagnostics rather than the raw text - the pack's whole design is to surface these instead of hiding them.
- Expecting word-level timestamps. It won't give them. Segment-level is the design, not a bug. If you genuinely need word-level, this isn't the node for you.
- Transformers too old. Below 5.5.0 the loader refuses; run
scripts/check_transformers.pyand repair with therequirements-transformers-v5.txtfile (5.15.1) if your other nodes allow it.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| model | T8_MOSS_TRANSCRIBE_MODEL | — | |
| audio | AUDIO | — | |
| max_new_tokens | INT | 00–65536 | 自动模式依据音频时长估算;达到上限会在诊断中明确提示可能截断。 |
| silence_policy | COMBO | warn | warn 继续并给出诊断;reject 在载入模型前拒绝;ignore 仅记录检测结果。 |
| preflight_backend | COMBO | webrtc | webrtc 检测真实语音帧;energy 仅按能量判断,兼容旧环境。 |
| vad_aggressiveness | INT | 20–3 | — |
| retry_policy | COMBO | invalid_format | 格式无效或缺失说话人标签时,可用更严格提示自动重试一次。 |
| promptopt | T8_MOSS_PROMPT | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| 原音频透传 | AUDIO | — |
| 模型原始文本 | STRING | — |
| 结构化 JSON | STRING | — |
| SRT 字幕 | STRING | — |
| ASS 字幕 | STRING | — |
| MOSS_TRANSCRIPT | T8_MOSS_TRANSCRIPT | — |