ey2419/OG_TTS

0

stars

5

commits

Python

primary language

Jul 9, 2026

updated

README

OG Local TTS

A local macOS text-to-speech app that mirrors the model choices in ../Local_TTS, but points at original upstream model backends instead of mlx-community/* conversions.

Generation runs in offline mode by default. The app and runner set Hugging Face Hub and Transformers offline flags before loading any backend, so missing model files fail instead of being downloaded. Model IDs such as hexgrad/Kokoro-82M can still be used as keys for an existing local cache, and local model folders can be passed in the Model field when supported by the backend. The runner also blocks non-loopback socket connections from backend code.

Included Model Families

The app includes the same families exposed by the MLX version:

  • CSM 1B: sesame/csm-1b
  • OmniVoice: k2-fsa/OmniVoice
  • LongCat: meituan-longcat/LongCat-AudioDiT-1B
  • Qwen3 TTS 1.7B: Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
  • Qwen3 TTS 0.6B: Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice
  • Kokoro 82M: hexgrad/Kokoro-82M
  • Voxtral 4B TTS: mistralai/Voxtral-4B-TTS-2603

Model, backend, language, and voice are separate controls in both the native macOS app and the Python fallback GUI.

Setup

Install the system speech dependency used by Kokoro:

brew install espeak-ng

Then create and install a Python environment. Python 3.10 or newer is recommended; if you kept the standalone Python from ../Local_TTS, you can use it here too:

../Local_TTS/.python/python/bin/python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-kokoro.txt

If that sibling Python is not present, use another Python 3.10+ executable for the venv command.

Some original backends have additional constraints:

  • Qwen and Kokoro can share the default .venv installed with requirements-kokoro.txt.
  • The original backend packages do not all fit in one venv: Qwen pins transformers==4.57.3, while OmniVoice requires transformers>=5.3.0. Use a separate venv for OmniVoice:
../Local_TTS/.python/python/bin/python3 -m venv .venv-omnivoice
source .venv-omnivoice/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-omnivoice.txt
  • Qwen recommends Python 3.12 and may need CUDA/FlashAttention for best performance.
  • LongCat uses its original GitHub/Hugging Face implementation. Install the meituan-longcat/LongCat-AudioDiT project dependencies if the audiodit package is not importable.
  • Voxtral original inference is served through vLLM Omni. Start a server before generating:
vllm serve mistralai/Voxtral-4B-TTS-2603 --omni

The app's Voxtral preset includes --server_url http://127.0.0.1:8000/v1 in Extra flags.

Offline model files

This app does not download model weights during generation. Before running a preset, make sure its model is already present in the local Hugging Face cache or copy the model into a local folder and use that path in the Model field. Use the Model panel's Check Update button when you intentionally want to check Hugging Face and refresh the selected repo-id model cache. That button is the only app workflow that enables external network access.

Kokoro supports a local folder shaped like this:

models/Kokoro-82M/
  config.json
  kokoro-v1_0.pth
  voices/
    af_heart.pt

Then use models/Kokoro-82M as the Model value. Other from_pretrained backends can use either an existing cache entry or a local model directory. Voxtral requests are restricted to loopback URLs such as 127.0.0.1 or localhost; the vLLM server itself must also have its model files locally available.

Build the macOS app

./build_macos_app.sh
open "build/OG Local TTS.app"

The app defaults to .venv/bin/python when it exists. If dependencies are installed in another environment, use the Python field in the app to choose that interpreter.

Python Fallback

python og_tts_gui.py

Both the native app and Python fallback save generated audio under outputs/ by default.

Direct Runner Examples

Kokoro:

python og_tts_runner.py \
  --backend kokoro \
  --model hexgrad/Kokoro-82M \
  --text "Hello from original Kokoro." \
  --lang_code a \
  --voice af_heart \
  --join_audio \
  --output_path outputs

Qwen CustomVoice:

python og_tts_runner.py \
  --backend qwen \
  --model Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice \
  --text "Hello from original Qwen TTS." \
  --lang_code English \
  --voice Ryan \
  --join_audio \
  --output_path outputs

OmniVoice voice cloning:

python og_tts_runner.py \
  --backend omnivoice \
  --model k2-fsa/OmniVoice \
  --text "Hello from original OmniVoice." \
  --ref_audio sample.wav \
  --ref_text "Transcript of the sample." \
  --join_audio \
  --output_path outputs

Notes

  • This project intentionally does not depend on mlx-audio, mlx-lm, or MLX model repos.
  • The runner rejects mlx-community/* model ids.
  • Generation is offline by default. Install dependencies and fetch/copy model files as a separate setup step.
  • Reference audio support depends on the selected backend. Kokoro built-in voices do not use reference audio; Qwen Base, OmniVoice, LongCat, and Voxtral have their own original reference-audio flows.

Contributors

ey2419

5 commits

ey2419/OG_TTS

0

stars

5

commits

Python

primary language

Jul 9, 2026

updated

README

OG Local TTS

A local macOS text-to-speech app that mirrors the model choices in ../Local_TTS, but points at original upstream model backends instead of mlx-community/* conversions.

Generation runs in offline mode by default. The app and runner set Hugging Face Hub and Transformers offline flags before loading any backend, so missing model files fail instead of being downloaded. Model IDs such as hexgrad/Kokoro-82M can still be used as keys for an existing local cache, and local model folders can be passed in the Model field when supported by the backend. The runner also blocks non-loopback socket connections from backend code.

Included Model Families

The app includes the same families exposed by the MLX version:

  • CSM 1B: sesame/csm-1b
  • OmniVoice: k2-fsa/OmniVoice
  • LongCat: meituan-longcat/LongCat-AudioDiT-1B
  • Qwen3 TTS 1.7B: Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice
  • Qwen3 TTS 0.6B: Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice
  • Kokoro 82M: hexgrad/Kokoro-82M
  • Voxtral 4B TTS: mistralai/Voxtral-4B-TTS-2603

Model, backend, language, and voice are separate controls in both the native macOS app and the Python fallback GUI.

Setup

Install the system speech dependency used by Kokoro:

brew install espeak-ng

Then create and install a Python environment. Python 3.10 or newer is recommended; if you kept the standalone Python from ../Local_TTS, you can use it here too:

../Local_TTS/.python/python/bin/python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-kokoro.txt

If that sibling Python is not present, use another Python 3.10+ executable for the venv command.

Some original backends have additional constraints:

  • Qwen and Kokoro can share the default .venv installed with requirements-kokoro.txt.
  • The original backend packages do not all fit in one venv: Qwen pins transformers==4.57.3, while OmniVoice requires transformers>=5.3.0. Use a separate venv for OmniVoice:
../Local_TTS/.python/python/bin/python3 -m venv .venv-omnivoice
source .venv-omnivoice/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-omnivoice.txt
  • Qwen recommends Python 3.12 and may need CUDA/FlashAttention for best performance.
  • LongCat uses its original GitHub/Hugging Face implementation. Install the meituan-longcat/LongCat-AudioDiT project dependencies if the audiodit package is not importable.
  • Voxtral original inference is served through vLLM Omni. Start a server before generating:
vllm serve mistralai/Voxtral-4B-TTS-2603 --omni

The app's Voxtral preset includes --server_url http://127.0.0.1:8000/v1 in Extra flags.

Offline model files

This app does not download model weights during generation. Before running a preset, make sure its model is already present in the local Hugging Face cache or copy the model into a local folder and use that path in the Model field. Use the Model panel's Check Update button when you intentionally want to check Hugging Face and refresh the selected repo-id model cache. That button is the only app workflow that enables external network access.

Kokoro supports a local folder shaped like this:

models/Kokoro-82M/
  config.json
  kokoro-v1_0.pth
  voices/
    af_heart.pt

Then use models/Kokoro-82M as the Model value. Other from_pretrained backends can use either an existing cache entry or a local model directory. Voxtral requests are restricted to loopback URLs such as 127.0.0.1 or localhost; the vLLM server itself must also have its model files locally available.

Build the macOS app

./build_macos_app.sh
open "build/OG Local TTS.app"

The app defaults to .venv/bin/python when it exists. If dependencies are installed in another environment, use the Python field in the app to choose that interpreter.

Python Fallback

python og_tts_gui.py

Both the native app and Python fallback save generated audio under outputs/ by default.

Direct Runner Examples

Kokoro:

python og_tts_runner.py \
  --backend kokoro \
  --model hexgrad/Kokoro-82M \
  --text "Hello from original Kokoro." \
  --lang_code a \
  --voice af_heart \
  --join_audio \
  --output_path outputs

Qwen CustomVoice:

python og_tts_runner.py \
  --backend qwen \
  --model Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice \
  --text "Hello from original Qwen TTS." \
  --lang_code English \
  --voice Ryan \
  --join_audio \
  --output_path outputs

OmniVoice voice cloning:

python og_tts_runner.py \
  --backend omnivoice \
  --model k2-fsa/OmniVoice \
  --text "Hello from original OmniVoice." \
  --ref_audio sample.wav \
  --ref_text "Transcript of the sample." \
  --join_audio \
  --output_path outputs

Notes

  • This project intentionally does not depend on mlx-audio, mlx-lm, or MLX model repos.
  • The runner rejects mlx-community/* model ids.
  • Generation is offline by default. Install dependencies and fetch/copy model files as a separate setup step.
  • Reference audio support depends on the selected backend. Kokoro built-in voices do not use reference audio; Qwen Base, OmniVoice, LongCat, and Voxtral have their own original reference-audio flows.

Contributors

ey2419

5 commits

Languages

Python

52.8%

Swift

44.3%

Shell

2.9%