Breeze TTS 2 · T8 桌面音色包
Reading .t8voice Bundles
- request
- reference_audio
- voice_info
If you've tuned voices in T8star-Aix's desktop Voice Studio app, you've probably exported a .t8voice.zip - a self-contained voice pack carrying the speaker's reference audio, a saved delivery instruction, and a default CFG. This node ("T8 桌面音色包", desktop voice bundle) is the bridge that gets those voices into ComfyUI. Point it at a bundle file, type a line, and out comes the same request the Design and Clone nodes produce - meaning the voice you already auditioned in the desktop app works in a node workflow with zero re-tuning.
What it actually does
Give it a local path and it reads the bundle offline and without ever extracting to disk - every member is parsed in memory. That "offline, no extraction" framing isn't paranoia fluff: the source treats a .t8voice.zip as untrusted input and runs a real gauntlet of checks before decoding anything. Rejected outright: absolute or path-traversal member names, symlink bundle paths, Windows-unsafe duplicate casing, encrypted members, undeclared members, and absurd compression ratios. Everything is capped - member count, archive and decompressed size, reference-audio duration (60 seconds max, same as the rest of the pack) - and declared sizes are verified against SHA-256 hashes. If you're in the habit of downloading random voice packs, this is the good kind of gatekeeping.
Once the bundle passes, the embedded profile provides the voice's id/name, language, stored instruction, default cfg_scale, and the reference transcript, and the reference audio is decoded straight to standard ComfyUI AUDIO format ([batch, channels, samples] float32). No round-trip through your disk or a temp file.
The inputs that matter
bundle_path- absolute path to the local.t8voice.zip. The default"voice.t8voice.zip"is a placeholder; the shippedvoice_bundle_workflow.jsonexample needs you to swap in a real path too.text- the line to synthesize. Inline vocal events go right in here, unmarked and unstripped: Chinese[笑][咳嗽][清嗓子][叹气], English(laugh)(cough)(clears throat)(sigh).line_direction_mode-inherituses the bundle's saved voice instruction;overridereplaces it with yourline_directionfor this line;neutralapplies a clean, natural delivery. As with the pack's per-line node,overriderequiresline_directionor it errors out.cfg_scale-0(default) inherits the bundle's stored CFG; anything else overrides it for this line.
The three outputs
This is where the node earns its keep, because it returns three things:
request- aBREEZE_T8_REQUEST; wire it intoT8_BreezeTTS_Generate.reference_audio- the standard ComfyUIAUDIO. Preview it with PreviewAudio or SaveAudio to hear the voice you're about to use, no synthesis required. You can also feed it to other audio nodes.voice_info- a JSON string describing the voice profile and the effective mode the bundle resolved to.
That middle output is quietly brilliant for voice-library browsing: audition the actual reference before spending a generation on a take.
Installing it
Search "Breeze TTS 2 · T8star-Aix" in ComfyUI Manager and install, then restart. Manually, the same thing looks like:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-breeze-tts.git comfyui-breeze-tts-T8
python -m pip install -r comfyui-breeze-tts-T8/requirements.txt
The pack only pulls lightweight deps (soundfile, safetensors, huggingface_hub, …) - torch/transformers belong to your ComfyUI host and are never touched. It does demand transformers >=4.57,<6 and Python 3.10–3.12, and reports at registration if your host falls outside that. First run of the Model Loader downloads the actual BreezeBlue/Breeze-TTS-2 weights (pinned revision) into ComfyUI/models/breeze_tts/, gated behind the accept_model_license checkbox - Breeze TTS 2 is research/non-commercial, not open source.
Troubleshooting
Three things bite people. Wrong path: the node wants an absolute path to a real .t8voice.zip, not a symlink - "please choose a desktop-exported .t8voice.zip" means it didn't find one. Decode failures: if the bundled reference won't decode, re-export it from the desktop app as WAV or FLAC, which the README calls out as the most stable cross-platform choice. Schema mismatch: the node tracks the desktop app's release cadence, so if it rejects a freshly exported bundle, update the desktop app first. And remember - the bundle is read in memory, so keep the file where you pointed it; the node re-fingerprints the file each run and picks up changes without a restart.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| bundle_path | STRING | voice.t8voice.zip | 桌面版音色库导出的本地 .t8voice.zip;节点只离线读取,不会联网或解压到磁盘。 |
| text | STRING | [咳嗽] 欢迎使用桌面版与 ComfyUI 共用的音色。 | 本次要合成的台词。支持行内声音事件:中文 [笑] [咳嗽] [清嗓子] [叹气];英文 (laugh) (cough) (clears throat) (sigh)。标记应直接写入台词。 |
| line_direction_mode | COMBO | inherit | inherit 继承音色;override 使用本句指令;neutral 使用自然、清晰的中性表达。 |
| line_directionopt | STRING | 逐句自然语言情感/语速/表达指令;override 时必填。 | |
| cfg_scaleopt | FLOAT | 0.00–10 | 0 表示沿用音色包默认值;其他值覆盖本句 CFG。 |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| request | BREEZE_T8_REQUEST | — |
| reference_audio | AUDIO | — |
| voice_info | STRING | — |