warble / README.md
briancconnelly's picture
Keep the card focused on the voices
25f9120 verified
|
Raw
History Blame Contribute Delete
3.29 kB
metadata
license: apache-2.0
language:
  - en
pipeline_tag: text-to-speech
tags:
  - text-to-speech
  - tts
  - voice
  - on-device
  - mlx
  - apple-silicon
base_model: Audio8/Audio8-TTS-Preview-0.6b

Warble 🐦

Five warm, ready-to-use voices you can run anywhere β€” even on your phone. Free.

Warble is a small gift from ScrappyLabs. It's five named voices living in one tiny model: just say which one you want and it talks β€” no reference clip, no cloud, no account, no meter. It runs on a laptop in real time, and it runs on an Apple-Silicon phone-class chip too.

Credit where it's due

Warble is built entirely on Audio8/Audio8-TTS-Preview-0.6b by the Audio8 team (Apache-2.0). The clever part β€” a capable 0.6B text-to-speech model β€” is theirs. All we did was train a few voices we liked onto it and package it so it's easy to run. If you like Warble, go star their work first; none of this exists without them.

The voices

Pick a voice by putting its token at the front of your text. No reference audio needed.

token voice character
<|speaker:1|> Silas deep, gravelled, movie-trailer weight
<|speaker:2|> Narrator even, warm, broadcast baritone
<|speaker:3|> Clara clear, professional, friendly
<|speaker:4|> Pip bright, light, quick
<|speaker:5|> Nova confident morning-radio energy

Samples for each are in samples/.

Use it

from transformers import AutoProcessor, AutoModel
import torch, soundfile as sf

model_id = "scrappylabsai/warble"
proc  = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
model = AutoModel.from_pretrained(model_id, trust_remote_code=True, dtype=torch.bfloat16).to("cuda").eval()

text = "<|speaker:2|>Hi there. This is Warble, running right here on your own machine."
inputs = proc(text=[text], return_tensors="pt")
inputs = {k: (v.to("cuda") if hasattr(v, "to") else v) for k, v in inputs.items()}
wavs, lens, _ = model.generate_audio(**inputs, max_new_tokens=1024)
sf.write("out.wav", wavs[0][:int(lens[0])].float().cpu().numpy(), 44100)

On a Mac / phone: an MLX 4-bit build is included β€” it runs on Apple Silicon, including phone-class chips, in about the memory a couple of browser tabs use.

Honest notes

  • Our voices are consent-first. Silas, Narrator, Clara, Pip, and Nova were designed by us from scratch β€” not cloned from any real person, not scraped from anyone. We can't make that claim about the base model's own training data (that's Audio8's and undocumented), so we won't β€” but the five voices we're handing you are entirely our own.
  • The MLX 4-bit build trades a little voice-likeness for size; Silas and Clara soften the most there. Use the full-precision model if you want them exactly right.
  • It's a preview-generation base model, so expect the occasional rough edge.

License

Apache-2.0, matching the base. Use it for anything, including commercial work. No strings.


Made by ScrappyLabs. We make things work, and better. This one's on the house. πŸ› οΈ