Hi Zoo team and community,
I’m building a Node.js sidecar proxy to connect a browser frontend to the Zoo Modeling WebSocket for a live WebRTC modeling session (webrtc=true).
What works perfectly:
-
WebSocket handshake with Authorization: Bearer header in the initial request (same pattern as the official PHP examples )
-
Authentication is accepted (
AUTH accepted by Zo o) -
All modeling commands are accepted without errors (after fixing import_files and reconfigure_stream field requiremen ts)
-
We receive modeling_session_data, ice_server_info, and modeling respo nses
The problem:After sending multiple triggers (scene_clear_all, zoom_to_fit, view_isometric, default_camera_look_at, take_snapshot), Zoo never sends an SDP Offer. The connection remains open for ~35 seconds and then closes with code 1006 (idle time out).
Commands we’ve tested (all accept ed):
-
scene_clear_all
-
zoom_to_fit
-
view_isometric
-
default_camera_look_at
-
take_snapshot (format: png)
-
reconfigure_stream (failed with “missing field width”)
Key log excerpt (v9.5):
text
AUTH accepte d by Zoo
Trigger 1: scene_clear_ all (…)
Trigger 2: zoom_to _fit (…)
Trigger 3: view_isom etric (…)
Trigger 4: default_camera_l ook_at (…)
Trigger 5: take_s napshot (…)
→ Zoo resp: modeling
→ Zoo resp: metrics_req uest (repeated)
Connection closed (1006)
Environment:
-
Node.js 20 + ws library
-
Query params: webrtc=true&video_res_width=1280&video_res_height=720&fps=30& post_effect=ssao
-
Token is valid (confirmed vi a /user endpoint)
-
No KCL execution (removed after i mport_files error)
Question:Is there a specific command or initialization sequence required to trigger the SDP Offer in WebRTC mode? Or is there a different approach recommended for external clients wanting live video streams?
Any guidance or example code would be greatly appreciated. Happy to provide more logs or tes t specific commands.
Thanks! Jørn Watvedt at cadify.no