Skip to content

added ChaptGPT (selfhosted) option for custom hosted voices - #426

Open
gerardob wants to merge 1 commit into
ken107:firefoxfrom
gerardob:firefox
Open

added ChaptGPT (selfhosted) option for custom hosted voices#426
gerardob wants to merge 1 commit into
ken107:firefoxfrom
gerardob:firefox

Conversation

@gerardob

@gerardob gerardob commented Oct 9, 2024

Copy link
Copy Markdown

Context:
ChatGPT Voices are hard-coded to official voices (alloy, echo, fable, onyx, nova, shimmer), in my case I have a self-hosted local/home server with few custom voices (ex. mx_claude).

Feature:
I added a new hard-coded option to ChatGPT select list, this allow input a custom voice, when the "selfhosted" option is selected is added a input:text below the voice select to manually set the custom voice name that you have hosted in local/home server.

For simplicity and to do the minimal change to the workflow also a Save Button is added for store this new input as "voiceCustom", this button is visible ONLY in this use case.

I leave some screenshots for easy review.

P.D.: I worked in the Firefox branch because is my primary browser, but I think this feature can be cherry-picked to master or any other branch when need it.

P.D.2: I don't looked to network tab in the debugger after a couple hours of work, so maybe will be about a houndred reported issues via "report issue" API.

Options Screen
options

Request Screen with custom voice
custom_voice

@gerardob
gerardob force-pushed the firefox branch 2 times, most recently from 04e792e to 20bc00f Compare October 11, 2024 01:22
@ken107
ken107 force-pushed the firefox branch 2 times, most recently from eab002f to 74557b1 Compare January 27, 2026 16:03
Neon-Solitude pushed a commit to Neon-Solitude/read-aloud that referenced this pull request Jul 14, 2026
Replace Speech.pickEngine's hardcoded if/else ladder with a data-driven
engineRegistry table (ordered {match, get} entries, browser-engine fallback).
Behavior is identical: order preserved, GoogleTranslate Hebrew/Telugu opt-out
and Premium.prepare / GoogleNative TimeoutTtsEngine side effects retained.
getInfo().engine is intentionally left as-is (only hosted engines surface a
name, which popup.js uses for the "initializing" label).

Add test/engine-routing.test.js: extracts the registry + predicates and asserts
16 representative voices route to the same engine the old ladder produced --
routing was previously untestable (nested inside the Speech constructor). This
decoupling is what lets a new engine become a one-line registry entry (unblocks
PRs ken107#426 and ken107#480).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.

1 participant