VibeVoice-1.5B-MLX-INT4

INT4-quantized MLX bundle of the long-form Microsoft VibeVoice-1.5B for Apple Silicon, ready to load with the VibeVoiceTTS Swift module from soniqo/speech-swift.

The 1.5B variant is VibeVoice's flagship long-form model β€” designed for podcast-length dialogue, audiobook narration, and multi-speaker scenes. Up to 90 minutes of audio with up to 4 distinct voices and consistent voice identity throughout, in a single generation pass. For low-latency short utterances, see the smaller Realtime-0.5B INT4.

What's in the box

  • model.safetensors β€” INT4 group-quantized Qwen2 backbone (group_size=32, mode=affine), tokenizer + acoustic tokenizer + diffusion head + EOS classifier kept in source dtype
  • quantization.json β€” per-layer manifest (378 quantized layers)
  • config.json, preprocessor_config.json β€” copied from upstream

Bundle size: 2.18 GB.

Performance (Apple M2 Max, 64 GB)

Steps Audio Elapsed RTF RTFx
10 26.67 s 19.76 s 0.74 1.35Γ—

200 max_tokens, 10 DPM-Solver steps, voice cache encoded from a 17-second clip. 1.5B requires the dual-encoder voice prefill path that's been added to VibeVoiceTTS 0.2.0+.

Use it

Swift / iOS / macOS

import VibeVoiceTTS

let config = VibeVoiceTTSModel.Configuration.longForm1_5B
// .longForm1_5B preset bumps maxSpeechTokens to 4000 and cfgScale to 1.5

let tts = try await VibeVoiceTTSModel.fromPretrained(configuration: config)
try tts.loadVoice(from: "voices/narrator.safetensors")
let pcm = try await tts.generate(text: longTranscript)  // up to ~90 min

The longForm1_5B preset uses tokenizer Qwen/Qwen2.5-1.5B. Override modelId if you want to point at this aufklarer bundle directly:

var config = VibeVoiceTTSModel.Configuration.longForm1_5B
config.modelId = "aufklarer/VibeVoice-1.5B-MLX-INT4"

CLI

audio vibevoice "Long paragraph ..." \
    --model aufklarer/VibeVoice-1.5B-MLX-INT4 \
    --tokenizer Qwen/Qwen2.5-1.5B \
    --voice-cache voices/narrator.safetensors \
    --max-tokens 4000 \
    --output episode.wav

Voice caches

Multi-speaker dialogue uses one voice cache per speaker β€” swap them between calls or wire dialogue scripts through your app. MIT-licensed example caches: mzbac/vibevoice.swift/voice_cache. Mint your own with audio vibevoice-encode-voice reference.wav "transcript" -o voice.safetensors.

Languages

English and Chinese only. The Qwen2.5 tokenizer accepts other languages but training data is EN/ZH only β€” non-EN/ZH input produces unintelligible audio.

License

MIT, inherited from the upstream Microsoft VibeVoice repo. Note: Microsoft has occasionally restricted access to the upstream microsoft/VibeVoice-1.5B repository β€” this bundle is converted from the BF16 source under MIT and remains available here.

Reproduction

models/vibevoice/export/convert.py in soniqo/speech-models (private), --model microsoft/VibeVoice-1.5B --bits 4.

Citation

@misc{microsoft_vibevoice,
  title  = {VibeVoice: Long-form, Multi-speaker Text-to-Speech},
  author = {Microsoft Research},
  year   = {2025},
  url    = {https://huggingface.co/microsoft/VibeVoice-1.5B}
}
Downloads last month
40
Safetensors
Model size
0.8B params
Tensor type
BF16
Β·
U32
Β·
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for aufklarer/VibeVoice-1.5B-MLX-INT4

Finetuned
(17)
this model

Collection including aufklarer/VibeVoice-1.5B-MLX-INT4