
Photoreal 3D avatars drawn live in the browser — one viewer or ten million at once. The face costs nothing to serve, at any scale.
<script src="https://moholo.ai/embed.js" data-key="free" data-avatar="ana"></script>
Embed docs
Not a video: a fully three-dimensional head that blinks, holds eye contact and turns, drawn sixty times a second by the viewer's device.
Pick from the Moholo library of synthetic faces: every one is a rigged, photoreal 3D head with its own way of talking.
Paste one script tag. The avatar downloads in seconds, under 5 MB, and talks with the prompt you give it.
No video stream, no GPU per session. Ten viewers or ten million cost the same to serve: nothing.
The face is on screen before the model answers, and the lips follow the audio on the device — there is no session cap to hit, because there are no sessions to serve.
<!-- Moholo hosted: our live model and voices --> <script src="https://moholo.ai/embed.js" data-key="free" data-avatar="ana" data-prompt="You are Ana, the concierge of the Grand Hotel…" data-width="100%" data-height="560"></script> <!-- or bring your own model: the page only fetches the avatar files --> <script src="https://moholo.ai/embed.js" data-key="free" data-avatar="ana" data-llm="client" data-audio="wss://voice.your.site/moholo"></script>
# your own audio server: one websocket per visitor, your model key stays here from aiohttp import web, WSMsgType async def live(request): ws = web.WSMsgType and web.WebSocketResponse(); await ws.prepare(request) async for msg in ws: if msg.type == WSMsgType.BINARY: # int16 mono 16 kHz: one spoken phrase async for pcm in reply(msg.data): # your model, streaming 24 kHz audio await ws.send_bytes(pcm) # the lips move as chunks arrive await ws.send_json({"type": "end"}) return ws app = web.Application(); app.router.add_get("/moholo", live) web.run_app(app, port=8765)
Ship with our live model and voices, or bring your own. Same avatars, same tag, either way.
Live model, voices and lip sync included. Paste the tag and launch.
Your live model and voice, on your servers. We serve the avatar files; the face and the lips run on the visitor's device.
The only one that runs on the visitor's device, with your own model.
| Product | Real-time voice chat | Runs on the visitor’s device | Lip-sync on device | Bring your own LLM / audio | True 3D head | Cost per hour | Download per avatar |
|---|---|---|---|---|---|---|---|
| Moholo | ✓ | ✓ | ✓ | ✓ | ✓ | $0 | < 5 MB |
| HeyGen LiveAvatar | ✓ | ✗ | ✗ | partly | ✗ | $0.60 | stream |
| Tavus CVI | ✓ | ✗ | ✗ | partly | ✗ | $22.20 | stream |
| D-ID Agents | ✓ | ✗ | ✗ | partly | ✗ | ≈$21 | stream |
| Anam | ✓ | ✗ | ✗ | partly | ✗ | $6.60–14.40 | stream |
| Beyond Presence | ✓ | ✗ | ✗ | partly | ✗ | €10.80–21 | stream |
| Lemon Slice | ✓ | ✗ | ✗ | partly | ✗ | $9.60–12.60 | stream |
| Simli | ✓ | ✗ | ✗ | partly | ✗ | $0.60–3 | stream |
| Hedra Live | ✓ | ✗ | ✗ | partly | ✗ | $3 | stream |
| bitHuman | ✓ | partly | partly | partly | ✗ | $0.60–2.40 | n/d |
| NVIDIA ACE (A2F-3D) | ✓ | ✗ | ✗ | ✓ | ✓ | GPU server | 1.5 GB VRAM |
| Apple Persona | ✗ | ✓ | ✗ | ✗ | ✓ | free ($3,499 headset) | n/d |

A plan for every stage — and no per-minute rate at any of them, because the avatar renders on the viewer's device.
Your own avatar, prompt and voice on our model. Zero commitment.
Your branded avatar, in front of real users, on any site you list.
Dedicated hosting, custom terms and a rate that stays at zero per minute.
The avatar is drawn on the viewer's device: no video of the face ever leaves a server, because none is made. With your own model, the conversation runs between your visitor and your servers and Moholo only serves the avatar files. Every face in the library is synthetic — no likeness, no consent risk — and the licences behind every component are listed openly.
Learn moreEverything about Moholo — pricing, the avatar library, your own model, and why there is no cost per minute.
You'll learn how to order a coffee in Tokyo in 3 minutes
Create your account: you make the avatar yours in the editor and copy one line into your page.