Local speech stack for Apple Silicon: TTS, ASR, forced alignment, voices, daemon, and MCP bridge.
Valar runs locally on macOS with a CLI, a loopback daemon, and an MCP bridge for agents. The fastest path is still CLI first. Once that works, you can add the local HTTP daemon, the MCP bridge, or the macOS app source.
- Generate speech locally with small and large Apple Silicon-friendly model families
- Transcribe audio and produce alignment timestamps without a cloud inference backend
- Create and reuse voices through the CLI, daemon, and app surfaces
- Expose a localhost daemon and MCP bridge for agent and automation workflows
make quickstart
make first-clipmake quickstart bootstraps the native toolchain, builds the CLI and daemon targets, installs MLX Metal shader support for SPM outputs, and runs a readiness check. make first-clip installs Soprano and writes a proof-of-life WAV.
That writes a starter WAV under your macOS temp directory by default, usually at $TMPDIR/valar-first-clip.wav. Override it with VALAR_FIRST_CLIP_OUTPUT=/absolute/path.wav.
If make quickstart reports a missing Metal toolchain, fix Xcode first:
xcodebuild -downloadComponent MetalToolchain
xcodebuild -runFirstLaunchIf you already use another Valar checkout on the same Mac, isolate this repo while testing:
export VALARTTS_HOME="$PWD/.valartts-public-home"That repo-local state directory is gitignored in this public repo.
| Goal | Start with | Why |
|---|---|---|
| Prove your machine works | Soprano |
Smallest first clip and lowest-friction install |
| Main narration / stable speech | Qwen Base |
Primary supported TTS lane |
| Voice design and saved speakers | Qwen VoiceDesign |
Text-driven voice creation that stays inside the main Qwen family |
| Transcription or timestamps | Qwen ASR / Qwen ForcedAligner |
Main supported ASR and alignment lane |
| Fast preset voices | VibeVoice |
Preview-only preset voice lane, English-first |
| Multilingual preset voices with extra license limits | Voxtral |
Explicit non-commercial opt-in only |
See docs/working-models.md for exact install IDs, support posture, footprint, and license notes.
Once the local CLI path works, the next public integration step is the MCP bridge:
- Start the daemon:
swift run --package-path apps/ValarDaemon valarttsd - Install bridge dependencies:
make bootstrap-bridge - Start the bridge:
cd bridge && bun server.ts - Point your MCP-capable client or agent at the local bridge
The bridge is optional. Bun is only required if you want MCP or advanced automation.
The public docs do not publish universal real-time-factor targets. Local speed varies with Mac model, memory pressure, cold versus warm model cache, text length, selected voice path, and upstream model changes. Treat validation clips and locally generated benchmark output as machine-specific evidence, not a project-wide performance guarantee.
The macOS app source is included, but it is intentionally a secondary path. Build it from Xcode after the CLI path works:
- docs/prerequisites-and-expectations.md
- docs/working-models.md
- docs/model-quickstart.md
- docs/faq.md
- docs/use-cases.md
- docs/integrations.md
- docs/lineage-upstream-references.md
Repo code is MIT. Model weights keep their own upstream licenses.


