The LiveAvatar LiveKit plugin extends an existing LiveKit Voice Agent into a functional video agent. You keep the same voice orchestration logic — you just get video on top of it.Documentation Index
Fetch the complete documentation index at: https://docs.liveavatar.com/llms.txt
Use this file to discover all available pages before exploring further.
This page assumes you already have a LiveKit project and a working LiveKit Agent. If you do not, a different integration path will likely fit better — head back to Integration paths to pick one.
Prerequisites
- A LiveAvatar account and API key. Sign up at app.liveavatar.com.
- A working LiveKit Agents setup (1.5.x recommended).
Installation
pip install "livekit-agents[liveavatar]~=1.5" works as well if you are not on uv.
Configuration
The plugin reads two values from the environment:LIVEAVATAR_AVATAR_ID is a fallback. Passing avatar_id="..." to AvatarSession always wins.
How LiveKit + LiveAvatar fit together
A LiveKit room hosts the conversation between three key participants:| Participant | Publishes | Subscribes to |
|---|---|---|
| End user | Microphone audio | Avatar audio + video |
| Your agent | (no media; processes user audio, drives the avatar) | User microphone |
| Avatar | Lip-synced audio + video | Audio frames from your agent |
- Adds the LiveAvatar into your room. It spins up the avatar worker, which joins as a participant.
- Streams agent audio to LiveAvatar. Instead of your agent publishing audio into the room, the plugin forwards it to LiveAvatar, which syncs it to the avatar’s video output.
How the plugin starts up
- Creates room. Your backend creates the room through LiveKit and dispatches an agent worker into it.
- Starts avatar session. The worker starts a LiveAvatar session, adding it into the room as a participant.
- Starts agent. The agent session starts up as normal, running STT → LLM → TTS. Synthesized audio flows to the avatar instead of publishing as raw TTS.
Usage
DropAvatarSession into your existing agent entrypoint. The only new lines are the import, the AvatarSession construction, and the await avatar.start(...) call before session.start(...).
What changes versus a non-avatar agent
| Concern | Non-avatar agent | With LiveAvatar plugin |
|---|---|---|
| Where TTS audio goes | Published directly into the room | Forwarded to LiveAvatar; avatar publishes audio + video |
| Room participants | User + agent | User + agent + avatar |
| Frontend rendering | Audio-only | Must subscribe to avatar’s video track too |
| Billing | LiveKit + your inference | LiveKit + your inference + LiveAvatar minutes |
Parameters
The most commonAvatarSession parameters:
avatar_id(string) — ID of the LiveAvatar avatar to use. OverridesLIVEAVATAR_AVATAR_ID.is_sandbox(bool) — Toggles Sandbox Mode for free testing without consuming credits.video_quality(VideoQuality) — Sets the avatar’s video resolution.
Resources
livekit-plugins-liveavatar
GitHub source for the LiveKit LiveAvatar plugin.
PyPI package
livekit-plugins-liveavatar on PyPI.