llama.cpp has released a build that supports selecting built-in Pocket TTS voices by name. Developers adding speech synthesis, which turns text into speech, can list available voices on the server. During conversion, logs show how well voice data matches the weights, the numerical information learned by the model.

1. Select built-in voices by name

b12061 supports kyutai/pocket-tts-without-voice-cloning weights, which lack voice cloning, a feature that imitates a reference voice. Preset voices are stored as internal states, values retained by the model after processing voice prompts, or reference voice inputs. The converter, a tool for changing model formats, recovers and saves these as representations that can be fed back into the model. It excludes the zero-valued voice encoder, the component that turns audio into model inputs.

Specify a voice name in the voice field for server requests or the --tts-voice option for the command-line tool. This selects a voice supplied with the model rather than taking one from a separate recording. Requests are rejected if a speaker reference, the reference audio to imitate, is sent to a model without a voice encoder.

2. Log conversion state differences for each voice

According to the release notes, voice states supplied by Kyutai may differ from states generated with the same prompts using the package's weights. Italian, German, and Spanish states match within rounding error for bf16, a reduced-precision 16-bit numerical format. In contrast, english_2026-04 differs by 2%, and french by 20%. Layer 0 of the French state came from different weights.

These are not audio quality scores, but differences between the supplied voice data and data recreated using the weights. The release notes say the reference implementation, the program used as a behavioral baseline, sounds like the same voice even when it loads the supplied states unchanged.

The new converter reruns the model with recovered inputs, compares the full states, and logs differences for each voice. It warns when differences exceed 5% and skips states that do not match the weights at all. This also enables conversion of the kyutai/pocket-tts package.

3. List voices and handle invalid names

If a model has preset voices, their names are listed in the voices field of the server's GET /props response.

The C API adds n_voices for the voice count and mtmd_gen_audio_voice_name() for looking up names. The release notes say voices are now treated as a feature of audio generation models rather than a feature specific to one model.

If a nonexistent name is sent to a model with preset voices, the server returns 400 instead of 500 and includes the voice name in the response. A failure that previously looked like a server problem is now identified as an issue with the requested name. Models without a voice list ignore the voice input with a warning.

A default selection has also been added. According to the release notes, these models produce almost only silence without a voice prompt. If both a voice and a speaker reference are omitted, the first voice is selected, and the selection is logged by llama-tts and the server.

4. Name matching and changes in use

The LFM3-Audio chat template, the rules for converting conversations into model inputs, lowercases voice names. Voice lookup is now also case-insensitive, so mixed-case names such as Male match the corresponding voice. This ensures that the same voice is found even if the user's spelling and the template's processed name differ in case.

Voice listing and default selection make requests easier to construct. Conversion, however, now includes rerunning the model, comparing full states, and logging differences for each voice. Selection is simpler, while checking whether weights match voice data is handled more explicitly during conversion.

Server integration code is worth checking for how it handles invalid voice names. The same request mistake now returns 400 rather than 500, with the name in the response. This can help tell users which name to correct.

b12061 enables selecting built-in Pocket TTS voices by name and checking differences between weights and voice states in conversion logs.