The avatar video stream doesn't appear
The avatar video stream doesn't appear
If you connect to your agent but see no video, check the following:
- Verify the Avatar Server is running. Run
docker compose psinside theavatar-server/directory — theavaluma-avatar-servercontainer should show a status ofUp. - Confirm your
.hviafile is in place. Check that your avatar file exists atassets/avatars/<your-avatar-id>.hviaand that the filename (without the.hviaextension) exactly matches theavatar_idset in your agent script. - Check
AVATAR_SERVER_URL. Open.env.localand confirm the URL matches the actual address where your Avatar Server is reachable. A mismatch here means the agent cannot reach the server to request a render session. - Inspect Avatar Server logs. Run the following command from the
avatar-server/directory to check for errors on startup or during session handling:
AVALUMA_LICENSE_KEY is not set error
AVALUMA_LICENSE_KEY is not set error
This error means the agent started without finding your license key. Check these common causes:
- Confirm
.env.localexists. The file must be named.env.local— not.env,.env.example, or any other name. The agent callsload_dotenv(".env.local")specifically and will not fall back to other filenames. - Copy from the example file if you haven’t already. Run the following command from the
livekit-agent/directory:
- Verify the key is populated. Open
.env.localand confirmAVALUMA_LICENSE_KEYhas a real value — not an empty string or placeholder.
GPU / CUDA errors on Avatar Server startup
GPU / CUDA errors on Avatar Server startup
The Avatar Server requires a correctly configured NVIDIA GPU. If you see CUDA errors or the container fails to start, work through these checks:
- Install the NVIDIA Container Toolkit. The toolkit must be installed on the host before Docker can pass GPU access into the container. Follow the official installation guide.
- Verify GPU visibility on the host. Run
nvidia-smi— if it fails, your NVIDIA driver is not installed or not loaded correctly. - Confirm CUDA 12 is available. Run the following and look for
CUDA Version: 12.x:
- Check available VRAM. The Avatar Server requires at least 6 GB of free VRAM. Run
nvidia-smiand check theMemory-Usagecolumn. - Verify the GPU block in
docker-compose.yaml. Thedeploy.resources.reservations.devicesblock must be present. Confirm it looks like this:
docker-compose.yaml
Agent doesn't respond in the LiveKit Playground
Agent doesn't respond in the LiveKit Playground
If you connect but the agent never joins the room or never replies, check the following:
- Match the agent name exactly. The
AGENT_NAMEvalue set in the agent’sdocker-compose.yamlenvironment block must be identical to what you entered in the playground. Capitalization and hyphens matter. - Reload the playground and reconnect. The LiveKit Agent Playground caches the previous agent name in the browser session. If you changed
AGENT_NAME, reload the page before connecting again. - Check agent logs. Run the following from the
livekit-agent/directory to see startup and dispatch errors:
- Verify your LiveKit credentials. Confirm that
LIVEKIT_URL,LIVEKIT_API_KEY, andLIVEKIT_API_SECRETin.env.localare correct and match the project you selected in the playground.
Multiple avatar sessions exceed VRAM
Multiple avatar sessions exceed VRAM
When you run more simultaneous avatar sessions than your GPU can support, new sessions will fail to start or existing sessions will crash. Manage VRAM usage as follows:
- Budget 2.5 GB per session. Each active avatar render session consumes approximately 2.5 GB of GPU VRAM.
- Know your limits. A 6 GB VRAM GPU supports approximately 2 simultaneous sessions; a 12 GB VRAM GPU supports approximately 4.
- Stop unused agent containers. Free up VRAM before starting new sessions by stopping agent containers you are not currently using:
- Monitor VRAM in real time. Run
nvidia-smito see current memory usage across all GPU processes and confirm headroom is available before starting additional sessions.
TLS / HTTPS certificate errors
TLS / HTTPS certificate errors
If you are using the included Caddy reverse proxy and see TLS certificate errors, verify the following:
- Make your domain publicly reachable. Caddy uses the ACME protocol to issue certificates automatically. Your server must be reachable from the internet on port 80 (for the HTTP challenge) and port 443 (for HTTPS traffic) before Caddy can obtain a certificate.
- Open firewall ports. Ensure your host firewall and any cloud security groups allow inbound TCP traffic on ports 80 and 443.
- Match the domain in
Caddyfile. The domain declared inreverse_proxy/Caddyfilemust exactly match the DNSArecord pointing to your server’s public IP. Any mismatch will cause certificate issuance to fail. - Check Caddy logs. Run the following from the
reverse_proxy/directory to see the full certificate issuance output:
External audio (agent-2) not animating the avatar
External audio (agent-2) not animating the avatar
If you are using
agent-2 to stream audio directly to the avatar via LiveKit DataStream but the avatar is not animating, check these configuration details:- Use the exact DataStream topic. The topic must be
lk.audio_stream— any variation in spelling or capitalisation will cause the avatar’s receiver to ignore the stream entirely. - Set the participant kind to
"agent". The sending participant’s token must includekind: "agent". The avatar’sDataStreamAudioReceiveronly processes streams that originate from agent-kind participants. - Check the avatar identity prefix. The avatar participant’s identity must start with
avatar-. The example code checks this prefix to identify which participant is the avatar. - Set stream attributes as strings. The
sample_rateandnum_channelsattributes on the DataStream must be set as string values, not integers, to be parsed correctly by the receiver.
