Skip to main content
← Back to Projects Screenshot of MLX TTS Studio

MLX TTS Studio

A local Apple Silicon text-to-speech studio that runs open Hugging Face models through MLX, with a Gradio UI, FastAPI endpoints, model-cache controls, and performance-aware preset guidance.

PythonMLXMLX AudioHugging FaceGradioFastAPIApple Siliconuv

MLX TTS Studio is a standalone local text-to-speech app for Apple Silicon Macs. I built it to make open Hugging Face speech models practical to run on my own machine, both through a browser UI and through a small local HTTP API that other tools can call.

The product shape is deliberately simple: paste text, choose a model preset, tune the voice or sampling controls, generate audio, and keep the resulting file locally. The important part is the operational layer around that flow. Large TTS models can make a local app feel broken if the first generation quietly blocks on a multi-gigabyte download, so the app exposes a dedicated download/load step before synthesis.

MLX TTS Studio interface

The app currently includes a mix of fast, controllable, and higher-quality presets:

  • Kokoro for quick local generation on smaller Apple Silicon machines
  • Qwen3 VoiceDesign for promptable voice design
  • Qwen3 CustomVoice for named speaker presets
  • Voxtral for stronger multilingual TTS experiments
  • KugelAudio as the strict open-source, high-quality option when the machine has enough memory

The model cache panel became a core part of the design. It shows which models are downloaded, where they live in the Hugging Face cache, how much disk space they use, what each preset is good for, and how suitable it is for the machine currently running the app. That matters because a 24 GB Mac and a 64 GB Mac should not be guided towards the same default behaviour.

Under the UI, the app is a FastAPI service mounted with Gradio. GET /health reports runtime and cache state, GET /models exposes presets and cache rows, POST /synthesize returns a generated local audio path, and POST /v1/audio/speech provides a small OpenAI-style endpoint for clients that expect audio bytes.

That API boundary keeps the project independent. It can be used directly in a browser, run under PM2 as a local background service, or be called by another local app without coupling that app to MLX, Gradio, or Hugging Face download behaviour.

The project is still early, but the useful shape is already there: a small local speech service that treats model size, cache visibility, and Apple Silicon constraints as part of the product rather than afterthoughts.