8000 feat(voice): read aloud with Gemini TTS or macOS say, and pick the voice in Settings by adeelahmad · Pull Request #268 · adeelahmad/lense · GitHub
[go: up one dir, main page]

Skip to content

feat(voice): read aloud with Gemini TTS or macOS say, and pick the voice in Settings - #268

Merged
adeelahmad merged 3 commits into
mainfrom
claude/project-thread-cy94he
Oct 10, 2026
Merged

adeelahmad merged 3 commits into
mainfrom
claude/project-thread-cy94he

Conversation

@adeelahmad
@adeelahmad adeelahmad commented Oct 10, 2026 •
Copy link
Copy Markdown
Owner

Requested by Adeel · project thread

Description

Before: spoken answers and podcasts could be read by an OpenAI-compatible server, ElevenLabs or Deepgram, and the voice was a free-text id you had to look up yourself.

After: Google Gemini TTS (its 30 prebuilt voices) and macOS say (the Mac's own voices, when Lens runs on a Mac itself) are also offered. Settings → AI assistant → Voice shows the provider's voices in a list (ElevenLabs from your account, Deepgram's Aura models, say -v ?, an OpenAI-compatible server's /audio/voices when it has one, else OpenAI's own, Gemini's fixed list) with a Hear button that plays a sample before you keep it. Settings → Speech providers gets a Google Gemini block (address, model, key, Test). Podcast hosts use the same providers and voices.

How: speech.speak() dispatches per provider; Gemini's raw PCM is wrapped as WAV; say gets the text on stdin so nothing in it is read as an option. New GET /voice/voices?provider=…; POST /voice/speak takes an optional voice. New settings speech.gemini_base_url, gemini_model, gemini_api_key (sealed). StyleTTS2 (opt-in local service) follows in its own PR.

Motivation and Context

Adeel asked for ElevenLabs, macOS say, Gemini TTS and StyleTTS2 with voice selection.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change; ! in the title)

Checklist:

  • The title is a Conventional Commit.
  • My code follows the code style of this project (make hooks checks it on commit).
  • I added or updated tests.
  • My change requires documentation updates, and I have updated docs/ accordingly.
  • Users need more than the title to understand it, so I wrote it under ## Unreleased in CHANGELOG.md.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WkPdbtd7zvYMRWaRkLN2F6

…rovider's voices

Gemini (its 30 prebuilt voices, PCM wrapped as WAV) and macOS say (the Mac's
own voices, text on stdin) join OpenAI-compatible, ElevenLabs and Deepgram as
text-to-speech providers. GET /voice/voices lists the voices a provider reads
in; POST /voice/speak takes a voice to try. Podcast hosts use the same voices.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WkPdbtd7zvYMRWaRkLN2F6
@adeelahmad adeelahmad self-assigned this Oct 10, 2026
…s list, and hear it

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WkPdbtd7zvYMRWaRkLN2F6
@adeelahmad adeelahmad changed the title feat(voice): read aloud with Gemini TTS or macOS say, and list each provider's voices feat(voice): read aloud with Gemini TTS or macOS say, and pick the voice in Settings Oct 10, 2026
@adeelahmad
adeelahmad merged commit 25cfd1b into main Oct 10, 2026
8 checks passed
@adeelahmad
adeelahmad deleted the claude/project-thread-cy94he branch October 10, 2026 20:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

0