Skip to content

feat(voice): voice picker in settings — select from account voices including clones #686

@sterlingchad

Description

@sterlingchad

Problem

The voice assistant currently uses a hardcoded list of ElevenLabs pre-made voices with no way to select between them in the UI. Users who:

  • Have an ElevenLabs paid plan and have created instant voice clones cannot use those clones with Hapi
  • Want a different pre-made voice cannot change it without editing config manually

Proposed solution

Add a voice picker to Settings → Voice Assistant that:

  1. Fetches the user's available voices dynamically from ElevenLabs (GET /v1/voices) via a hub proxy route, so cloned voices appear alongside pre-made voices
  2. Shows a ▶ preview button per voice using the ElevenLabs preview_url (CDN-hosted, no auth needed to play)
  3. Labels cloned voices distinctly so users can identify them
  4. Persists the selection to localStorage and passes it as an override when starting a voice session (ElevenLabs already supports platform_settings.overrides.conversation_config_override.tts.voice_id)
  5. Degrades gracefully — if no API key is configured, shows a static fallback list

Notes

  • ElevenLabs voice override is already supported via overrides.tts.voiceId in startSession
  • The hub proxy approach keeps the API key server-side (consistent with the existing token endpoint pattern)
  • This lays the groundwork for a future phase where the voice provider can be abstracted (local TTS, Gemini voice, etc.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions