I’m trying to integrate Tavus Avatar and need help with the networking setup.
Current setup
LiveKit server in Docker locally (in prod it’s on GCP behind LB).
Agent worker and chat app run on my machine; browser connects to ws://localhost:7880.
- For Tavus I need a public URL (right?) so Tavus’s cloud can join the room. I tried exposing LiveKit with ngrok (
wss://...ngrok-free.dev) and passing that URL toavatar.start(livekit_url=...).
What went wrong
I set LiveKit config rtc/node_ip to the ngrok hostname (is it needed at all?). That led to “invalid address rewrite mapping” and negotiation failed for all participants (browser, agent, tavus-avatar-agent). I’ve since removed node_ip so the browser works again when connecting to localhost.
- My understanding: ngrok only does TCP/WebSocket; WebRTC media is UDP, so Tavus can’t actually get media through ngrok. So locally, Tavus never gets a proper WebRTC path.
What I’m trying to achieve
-
Local dev: A way to test the Tavus plugin from my machine (even if it’s limited), and/or clarity that full Tavus testing really needs a publicly reachable LiveKit node (e.g. GCP).
-
Production (GCP): Correct LiveKit config (e.g.
node_ip,use_external_ip, any LB/NAT considerations) so that both the web client and Tavus can connect when LiveKit is behind a GCP load balancer.
Questions:
-
Recommended way to try the Tavus plugin locally?
-
For GCP + load balancer, what’s the right RTC/node configuration so the server advertises the correct WebRTC endpoint for both browser and Tavus (e.g.
node_ip, external IP, UDP port range exposure)?