WebAssembly (Browser)

Run bitHuman visual agents entirely in the browser with WebAssembly — the avatar renders on the user's machine, no server GPU required.

New — the WebAssembly runtime lets a bitHuman agent render fully client-side, in any modern browser.

What it is

The bitHuman engine (libessence) is compiled to WebAssembly, so the entire avatar pipeline — mel spectrogram → audio encoder → frame compositing — runs in the user’s tab, in realtime, on a <canvas> (via ONNX Runtime Web on a WASM backend, with SIMD). The avatar video never leaves the device, and your server’s GPU stays free.

This is the same Essence model you run on-device elsewhere — now in the browser.

Two modes

ModeWhat the server doesWhat the browser doesUse it for
Browser rendering_mode=browserRuns the conversation brain (STT / LLM / TTS) and streams audio over LiveKitRenders the lip-synced face locallyOffloading render cost while keeping a cloud brain
Avatar rendering_mode=avatarNothingMic-driven puppet, fully client-side; .imx cached in IndexedDBPure-client, offline-capable demos

Quickstart

The fastest path is the embed, with the rendering mode set in the URL:

<iframe
  src="https://bithuman.ai/embed/A74NWD9723?rendering_mode=browser"
  allow="microphone; autoplay"
  style="width:100%;height:100%;border:0">
</iframe>

Requirements

  • A modern browser with WebAssembly SIMD (recent Chrome, Firefox, Safari).
  • SharedArrayBuffer — your page must be cross-origin isolated, so serve these headers:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
  • A one-time model download per identity, cached in IndexedDB for instant reloads and offline use.

When to use it

  • Cost — rendering happens on the client, so a single server can drive far more sessions.
  • Privacy — the rendered video stays on the user’s machine.
  • Scale & reach — ship a talking agent to anyone with a browser, no install.

See the full Browser rendering guide for the pipeline internals and the cross-origin-isolation setup. For a server-rendered or native path instead, see Python, Swift, or Android.