Performance
How fast Essence 2 and Expression 2 render on each platform.
× real time is seconds of avatar video rendered per second: at 1× an avatar keeps up with a live conversation, and anything higher is headroom.
| Device | Essence 2 | Expression 2 |
|---|---|---|
| iPhone 18 Pro | 4.9× real time, 124 fps | 11.9× real time, 239 fps |
| iPhone 15 | 2.1× real time, 54 fps | 5.5× real time, 111 fps |
| Galaxy S25+ | 2.0× real time, 52 fps | 2.4× real time, 48 fps |
| Mac (M4) | 6.9× real time, 174 fps | 8.8× real time, 176 fps |
| Linux PC (Intel i7) | 2.0× real time, 50 fps | 2.4× real time, 48 fps |
| Windows PC (Intel i7) | 0.6× real time, 17 fps | 1.0× real time, 21 fps |
| Browser (Chrome, M5) | 4.0× real time, 101 fps | 2.4× real time, 49 fps |
| Cloud GPU (RTX 4090) | 4.1× real time, 104 fps | 17.0× real time, 340 fps |
| Cloud Mac (M4 Max) | 2.8× real time, 71 fps | 5.5× real time, 111 fps |
| Cloud CPU | 1.1× real time, 28 fps | 1.3× real time, 27 fps |
Each figure is one avatar session rendering as fast as the device allows, on the fastest SDK we measured on that device. How we measure has the method, memory and the raw data.
All measurements
Every SDK and release measured, fastest first on each device.
| Device | Model | SDK | Speed | fps | Live fps | First speech | Measured | Method |
|---|---|---|---|---|---|---|---|---|
| iPhone 18 Pro | Essence 2 | Swift package 2.21.4 | 4.9× | 124 | 25 | 0.38 s | 2026-10-08 | Essence 2 example app benchmark: avatar downloaded by agent code, unpaced x3 back to back, then a live 25 fps run; Release, published 2.21.4 |
| iPhone 18 Pro | Expression 2 | Swift package 2.21.4 | 11.9× | 239 | 19.9 | — | 2026-10-08 | examples swift/ios-expression2 (Release, 2.21.4), generate then play |
| iPhone 15 | Essence 2 | Swift package 2.17.3 | 2.1× | 54 | — | — | 2026-09-27 | slowest of 3 runs (model record) |
| iPhone 15 | Expression 2 | Swift package 2.18.0 | 5.5× | 111 | — | — | 2026-09-27 | slowest of 3 runs (model record) |
| Galaxy S25+ | Essence 2 | essence2-android 0.7.0 | 2.0× | 52 | — | — | 2026-09-25 | slowest of 3 runs (model record) |
| Galaxy S25+ | Expression 2 | expression2-android 0.4.10 | 2.4× | 48 | — | — | 2026-09-23 | slowest of 3 runs (model record) |
| Mac (M4) | Essence 2 | Python · bithuman 2.11.12 | 6.9× | 174 | — | — | 2026-09-25 | slowest of 3 runs (model record) |
| Mac (M4) | Essence 2 | Swift package 2.21.4 | 4.3× | 109 | 24.5 | 0.40 s | 2026-10-08 | Essence 2 probe on the published v2.21.4 binaries (unpaced pull loop to the reply’s last frame; live 25 fps loop) |
| Mac (M4) | Essence 2 | CLI 2.8.1 | 4.2× | 106 | — | — | 2026-09-27 | slowest of 3 runs (model record) |
| Mac (M4) | Expression 2 | Swift package 2.21.4 | 8.8× | 176 | — | — | 2026-10-08 | examples swift/macos-expression2 (2.21.4, timed to the last frame), swift run -c release |
| Mac (M4) | Expression 2 | Python · bithuman 2.11.12 | 8.4× | 169 | — | — | 2026-09-25 | slowest of 3 runs (model record) |
| Mac (M4) | Expression 2 | CLI 2.8.1 | 8.4× | 168 | — | — | 2026-09-27 | slowest of 3 runs (model record) |
| Linux PC (Intel i7) | Essence 2 | CLI 2.8.1 | 2.0× | 50 | — | — | 2026-09-27 | slowest of 3 runs (model record) |
| Linux PC (Intel i7) | Essence 2 | Python · bithuman 2.12.1 | 1.2× | 30 | 24.4 | 0.89 s | 2026-10-08 | notes/perf/python/bench.py (bithuman.open + Avatar.render, first request -> last frame) and live.py (AsyncBithuman, 40 ms chunks at real-time pace); warm-up excluded; CPU only, no cap |
| Linux PC (Intel i7) | Expression 2 | Python · bithuman 2.12.1 | 2.4× | 48 | 20 | — | 2026-10-08 | notes/perf/python/bench.py (bithuman.open + Avatar.render, first request -> last frame) and live.py (AsyncBithuman, 40 ms chunks at real-time pace); warm-up excluded; CPU only, no cap |
| Linux PC (Intel i7) | Expression 2 | CLI 2.8.1 | 2.2× | 44 | — | — | 2026-09-27 | slowest of 3 runs (model record) |
| Windows PC (Intel i7) | Essence 2 | Python · bithuman 2.12.9 | 0.6× | 17 | — | — | 2026-11-06 | Python SDK on Windows, full-body avatar, 8 vCPU; the slowest of four runs is shown |
| Windows PC (Intel i7) | Expression 2 | Python · bithuman 2.11.18 | 1.0× | 21 | — | — | 2026-09-29 | slowest of 3 runs (model record) |
| Browser (Chrome, M5) | Essence 2 | web viewer dcba335 | 4.0× | 101 | 25 | — | 2026-10-08 | median of 3 runs |
| Browser (Chrome, M5) | Expression 2 | web viewer dcba335 | 2.4× | 49 | — | — | 2026-10-08 | median of 3 runs |
| Cloud GPU (RTX 4090) | Essence 2 | cloud API | 4.1× | 104 | — | — | 2026-09-27 | slowest of 3 runs (model record) |
| Cloud GPU (RTX 4090) | Expression 2 | cloud API | 17.0× | 340 | — | — | 2026-09-23 | slowest of 3 runs (model record) |
| Cloud Mac (M4 Max) | Essence 2 | cloud API | 2.8× | 71 | — | — | 2026-09-26 | slowest of 3 runs (model record) |
| Cloud Mac (M4 Max) | Expression 2 | cloud API | 5.5× | 111 | — | — | 2026-09-23 | slowest of 3 runs (model record) |
| Cloud CPU | Essence 2 | cloud API | 1.1× | 28 | — | — | 2026-09-25 | slowest of 3 runs (model record) |
| Cloud CPU | Expression 2 | cloud API | 1.3× | 27 | — | — | 2026-09-24 | slowest of 3 runs (model record) |
- Only these devices are measured. Other hardware renders at other rates.
- Browser is the avatar rendering in the visitor’s own tab with WebGPU (
render=local). By default the avatar renders in the cloud and streams to the page. - Cloud is how fast one finished video is delivered, encoding included, on a server with no other sessions. bitHuman picks the server for each session.
- A live conversation plays at 25 fps for Essence 2 and 20 fps for Expression 2. Extra speed makes a video file finish sooner; it does not put more frames on screen.
This section moved: docs.bithuman.ai/performance/method#pin-a-tier-for-a-benchmark
This section moved: docs.bithuman.ai/performance#all-measurements
This section moved: docs.bithuman.ai/performance#all-measurements
This section moved: docs.bithuman.ai/performance#all-measurements
This section moved: docs.bithuman.ai/performance#all-measurements
This section moved: docs.bithuman.ai/performance#all-measurements