Connect by JBRH Open Connect

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 What this means
Audience
both
Channels
phone
In the app
#/phone
Last verified
Product version
6.3.2

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*.

KindCompiles toPromise
engineA session parameterSet exactly
promptA direction in the instructionsFollowed in the model's own way
coarseA direction in the instructionsApproximated 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.

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 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.