Instructions to use bosonai/higgs-tts-3-4b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use bosonai/higgs-tts-3-4b with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-to-speech", model="bosonai/higgs-tts-3-4b")# Load model directly from transformers import AutoModelForSeq2SeqLM model = AutoModelForSeq2SeqLM.from_pretrained("bosonai/higgs-tts-3-4b", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Control tags (<|emotion:...|>, <|style:...|>, <|prosody:...|>) shift the speaker's timbre — happens both with and without voice cloning
Note: I have separately reported the intermittent silence / infinite-repetition
that also occurs when using tags — this issue is NOT about that. It focuses on a
different symptom: timbre drift.
Environment
- Model: Higgs-Audio-V3 (self-hosted)
- API: OpenAI-compatible
POST /v1/audio/speech - Fixed sampling params:
temperature=0.6,repetition_penalty=1.3,seed=42 - Only variable: a single control tag prepended to the SAME input text
- Tag types tested:
<|emotion:xxx|>(anger / elation / sadness / fear / ...),<|style:whispering|>,<|prosody:expressive_high|>
Symptom: adding a control tag changes the speaker's timbre (with AND without cloning)
We isolate "tag present vs. absent" as the only variable — same seed, same
sampling params, same text — and compare two modes.
A. Voice-clone mode (ref_audio provided)
Same reference voice; only the leading <|emotion:xxx|> changes. Deviation from
baseline (no tag), measured as spectral-envelope cosine distance + median F0:
- baseline: F0 ~= 181.8 Hz (reference)
- <|emotion:anger|>: F0 ~= +7.62 semitones, timbre drift ~= 21.3%
- <|emotion:elation|>: F0 ~= +8.46 semitones, timbre drift ~= 16.7%
- <|emotion:relief|>: F0 ~= +4.47 semitones, timbre drift ~= 14.8%
Perceptually, several emotion tags make it sound like a DIFFERENT speaker, not the
same speaker expressing an emotion.
Input text (zh): 大家好,欢迎回到我的频道!今天我要给你们带来超级精彩的内容!
("Hi everyone, welcome back to my channel! Today I'm bringing you super exciting content!")
B. No-clone mode (no ref_audio, default voice)
Even with no cloning at all, simply prepending <|emotion:...|> / <|style:...|>
/ <|prosody:...|> makes the speaker's F0, formants, and accent audibly deviate
from the baseline (no-tag) output.
Input text (zh): 今天我想和你说一件事情,希望你能好好听我把话讲完。
("There's something I want to tell you today; I hope you'll hear me out.")
Expected vs. actual
- Expected: the tag adds the emotion/style while KEEPING the speaker's timbre stable.
- Actual: the timbre itself changes (pitch, formants, sometimes perceived identity).
Questions for the maintainers
- Is this timbre drift the intended behavior of control tags? Is there a
recommended way to apply emotion/style while keeping the speaker timbre stable? - What is the officially supported tag set (valid values for
emotion/style
/prosody)? Are certain tags known to shift timbre more than others?
ATTACHMENTS (audio — same text, only the tag differs)
Reference voice used for clone mode:
A) Clone mode (ref_audio = the reference voice above):
(no tag — baseline)
(<|emotion:anger|>, +7.62 st / drift 21.3%)
(<|emotion:elation|>, +8.46 st / drift 16.7%)
(<|emotion:relief|>, +4.47 st / drift 14.8%)
B) No-clone mode (no ref_audio, default voice):
(no tag — baseline)
(<|emotion:enthusiasm|>)
(<|emotion:elation|>)
(<|emotion:sadness|>)
(<|emotion:anger|>)
(<|emotion:surprise|>)
(<|emotion:fear|>)
(<|emotion:disgust|>)
(<|style:whispering|>)
(<|prosody:expressive_high|>)