Model reference · open weights
vui is an open-weight audio or speech model from fluxions. vui (BF16) weighs 3.5 GB; the smallest configuration that runs it is RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the fluxions/vui model card, 2026-10-01
What it is
| Released by | fluxions |
|---|---|
| Released | 2025-06-05 |
| VRAM | 3.5 GB for the weights |
What it runs on
| Card | One stream | Memory |
|---|---|---|
| RTX 3060 12 GB | fits | 11.6 GB |
| RTX 4060 Ti 16 GB | fits | 15.4 GB |
| RTX 3090 24 GB | fits | 23.4 GB |
| RTX 4090 24 GB | fits | 23.4 GB |
| RTX 5090 32 GB | fits | 31.0 GB |
| L40S 48 GB | fits | 44.0 GB |
| A100 80 GB | fits | 78.2 GB |
| H100 80 GB | fits | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | fits | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | fits | 107 GB |
| H200 141 GB | fits | 138 GB |
| B200 180 GB | fits | 176 GB |
From the model card
👉 Full code, install, docs, and the streaming voice assistant: github.com/fluxions-ai/vui
📖 Launch blog post — design notes, demos, and what's next.
Vui Nano is a small, context-aware text-to-speech model trained on real conversations: 219M active parameters (305M total), Apache 2.0, with voice cloning, real-time streaming, and a dependency-free C build that runs on CPU.
Most TTS models synthesise one utterance in isolation. Vui Nano generates each reply inside the conversation: the whole dialogue so far — your text and the actual audio of your turn — lives in the KV cache it decodes from, across a ~6-minute context. It was trained on two-speaker dialogue with an explicit speaker-change token, so it carries prosody across turns and produces the things real speech has and read-aloud corpora don't: breaths, laughter, hesitations, and overlap.
The handful of other open models that condition on dialogue acoustics this way are an order of magnitude larger and GPU-only. Vui Nano does it at 219M active parameters, and the C build runs it on a CPU with no Python, PyTorch, or ONNX at runtime.
It ships inside Vui, a real-time voice assistant: speak into your mic, the model transcribes, runs a local LLM, and streams a TTS reply back — all from a single Python server.
ws://…/v1/realtime for clients written against OpenAI's spec (docs/realtime-api.md)POST /v1/voice-note runs the whole ASR → LLM → TTS pipeline in a single HTTP call (audio in, JSON out)demo.py Gradio playground for the model on its ownmaeve, abraham, rhian, harry)openai realtime provider at Vui for a fully-local voice front-endcurl -fsSL https://install.fluxions.ai | bash
Clones into ~/vui, auto-detects Docker vs. native, installs deps (uv, Ollama, ffmpeg, Claude Code CLI), pulls the Ollama LLM, and launches the stack on .
Full Docker compose / native install, mobile setup, configuration, ASR options, and the Claude task server — all in the GitHub README.
git clone https://github.com/fluxions-ai/vui
cd vui
uv sync
python demo.py # Gradio UI — upload your own voice prompt
python demo.py --render --prompt prompts/abraham.wav # CLI render with a preset voice
The Vui checkpoint and Qwen codec download automatically from this repo on first run.
| Voice | Description |
|---|---|
maeve | Recommended Default — Female Irish accent, beautiful but may be hard for non-UK listeners |
abraham | British, well-spoken, exciting energy and personality — conscientious, good at emotionally difficult subjects |
rhian | More traditional British accent, slightly hesitant speaking style |
harry | British male accent, mumbly |
More personalities coming soon! Got a voice or character you'd like to hear? Open an issue or let us know on Discord.
from vui.engine import Engine, GenConfig
engine = Engine() # vui-nano-1.1 by default; Engine("vui-190k") / Engine("vui-nano") for the others
with engine.new_row() as row:
codes, audio = row.render( # render() returns (codes (T,Q), audio (1,1,S))
"So [breath] the thing about this is, it's not what you'd expect, right?",
GenConfig(temperature=0.7),
)
Cloning is a prefill: hand the model Segment(text, codes) — a reference transcript plus its encoded audio — and everything rendered afterwards follows that speaker.
import torch
from julius.resample import resample_frac
from torchcodec.decoders import AudioDecoder
from torchcodec.encoders import AudioEncoder
from vui.engine import Engine, GeQuoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.