Skip to main content

bithuman

Run a bitHuman avatar on your own machine, in your own process.

pip install bithuman
python -m bithuman A63GVG1577 speech.wav       # -> A63GVG1577.mp4

Two arguments — an avatar and some audio — and a video you can play. The avatar is the ten-character code the service gave it (fetched once, which is free) or a file you already have. Run python -m bithuman with no arguments to list the avatars your key can open.

No audio to hand? This package ships 15 s of speech, so the first run needs nothing you do not already have:

python -m bithuman A63GVG1577 "$(python -c 'import bithuman,os;print(os.path.join(os.path.dirname(bithuman.__file__),"assets","demo_sample.wav"))')"

python -m bithuman --help prints that path on your machine.

In your own program it is the same two things:

import bithuman, os

speech = os.path.join(os.path.dirname(bithuman.__file__),
                      "assets", "demo_sample.wav")   # 15 s, ships in the wheel

avatar = bithuman.open("A63GVG1577.imx")
for image in avatar.render(speech):
    show(image)

That is the whole thing: open an avatar, then render audio through it.

both families, the same two lines

An essence-2 avatar and an expression-2 avatar are opened and rendered by the code above, unchanged. Nothing you write says which one you have, and you do not have to know.

expression-2 needs one extra package on the machine:

pip install "bithuman[expression-2]"

Open an expression-2 avatar without it and the refusal says so, and says that line. Nothing else differs.


The surface — eight names

you write it means
bithuman.open(source) open the avatar file on this machine; returns an Avatar
avatar.render(audio) yield the frames for that audio
Avatar what open gives you
AvatarError catch this for any refusal
InvalidAvatar we cannot find it, or it is not a usable avatar
NotSupported this avatar cannot run here
NotAuthorised the key is missing, invalid, or out of credit
Failed we could not do it — the message says which

There is nothing else, and nothing to configure. This package runs the avatar on this machine, so there is no choice left about where or how it runs.

audio in

audio is 16 kHz mono, and it is either a buffer or a stream — the same call:

avatar.render(speech)                      # an audio file path
avatar.render(samples)                     # int16 or float32 in [-1, 1]
avatar.render(raw_bytes)                   # 16 kHz mono, signed 16-bit
avatar.render(microphone())                # any iterable of the above

frames out

Each frame is a (height, width, 3) uint8 array in RGB order, in order, at the avatar's own frame rate — which is a property of the avatar, not something to choose. (This line read "one per 40 ms of speech" until 2026-09-06, which was true of every avatar the package could open at the time and is not true of an expression-2 one.)

import cv2
for image in avatar.render(speech):
    cv2.imshow("avatar", image[:, :, ::-1])   # OpenCV wants BGR
    cv2.waitKey(1)

stopping early

Someone interrupting the avatar is "stop consuming and close the iterator":

frames = avatar.render(speech)
for image in frames:
    if interrupted:
        frames.close()
        break
    show(image)

releasing it

with frees everything at the end of the block; without it, the avatar is freed when it is garbage collected.

with bithuman.open("A63GVG1577.imx") as avatar:
    for image in avatar.render(speech):
        show(image)

The four refusals

Each one leads to a different fix, and none of them asks you to know anything about how we are built.

try:
    avatar = bithuman.open(source)
    for image in avatar.render(audio):
        show(image)
except bithuman.InvalidAvatar:
    ...   # fix the path or the code, or fetch the avatar again
except bithuman.NotSupported:
    ...   # use the cloud package, or another device
except bithuman.NotAuthorised:
    ...   # fix the credential
except bithuman.Failed:
    ...   # retry, then report it

Every one of them is an AvatarError, so except bithuman.AvatarError catches all four.


The key

Rendering is metered, and the key belongs in the environment rather than in your code:

export BITHUMAN_API_SECRET=...

Without one, render refuses with NotAuthorised before it hands you a frame. Get a key at https://www.bithuman.ai/developer/api-keys.

python -m bithuman also reads a .env file beside you, which is where a key usually already is. What is already in the environment always wins.


Where it runs

Python 3.10 – 3.14
macOS Apple silicon
Linux x86-64 and arm64
Windows, Intel Macs not built — pip install refuses loudly rather than quietly giving you an old release

ffmpeg is used to read an audio file when it is on your PATH; when it is not, the decoder this package already installs reads the same file in this process, so it is not something to install first.

Two environment variables exist for hosts that need them, and neither is required for a working result:

BITHUMAN_API_SECRET your key
BITHUMAN_CACHE_DIR where a prepared avatar is kept (default ~/.cache/bithuman)

This package never puts a command on your PATH

pip install bithuman installs a library and nothing else — and python -m bithuman is why that costs you nothing: a module needs no script, cannot collide with one, and is there the moment pip finishes. The full bithuman command-line tool (a live avatar, a conversation) is a different artifact and is not installed with pip:

