--- 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](https://scrappylabs.ai). 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`](https://huggingface.co/Audio8/Audio8-TTS-Preview-0.6b) by the [Audio8](https://huggingface.co/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/`](./samples). ## Use it ```python 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](./mlx-4bit) 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](https://scrappylabs.ai). We make things work, and better. This one's on the house.* 🛠️