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

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.9
File Size Uploaded
bithuman-2.11.9.tar.gz 2.1 kB Details

Built distributions (wheels)

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

Total release size: 379.1 MB

Release files / bithuman-2.11.9.tar.gz

Download URL bithuman-2.11.9.tar.gz
Size 2.1 kB
Tags Source
SHA-256 checksum
How to use checksums
684f4bcdabe881c1ae91f0361f74461e259b9ea23fd450f219aef20deb505fa5
BLAKE2b-256 checksum
How to use checksums
ff6c26e05598c221f75497249256fe71e674fd8f9fd8691230431d6f3173dee2
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.9-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.9-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
5632fa517796787071c6b3f1ab44c9537273089253aeebd154008de257240923
BLAKE2b-256 checksum
How to use checksums
bfa98491367ef26156fbe55847ab0bcdddb75aaafa71776f78819cda6240db85
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.9-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.9-cp314-cp314-manylinux_2_28_aarch64.whl
Size 21.2 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
503979404b61668576a430fbc0500ebb126a62b807816b2e76892ea3c05b9875
BLAKE2b-256 checksum
How to use checksums
9f391c48bdf0095b02bce07640b8a07bcc566d933befe2ca648e81d55a7edb5a
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.9-cp314-cp314-macosx_14_0_arm64.whl

Download URL bithuman-2.11.9-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
197345d0cac4f966c0b87f09c0f8536c62d91de015903792bfc5b512484698e7
BLAKE2b-256 checksum
How to use checksums
7fb7bc6cccdd725ce1aca2e2c1e22c1df61e7fb055a9111fa2aeaddfb5fb85e5
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.9-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.9-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
5cc76b950c87649b203b0b9ac9d66c32a595ef7f20ae2943c26f796e84716b7d
BLAKE2b-256 checksum
How to use checksums
0892ad3f32a42c13fbfe0391f00d9f99249e1a47769de3cfd99708b40b736772
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.9-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.9-cp313-cp313-manylinux_2_28_aarch64.whl
Size 21.2 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
d9c967034d7003748bbb8adce8065fa9bd0535c04aba285b431aac87a1482a16
BLAKE2b-256 checksum
How to use checksums
cd0396187f0e8d5c24a5674dac91011236f2914f7a4142daa9a284627d579845
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.9-cp313-cp313-macosx_14_0_arm64.whl

Download URL bithuman-2.11.9-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
0d24ee5ccd656a9bbe0023d024c98082264f2f130a00c02dedcfcd83be1e3162
BLAKE2b-256 checksum
How to use checksums
02b4c9e65971688217292282359dcda01651d56a861338f4ac7cffdbfdb34dde
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.9-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.9-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
c8a04e49575490fda77c8a75ccef2652bd9c5396bc1550508a0349a2bf205496
BLAKE2b-256 checksum
How to use checksums
2c75b329437c7d86714413521178ac71839d4c3447a7213d4730d01308b48d56
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.9-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.9-cp312-cp312-manylinux_2_28_aarch64.whl
Size 21.2 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
a76ab3cf6798afab3b60f9f5528e377b1c4824f6bbba39d6d508b94dc702a63e
BLAKE2b-256 checksum
How to use checksums
c63e2070bfe581c7c17a0a177fcf474e785bddee145f64f64a9ed3437c254793
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.9-cp312-cp312-macosx_14_0_arm64.whl

Download URL bithuman-2.11.9-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
2e38d5c9ea4a1e6fea748a3b253de23b8fde6430f4949ed1a247c6a5fe1f46e6
BLAKE2b-256 checksum
How to use checksums
1689446fc63c7f761bf1dcd7f3c32a12eee743a03e6e1dd4cdd164b5abc7575d
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.9-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.9-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
d83f2a5d3965f9489107cc62db8c3bd2e00c212f6dd659aeca5d9b2716d47d18
BLAKE2b-256 checksum
How to use checksums
4e6de3285c1ffde74385962a78fb4eba83de2a2a643dc08a9176240ab17eada2
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.9-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.9-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
f78f2afb5548600c5261cce5b3ba54993449005961e2a6b3641853d8dc21189a
BLAKE2b-256 checksum
How to use checksums
ecdffcbee47cf93a5f3a6e36b52fe77565b7abdb174053f3432da0f5ec44b199
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.9-cp311-cp311-macosx_14_0_arm64.whl

Download URL bithuman-2.11.9-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
4db9321134074816a7ddaa53d62bab452d7bd1045817884a2a1bdc9e969391d3
BLAKE2b-256 checksum
How to use checksums
d241da99a33d0af2e4eb3a118c3eeeec62fa30ebf21c4192f05e10872433c728
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.9-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL bithuman-2.11.9-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
ac6d1909892d66a2f7ea8b7679e12202a5e490b94991262bb89b3f718749b8c9
BLAKE2b-256 checksum
How to use checksums
bc942061e12ae2968bc1c5fc3afd004d5560a0757b7c2c19d68696efafc2c1f9
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.9-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL bithuman-2.11.9-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
183bb8404884ea376d800305e4354721397a742f86b7b27cebdc7546b69d3971
BLAKE2b-256 checksum
How to use checksums
c407a5000bfb64fafbf7c55f5c72761ddfa4f99483a265c642ef2302b0d7ffef
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.9-cp310-cp310-macosx_14_0_arm64.whl

Download URL bithuman-2.11.9-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
697f3f4a87a00783a611290235892b4e30f9bd5f768e18f56dd9b26c886ff58d
BLAKE2b-256 checksum
How to use checksums
28d79e05cb7c45b5eee7137e050d6647b9a6b4c1742ca647f118b862e82c93fc
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.9 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