Docs / SDK /Platforms

Web

A talking avatar in a browser tab with nothing to install — one URL or one iframe. Any showcase code, no account, no key.

Install

Nothing. The hosted route renders in any modern browser.

Authentication and configuration

Nothing to authenticate, and nothing to configure: the browser holds no key. A hosted session is metered per active minute against the agent’s owner, at the rate on pricing, and the free tier covers a first conversation. The one thing you do configure lives on your host, not ours — serving your page cross-origin isolated, or in-tab WebAssembly drops to a single thread. See Troubleshooting.

Get a model

Every showcase agent is public. A74NWD9723 is one; browse the rest on the showcase and use any code you see there. Your own agent’s code comes from Agents.

Minimal code

<iframe src="https://bithuman.ai/embed/A74NWD9723"
        allow="microphone *; camera *; autoplay *" width="420" height="720"></iframe>

Or open the agent directly: https://www.bithuman.ai/A74NWD9723?rendering_mode=browser — a live, lip-synced agent that listens and answers, rendered in the tab. Always start on www.bithuman.ai: that host signs you in, the viewer host does not. Swap in your own agent code and it works the same way. The rendering_mode switch and its three values are on browser rendering; embedding options are on deploy an embed. An Essence 1 agent renders in the tab with ?render=local instead.

Run

open "https://www.bithuman.ai/A74NWD9723?rendering_mode=browser"

Grant the microphone, talk. A session is metered per active minute at the rate on pricing; the free tier covers a first conversation.

Performance

The hosted route plays at the avatar’s own frame rate: the frames are rendered on bitHuman’s servers and your tab decodes video, like any other stream. Measured rates for every platform are on the performance page.

You can also render in the tab:

  • Expression 2 — nothing to install. Add ?render=local to the hosted URL and the renderer runs in your tab, ahead of the rate the avatar plays at: https://www.bithuman.ai/A74NWD9723?render=local.
  • Essence 2 — the one published in-browser package is a demo. It ships a single built-in identity and a recorded loop, so you can measure in-browser speed on your own hardware; it cannot render your own agent. The bundle is https://models.bithuman.ai/web/essence2-web-v0.1.1/manifest.json. The same bytes are also published at the older libelevate-web-v0.1.0 path — a retired name that still works and will never be removed, so saved links and already-deployed pages keep resolving. Your page must be cross-origin isolated or WebAssembly drops to one thread — see the troubleshooting table.

Troubleshooting

You seeIt meansDo this
The hosted URL shows a page but no avataryou opened the viewer host directlystart on https://www.bithuman.ai/<CODE>?rendering_mode=browser
404 on the hosted URLthe agent code is wrong or the agent is not publiccheck the code on the showcase or in your agents
The in-tab renderer runs at ~8 fps instead of 20crossOriginIsolated is false, so WASM clamped to 1 threadsend Cross-Origin-Opener-Policy: same-origin + Cross-Origin-Embedder-Policy: require-corp from your own host, or ship the bundle’s coi-serviceworker.js
WebGPU not available in this browseryou asked for the GPU renderer on a browser with no usable GPUask for the software renderer, or probe first
You want a JavaScript SDKthere is no npm package todaydrive a served avatar over LiveKit, or embed the hosted route
?ep=webgpu seems to do nothingthe parameter is dropped while the page signs you in, so the page never sees itadd it after the page has loaded: append &ep=webgpu to the URL in the address bar (the one that already carries token=) and reload. It runs the model on the GPU instead of WebAssembly; it is opt-in and needs a browser with WebGPU. The older ?elevate_ep= is still accepted and always will be — elevate_ep is a legacy name kept for compatibility, and ep is the same parameter the Expression 2 local renderer already takes.

Examples and source

There is no npm package today, so there is no JavaScript API reference to link: the browser surface is the hosted URL, its query parameters, and the <iframe> above. The parameters are on browser rendering.

See also

  • Browser renderingrendering_mode and its three values, in full
  • Deploy an embed — putting the iframe on your own site
  • LiveKit — driving a served avatar from your own JavaScript
  • Performance — measured frame rates for every platform
  • SDK — every platform on one page