How bitHuman ships — the production model behind every SDK, framework, and example. Useful for understanding what runs where, what’s open vs proprietary, and how releases flow.
Use this file to discover all available pages before exploring further.
This page is the source of truth for how bitHuman is built and shipped. If you want to understand the moving parts before integrating, or you’re an AI coding agent trying to map the ecosystem, start here.
The IP that matters — model weights, the .imx build pipeline, the cloud Expression GPU service, billing/heartbeat backend — is server-side and access-gated. The Swift glue and Python SDK code is private but compiled into the public binary distribution.
Both Essence (.imx) and Expression (universal weights bundle for the Swift SDK; per-agent bundles for Python) live in proprietary cloud storage. They’re downloaded at runtime from authenticated endpoints and cached locally:
Surface
Cache location
First-launch download
Python SDK / LiveKit plugin (Essence)
~/.cache/bithuman/models/
~500 MB per .imx
Python SDK / LiveKit plugin (Expression)
~/.cache/huggingface/hub/
varies by agent
Swift SDK (Expression on-device)
~/.cache/bithuman/expression/
~1.6 GB universal bundle
bithuman-cli (video mode)
Same as Swift SDK
~7 GB (LLM + TTS + Expression)
Weight downloads are SHA-256 verified and cached. Subsequent launches are instant.
Scripts/build-binary-xcframework.sh on the source repo’s binary-dist-v<X.Y.Z> branch → manual gh release create on the public repo with the xcframework.zip + computed SHA256
bithuman-cli
homebrew-bithuman
Notarised .tar.gz per release; formula bumps url + sha256
The SDK never holds the long-lived secret in process memory: on chat.start() (Swift) or runtime initialisation (Python/Docker), it exchanges the secret for a short-lived runtime token at https://api.bithuman.ai/v1/runtime-tokens/request. Tokens auto-renew on a 1-request-per-minute heartbeat. Failed heartbeats trigger a 5-minute offline grace window before the avatar pauses.Full flow + per-SDK setup: /getting-started/authentication. Pricing: /getting-started/pricing.
Source privacy for the Swift SDK. The heartbeat / billing / engine glue compiles into the binary; the public package just wraps it. Consumers import bitHumanKit and never see the source.
Zero transitive deps for SwiftPM consumers.internal import on every third-party module + static merge means a consumer’s Package.swift only needs bithuman-kit-public — no mlx-swift, no swift-transformers, no swift-huggingface. Cuts integration friction dramatically.
Same credential for every surface.BITHUMAN_API_KEY and BITHUMAN_API_SECRET are the same value; only the env-var name differs by platform convention.
Audio-only Swift mode is unmetered. The Swift SDK without an attached avatar runs fully offline and bills nothing — encourages experimentation.
Model weights stay cloud-gated. The proprietary IP is the model, not the glue. Code can be open-ish; weights stay locked.