Model reference · open weights

vui

Available as managed deployment Audio fluxions Text→speech 1 variants 571 dl/mo

vui is an open-weight audio or speech model from fluxions. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.

Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.

What it is

Released byfluxions
TypeAudio & music
TaskText→speech
Runs withvui
Released2025-06-05
Popularity571 downloads / month
LicenceOpen weights

About

What vui is

👉 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.

Read the full model card

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.

Features

  • Vui Nano (219M active, 305M total) — a small, context-aware TTS model: Llama-style decoder + RQ-Transformer head over the Qwen3-TTS-12Hz codec, Apache 2.0
  • Conversation-conditioned generation — replies are decoded from a KV cache holding the whole dialogue, including the audio of your turn (~6-minute context)
  • CPU inference, zero dependencies — a pure-C engine: one binary plus one weight file, no Python, PyTorch, or ONNX at runtime; supports voice cloning and streaming playback
  • Real-time voice loop — WebRTC + WebSocket pipeline (ASR → LLM → TTS) with a browser UI, VAD-driven turn taking, speculative LLM prefill while you're still speaking, sentence-level TTS chunking with backpressure
  • Barge-in — start talking mid-reply, the model cancels and listens
  • Streaming TTS — ~9× realtime on a 4090, bf16 inference, CUDA graphs
  • OpenAI Realtime API compatible — drop-in ws://…/v1/realtime for clients written against OpenAI's spec (docs/realtime-api.md)
  • One-shot voice-note REST endpointPOST /v1/voice-note runs the whole ASR → LLM → TTS pipeline in a single HTTP call (audio in, JSON out)
  • Standalone TTS demodemo.py Gradio playground for the model on its own
  • Voice cloning — upload an audio sample to clone any speaker; 4 fine-tuned presets shipped (maeve, abraham, rhian, harry)
  • SQ / WPS conditioning — bias generation on six speech-quality channels and words-per-second
  • Hot-swap models — pick Ollama LLM and ASR backend live from the UI
  • Pluggable ASR — faster-whisper (GPU) or Moonshine (CPU streaming, ONNX)
  • Pluggable LLM backends — Ollama, vLLM, any OpenAI-compatible endpoint
  • Memories — assistant remembers facts about you across sessions
  • Thoughts stream — parallel LLM routes voice intent to ~10 tools (memory ops, task control, delegation) without a wake-word grammar; pluggable for your own local tools
  • Optional Claude task server — sidecar agent that handles slow/agentic work (Gmail, Calendar, Drive, Slack, web search) via your existing Claude Code MCPs
  • Apple Silicon support — MLX backend (WIP)
  • Mobile-ready — documented cloudflared and Tailscale paths for phone access with mic over HTTPS
  • Docker compose — one file brings up the full stack
  • OpenClaw integration — point OpenClaw's openai realtime provider at Vui for a fully-local voice front-end

Install (one-liner)

curl -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.

TTS demo on its own

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.

Preset voices

VoiceDescription
maeveRecommended Default — Female Irish accent, beautiful but may be hard for non-UK listeners
abrahamBritish, well-spoken, exciting energy and personality — conscientious, good at emotionally difficult subjects
rhianMore traditional British accent, slightly hesitant speaking style
harryBritish 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.

Python API

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),
    )

Clone a voice

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, Ge

From the published model card. Full card on the HuggingFace links in the sidebar.

Using it via the API

Call it like any OpenAI endpoint

Once AxForge deploys vui for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (vui below is illustrative; you get the exact model name on deployment.)

$ curl -sS https://api.axforge.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $AXFORGE_API_KEY" \
  -F model="vui" -F file=@audio.mp3

Create an account — your API key is available in the console. 3M free tokens every 30 days with every new account.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms