tinyhumansai/openhuman · error
[meet-video-producer] ws error
Error message
[meet-video-producer] ws error
What it means
The mascot producer's WebSocket to the local frame consumer errored after successful construction (ws.onerror). This fires on connection-level failures — the local consumer refused/dropped the TCP connection or the handshake failed. wsReadyRef stays false (or resets), so pending frames are silently not delivered until the socket recovers or the session ends; onclose follows and logs 'ws closed'.
Source
Thrown at app/src/features/meet/MascotFrameProducer.tsx:356
let ws: WebSocket;
try {
ws = new WebSocket(url);
} catch (err) {
console.warn('[meet-video-producer] ws ctor failed', err);
return;
}
ws.binaryType = 'arraybuffer';
wsRef.current = ws;
ws.onopen = () => {
wsReadyRef.current = true;
console.log('[meet-video-producer] ws connected', url);
};
ws.onclose = () => {
wsReadyRef.current = false;
console.log('[meet-video-producer] ws closed');
};
ws.onerror = err => {
console.warn('[meet-video-producer] ws error', err);
};
const intervalMs = Math.round(1000 / PRODUCER_FPS);
const workerSrc =
'let t=null;self.onmessage=(e)=>{const d=e.data||{};' +
"if(d.cmd==='start'){clearInterval(t);t=setInterval(()=>self.postMessage('tick'),d.intervalMs);}" +
"else if(d.cmd==='stop'){clearInterval(t);}};";
const blob = new Blob([workerSrc], { type: 'application/javascript' });
const workerUrl = URL.createObjectURL(blob);
const worker = new Worker(workerUrl);
worker.onmessage = () => {
void captureFrame();
};
worker.postMessage({ cmd: 'start', intervalMs });
// Subscribe to the speak_pump's speaking-state edge events so the
// mascot face toggles in sync with the audio participants hear. DoneView on GitHub (pinned to 7491200858)
Solutions
- Check whether 'ws connected' ever logged for this session — an error before open means the consumer was never reachable
- Confirm the local meet frame consumer process is running and listening on the logged port
- Loopback firewall rules or an already-bound port can cause handshake failures — verify with a local connection test
- Restart the meet session to re-create the producer and socket
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at app/src/features/meet/MascotFrameProducer.tsx:356 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/133c93098ea209fa.
Report an issue: GitHub.