Issues with integrating with Avatar locally (self-hosted)

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 to avatar.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

  1. 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).

  2. 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)?

Tavus integration requires it joins a room, so you’ll have to host livekit externally - I don’t think ngrok, etc will work for webrtc. In GCP ensure the livekit nodes also have individual public IPs - the load balacer only balances the livekit websocket connection, but the actual webrtc traffic goes directly throught he nodes.

So how do everyone test avatars locally during development?