hijak/voxa

Waveform-first TTS/STT workstation for macOS Apple Silicon — neural speech in unified memory

0

stars

0

commits

TypeScript

primary language

Sep 11, 2026

updated

README

▶ Voxa

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.


What is Voxa?

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.

Highlights

  • Zero-layout-shift terminal UI — rigid viewport, CRT-flavored aesthetic, IBM Plex Mono, dual independent scroll panes
  • True dynamic parameters — every slider and dropdown maps to a real engine argument; no mock controls
  • Live telemetry — chip name, unified memory pressure, and per-engine reachability polled every 15s
  • In-editor emotion tags — inject [whisper], [cheerful], [urgent] and friends at the cursor
  • One-click model library — 16 researched open-source TTS systems installable into isolated uv runtimes
  • Agent-driven model installer — point the local OpenCode agent at any GitHub repo and it determines TTS viability, Apple Silicon compatibility, and registers the model with its own parameter schema

Model Fleet

EngineHardware TargetFootprintNotes
KittenTTS Mini 0.8Unified RAM (port 9123)~250 MBSub-150ms first chunk, 24kHz
macOS CoreAudio NeuralNative say kernel engine0 MB heap11 system voices, sub-5ms
MOSS-TTS TransformerPyTorch MPS / unified RAM~1.8 GBAutoregressive audio tokens
MLX-Audio serverApple MLX / Metal (port 9125)2–10 GBKokoro, Qwen3-TTS, CSM, Dia, Spark, Voxtral
Piper ONNXCPU / ONNX Runtime<1 GBEdge-grade VITS, 22.05kHz
WhisperApple Silicon CLI75MB–1.6GBSTT, tinyturbo checkpoints
OpenAI GPT-4o MiniCloud fallbackremoteOptional, for cloud synthesis

Open TTS Library

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.

Agent Dispatcher & TTS Installer

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.

Quick Start

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 local say/whisper child-process execution and loopback microservice calls.

Architecture

┌─ 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).

Tech Stack

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

License

Personal project. Model licenses vary per engine — the Library tab color-codes each (permissive green, copyleft amber, non-commercial red). Verify before shipping.

hijak/voxa

Waveform-first TTS/STT workstation for macOS Apple Silicon — neural speech in unified memory

0

stars

0

commits

TypeScript

primary language

Sep 11, 2026

updated

README

▶ Voxa

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.


What is Voxa?

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.

Highlights

  • Zero-layout-shift terminal UI — rigid viewport, CRT-flavored aesthetic, IBM Plex Mono, dual independent scroll panes
  • True dynamic parameters — every slider and dropdown maps to a real engine argument; no mock controls
  • Live telemetry — chip name, unified memory pressure, and per-engine reachability polled every 15s
  • In-editor emotion tags — inject [whisper], [cheerful], [urgent] and friends at the cursor
  • One-click model library — 16 researched open-source TTS systems installable into isolated uv runtimes
  • Agent-driven model installer — point the local OpenCode agent at any GitHub repo and it determines TTS viability, Apple Silicon compatibility, and registers the model with its own parameter schema

Model Fleet

EngineHardware TargetFootprintNotes
KittenTTS Mini 0.8Unified RAM (port 9123)~250 MBSub-150ms first chunk, 24kHz
macOS CoreAudio NeuralNative say kernel engine0 MB heap11 system voices, sub-5ms
MOSS-TTS TransformerPyTorch MPS / unified RAM~1.8 GBAutoregressive audio tokens
MLX-Audio serverApple MLX / Metal (port 9125)2–10 GBKokoro, Qwen3-TTS, CSM, Dia, Spark, Voxtral
Piper ONNXCPU / ONNX Runtime<1 GBEdge-grade VITS, 22.05kHz
WhisperApple Silicon CLI75MB–1.6GBSTT, tinyturbo checkpoints
OpenAI GPT-4o MiniCloud fallbackremoteOptional, for cloud synthesis

Open TTS Library

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.

Agent Dispatcher & TTS Installer

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.

Quick Start

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 local say/whisper child-process execution and loopback microservice calls.

Architecture

┌─ 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).

Tech Stack

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

License

Personal project. Model licenses vary per engine — the Library tab color-codes each (permissive green, copyleft amber, non-commercial red). Verify before shipping.

Languages

TypeScript

98.2%

CSS

1.6%