Qwen3-TTS audio components for Core ML

Three Core ML packages for decoding audio tokens, encoding reference audio, and extracting a speaker embedding from the Qwen3-TTS family. These are audio components, not a complete text-to-speech model.

For: developers integrating the components into an Apple Silicon Mac application. Not for: generating speech from text with this download alone; the language model and host pipeline are separate. Platform: Apple Silicon (M1 and later), Core ML. This is a .mlpackage release, separate from Core AI .aimodel releases.

Quick start

hf download okayuji/Qwen3-TTS-12Hz-1.7B-CustomVoice-CoreML --local-dir ./qwen3-tts-coreml

Compile and load the packages with Apple's Core ML workflow, then use the exact interfaces below. For the complete upstream TTS pipeline and language-model weights, start with Qwen3-TTS on GitHub and Qwen3-TTS-12Hz-1.7B-CustomVoice. That upstream runtime does not automatically load these Core ML packages; integration code is required.

KeyVoice for Mac is the product entry point linked by the original card. The model download here does not include KeyVoice's application pipeline.

Files and exact interfaces

These interfaces were read directly from the published model.mlmodel files at revision 0dbcdf8 on 2026-10-23. The inspection did not execute inference.

Package Input Output Package bytes
Qwen3TTSDecoder.mlpackage audio_codes: Int32 [1, 500, 16] audio_values: Float32 [1, 960000] 229,010,843
Qwen3TTSEncoder.mlpackage audio_samples: Float32 [1, 1, 345600] audio_codes: Int32 [1, 16, 180] 193,305,798
Qwen3TTSSpeakerEncoder.mlpackage mels: Float32 [1, 1500, 128] speaker_embedding: Float32 [1, 2048] 48,096,892

Package sizes are sums of their published manifest, model definition, and weight file sizes in the Hugging Face file metadata. Download all files in each package.

The decoder produces waveform samples, not a mel spectrogram. At the original 24 kHz sample rate, its declared output is 40 seconds; the audio encoder's declared input is 14.4 seconds. These durations are shape-derived values, not latency measurements. The audio frame rate is 12.5 Hz (80 ms per frame; 1,920 samples at 24 kHz).

The codebook axis differs between the encoder output and decoder input. The host must handle layout, valid lengths, and padding explicitly; passing encoder output directly into the decoder does not satisfy the declared decoder shape.

Conversion and inspection

All three assets are ML Programs, specification version 8. Their embedded metadata records coremltools 9.0 and torch==2.7.1 (TorchScript), with conversion dates 2026-04-19 (decoder), 2026-04-21 (encoder), and 2026-04-22 (speaker encoder). The original deployment target was Apple Silicon with CPU and Neural Engine compute allowed. A compute-unit preference alone does not prove execution on the Neural Engine.

To inspect the decoder interface without loading weights or running inference:

from coremltools.models.utils import load_spec

spec = load_spec("./qwen3-tts-coreml/Qwen3TTSDecoder.mlpackage/Data/com.apple.CoreML/model.mlmodel")
print(spec.description)

This model-definition inspection was performed on the published file. The former Swift example compiled the package using MLModel.compileModel(at:), selected .cpuAndNeuralEngine, and loaded it with MLModel(contentsOf:configuration:); it did not include preprocessing or a complete generation loop.

Requirements and operational notes

  • Use an Apple Silicon Mac and a Core ML runtime supporting the packages' specification version. A device/OS validation matrix is not published with this release.
  • Retain each .mlpackage directory structure. Compile to .mlmodelc before loading it in a native app, and retain the compiled result for reuse.
  • Supply the separately distributed language model and a host implementation for text tokenization, generation, reference-audio preparation, speaker conditioning, and audio playback.
  • Check input names, dtypes, and fixed shapes against modelDescription; the original card's generic token/mel names do not match these assets.
  • The original card reported about 30 seconds for the first package compilation. Hardware, OS, package, tool version, and cache state were not recorded, so this is a historical observation rather than a current startup-time guarantee.

Limitations

  • These files do not form a standalone TTS, voice-cloning, or voice-design application. A speaker embedding component alone does not provide those features.
  • All declared input shapes are fixed. Shorter and longer inputs require host-side handling. The original encoder guidance was to zero-pad short clips and truncate longer clips, but its 1.2-second cutoff described an older interface, not the distributed model.
  • Core ML and PyTorch floating-point outputs need not match exactly. The original card reported small ANE differences and “no audible impact in practice”; it did not publish inputs, tolerances, listening-test conditions, or results to reproduce that observation.
  • No iPhone/iPad execution results, complete public Core ML host example, reproducible generated-audio sample, or new performance/quality evaluation are provided by this revision.
  • The upstream language list describes the Qwen3-TTS family. This documentation inspection does not validate language quality or end-to-end compatibility for every upstream model variant.

Verification and corrections

The 2026-10-23 revision checks artifact metadata and corrects stale interface descriptions. It does not establish numerical parity, audio quality, execution-device placement, or a complete text-to-speech run.

For traceability, the following statements from the previous card are superseded by the published model definitions above:

Previous description Correction
Decoder: audio_tokens [1, 16, T_frames] → mel [1, 80, T_mel] Fixed audio_codes [1, 500, 16] → waveform audio_values [1, 960000]
Encoder: audio [1, 1, 28800], 1.2 seconds / 15 frames → audio_tokens [1, 16, 15] audio_samples [1, 1, 345600], 14.4 seconds / 180 frames → audio_codes [1, 16, 180]
Speaker: mel [1, 80, T] → embedding [1, D], described as “Voice Design” mels [1, 1500, 128] → speaker_embedding [1, 2048]; reference-audio embedding component
Conversion with coremltools 8.x Embedded metadata records 9.0
Package sizes: 218 MB / 182 MB / 46 MB Historical rounded estimates; exact byte counts are listed above

Related samples

For Core AI and Foundation Models examples on Apple platforms, see coreai-samples. Those examples use their own model assets; this Core ML component release follows the integration requirements above.

License and attribution

Released under Apache License 2.0, consistent with the original Qwen3-TTS model and official Qwen3-TTS license. Original model copyright: Copyright 2026 Alibaba Cloud. The Core ML conversion and distribution are by okayuji.

Thanks to the Qwen team for the models and Apple's coremltools project for the conversion tooling. Qwen, Apple, Core ML, and other product names belong to their respective owners. This distribution is not affiliated with or endorsed by the Qwen team or Apple.

Citation

@misc{qwen3-tts-12hz-1.7b-customvoice-coreml,
  author = {okayuji},
  title = {Qwen3-TTS 12Hz 1.7B CustomVoice — CoreML conversion},
  year = {2026},
  publisher = {Hugging Face},
  howpublished = {\url{https://huggingface.co/okayuji/Qwen3-TTS-12Hz-1.7B-CustomVoice-CoreML}}
}
@misc{qwen3-tts,
  title = {Qwen3-TTS Technical Report},
  author = {Qwen Team},
  year = {2026},
  eprint = {2601.15621},
  archivePrefix = {arXiv},
  howpublished = {\url{https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice}}
}
Downloads last month
40
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for okayuji/Qwen3-TTS-12Hz-1.7B-CustomVoice-CoreML

Quantized
(20)
this model

Collection including okayuji/Qwen3-TTS-12Hz-1.7B-CustomVoice-CoreML

Paper for okayuji/Qwen3-TTS-12Hz-1.7B-CustomVoice-CoreML