Introduction

Most small TTS models are built to read. Give them "um, I mean, [laugh] no way" and they either skip the messy parts or read the brackets out loud. Goldfinch goes the other way. It's trained to talk, with all the hesitations and little noises a real chat has.

Late on November 10 (UTC), Flock Speech posted Goldfinch v0.1 on Hugging Face. It's a conversational English text-to-speech model with only 11.4M parameters. It keeps fillers like "uh" and "you know", handles restarts like "I, I think", and places laughs, breaths, sighs and lip smacks wherever you type a tag. The weights are Apache-2.0, and it runs offline on an ordinary CPU through pip install flockspeech, with no GPU or PyTorch needed.

What Shipped

  • Model: Goldfinch v0.1 by Flock Speech, a sibling of their reading voice Junco, which came out earlier the same day.
  • Modality: English (US) text-to-speech with one fixed conversational voice. There's no voice cloning.
  • Size: 11.4M-parameter acoustic model plus a 13.5M-parameter Vocos vocoder. The default ONNX build is 44 MB (int8 decoder, fp16 encoder and vocoder), and a 100 MB full-precision build is included too.
  • Output: 24 kHz mono audio.
  • Sound tags: [laugh], [breath], [sigh], [lipsmack], [throat] and [noise]. Aliases such as [giggle], [chuckle], [inhale] and [cough] also work.
  • Runtime: ONNX Runtime on CPU for Linux, macOS and Windows, on both x86-64 and ARM64. The flockspeech package (0.2.0+, now 0.2.1) bundles the weights and its own espeak-ng copy.
  • License: Apache-2.0 for the Goldfinch weights and MIT for the Vocos vocoder. The espeak-ng and phonemizer libraries it uses at run time are GPL-3.0 and aren't included in the repo.

How It Works

Under the hood, Goldfinch uses the same compact design as Junco:

  • Text front end: espeak-ng turns text into IPA phonemes. Each sound tag becomes one extra symbol, so the model decides how long a laugh lasts and how it's shaped from the words around it.
  • Text encoder (3.2M parameters): ConvNeXt blocks feeding six small transformer layers.
  • Duration predictor (0.3M parameters): sets how long each sound lasts.
  • Flow-matching decoder (7.9M parameters): produces a 100-band Mel spectrogram in 8 Euler steps by default.
  • Vocoder: the open Vocos model turns the spectrogram into sound.

The voice comes from DisfluencySpeech (AMAAI Lab, Apache-2.0). In that dataset, one studio speaker re-performs Switchboard phone-call transcripts with every filler, restart and noise left in. After cleaning, Flock Speech trained on 8.3 hours (4,361 clips) from scratch. Training took about 3.1 hours on a single NVIDIA T4, roughly 0.43 kWh in total.

The Tags, Honestly

The model card is upfront about which tags work well, based on how many training examples each one had:

  • Good: [laugh] (701 examples) and [breath] (98).
  • Fair: [throat] (57) and [lipsmack] (56).
  • Weak: [noise] (19) and [sigh] (16). These can come out faint or wrong.

Fillers don't need tags. Just write "uh", "um", "you know" or "I mean" as normal words. By default, the engine stretches each tag to 1.4× its predicted length and doubles the short pauses around it, which the team found made laughs sound smoother. You can change this with tag_len and tag_pad in onnx/goldfinch.json.

Flock Speech hasn't published WER or MOS scores for Goldfinch. The case for it rests on the samples and on your own ears.

Our Box Test

We installed flockspeech 0.2.1 in a fresh Python 3.13 virtual environment on a CPU-only Linux box on November 11. No GPU, no system espeak-ng, and no extra downloads were needed.

  • Load time: about 0.5 seconds.
  • "Yeah, um, we usually eat dinner around six. [laugh] Late, I know.": a 5.4-second clip in 0.31 seconds, about 17× faster than real time.
  • "Oh my gosh, [laugh] I can't believe you actually did that.": a 3.9-second clip in 0.37 seconds.
  • One CPU thread only: still about 10× faster than real time on a 12-word line.

Every clip came out as 24 kHz mono audio at a steady level, and the laugh landed where we put the tag.

How to Try It

The fastest path is the command line:

pip install flockspeech
flockspeech "Oh my gosh, [laugh] I can't believe you actually did that." --voice goldfinch -o laugh.wav --play

Or in Python:

from flockspeech import Goldfinch

tts = Goldfinch()  # loads in under a second
tts.save("Yeah, you know, I used to work there, but, um, not anymore. [laugh]", "reply.wav")

for chunk in tts.stream(long_text):  # sentence by sentence, for low latency
    play(chunk)

You can adjust speed (1.0 by default), steps (8; fewer is faster), seed (0, for repeatable takes) and threads (up to 4).

Pro Tip

Write the way people actually talk: "So, uh, [breath] here's the thing." Spell out numbers, dates and prices ("six thirty", not "6:30"), because Goldfinch doesn't normalize text. If a take sounds off, change the seed instead of rewriting the line. Delivery varies on purpose, so a different seed often fixes the rhythm.

Where It Fits

Goldfinch fits game NPC barks, chat companions, podcast and dialogue prototypes, and offline assistants where private text has to stay on the device. It isn't meant for audiobooks, news reading or announcements. Flock Speech points those to Junco. There's also only one US English voice, prosody doesn't carry from one sentence to the next, and rare names can be mispronounced by espeak-ng.

Since a voice that laughs and hesitates is easier to mistake for a real person, Flock Speech asks users to tell listeners when speech is synthetic and not to use it for scams or impersonation. We agree, so please label your clips.

For other tiny CPU voices, see Underdog Woof (two English voices, non-commercial). If you need voice cloning, try the Apache-2.0 ZONOS3-Mini.

Conclusion

Goldfinch is small, honest and fun. It's an 11.4M-parameter, Apache-2.0 voice that laughs where you tell it to, says "uh" like a person and runs many times faster than real time on a plain CPU. It has one voice, no cloning and a couple of weak tags, but it's a pip install away. Try typing [laugh] into your next NPC line and listen.

—Anabel ♡