# Human voice profiles

A human profile is a structured description of a person — identity, voice, speech, human imperfections, language, psychology, conversation, emotion, adaptation — compiled into session parameters where the stack can set something and into prompt directions where it cannot. Twenty-eight are supplied, all invented, with values drawn from published speech research rather than impression.

- **Status:** Available
- **Audience:** both
- **Channels:** phone
- **In the app:** #/phone
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/phone/human-voice-profiles/

## Eighty-six parameters, each labelled with what it can do

`voice_profiles.py` is a pure module: a schema and a set of presets, no side effects. The schema holds **86 parameters** grouped into identity, voice, speech, human imperfections, language, psychology, conversation, emotion and adaptation — and every one of them carries its *kind*.

| Kind | Compiles to | Promise |
|---|---|---|
| `engine` | A session parameter | Set exactly |
| `prompt` | A direction in the instructions | Followed in the model's own way |
| `coarse` | A direction in the instructions | Approximated only |

Labelling the kind on every parameter is the design decision that makes the rest honest. A screen that presents a prompt sentence and a session parameter as identical sliders teaches people that nothing they change matters, because half of it does not behave.

## Where the numbers come from

The values are taken from the speech literature rather than from somebody's ear, and the research behind them is written up separately in the repository. A few of the load-bearing ones:

- Speaking rate between **122 and 168 words per minute**, varying with age — older speakers slower, and more formal.
- Filler words at **one to three per hundred words**. Zero fillers is not neutral; it is noticeably synthetic.
- **Syllable-timed rhythm** for Indian English, which is a different rhythm class from the stress-timed default most models drift towards.
- Politeness markers used where a speaker would use them — *andi*, *ji*, *-nga*, *po*.

Twenty-eight people are supplied — each a given name and a city, spanning Indian regions and international ones — and **none of them is a real person**. They are constructions from the parameter space, not portraits, and nothing in a profile refers to anybody.

## What the stack cannot set, and says so

There is an explicit unsupported list, and it is shown as unsupported in the interface rather than rendered as a control that does nothing. It covers anything expressed in **Hz or dB**, jitter, formants, exact pause lengths, and a deliberate delay before answering.

The reason is the same one that shapes the whole voice surface: the realtime engine is speech-to-speech, so there is no synthesiser underneath with a pitch dial to reach. A control offering fundamental frequency would be a text instruction wearing a slider's clothes.

> **Careful** Two behaviours that sound like profile parameters were built, measured and removed: respect-word cadence and murmur handling. Both are limits of the model, not gaps in the schema, and neither should be bought back with prompt characters. [What a setting cannot change](/docs/phone/model-limits/) has both.

## The size limit, which is the real constraint

A person's block is kept under about **2,500 characters**. That is not an arbitrary tidiness rule: instruction size is a measured latency control, with 7,500 characters giving a 1.2–1.8 s first token against 2.3–3.4 s at 9,600, and the profile competes for that budget with knowledge, memory and the contact block.

A richly specified person who makes every reply half a second slower is a bad trade, and it is easy to make by accident because each addition seems small. [The call brief](/docs/phone/call-context/) lists the other budgets it shares the space with.

What is described here was reconciled on 2026-09-10 against `backend/app/voice_region.plan` at `f5ea518`. The profiles themselves are unchanged; what sits beside them in the brief is not. A profile's city belongs to an invented person's manner — it is never a claim about the caller and never a reason to assume the caller's language. The regional layer asks for a courteous local professional and forbids the four things that turn that into mimicry: an imitated accent, slang or film phrases before the caller has used them, a caricature of the region, and assuming a language from where somebody is.

## Questions

### Can I clone a specific person's voice?

No. The supplied people are invented, the parameters describe manner rather than identity, and nothing in this system takes a voice sample. What you can do is pick a manner of speaking — pace, formality, fillers, rhythm — that suits the line.

### Why does a setting for pitch exist elsewhere but not here?

Because on a speech-to-speech engine there is nothing to apply it to. Pitch, loudness in dB and jitter are on the unsupported list precisely so that the interface does not imply a synthesiser that is not there.

### Do imperfections make the line sound unprofessional?

The measured position is that a small, human rate of fillers reads as natural and zero reads as synthetic. It is adjustable like everything else in the schema — the useful test is a call from the Lab, not the value in the field.

## Related

- [Voice profiles](https://connectbyjbrh.com/docs/phone/voice-profile/)
- [Regional speaking style](https://connectbyjbrh.com/docs/phone/regional-speech/)
- [The Voice Lab](https://connectbyjbrh.com/docs/phone/voice-lab/)
- [What a setting cannot change](https://connectbyjbrh.com/docs/phone/model-limits/)
- [The call brief](https://connectbyjbrh.com/docs/phone/call-context/)

## What this page is based on

- Reconciled 2026-09-10 against `f5ea518` — `backend/app/voice_region.plan`, read from the code rather than its docstring
- Connect phone source pack — `docs-source/sources/PHONE.md` §11, the profile schema and its research
- Connect phone source pack — `docs-source/sources/PHONE.md` §7, the two model-limited behaviours
- Connect capability registry — `docs-source/facts.py` (`human_voice_profiles`, `MEASURED`)
