Skip to content
PowerBeefPublic

About

Vocello: a local, private voice studio for Apple Silicon. Write a script, pick or describe a voice, and generate speech on-device, faster than realtime on an 8 GB M2 Mac mini. Native Swift + MLX, no Python. Mac app out now, iPhone beta on TestFlight. (Formerly QwenVoice.)

Topics

Resources

Contributing

Security policy

Stars

381 stars

Watchers

4 watching

Forks

Latest commit

 

History

2,654 Commits

Folders and files

Repository files navigation


Meet Vocello

Vocello is a voice studio for your Mac and iPhone. Write a script, pick one of nine voices or describe a new one, and Vocello speaks it with Qwen3-TTS running on your own Apple Silicon. There is no account, no credits and no cloud: what you write and record stays local.

Private by design
Generation runs locally once the models are installed. Scripts, recordings, voices and takes stay in local storage unless you export them.

Fast
On a Mac mini M6, once the model is loaded, a minute of speech generates in under 20 seconds, and long scripts play while the rest is still being made.

Native
Swift and MLX on Apple Silicon, with no Python and no server. Ten languages, long-form projects and a searchable History.

Three ways to make a voice

Three cards, each edged in its mode's color. Built-in Voice, gold: nine speakers and ten languages, with the delivery you choose. Voice Design, lavender: describe a voice in your own words, then keep the ones you like. Voice Cloning, terracotta: a new voice from a short clip you have permission to use.

  • Built-in Voice. Nine Qwen3 speakers in ten languages, with a delivery preset or a few words about how it should sound. Vocello 2.4.0 calls this mode Custom Voice.
  • Voice Design. Describe a voice ("a warm, clear narrator") and hear it. Save the ones you like to use again.
  • Voice Cloning. Record or import a clip of a voice you own or have permission to use, and save it to your library. Voice Cloning follows the reference voice, so the clip sets its character.

Paste a whole chapter: past 900 characters, Vocello plans the script into segments that play one after another while the rest generates, then joins them into one file. Languages are detected automatically: Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish and Italian.

Clone generation waits for your consent in Settings, and (3.0) every take carries an inaudible AudioSeal watermark that marks it as AI-generated.

Note

The Mac download is Vocello 2.4.0. This page describes the upcoming Vocello 3.0, and (3.0) marks what is new in it.

Performance

Speed: a real-time factor of 0.26 to 0.32, warm, in all three modes on a Mac mini M6 with 16 GB and the Speed models, which is 3.1 to 3.8 times real time. Peak memory: about 3 GB, flat as scripts grow, against about 8 GB before streaming, on an 8 GB Mac mini M2. Long-form drift: memory ended 1.1 percent below its start across a 12-segment project with 10.4 minutes of audio, on the same M2.

How these were measured

The real-time factor (RTF) is seconds of generation per second of audio, so lower is faster and anything under 1.0 plays ahead of generation. The speed figures pool warm takes of the Speed models from the canonical benchmark host, a Mac mini M6 with 16 GB; the chart under Performance, measured breaks them down by mode and script length. The 8 GB Mac mini M2 is the support floor: its records (the last canonical one, 379db820, measured warm RTF 0.53 to 0.82) form an earlier series that is never compared with the M6's. The memory figures come from that M2: streaming took the peak of the same take from about 8 GB to about 3 GB (benchmarks/OPTIMIZATION.md §F.1), and a 12-segment long-form project (smoke run 8f15c1fd) ended 1.1% below its starting footprint.

Every published record is in benchmarks/HISTORY.md, and the method is in docs/reference/telemetry-and-benchmarking.md.

Get Vocello

On a Mac: download Vocello 2.4.0, drag it to Applications, then install a voice model from Settings > Model downloads. The app is signed with an Apple Developer ID and notarized.

On iPhone: join the public beta on TestFlight.

Platform Requirements Model variants Status
Mac macOS 26.0 or newer, Apple Silicon, 8 GB RAM minimum Speed (4-bit) and Quality (8-bit) Vocello 2.4.0 is available now
iPhone iPhone 15 Pro or newer, iOS 26.0 or newer Speed (4-bit) Public beta via TestFlight

Speed uses less memory and suits 8 GB Macs; Quality is a Mac option for 16 GB or more. The three Mac Speed models take about 4.8 GB on disk, because they share one speech tokenizer, stored once.

Upgrading, and older Macs

Upgrading from Vocello 2.x keeps your models and data under ~/Library/Application Support/QwenVoice/. Vocello was called QwenVoice before 2.2.0; old repository links redirect here. Macs on macOS 15 can use the legacy QwenVoice 1.2.3. Each release's notes are in docs/releases/, and the 2.4.0 release attaches release-metadata.txt with its source and toolchain provenance.



For developers

Vocello is a working reference for running a 1.7B-parameter text-to-speech model natively on Apple Silicon: Swift 6 with strict concurrency, a first-party MLX runtime, audio that streams with bounded memory, and a measurement discipline that keeps every performance claim tied to a record. The docs record each decision and the measurement behind it.

How it works

Architecture diagram: the SwiftUI app hosts the engine in its own process, which drives the owned VocelloQwen3Core runtime (an engine actor owning each session, the Qwen3-TTS talker and code predictor, the Mimi decoder) on MLX and Metal; PCM audio streams back chunk by chunk.

One engine serves three hosts: the Mac app, the iPhone app and the vocello command-line tool, all built on NativeRuntimeFactory. Every request takes one path from conditioning to a verified 24 kHz mono WAV: an engine actor owns the session, the Qwen3-TTS talker and code predictor sample codec frames, the Mimi decoder turns them into audio, and PCM streams back chunk by chunk to the player, a limiter, an atomic WAV writer and a quality check. → Architecture

