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.

offline rendering, without 3 GB of CUDA you will never run

bithuman[offline] adds torch and onnxruntime. From PyPI's default index that resolves to the CUDA build of torch, and the extra costs 3.18 GB of wheels — 2.45 GB of it nvidia-*, cuda-* and triton that the offline route never executes. Install torch first from PyTorch's own selector — choose the Compute Platform without CUDA and run the one line it prints — and the same extra then resolves to 0.18 GB, with no CUDA wheel in the set at all (the extra asks for torch>=2.1, and any build satisfies it):

pip install "bithuman[offline]"      # after torch, from the line the selector printed

(Measured 2026-09-19 on Linux x86_64 with pip install --dry-run --report: 49 wheels / 3.18 GB from the default index alone, 30 wheels / 0.18 GB with PyTorch's CUDA-free index beside it. Use the default index only if you actually want CUDA.)


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:

BITHUMAN_API_SECRET your API secret, from https://www.bithuman.ai/developer/api-keys — rendering is metered, so it is required unless you pass api_secret=. BITHUMAN_API_KEY is read as a deprecated alias
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.


Using it from a LiveKit agent

The LiveKit integration is a separate package, livekit-plugins-bithuman, published by LiveKit out of github.com/livekit/agents. Install pillow beside it:

pip install livekit-plugins-bithuman pillow

That plugin imports PIL.Image at module scope and its published metadata does not declare pillow, so installing it on its own ends at ModuleNotFoundError: No module named 'PIL' the first time you import it. The metadata is upstream's, not ours — this line is the whole fix, and the deploy guide carries it too.

On Python 3.10 and 3.14 there is a second one, and pillow alone does not clear it. That plugin declares bithuman behind a python_version >= "3.11" and python_version < "3.14" marker, so on those two interpreters pip reports success and installs no bithuman at all — which takes cv2 with it, and the import dies there instead. This package publishes cp310 and cp314 wheels that install and import cleanly, so name it yourself:

pip install livekit-plugins-bithuman pillow bithuman     # Python 3.10 / 3.14

Both workarounds have an expiry: pillow and the dropped marker are already merged upstream in livekit/agents#7280 and are waiting on a plugin release. A release after that commit needs neither word.

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.8

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

Source distribution (sdist)

Source distribution for bithuman 2.11.8
File Size Uploaded
bithuman-2.11.8.tar.gz 2.1 kB Details

Built distributions (wheels)

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

Total release size: 378.9 MB

Release files / bithuman-2.11.8.tar.gz

Download URL bithuman-2.11.8.tar.gz
Size 2.1 kB
Tags Source
SHA-256 checksum
How to use checksums
452a40629d5826327ffbfcd14dd445644f4b6875b2f48aa3589a3b309831a0e3
BLAKE2b-256 checksum
How to use checksums
07daf9d26aecab7743fde5400f506d7b38a8826a39dede531b8b3151a5f8a171
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.8-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.8-cp314-cp314-manylinux_2_28_x86_64.whl
Size 22.8 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
90128f0f1ddbf7c4d3e8eaf3515bae98910891fc9ac7e7d5f276540816c36b10
BLAKE2b-256 checksum
How to use checksums
3bdf368a57c198624a6e7e4d078a3f0af389f302151cf8d5fa3c4a1686e0841a
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.8-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.8-cp314-cp314-manylinux_2_28_aarch64.whl
Size 21.1 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
cec5b429ae83a19d9abe461e4aa9e690ac7f4534aeda51f59c8dc7d06c28a6e3
BLAKE2b-256 checksum
How to use checksums
729dd3ed5aa0d111636872f5fe7dd02c711f56cb43b39357c660610a7e298ec9
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.8-cp314-cp314-macosx_14_0_arm64.whl

Download URL bithuman-2.11.8-cp314-cp314-macosx_14_0_arm64.whl
Size 31.9 MB
Tags CPython 3.14 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
39b7cd91d85aeba22b50eb21d42fcbb03cde10205c2122c7ae65cd1d54f70186
BLAKE2b-256 checksum
How to use checksums
34b2668fa1a337970ee7ee26fac9eef8f0a80f1e1691fa816a813163cb839e6f
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.8-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.8-cp313-cp313-manylinux_2_28_x86_64.whl
Size 22.8 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
27e24640837216ac4c110281619a4a7274eb44ac516ade87b09d3028e5701f10
BLAKE2b-256 checksum
How to use checksums
6835b8f61213024c528f629a8913f7a9a152438f8e0d7bcbcbe73f8aae9e915e
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.8-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.8-cp313-cp313-manylinux_2_28_aarch64.whl
Size 21.1 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
41654166e93945811bcb906700027c1ec6bec0ae54f449d66a337ef85764f649
BLAKE2b-256 checksum
How to use checksums
6360c942cc31acb89b960cd1895860bb5d6871c1ad9f5a2d00c9e0eaf41de367
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.8-cp313-cp313-macosx_14_0_arm64.whl

Download URL bithuman-2.11.8-cp313-cp313-macosx_14_0_arm64.whl
Size 31.9 MB
Tags CPython 3.13 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
56537545c469ef20ab008c03686790cf99b0b9a7b415a9eaeba3331c40dd535f
BLAKE2b-256 checksum
How to use checksums
0af829ea605fc53d1144aaacf931f942854236c5887793c9bea8e53601253372
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.8-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.8-cp312-cp312-manylinux_2_28_x86_64.whl
Size 22.8 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
09f5f3c8a2726a11927ddd962f698f713c416f277bc92fbc1505b493fb1785be
BLAKE2b-256 checksum
How to use checksums
7a078fd76975a75ceda07ce079f7ef7cadf7543747e5d980e99ca76dcc794ea5
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.8-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.8-cp312-cp312-manylinux_2_28_aarch64.whl
Size 21.1 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
4c48037fcc73a16be21e88cdcdf3db1ced2860d1c2efe2c9c1285494bb91b0c5
BLAKE2b-256 checksum
How to use checksums
7645a6fb870b79863cfcaa339f7e4f49c367db9ef0dd43f14c6b460b15578d6b
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.8-cp312-cp312-macosx_14_0_arm64.whl

Download URL bithuman-2.11.8-cp312-cp312-macosx_14_0_arm64.whl
Size 31.9 MB
Tags CPython 3.12 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
57afe9e4145774e386f9170f1e1750d94c5524a4aeaf2960823fc08ef99ecba7
BLAKE2b-256 checksum
How to use checksums
0ca9539a35e5dd03bbafba294ffee8daf4ef86761bbac38a8e68b5952230e0bf
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.8-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.8-cp311-cp311-manylinux_2_28_x86_64.whl
Size 22.8 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a646406fef7dadae56cb0ab6bc946ef0f8a8bf446ffb4a9fa0fe55c8483fd972
BLAKE2b-256 checksum
How to use checksums
f290c860ef1ed7b01fb51b349219d53b65e257b68c1700eba30bb2d50b72b8be
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.8-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.8-cp311-cp311-manylinux_2_28_aarch64.whl
Size 21.1 MB
Tags CPython 3.11 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
200a83cea7a6ba9d974b365b5c121a68138f6452c995b02fb9cdf5745ad616e6
BLAKE2b-256 checksum
How to use checksums
42f8ebde7950580adfd40da1716c6ca374e839a2c57031fbb50cd5121cb194f5
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.8-cp311-cp311-macosx_14_0_arm64.whl

Download URL bithuman-2.11.8-cp311-cp311-macosx_14_0_arm64.whl
Size 31.9 MB
Tags CPython 3.11 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
c0f4abc56a4b0ce5336f00d9375b187da206ed153d254302edfa0b20cbbb28dd
BLAKE2b-256 checksum
How to use checksums
b182e5a3d3e92eb03ec8653c8b428a186304d6af55bd8fd33891a7607352b070
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.8-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.8-cp310-cp310-manylinux_2_28_x86_64.whl
Size 22.8 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a80f6a3f44dd24921f8decd85aba62b1e5623c9dd3b1ded4b001d046323d8fb3
BLAKE2b-256 checksum
How to use checksums
3e79c2be3f46b2d89bc130b2f7c60a96d656498345c6eafd7ef0239dd1bf07f2
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.8-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.8-cp310-cp310-manylinux_2_28_aarch64.whl
Size 21.1 MB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c2c17dcdc5368159b6a6ef8647a4236f2a48da3fdfb8ccb5a61b141a16c61382
BLAKE2b-256 checksum
How to use checksums
82be44baee433d0cb3e60b3a186d79205d964aefa3295bef73b7d907d6dac5fa
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.8-cp310-cp310-macosx_14_0_arm64.whl

Download URL bithuman-2.11.8-cp310-cp310-macosx_14_0_arm64.whl
Size 31.9 MB
Tags CPython 3.10 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
de106a2fe3d79969120692aaf2207bf600f85d60d322843e82862241cbe42ca8
BLAKE2b-256 checksum
How to use checksums
2145026c4aedf9721ae88a833640ba50f44c3f76f5d4dd6ed16fbf5bee93bda8
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.8 This release

16 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