ONNX Model Zoo

FluffyBunnies/vibevoice-onnx-int4

By FluffyBunnies · ↓ 12 · ♥ 0 · Updated 2025-12-12

What's in this repo

This page lists the files in FluffyBunnies/vibevoice-onnx-int4, including diffusion_head_int4.onnx, diffusion_head_int8.onnx, tts_llm_int4.onnx and more.

  • 4 ONNX models (.onnx files)
  • 10 files, including 4 .onnx, 3 .json, 1 .md, 1 .js
  • Last updated 2025-12-12

ONNX files

File Size Download
diffusion_head_int4.onnx — Download
diffusion_head_int8.onnx — Download
tts_llm_int4.onnx — Download
vocoder_int4.onnx — Download

How to use

These ONNX files can be loaded with ONNX Runtime. To inspect a model graph, upload the file to the Netron viewer. Download links point to the original files on Hugging Face.

README

VibeVoice ONNX INT4 - Browser TTS - TESTS FAILED - Need to reduce model size or simplify generation mode and double diffusion

ONNX INT4 quantized version of Microsoft VibeVoice-Realtime-0.5B for browser deployment with transformers.js.

Model Components

File Size Description
tts_llm_int4.onnx 702 MB Qwen2-based language model (text → hidden states)
vocoder_int4.onnx 339 MB σ-VAE decoder (latents → audio)
diffusion_head_int4.onnx 25 MB DDPM diffusion (hidden states → latents)
diffusion_head_int8.onnx 40 MB INT8 variant for comparison
Total ~1.07 GB Down from 3.1 GB FP32

Architecture

Text Input
    ↓
[Tokenizer] → Token IDs (vocab: 151936)
    ↓
[TTS LLM] → Hidden States (896-dim)
    ↓
[Diffusion Head] ← Noise (20 steps, cosine schedule)
    ↓
Acoustic Latents (64-dim)
    ↓
[Vocoder]
    ↓
Audio Waveform (24kHz)

Usage with ONNX Runtime Web

import * as ort from 'onnxruntime-web';

// Load models
const llm = await ort.InferenceSession.create('tts_llm_int4.onnx');
const diffusion = await ort.InferenceSession.create('diffusion_head_int4.onnx');
const vocoder = await ort.InferenceSession.create('vocoder_int4.onnx');

// Run LLM
const inputIds = new ort.Tensor('int64', tokenizedText, [1, seqLen]);
const attentionMask = new ort.Tensor('int64', ones, [1, seqLen]);
const positionIds = new ort.Tensor('int64', positions, [1, seqLen]);

const { hidden_states } = await llm.run({
  input_ids: inputIds,
  attention_mask: attentionMask,
  position_ids: positionIds
});

// Run diffusion (20 steps)
let latent = noise;
for (let t = 999; t >= 0; t -= 50) {
  const { v_prediction } = await diffusion.run({
    noisy_latent: latent,
    timestep: new ort.Tensor('float32', [t], [1]),
    hidden_states: hidden_states
  });
  latent = denoise(latent, v_prediction, t);
}

// Run vocoder
const { audio } = await vocoder.run({ latents: latent });

Configuration

{
  "audio": {
    "sample_rate": 24000,
    "vae_dim": 64
  },
  "llm": {
    "hidden_size": 896,
    "num_hidden_layers": 20,
    "vocab_size": 151936
  },
  "diffusion": {
    "num_inference_steps": 20,
    "beta_schedule": "cosine",
    "prediction_type": "v_prediction"
  }
}

Quantization Details

  • Method: INT4 MatMulNBits (block_size=32)
  • Embedding: FP32 (cannot be quantized)
  • Linear layers: INT4
  • Reduction: 65.9% smaller than FP32

Original Model

Limitations

  • Work in Progress Still working on KV cache support and autoregressive generation
  • English only
  • Requires ~1GB download for browser
  • No streaming support (full sequence generation)
  • Tokenizer not included (use Qwen2 tokenizer)

Model info

text-to-speech transformers.js
transformers.js onnx vibevoice_streaming tts text-to-speech vibevoice arxiv:2508.19205 base_model:microsoft/VibeVoice-Realtime-0.5B base_model:quantized:microsoft/VibeVoice-Realtime-0.5B license:mit region:us
↓ 12 ♥ 0

Created: 2025-12-12

Updated: 2025-12-12

View on Hugging Face

Files (10)

.gitattributes
README.md
config.json
diffusion_head_int4.onnx ONNX
diffusion_head_int8.onnx ONNX
tokenizer.json
tokenizer_config.json
tts_llm_int4.onnx ONNX
vibevoice_browser.js
vocoder_int4.onnx ONNX

Related models