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.
Let us host it, or run it yourself
That's the only real decision — and you can switch later. Not sure? Start here →
Cloud API
We host the GPU — call simple REST endpoints to generate, host, and drive avatars. No infrastructure to run. Move the same avatars on-device whenever privacy or cost calls for it.
Start with the API →SDK — run it yourself
Run avatars on your own hardware — iOS, Android, Python, macOS, the browser, or one CLI command. Private by design: inference stays on-device, so no data leaves your hardware. Self-host, deploy on-prem, or run air-gapped, from 1 credit/min.
Get the SDK →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 →
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
} 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.
<!-- Corner gadget — one line -->
<script
src="https://www.bithuman.ai/bithuman-web-gadget.js"
data-agent-url="https://bithuman.ai/embed/A74NWD9723">
</script>
ChatA draggable, resizable avatar bubble in the corner — tap to talk (voice & video). Best for a quick, ambient presence.
<!-- Chat widget — one line -->
<script
src="https://www.bithuman.ai/bithuman-chat-widget-v5.js"
data-agent-url="https://bithuman.ai/A78WKV4515">
</script>
AI assistantA full support-chat experience (the Ivoclar style) — text, voice, and video, with suggested questions and a welcome message. Best for help & sales.
Copy-paste starting points
Android app, end to end (Kotlin)
The whole project, seven files — no account, no API key, no credits. 117 frames on a Galaxy S25+.
Open →iOS app, end to end (Swift)
The whole SwiftUI app — 149 frames at 21.8 fps on an iPhone 15. Needs an Apple team, a key and an agent code first.
Open →Hello, avatar (Python)
Stream audio and render frames in ~20 lines.
Open →Voice agent + avatar
A real-time conversational agent with a live face.
Open →REST in any language
Generate and drive an agent over plain HTTP.
Open →Run it from the CLI
One binary, one command, a talking agent in your browser.
Open →Built with bitHuman
Real teams shipping real-time visual agents into the world.
MINT Museum Leaps Ahead in Visitor Engagement with bitHuman's AI Ambassador
MINT Museum launched 'The Little Prince', billed as the world's first museum AI ambassador, powered by bitHuman to give visitors personalized, multilingual guidance and ticketing. The avatar runs on-premise on a single Mac Mini for low latency and data privacy.
Ivoclar Transforms Customer Care with Virtual Einstein's Multilingual Expertise
Ivoclar, a global dental-solutions leader, deployed bitHuman's interactive 'Virtual Einstein' avatar to deliver 24/7 customer care across tradeshows, events, and online platforms, speaking 50+ languages and trained on Ivoclar's full product catalog.
NRF Transforms Conference Experience with 10 Virtual AI Guides at Retail's Big Show
At NRF: Retail's Big Show in the Jacob K. Javits Convention Center, bitHuman deployed 10 AI-powered virtual conference guides as interactive information kiosks, helping thousands of attendees navigate the venue, find exhibitor booths, and get real-time session info.
Ship your first visual agent today
Free tier — 99 credits a month, no card required.