Docs index: /llms.txt · every page as Markdown: add .md

‹ Models

Expression 2

Expression 2 renders any character from one portrait, live.

On the deviceYour computer or serverbitHuman cloud

What it is

Expression 2 (expression-2) generates the whole avatar scene live from the audio — expressions, mouth and head movement are synthesized each session, not replayed from a base video. It animates the entire 416x720 frame with no face detector or cropping step, so it works for any character: cartoons, animals, creatures, robots, and people.

At creation the platform trains a small model of your specific identity from one photo. That per-identity model is what serves your sessions, and it is why creation takes a couple of hours.

How it is created, served and kept moving while idle: How it works.

When to choose it

  • Your character is not a photorealistic human — this is the model for it, and where model: "auto" routes such inputs.
  • You want motion generated from the audio itself, not patched onto a base video.
  • You only have a photo — one image is enough.

For a photorealistic person, compare Essence 2. The side-by-side is on Models.

Where it runs

WhereExpression 2How
iPhone and iPadYesSwift package, Expression2
MacYesSwift package (macOS 13), CLI, Python
AndroidYesexpression2-android
Linux, no GPUYesCLI, Python
Browser (WebGPU)Yesrender=local
Your serversYesCLI, Python, LiveKit plugin
bitHuman cloudYesweb embed, REST API, LiveKit
Fully offlineYesLinux x86_64 (Business & Enterprise)

Complete apps: iOS Expression 2, macOS Expression 2 and Android Expression 2.

The file you download from GET /v1/agent/{code}/model/download?model=expression-2 or bithuman pull <CODE> is labelled <CODE>.imx; .avatar is the legacy extension for the same container. How fast it renders on each device is on performance.

Limits and expectations

  • Output is the full 416×720 scene, playing at 20 frames a second.
  • A clear, frontal, well-lit photo gives the best result. The identity is fixed at creation — to change the face, create a new agent.
  • The first session on a new agent can take longer to connect while its model is provisioned; later sessions reuse it.
  • Before training completes, a launch that requests this model is refused with 409 MODEL_NOT_GENERATED. Once ready, expression-2 appears in the agent’s supported_models.

Next steps

This section moved: docs.bithuman.ai/build/create-avatar#how-creation-works

This section moved: docs.bithuman.ai/performance/method#pin-a-tier-for-a-benchmark

This section moved: docs.bithuman.ai/models/how-it-works#idle-and-speaking-behavior