Skip to main content

Boson Higgs Avatar plugin for LiveKit Agents

Use Boson's Higgs Audio-Driven Avatar as the video output for a LiveKit voice agent. This is an Avatar plugin: it composes with your existing voice/LLM plugin and does not replace or fork it.

The plugin has no dependency on Boson Voice, Boson Audio, or a particular TTS provider. Its input is the standard audio output of a LiveKit AgentSession, so it works with any TTS plugin, realtime model, or custom source that produces LiveKit audio frames. Only Avatar rendering and Avatar session lifecycle are Boson-specific.

Installation

pip install livekit-plugins-boson-avatar

Set the credentials used by your LiveKit Agent Worker:

export BOSON_API_KEY="..."
export BOSON_AVATAR_API_URL="https://your-avatar-session-service.example/v1"
export LIVEKIT_URL="wss://..."
export LIVEKIT_API_KEY="..."
export LIVEKIT_API_SECRET="..."

The plugin deliberately has no hard-coded provider endpoint. Your application or deployment environment supplies the base URL exposed by its Boson Avatar deployment/operator. The plugin appends POST /sessions when starting an Avatar and DELETE /sessions/{id} during cleanup, so do not include /sessions itself in BOSON_AVATAR_API_URL.

Load the project-scoped Avatar catalog on your application server and use it to populate the face picker. The returned avatar_id is passed unchanged to AvatarSession; browser users never need to type or remember it:

from livekit.plugins import boson_avatar


async def avatar_options():
    # Returns [AvatarInfo(avatar_id="...", name="...")]
    return await boson_avatar.list_avatars()

This calls GET {BOSON_AVATAR_API_URL}/avatars with BOSON_API_KEY. Keep the key server-side and cache the result according to your application's needs.

Usage

Create the voice AgentSession with the audio provider of your choice, then start the Avatar before starting the agent session:

from livekit.agents import Agent, AgentSession, JobContext, inference
from livekit.plugins import boson_avatar


async def entrypoint(ctx: JobContext) -> None:
    await ctx.connect()

    session = AgentSession(
        stt=inference.STT("deepgram/nova-3"),
        llm=inference.LLM("openai/gpt-4.1-mini"),
        tts=inference.TTS("cartesia/sonic-3"),
    )
    avatar = boson_avatar.AvatarSession(
        avatar_id="your-avatar-id",
    )

    await avatar.start(session, room=ctx.room)
    await session.start(
        agent=Agent(instructions="You are a helpful assistant."),
        room=ctx.room,
    )

BOSON_AVATAR_ID can supply avatar_id instead. AvatarSession also accepts optional width, height, max_duration_seconds, avatar_participant_identity, idempotency_key, and APIConnectOptions. max_duration_seconds must be an integer from 1 through 14400.

Inside a LiveKit Agent job, provider-session creation automatically derives a stable UUID idempotency key from the LiveKit job ID and Avatar session binding. If LiveKit redelivers that job after a worker crash, the plugin recovers the existing provider session instead of allocating another one. The standard model is one Avatar lifecycle per LiveKit job. If one job intentionally starts another Avatar after closing the first, pass a new explicit UUID idempotency_key for that lifecycle.

The avatar_id is the value returned by list_avatars() behind the Avatar selected in your application; end users do not need to type or remember it.

The plugin handles the provider API call, LiveKit participant token, PCM data stream routing, interruption buffer clears, and provider-session cleanup. A developer does not need to call Boson's Avatar REST API or combine voice and Avatar responses in an application server. The application server only needs its normal responsibility: create a LiveKit room and dispatch the Agent Worker.

When started inside a LiveKit job, cleanup is registered automatically. When using the plugin in a standalone script or test, open LiveKit's HTTP context and close the Avatar explicitly:

from livekit.agents import utils


async with utils.http_context.open():
    await avatar.start(session, room)
    try:
        # Run the standalone session.
        ...
    finally:
        await avatar.aclose()

Metadata

Release files for livekit-plugins-boson-avatar 1.8.7

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

Source distribution (sdist)

Source distribution for livekit-plugins-boson-avatar 1.8.7
File Size Uploaded
livekit_plugins_boson_avatar-1.8.7.tar.gz 12.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for livekit-plugins-boson-avatar 1.8.7
File Interpreter ABI Platform
livekit_plugins_boson_avatar-1.8.7-py3-none-any.whl Python 3 none any Details

Total release size: 28.7 kB

Release files / livekit_plugins_boson_avatar-1.8.7.tar.gz

Download URL livekit_plugins_boson_avatar-1.8.7.tar.gz
Size 12.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a6c4573e7ef5451b23bc89c8623ebc951a445fc6a2b53c1ef85cb2da9d66e61d
BLAKE2b-256 checksum
How to use checksums
21767fe4e4190c3f99736a7545f0b64e0cb4ed664bba04cc08da1e28d238a312
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / livekit_plugins_boson_avatar-1.8.7-py3-none-any.whl

Download URL livekit_plugins_boson_avatar-1.8.7-py3-none-any.whl
Size 15.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
058538edb27e3746f2d35b421eba2c607dfb44516fa876727b03bd727592fb91
BLAKE2b-256 checksum
How to use checksums
3afb3123f6b6df79bb73b8e3647fdd4ea3a143bef2453dd75b5dfd90f0b5bff0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release history Release notifications | RSS feed

1.8.8

2 release files

This release

1.8.7 This release

2 release files

1.8.6

2 release files

1.8.5

2 release files

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