Engineering highlights

An owned runtime, not a Python wrapper
The runtime, VocelloQwen3Core, is derived from mlx-audio-swift v0.1.2 and narrowed to exactly what Vocello ships: about 36,000 of its 49,000 upstream lines were removed. Every retained, changed and added file is tracked in a generated inventory with a named semantic delta, and a facade contract keeps raw MLX types out of the apps.

Streaming that doesn't grow
Audio crosses an actor-owned, frame-bounded channel: audio-bearing events are never dropped, backpressure suspends the producer instead of buffering, and cancelling a suspended producer wakes it cleanly, by test. Making streaming the default took the peak of the same take from about 8 GB to about 3 GB and made it flat with script length.

Launch-bound, not compute-bound
Profiling showed the GPU idle for most of each frame while the host built the graph. Fusing the code predictor's rotary embedding removed about 600 kernel launches per frame (+26% warm), compiling the per-frame predictor pass added +8 to 11% with byte-identical output, and GPU busy rose from 31 to 37% to about 49%.

Reproducible by construction
Every request carries its own seed and fresh sampler state, and nothing samples from process-global state. Cancellation is typed and awaited (user, memory pressure, superseded, shutdown), so a cancelled take can never reach History, and MLX errors arrive as typed failures instead of aborting the process.

Proof before merge
Fixed-seed byte identity gates every scheduling change. Regressions are kept as measured do-nots with their numbers, and the benchmark lane once caught its own observer effect: a +55% swing from the test harness recording the screen. Published records are pass-only and privacy-allowlisted.

Tested on real hardware
UI tests drive the native Mac app and a paired iPhone, never a Simulator. Every take passes a byte-bound audio check before it is saved, and long scripts, downloads, cancellation and background exits each have their own lane.

→ Optimization ledger · Testing runbook · MLX guide

Performance, measured

Warm real-time factor by mode and script length on the Mac mini M6 (16 GB), pooled from the most recent canonical records of one build (today record 74f026be, a Vocello 3.0 build from source):

Grouped bar chart: warm real-time factor of the Speed models by script length, lower is faster: Built-in Voice 0.27 to 0.31, Voice Design 0.26 to 0.31, Voice Cloning 0.27 to 0.32. Every bar sits below the real-time line at 1.0.

The charts regenerate from the named records with scripts/generate_readme_charts.py. → Benchmark history

Build from source

You need full Xcode (the CI version is pinned in config/toolchain.json) on an Apple Silicon Mac with macOS 26 or newer, plus the pinned xcodegen, ripgrep and Python packages. New Mac setup sets up a new Mac step by step.

git clone https://github.com/PowerBeef/Vocello.git
cd Vocello
./scripts/regenerate_project.sh
./scripts/build.sh build

project.yml generates the Xcode project, and the repository scripts are the build and test interface: scripts/dev.sh check runs the lint, contracts and tests your changes touch, and scripts/dev.sh ci runs exactly what CI runs. Start with CONTRIBUTING.md; coding agents also read CLAUDE.md.

Command-line tool

vocello drives the same engine without a UI. It writes machine-readable output, with progress on standard error.

./scripts/build.sh cli
build/vocello models list
build/vocello custom --variant speed --text "The train left at dawn."
echo "Hello there." | build/vocello generate --variant speed --stream --json

→ CLI reference

Project layout

Sources/                 the apps and the engine
  QwenVoiceApp.swift       macOS app (Views/, ViewModels/, Services/)
  iOS/                     iPhone app
  QwenVoiceCore/           engine host: runtime factory, generation, model delivery
  VocelloCLI/              the vocello command-line tool
Packages/VocelloQwen3Core/ the owned Qwen3-TTS runtime on MLX, with its own tests
Tests/                   unit and iPhone logic tests, Mac and iPhone UI tests
scripts/                 build, test, benchmark and release lanes, and the README art
config/                  machine-readable contracts: models, privacy, release, roadmap
benchmarks/              published benchmark records and the optimization ledger
website/                 vocello.vercel.app (React and Vite)
docs/                    architecture, references, audits, release notes

Design system

Dark-first, warm neutrals on a charcoal canvas, and one accent per mode. Liquid Glass stays on chrome and falls back to solid surfaces under Reduce Transparency and while audio generates. The tokens live in the app's theme and in website/src/tokens.css.

Token Color Use
Gold #EDCC8A Built-in Voice, the brand accent
Lavender #BFAADB Voice Design
Terracotta #DBA887 Voice Cloning
Charcoal #16181E The canvas
Text #F5F6F8 Primary text

The README art comes from the same tokens: scripts/readme_art/render.sh redraws it from the screenshots in docs/screenshots/.

Documentation

Architecture Ownership, the life of a take, the engine's invariants
Development setup A new Mac, from clone to first build
Testing runbook Which lane proves what, on the Mac and on a paired iPhone
Benchmarking The protocol behind every published number
Privacy and storage What is stored where, and how it is deleted
iPhone app The iPhone app, including the 3.0 export purchase
Roadmap What is in flight for 3.0 and what follows

License and acknowledgements

Vocello is available under the MIT License. It builds on Qwen3-TTS, MLX, mlx-audio-swift and GRDB.swift. Third-party models and assets keep their own terms; see the third-party attributions and the runtime's notices.


The Vocello app icon
Vocello · a private voice studio for your Mac and iPhone

About

Vocello: a local, private voice studio for Apple Silicon. Write a script, pick or describe a voice, and generate speech on-device, faster than realtime on an 8 GB M2 Mac mini. Native Swift + MLX, no Python. Mac app out now, iPhone beta on TestFlight. (Formerly QwenVoice.)

Topics

Resources

Contributing

Security policy

Stars

381 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages