# On the device

URL: https://docs.bithuman.ai/deploy/on-device

> Essence 2 and Expression 2 render on the device in front of the user: iPhone, iPad and Mac, Android phones, or a WebGPU browser tab.

## What it is

The avatar renders inside your app on the device in front of the user: iPhone, iPad and Mac with the [Swift package](https://docs.bithuman.ai/platforms/ios), Android phones with the [Android SDK](https://docs.bithuman.ai/platforms/android) or the [Flutter plugin](https://docs.bithuman.ai/platforms/flutter), or the visitor's browser tab with [WebGPU](https://docs.bithuman.ai/platforms/web). There is no render server to run.

The mobile SDKs take any 16 kHz mono speech your pipeline produces and return frames, so any speech-recognition, language-model and voice stack works.

## Where it renders

| Question | On the device |
|---|---|
| Where the avatar renders | on the iPhone, iPad, Mac or Android phone in front of the user, or in a WebGPU browser tab |
| Where the conversation runs | your app's choice; with the web embed, on bitHuman's servers |
| What reaches bitHuman | with your own voice and language services, usage metering only, never audio, video or conversation text |
| Network | to start; rendering continues through a drop of up to 5 minutes |

*Diagram: On the device.* On the device, your app renders the avatar on the iPhone, iPad, Mac or Android phone and brings its own voice and language services. The avatar model downloads once. When you use your own voice and language services, bitHuman receives usage metering only, never audio, video or conversation text.

- **In your app:** when the avatar renders in your app on the device and you use your own voice and language services, bitHuman receives usage metering only, never audio, video or conversation text.
- **On Android:** after the one-time model download, the only network traffic is usage reporting.
- **In the browser:** with the web embed, the conversation runs on bitHuman's servers, even when the avatar renders in the tab (`render=local`).

## Models available here

| Model | [iPhone and iPad](https://docs.bithuman.ai/platforms/ios) | [Mac](https://docs.bithuman.ai/platforms/macos) | [Android](https://docs.bithuman.ai/platforms/android) | [Browser (WebGPU)](https://docs.bithuman.ai/platforms/web) |
|---|---|---|---|---|
| [Essence 2](https://docs.bithuman.ai/models/essence-2) | Yes | Yes | Yes | Yes |
| [Expression 2](https://docs.bithuman.ai/models/expression-2) | Yes | Yes | Yes | Yes |
| [Essence 1](https://docs.bithuman.ai/models/first-generation#essence-1) | — | Yes | — | Yes |
| [Expression 1](https://docs.bithuman.ai/models/first-generation#expression-1) | — | — | — | — |

Essence 1 and Expression 1 are not available on phones or in the Swift package.

## Speed

Measured on the device, including 10-minute held runs:

| Configuration | Hardware | Essence 2 | Expression 2 | Measured |
|---|---|---|---|---|
| iPhone · Swift package | iPhone 15 | 2.1× real time | 5.5× real time | Swift package 2.17.3 and Swift package 2.18.0, 2026-09-27 |
| iPhone · Swift package (held 10 min) | iPhone 15 | 1.3× real time | 5.1× real time | Swift package 2.15.0, 2026-09-25 |
| Android | Samsung Galaxy S25+ | 2.0× real time | 2.4× real time | essence2-android 0.7.0 and expression2-android 0.4.10, 2026-09-25, 2026-09-23 |
| Android (held 10 min) | Samsung Galaxy S25+ | 1.4× real time | 2.2× real time | essence2-android 0.8.1 and expression2-android 0.5.2, 2026-09-27 |
| Web browser (WebGPU) | Chrome on Apple M4 | 1.7× real time | 1.9× real time | web viewer, 2026-09-27 |
| macOS · Swift package | Apple M4 | 4.8× real time | 8.8× real time | Swift package 2.15.0, 2026-09-24 |

× real time: seconds of video rendered per second; 1.0× or more holds a live conversation ([method](https://docs.bithuman.ai/performance#mobile)).

## Price

2 credits per minute of active session time for Essence 2 and Expression 2, about $0.02 a minute at the top-up rate of $1 = 100 credits. Realtime usage bills active session time, talking or idle, to the second. Every rate: [Pricing and credits](https://docs.bithuman.ai/pricing).

## Limits

- **Network:** a session checks your credential when it starts and keeps rendering through a network drop of up to 5 minutes.
- **Devices:** iPhone, iPad and Android need a physical device, not a simulator or an emulator. Essence 2 on Apple needs iOS 26 or macOS 26.
- **Sessions:** on-device sessions are limited by credits, not by a session cap.
- **First run:** each avatar downloads once (about 160–370 MB, by model and platform), then stays on the device.

## First command

```swift tab="iOS & iPadOS"
// Package.swift (or Xcode → Add Package Dependencies)
.package(url: "https://github.com/bithuman-product/homebrew-bithuman.git", from: "2.19.0")
```

```kotlin tab="Android"
// app/build.gradle.kts
implementation("ai.bithuman:expression2-android:0.5.2")
```

```bash tab="Mac"
git clone https://github.com/bithuman-product/bithuman-examples.git
cd bithuman-examples/swift/macos-expression2 && ./setup.sh
BITHUMAN_API_SECRET="<your API secret>" swift run -c release MacOSExpression2
```

```html tab="Web"
<iframe src="https://www.bithuman.ai/embed/A23WJF0199?render=local" allow="microphone *"
        style="width:100%;height:600px;border:0"></iframe>
```

The whole first frame for each: [iOS & iPadOS](https://docs.bithuman.ai/platforms/ios#first-frame) · [Android](https://docs.bithuman.ai/platforms/android#first-frame) · [macOS](https://docs.bithuman.ai/platforms/macos#first-frame) · [Web](https://docs.bithuman.ai/platforms/web#render-in-the-visitors-tab-webgpu).

## Choosing between modes

- **The fewest moving parts, any device:** [bitHuman cloud](https://docs.bithuman.ai/deploy/cloud).
- **Your own Mac or Linux machines:** [Your servers](https://docs.bithuman.ai/deploy/self-hosted).
- **A Linux PC with no GPU:** [CPU only (no GPU)](https://docs.bithuman.ai/deploy/cpu).
- **No internet at the site:** [Fully offline](https://docs.bithuman.ai/deploy/offline); not for phones, Mac or the browser.
- **All five side by side:** [Deployment options](https://docs.bithuman.ai/deploy).
