Pro speech & audio terminal for macOS Apple Silicon.
Waveform-first TTS/STT workstation that runs neural speech entirely in unified memory — no cloud round-trips, no PCIe transfers, just local synthesis at broadcast quality.
Voxa is a browser-based voice workstation that turns your Mac into a neural speech studio. Type text, pick a model, and watch a real 96-bar acoustic waveform render live from the generated PCM — derived from the actual audio samples, not a decorative animation.
Everything runs locally on Apple Silicon: the UI streams server-sent PCM chunks over SSE, decodes them to Float32, schedules playback on a Web Audio context, and assembles a downloadable WAV. Optional PocketBase sync adds cloud archiving with seamless localStorage fallback when no backend is configured.
[whisper], [cheerful], [urgent] and friends at the cursoruv runtimes| Engine | Hardware Target | Footprint | Notes |
|---|---|---|---|
| KittenTTS Mini 0.8 | Unified RAM (port 9123) | ~250 MB | Sub-150ms first chunk, 24kHz |
| macOS CoreAudio Neural | Native say kernel engine | 0 MB heap | 11 system voices, sub-5ms |
| MOSS-TTS Transformer | PyTorch MPS / unified RAM | ~1.8 GB | Autoregressive audio tokens |
| MLX-Audio server | Apple MLX / Metal (port 9125) | 2–10 GB | Kokoro, Qwen3-TTS, CSM, Dia, Spark, Voxtral |
| Piper ONNX | CPU / ONNX Runtime | <1 GB | Edge-grade VITS, 22.05kHz |
| Whisper | Apple Silicon CLI | 75MB–1.6GB | STT, tiny → turbo checkpoints |
| OpenAI GPT-4o Mini | Cloud fallback | remote | Optional, for cloud synthesis |
A curated, researched catalog of open-source speech models with license color-coding
(permissive / copyleft / non-commercial). MLX-native models share an OpenAI-compatible
server on port 9125; others get isolated venvs under ~/.voxa/library/. Install,
launch, test-generate, and audition samples without leaving the studio.
Select the local OpenCode agent, pick one of its configured models, then hand it a GitHub repo. It verifies the repo is actually a TTS system, checks Apple Silicon unified-memory viability (PyTorch MPS / CPU), extracts voices, sample rate, and memory estimate, then registers the model with dynamically generated sliders and dropdowns — which appear in the parameter rack with no code changes.
git clone https://github.com/hijak/voxa.git
cd voxa
bun install
cp .env.example .env # optional — PocketBase endpoints; app works without it
bun run dev
Production build (Nitro node-server preset, required for local child processes and SSE):
bun run build
PORT=3000 node dist/server/index.mjs
Note: the Nitro preset must stay
node-server. Cloudflare/Workers presets break the localsay/whisperchild-process execution and loopback microservice calls.
┌─ Client (React 19 + TanStack Router) ─────────────┐
│ Web Audio playback · 96-bar waveform canvas │
│ SSE PCM decoding · WAV assembly & download │
└────────────────────┬──────────────────────────────┘
│ SSE (base64 PCM deltas)
┌────────────────────▼──────────────────────────────┐
│ Nitro node-server (Vite 8 + TanStack Start) │
│ /api/tts /api/stt /api/models /api/system │
│ /api/agent /api/library /api/library-sample │
└───────┬──────────┬──────────┬──────────┬──────────┘
▼ ▼ ▼ ▼
KittenTTS macOS say MLX server OpenCode
:9123 CoreAudio :9125 agent CLI
Audio standard: 24kHz 16-bit mono linear PCM across TTS engines; Whisper expects
16kHz WAV. Non-24kHz library engines emit a speech.audio.meta SSE event so the client
assembles WAVs at the true sample rate (no pitch shift).
TanStack Start (SSR) · TanStack Router · React 19 · Vite 8 + Nitro · Tailwind CSS v4 · Radix UI · Lucide · Web Audio API · PocketBase (optional) · Bun/Node on macOS arm64
Personal project. Model licenses vary per engine — the Library tab color-codes each (permissive green, copyleft amber, non-commercial red). Verify before shipping.
TypeScript
98.2%
CSS
1.6%
Pro speech & audio terminal for macOS Apple Silicon.
Waveform-first TTS/STT workstation that runs neural speech entirely in unified memory — no cloud round-trips, no PCIe transfers, just local synthesis at broadcast quality.
Voxa is a browser-based voice workstation that turns your Mac into a neural speech studio. Type text, pick a model, and watch a real 96-bar acoustic waveform render live from the generated PCM — derived from the actual audio samples, not a decorative animation.
Everything runs locally on Apple Silicon: the UI streams server-sent PCM chunks over SSE, decodes them to Float32, schedules playback on a Web Audio context, and assembles a downloadable WAV. Optional PocketBase sync adds cloud archiving with seamless localStorage fallback when no backend is configured.
[whisper], [cheerful], [urgent] and friends at the cursoruv runtimes| Engine | Hardware Target | Footprint | Notes |
|---|---|---|---|
| KittenTTS Mini 0.8 | Unified RAM (port 9123) | ~250 MB | Sub-150ms first chunk, 24kHz |
| macOS CoreAudio Neural | Native say kernel engine | 0 MB heap | 11 system voices, sub-5ms |
| MOSS-TTS Transformer | PyTorch MPS / unified RAM | ~1.8 GB | Autoregressive audio tokens |
| MLX-Audio server | Apple MLX / Metal (port 9125) | 2–10 GB | Kokoro, Qwen3-TTS, CSM, Dia, Spark, Voxtral |
| Piper ONNX | CPU / ONNX Runtime | <1 GB | Edge-grade VITS, 22.05kHz |
| Whisper | Apple Silicon CLI | 75MB–1.6GB | STT, tiny → turbo checkpoints |
| OpenAI GPT-4o Mini | Cloud fallback | remote | Optional, for cloud synthesis |
A curated, researched catalog of open-source speech models with license color-coding
(permissive / copyleft / non-commercial). MLX-native models share an OpenAI-compatible
server on port 9125; others get isolated venvs under ~/.voxa/library/. Install,
launch, test-generate, and audition samples without leaving the studio.
Select the local OpenCode agent, pick one of its configured models, then hand it a GitHub repo. It verifies the repo is actually a TTS system, checks Apple Silicon unified-memory viability (PyTorch MPS / CPU), extracts voices, sample rate, and memory estimate, then registers the model with dynamically generated sliders and dropdowns — which appear in the parameter rack with no code changes.
git clone https://github.com/hijak/voxa.git
cd voxa
bun install
cp .env.example .env # optional — PocketBase endpoints; app works without it
bun run dev
Production build (Nitro node-server preset, required for local child processes and SSE):
bun run build
PORT=3000 node dist/server/index.mjs
Note: the Nitro preset must stay
node-server. Cloudflare/Workers presets break the localsay/whisperchild-process execution and loopback microservice calls.
┌─ Client (React 19 + TanStack Router) ─────────────┐
│ Web Audio playback · 96-bar waveform canvas │
│ SSE PCM decoding · WAV assembly & download │
└────────────────────┬──────────────────────────────┘
│ SSE (base64 PCM deltas)
┌────────────────────▼──────────────────────────────┐
│ Nitro node-server (Vite 8 + TanStack Start) │
│ /api/tts /api/stt /api/models /api/system │
│ /api/agent /api/library /api/library-sample │
└───────┬──────────┬──────────┬──────────┬──────────┘
▼ ▼ ▼ ▼
KittenTTS macOS say MLX server OpenCode
:9123 CoreAudio :9125 agent CLI
Audio standard: 24kHz 16-bit mono linear PCM across TTS engines; Whisper expects
16kHz WAV. Non-24kHz library engines emit a speech.audio.meta SSE event so the client
assembles WAVs at the true sample rate (no pitch shift).
TanStack Start (SSR) · TanStack Router · React 19 · Vite 8 + Nitro · Tailwind CSS v4 · Radix UI · Lucide · Web Audio API · PocketBase (optional) · Bun/Node on macOS arm64
Personal project. Model licenses vary per engine — the Library tab color-codes each (permissive green, copyleft amber, non-commercial red). Verify before shipping.
TypeScript
98.2%
CSS
1.6%