M 36F 17NB 255 / 55

Male voices36

  • male ancient powerful
  • male australian young casual
  • male baritone warm
  • male british refined
  • male brute commanding
  • male calm steady
  • male child calm
  • male child expressive
  • male commanding blunt
  • male commanding gruff narrator
  • male commanding intense
  • male commanding resonant british
  • male confident casual
  • male confident energetic
  • male confident warm
  • male deep accent
  • male deep calculating
  • male deep controlled
  • male deep drywitted
  • male deep gravelly british
  • male deep raspy
  • male elderly british
  • male elderly refined
  • male gentle soothing
  • male goblin chaotic
  • male gravelly elderly
  • male grounded conversational
  • male laconic calm
  • male monster growly
  • male monster slow booming
  • male old wise
  • male sinister ominous
  • male sly manipulative
  • male southern gritty
  • male steady approachable
  • male young charismatic

Female voices17

  • female calm controlled
  • female calm relaxing
  • female child gentle
  • female cynical monotone
  • female deep controlled
  • female ethereal light
  • female gentle grounded
  • female harsh commanding
  • female melodic bright
  • female playful youthful
  • female posh british
  • female scottish old
  • female sly smooth
  • female soft flirtatious
  • female warm friendly
  • female warm soft
  • female young friendly british

Nonbinary voices2

  • nonbinary confident grounded
  • nonbinary melodic calm

import VoiceCatalog from "~/components/islands/VoiceCatalog.svelte";

Every NPC can be given a voiceTag string that maps to a specific TTS voice. The gender prefix is part of the tag string and must be included (e.g. "female posh british", "male baritone warm"). See the catalog below for all valid values.

Note: voiceTag is extra-codec - not in the formal io-ts schema, but accepted and used by the engine. When present, it selects a specific vocal profile and overrides gender for voice selection; gender is only read as a fallback when voiceTag is absent or empty. The gender field still informs the NPC's identity and prose description regardless.

The voice tag actually used at speak time is selected by the generateStory task (or generateInitialStart on turn 0) and written into game state. The authored voiceTag on an NPC is the input that informs that selection. Trigger effects like changeCharacterVoice bypass this pipeline by writing the chosen tag directly into game state.

json
"voiceTag": "female posh british"
"voiceTag": "male baritone warm"