Download README.md from fivetech/ava-real: direct link, hf CLI and curl.
- Browser
- Download file 3.85 kB
-
https://huggingface.co/spaces/fivetech/ava-real/resolve/main/README.md
- Command line
-
hf download hf://spaces/fivetech/ava-real/README.md
-
curl -L -o README.md https://huggingface.co/spaces/fivetech/ava-real/resolve/main/README.md
title: Ava Real
emoji: π
colorFrom: gray
colorTo: blue
sdk: static
app_file: index.html
pinned: false
thumbnail: https://huggingface.co/spaces/fivetech/ava-real/resolve/main/thumbnail-v3.jpg
short_description: A more realistic Ava talking with LFM3-Omni
models:
- LiquidAI/LFM3-Omni-2B
- LiquidAI/LFM3-Omni-2B-GGUF
Ava Real
An experimental fork of townbox/ava aimed at a more realistic look. Same architecture: WebGPU inference of LFM3-Omni-2B in the browser, Silero VAD, TalkingHead 3D. Changes include better-defined key lighting with a warm rim softbox, higher-contrast studio environment, sharper skin micro-grain (pores), brighter enamel teeth, livelier hair and eye materials, and rebranded pages.
Hands-free voice chat with Ava Real, a 3D lip-synced avatar, running entirely in the browser: credits to the upstream UX of victor/gemma-avatar and the model runtime of LiquidAI/LFM3-Omni-2B-WebGPU. No backend: your voice never leaves the device.
you speak β Silero VAD (WASM) β LFM3-Omni-2B (WebGPU): audio in, interleaved text + speech out β avatar speaks
- Needs a desktop browser with WebGPU and
shader-f16(recent Chrome/Edge) and a 1.6 GB model download on first visit; later visits load from the browser cache. - Model runs in a worker, so the avatar keeps rendering. It hears the audio directly: there is no separate transcription step, and so no user transcript.
- Barge-in: talk over her and generation and playback stop immediately.
- Body language (moods, thumbs up, shrug, a wave) is read from her words as they
are heard, in
src/reactions.js. - Character is a short system prompt you can edit directly in Settings
(
src/system-prompt.jshas the default). The only thing added to it is the model's required "Respond with interleaved text and audio." line. - Lip-sync is derived from the audio by HeadAudio, as in gemma-avatar.
Differences from gemma-avatar, all forced by the model: there is no voice picker (LFM3-Omni's interleaved mode has one voice and ignores voice requests), and the model doesn't call avatar tools. Offering any tool schema derails its conversation: with the original Space's tools "let's play a quick game" starts a timer, and with avatar tools it gestures on every turn, gives shallow replies and can loop without speaking. The runtime, message format, generation mode and greedy decoding otherwise match the original Space.
Known model behaviour
LFM3-Omni-2B can re-ask its last question and can't sustain a game like Twenty Questions: it answers "no" to everything and doesn't hold a secret. The original LiquidAI Space does the same with the same model. This app doesn't try to hide it.
Run
bun install
bun run start # builds dist/ and serves http://localhost:3000
Test
bun test tests covers the VAD segmenter and session state machine.
e2e/run.sh <scenario> <outDir> drives the real app in headless Chromium on the
real GPU: speech goes in through a PipeWire virtual mic, her voice is recorded at
the OS sink. e2e/analyze.py <outDir> --stt reports latency, frame rate, mouth/audio
correlation and a Whisper transcript. Needs PipeWire, playwright-core, Piper
test clips (E2E_AUDIO) and a Python env with numpy, scipy, soundfile, faster-whisper.
Licences
App derived from townbox/ava (dynamic
fork of the gemma-avatar UX). Avatar brunette.glb: Ready Player Me, CC BY-NC 4.0 (non-commercial). Model: LFM
license 1.0. Lfm3OmniForConditionalGeneration.js: copied from the LiquidAI Space,
which states no licence for it. TalkingHead, HeadAudio, Silero VAD: MIT.
ONNX Runtime: MIT.