Introduction

BlueRose Labs has released Silencio-2, an open-weights English text-to-speech model that you direct with tags written straight into the text. Put [sigh] where a sigh belongs, <whisper> where the delivery drops, and the model performs it instead of reading the tag aloud. The weights went up on Hugging Face on October 31, under CC-BY-4.0, and you can run it today on a laptop CPU or in the linked Colab.

Silencio-2 is a fine-tune of Kyutai's Pocket TTS 18M, the tiny CPU model we covered when Pocket TTS 4.0 shipped. Pocket TTS gave you small, fast, clonable voices. Silencio-2 keeps that footprint and adds the one thing small models usually lack: performance cues.

What Shipped

  • Model: Silencio-2 by BlueRose Labs, a flow-based language model that predicts Mimi codec latents one step per frame.
  • Size: 27.9M parameters in one 112 MB model.safetensors file. 18.2M of those generate speech; the rest is the Mimi encoder used for voice cloning.
  • Audio: 24 kHz mono, with streaming output.
  • Speed: the card claims about 20x real time on four CPU threads of an Apple M4, no GPU.
  • Sound tags: [laugh], [sigh], [gasp], [cough], [clear_throat], placed where the sound happens.
  • Emotion tags: <happy>, <sad>, <angry>, <fear>, <surprised>, <whisper>. Each one holds until the next tag.
  • Voices: eight bundled voices, plus cloning from a few seconds of clean reference audio.
  • License: weights CC-BY-4.0 (inherited from Pocket TTS); the inference code in silencio2/core is Kyutai's MIT code.
  • Language: English only.

An unknown tag raises an error rather than being spoken, which is a nice touch if you generate scripts with an LLM and want typos caught early.

How the Tags Were Trained

BlueRose extended the Pocket TTS tokenizer with 11 new tokens, one per tag, and fine-tuned on a custom dataset with Kyutai's training code. Two details explain why the tags actually steer the voice. First, a tag was stripped from a fifth of the training texts. Second, the voice prompt for a tagged clip was often a neutral take of the same speaker, so the model learns that the tag, not the reference clip, sets the mood. A final distillation stage bakes classifier-free guidance into the weights, so inference is a single pass per frame. That is a big part of how it stays fast on CPU.

Pro Tip

Delivery varies from take to take, and the card says so plainly. Render three or four seeds of any line that matters and keep the best. <whisper> is the least steady tag, so keep whispered lines short.

How to Run It

Clone the repo from Hugging Face and install its requirements. You do not need pip install pocket-tts, because Silencio-2 ships its own silencio2 package.

git clone https://huggingface.co/BlueRoseLabs/Silencio-2
cd Silencio-2
pip install -r requirements.txt

Then generate from Python inside that folder:

from silencio2 import Silencio2TTS

tts = Silencio2TTS.from_pretrained()  # add quantize=True for int8 on CPU

tts.save("sigh.wav", "What a long day. [sigh]", voice="260")
tts.save("mixed.wav", "<whisper> Keep your voice down. <angry> I said stop!")
tts.save("clone.wav", "Hi! This is my voice.", voice="my_clip.wav")

for chunk in tts.stream("A longer narration, played as it is generated."):
    pass  # float32 chunks at tts.sample_rate

On our own test box, a plain 8-core Linux VM with no GPU, the install worked as written. The mixed whisper-then-angry line rendered 3.2 seconds of audio in 0.34 seconds, about 9x faster than real time, and the tags came through as delivery changes rather than spoken words.

generate raises quiet takes to speech level by default, because a true whisper comes out roughly ten times quieter than normal speech. Pass normalize=False if you want the raw level for your own mix.

A paste-ready line for testing the full tag set:

<happy> We actually finished the album! [laugh] <sad> Shame the studio closes tomorrow. [sigh] <whisper> Don't tell the label yet.

Where It Fits

Silencio-2 is not trying to beat big expressive models like Fish Audio's Drama 3 or ElevenLabs Eleven v3 on raw quality. Its pitch is different: tagged, emotional English speech from a 112 MB file that runs offline on a CPU. That makes it a good fit for game dialogue prototypes, local voiceover drafts, accessibility tools, and small apps where a GPU or an API bill is off the table.

Keep the license in mind. CC-BY-4.0 allows commercial use, but you must credit the source. The card also asks you to clone a voice only with its owner's permission and to label synthetic speech where listeners could mistake it for a real person.

Conclusion

Pocket TTS proved an 18M voice model can run anywhere. Silencio-2 shows that the same tiny model can also sigh, laugh, and whisper on cue. If you build with local speech, it is a 112 MB download worth an afternoon of testing.

—Anabel ♡