curl -fsSL https://raw.githubusercontent.com/bithuman-product/homebrew-bithuman/main/install.sh | sh
brew install bithuman-product/bithuman/bithuman-cli      # macOS, equivalently

That is an invariant, not an accident: a pip-installed command named bithuman would overwrite the one Homebrew put at the same path, and every check would still report success. tests/test_no_console_script.py fails if a release ever grows one — on every push and pull request (the source side, with three firing controls) and again inside each publish job, run directly against the wheels being uploaded. A directory that is declared and holds no bithuman wheel exits 2: a publish that cannot be graded is refused, not passed.


Coming from 2.10.0?

3.0.0 is a clean break. Thirty-two names became eight, and fourteen error classes became four.

if you see do this
cannot import name 'AsyncBithuman' (or Bithuman, AudioChunk, VideoFrame, VideoControl) bithuman.open(...) and avatar.render(audio) replace all of them
cannot import name 'Fixture' (or Runtime, EP_AUTO, ComposedFrame) same: they were the layer under render, and there is no layer to reach for now
no module named 'bithuman.api' (or .models, .exceptions, .config, .bhci) the values they held are gone from the surface; the four refusals replace the error classes
a DeprecationWarning when you import the 2.x offline-render module it still works until 4.0.0; the warning names the module and the class names to write instead (bithuman.offline, OfflineRenderer, OfflineRenderError)
module 'bithuman' has no attribute '__version__' importlib.metadata.version("bithuman")
you install the 2.x extra for offline rendering it still installs the same three packages until 4.0.0; the extra is now bithuman[offline]
your frames look blue frames are RGB now, not BGR — image[:, :, ::-1] if you feed OpenCV
except BithumanError never fires except bithuman.AvatarError

Frames are still (height, width, 3) uint8 arrays, still 25 per second, still in order.

2.10.0 is on PyPI forever and keeps resolving exactly as it does today. Pin bithuman<3 to stay on it.


Licence

Proprietary — this package carries the runtime. See LICENSE.

Release files for bithuman 2.11.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for bithuman 2.11.0
File
bithuman-2.11.0-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
bithuman-2.11.0-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details
bithuman-2.11.0-cp314-cp314-macosx_14_0_arm64.whl CPython 3.14 CPython 3.14 macOS 14.0+ ARM64 Details
bithuman-2.11.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
bithuman-2.11.0-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
bithuman-2.11.0-cp313-cp313-macosx_14_0_arm64.whl CPython 3.13 CPython 3.13 macOS 14.0+ ARM64 Details
bithuman-2.11.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
bithuman-2.11.0-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
bithuman-2.11.0-cp312-cp312-macosx_14_0_arm64.whl CPython 3.12 CPython 3.12 macOS 14.0+ ARM64 Details
bithuman-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
bithuman-2.11.0-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details
bithuman-2.11.0-cp311-cp311-macosx_14_0_arm64.whl CPython 3.11 CPython 3.11 macOS 14.0+ ARM64 Details
bithuman-2.11.0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details
bithuman-2.11.0-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details
bithuman-2.11.0-cp310-cp310-macosx_14_0_arm64.whl CPython 3.10 CPython 3.10 macOS 14.0+ ARM64 Details

Total release size: 373.3 MB

Release files / bithuman-2.11.0-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.0-cp314-cp314-manylinux_2_28_x86_64.whl
Size 22.2 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cb87b9da954671bb68d006ffa405bcbdb81a537bac5dff5bade49388e77c74ba
BLAKE2b-256 checksum
How to use checksums
dd147dd7050ac1e37b48afdf55e61430a9a8f7a5e7bca2cd7b50e8dbcc625d4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.0-cp314-cp314-manylinux_2_28_aarch64.whl
Size 20.7 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
77cc30aa459db8ccff872b1d650fc6c9715345bf2ad38250c03449caf8680fea
BLAKE2b-256 checksum
How to use checksums
5ec69747b47b56f87a9c75a5ebd9b939035bc458fcb22616d0eb445bed9ffe43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp314-cp314-macosx_14_0_arm64.whl

Download URL bithuman-2.11.0-cp314-cp314-macosx_14_0_arm64.whl
Size 31.8 MB
Tags CPython 3.14 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
58a708ce9ec1f358249c2a32954513569d790fc7e40b8f1bd034ddba49701735
BLAKE2b-256 checksum
How to use checksums
1b635dd01796ad68d4bb4301da37cd08ccf34692015539c09829a6cfcd935b47
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 22.2 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
fa1f65e23fa197bcf665e9326cd9480c672eb794f3889a8405014092f736bacc
BLAKE2b-256 checksum
How to use checksums
875c7a0e3276be6e83d6f089c6a189627e91a6a2c39110a7d9513e14c9263f55
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.0-cp313-cp313-manylinux_2_28_aarch64.whl
Size 20.7 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
e207ae995339d6eb33e3fff465c8b67ae2570f7460ff44c44ccf039088c92cf3
BLAKE2b-256 checksum
How to use checksums
70fd585eae30e8c1be0ebd75def89f86cf6eeb3dad81e9cd3991b86c28f3fc7a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp313-cp313-macosx_14_0_arm64.whl

