Real-time Avatar Platform

Private, on-device visual agents

Lifelike avatars that see, hear, and respond — live. Build them in a few lines of code, then run them fully on-device — CPU, Apple Silicon, the browser, or the edge — so no data leaves your hardware.

iPhone
Raspberry Pi
Mac mini
Browser
Cloud
25 FPSreal-time lip-sync
On-deviceprivate — data stays local
From 1 credit/minself-hosted, air-gap ready
Energetic Audio Story Buddy
Press Launch to talk to a live agent
Trusted by teams shipping live agents
ShopifyUberAllbirdsIvoclarMINT MuseumNRF
Quickstart

Your first agent in two minutes

Install once, then drive a live agent from the CLI, Python, Swift, or plain REST. Shipping a mobile app? Android is the free rail. The Kotlin tab is expression-2 on the Android SDK (beta), and it renders with no account, no API key and no credits — the model store fetches a published identity over anonymous HTTPS. Measured 2026-09-09: 213 frames on a Galaxy S25+, about three minutes from an empty directory (the whole project). iOS (preview, the whole app) is the gated one — an Apple Developer team, an agent code and a key before anything renders. Both floors are hard: Android is arm64-v8a only, and the Apple Essence engines need an iPhone 16 Pro. What each phone rail needs →

Start here →
curl -fsSL https://raw.githubusercontent.com/bithuman-product/homebrew-bithuman/main/install.sh | sh
bithuman login                  # opens your browser, signs you in
bithuman pull modern-court-jester
bithuman run ~/.cache/bithuman/showcase/modern-court-jester.imx
# -> a live agent at http://127.0.0.1:8088
import os
from bithuman import AsyncBithuman

avatar = await AsyncBithuman.create(model_path="agent.imx",
                                    api_secret=os.environ["BITHUMAN_API_SECRET"])
await avatar.push_audio(pcm_bytes, 16000)   # 16 kHz int16 PCM (ends the utterance)
async for frame in avatar.run():
    render(frame.bgr_image)        # lifelike animated face, in realtime
// build.gradle.kts: implementation("ai.bithuman:expression2-android:0.3.1")
// No account, no API key, no credits — the model store fetches anonymously.
// arm64-v8a only — an x86_64 emulator installs, then throws UnsatisfiedLinkError.
// Verbatim from /sdk/android — see scripts/check-home-quickstart-kotlin.mjs.
import ai.bithuman.expression2.Expression2Avatar
import ai.bithuman.expression2.Expression2ModelStore
import ai.bithuman.expression2.Expression2Options
import android.content.Context
import android.graphics.Bitmap

/** [pcm16k] is 16 kHz MONO float32 in [-1, 1] — one float per sample, not ShortArray. */
fun render(context: Context, agentCode: String, pcm16k: FloatArray, show: (Bitmap) -> Unit) {
    // Blocks on the network the first time (~158 MB). Never on the main thread.
    val model = Expression2ModelStore(context).fetch(agentCode)

    Expression2Avatar.create(context, model, Expression2Options()).use { avatar ->
        val frame = avatar.newFrameBitmap()   // ARGB_8888, 416 x 720 — allocate once
        avatar.feed(pcm16k)                   // renders each complete 1.6 s chunk
        avatar.flushTail()                    // the padded tail is the last sentence
        while (true) {
            if (avatar.pull(frame) != null) { show(frame); continue }
            if (!avatar.hasPendingTail && avatar.queuedFrames == 0) break
        }
    }
}
import bitHumanKit

let runtime = try Bithuman.create(modelPath: imxURL).bithuman
try await runtime.start()
try await runtime.pushAudio(audio24k: pcm24k, audio16k: pcm16k)
while let chunk = runtime.tryDequeueChunk() {
    chunk.frames.forEach(view.render)   // on-device, realtime
}
Embed anywhere

Drop an agent into any site

One line of HTML adds a live agent — pick a corner gadget or a full chat widget, then try both right here.

index.html
<!-- Corner gadget — one line -->
<script
  src="https://www.bithuman.ai/bithuman-web-gadget.js"
  data-agent-url="https://bithuman.ai/embed/A74NWD9723">
</script>
your site
Chat

A draggable, resizable avatar bubble in the corner — tap to talk (voice & video). Best for a quick, ambient presence.

index.html
<!-- Chat widget — one line -->
<script
  src="https://www.bithuman.ai/bithuman-chat-widget-v5.js"
  data-agent-url="https://bithuman.ai/A78WKV4515">
</script>
your site
AI assistant
Hi! How can I help you today?
What can bitHuman do?Get started
Ask our AI assistant

A full support-chat experience (the Ivoclar style) — text, voice, and video, with suggested questions and a welcome message. Best for help & sales.

Ship your first visual agent today

Free tier — 99 credits a month, no card required.