Compare models

Essence 2 renders a photoreal person and Expression 2 any character, each from one portrait. Where each model renders, which to pick, and how an avatar is created.

sofia-ramirez, the Essence 2 sample avatar

Live in your browser, no account. Up to 3 minutes; allow the microphone when asked.

The avatar renders in the bitHuman cloud, and the conversation runs on bitHuman's servers.

Every model reads the same .imx avatar file and has the same shape: push audio in, take lip-synced frames out. The same agent works on every platform that runs its model.

The models

Essence 2 Max is available on the Enterprise plan only. Contact sales to enable it.

Essence 1 and Expression 1 are the first generation. They stay supported, and nothing changes for agents that use them.

Which should I choose?

  • A photorealistic person: Essence 2.
  • A stylized or non-human character, or a whole generated scene: Expression 2.
  • Not sure: create with model: "auto". A photorealistic person routes to Essence 2, anything else to Expression 2.
  • On a phone, a Mac or in a browser: Essence 2 or Expression 2.
  • Maintaining a first-generation agent: keep it. Essence 1 runs on your own CPU; Expression 1 runs in the bitHuman cloud.

Where each model runs

Each place links to the page that sets it up.

WhereEssence 2Expression 2Essence 1Expression 1
iPhone and iPadYes
Swift package, Essence2Kit (iOS 26)
Yes
Swift package, Expression2
——
MacYes
Swift package (macOS 26, M3 or newer), CLI, Python
Yes
Swift package (macOS 13), CLI, Python
Yes
CLI (run), Python
—
AndroidYes
essence2-android
Yes
expression2-android
——
Linux, no GPUYes
CLI, Python
Yes
CLI, Python
Yes
CLI (run), Python
—
Browser (WebGPU)Yes
render=local, for identities with a browser build
Yes
render=local
Yes
render=local
—
Your serversYes
CLI, Python, LiveKit plugin
Yes
CLI, Python, LiveKit plugin
Yes
CLI (run), Python
—
bitHuman cloudYes
web embed, REST API, LiveKit
Yes
web embed, REST API, LiveKit
Yes
web embed, REST API, LiveKit
Yes
web embed, REST API, LiveKit
Fully offlineNot yet
Coming later
Not yet
Coming later
Yes
Linux x86_64 and ARM64, bitHuman 2.11.16 or later; Business & Enterprise
—

Fully offline is for Business and Enterprise clients, arranged through sales (Fully offline).

Rendering on your own hardware, every place but the bitHuman cloud, bills at the self-hosted rate (pricing). How fast each model renders on each device: Performance.

How creation works

You create an agent once, with POST /v1/agent/generate or in the bitHuman app, and serve it anywhere its model runs.

  • The input is one portrait image. Essence 2 generates its identity video from it; Expression 2 trains straight from the photo. An uploaded image is treated as a reference and regenerated to a standard framing.
  • Creation happens in the bitHuman cloud; the finished avatar model then runs on your devices.
  • Both second-generation models train on create. Allow about 2 to 2.5 hours, and poll GET /v1/agent/status/{agent_id} until the status is ready or failed (success is not terminal).
  • Essence 2 needs a photorealistic human subject. A stylized input is refused with 422 MODEL_SUBJECT_MISMATCH before anything is billed; auto routes it to Expression 2 instead.
  • Always send model. An omitted model creates an Expression 1 agent; send essence-2, expression-2 or auto.
  • An existing agent can gain a model with POST /v1/agent/{code}/models.

What creation costs is on pricing; request fields and failure modes are on the Agents API.

Naming & migration

This is the one place the historical names are documented. Every other page uses the four product names. Deprecating a word does not rename a wire format, so some legacy names are still strings you read or type:

Legacy name you may meetWhereWhat it meansDo you type it?
essence, expressionolder ?model= links and request bodiesEssence 1, Expression 1No — write essence-1 / expression-1
essence2-lightthe Engine: line from bithuman open — a legacy engine valueEssence 2No — read the Family: line
essence-2-lightthe retired tier name (the old Light tier)Essence 2No — a request naming it gets a 400; write essence-2
elevate, essence-2-qualityretired names of the premium tier, now Essence 2 Max (Enterprise plan only)a separate tier, not Essence 2No — a request naming them gets a 400
embodya retired request spellingExpression 2No — a request naming it gets a 400 naming expression-2
.lebundle.imx, .avatarolder file extensionsan Essence 2 or Expression 2 model fileOnly if you already have one; it opens as-is
[embody]the legacy prefix on log lines of the Apple Expression2 engineExpression 2Grep your logs for it
BITHUMAN_EMBODY_DIR, EMBODY_DEBUG_FAIL_PREDICTlegacy variables the Apple Expression2 engine still reads beside their EXPRESSION2_ twinsExpression 2No — set BITHUMAN_EXPRESSION2_DIR
libelevate, libelevate-androidlegacy library namesEssence 2No — the Android coordinate is ai.bithuman:essence2-android
libelevate-webthe legacy path of the in-browser runtimeEssence 2 in a browserNo — embed with https://www.bithuman.ai/embed/<CODE>
bithuman.tessera_offline, OfflineTesseraRenderer, TesseraOfflineErrorlegacy Python module and class names, still importablethe Essence 2 MP4 routeNo — write bithuman.offline, OfflineRenderer, render_offline, OfflineRenderError
BITHUMAN_TESSERA_DIRECTOR and the other BITHUMAN_TESSERA_* variableslegacy environment variables, still readEssence 2 engine settingsNo — the defaults are the fast path
bithuman[tessera], bithuman[offline]legacy pip extras, removed from the wheel in 2.11.6nothing — pip warns and installs the base wheelNo — pip install bithuman

Saved links keep working: essence-2-light-gpu / essence-2-light-cpu still pin their tiers, links carrying essence-2-light or essence-2-light-ane route to the Essence 2 default chain, and the older essence-2-ane / expression-2-ane spellings of the Apple tier stay accepted. A link carrying the retired ?model=essence-2-quality falls back to the agent’s stored model.

One more naming point: the cloud’s Apple tier is called Apple, not “ANE”. It is the whole Apple silicon target, not one accelerator inside it.