Download URL bithuman-2.11.0-cp313-cp313-macosx_14_0_arm64.whl
Size 31.8 MB
Tags CPython 3.13 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
9e7212694e0faa4ddb9044b61b1c17b0e50a9e1c87a7bf883ea2ec2f6fc447d0
BLAKE2b-256 checksum
How to use checksums
70332909eb66e497aae6306fa467f21920bf5b4417de923f380dea11b5828372
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 22.2 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c0d667c283cc22fc9d6373837b4d7dac0619356787c7057de2cc4cb43b0039ee
BLAKE2b-256 checksum
How to use checksums
2f94ab55dd600edee98c314b886401cba477c6b6640070dcfedd4a92231b3e65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.0-cp312-cp312-manylinux_2_28_aarch64.whl
Size 20.7 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
fedea6ac0c2f4d43c069b13e0b36b2c21dd1b42d36963d994822bed8984dc8b1
BLAKE2b-256 checksum
How to use checksums
34fd0a2e57f2dce58e1f97e43531a3cd28c0d1a31efd37777c4b880f107028f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp312-cp312-macosx_14_0_arm64.whl

Download URL bithuman-2.11.0-cp312-cp312-macosx_14_0_arm64.whl
Size 31.8 MB
Tags CPython 3.12 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
4045c7ba77b0e9547b31252957f7b1dde08c89af88dfbe436a9170bad60ce0c2
BLAKE2b-256 checksum
How to use checksums
3406413e869d4235b81dcd278f924e6c08d8eae1077ea27b4176f4922f5def80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 22.2 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
deb70358bd5c2b84b1dc15d814fef6a7d59eaa29d97b4074353ae59775ec9d57
BLAKE2b-256 checksum
How to use checksums
8d0a7c976ac9f1f141a369acd550c775434503685807447b4c48204ca74257cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.0-cp311-cp311-manylinux_2_28_aarch64.whl
Size 20.7 MB
Tags CPython 3.11 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
94a5654035a41f3f69159b1e44ec4e2cb7a63383b862fcd89a6e4e5f2e324839
BLAKE2b-256 checksum
How to use checksums
7eb5534876a49e50f4b9ff945437af20a112893b67174732861d3e23846554bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp311-cp311-macosx_14_0_arm64.whl

Download URL bithuman-2.11.0-cp311-cp311-macosx_14_0_arm64.whl
Size 31.8 MB
Tags CPython 3.11 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
bf5b658e266e65cd3e260c9ec2b80651c3897c7bd6dfe80971a649a94aacf53a
BLAKE2b-256 checksum
How to use checksums
aceb7774e65a3d6730f6ed2bda792e6a952740b0968ab0fba82facce2e6825d6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 22.2 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
997aac1d3392c12d20e6fb1083cc7522d016d0d7a772179a72482aeacabf450b
BLAKE2b-256 checksum
How to use checksums
ecd31555dd1d4f59e2225c68e62355b60e203b525993609e1335754c4abde3a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.0-cp310-cp310-manylinux_2_28_aarch64.whl
Size 20.7 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
ae5114e8a2544579102e7209dd8cf3ad60489a19217e848000a08d7bf4e380f4
BLAKE2b-256 checksum
How to use checksums
8115b57acfe32d5e333590340f084840e89408dc7727a22b4b66243c3776cc53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / bithuman-2.11.0-cp310-cp310-macosx_14_0_arm64.whl

Download URL bithuman-2.11.0-cp310-cp310-macosx_14_0_arm64.whl
Size 31.8 MB
Tags CPython 3.10 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
218b112b058ed493d3c732dfe8675d5c97291754ac2f817d286a36aa71f14573
BLAKE2b-256 checksum
How to use checksums
b2df9c96e83e58d961cb62ecf3537532bf54d0ec1fdbaf16ef432b5a5d4fd8c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release history Release notifications | RSS feed

This release

2.11.0 This release

15 release files

2.3.4

15 release files

1.15.2

3 release files

1.15.1

3 release files

1.15.0

3 release files

1.14.0

3 release files

1.13.0

3 release files

1.12.4

3 release files

1.12.3

3 release files

1.12.2

3 release files

1.12.1

3 release files

1.12.0

3 release files

0.8.1

24 release files

0.1.3

3 release files

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page