1
0

feat: add ephemeral webcam faces and adaptive screens

This commit is contained in:
2026-08-11 22:38:56 -07:00
parent 3326d2e6d0
commit d4859b33c6
17 changed files with 1107 additions and 11 deletions
+16 -2
View File
@@ -120,6 +120,12 @@ rejected; selected cell concurrency passes a repeatable load test.
## M5 — profile and webcam faces
Status: **implemented and integrated**. Signed-in members can start an optional
camera face only from the Character dialog; a persistent live indicator and
one-click Stop remain visible while active. Capture is tab-ephemeral, audio-free,
never recorded or uploaded, follows the humanoid across scene transitions, and
is torn down on Stop, track end, revocation, or page exit.
- Generated profile face is the default.
- Webcam face is opt-in and ephemeral: explicit contextual permission, active
indicator, one-click stop, no recording/storage by default.
@@ -131,9 +137,17 @@ cannot subscribe; the full product works without a camera.
## M6 — office media surfaces
Status: **implemented and integrated for peer-to-peer hosted sharing**. Authored
Three.js monitors remain dark until an authorized viewer explicitly opts in;
presenters choose a tab/window through the browser prompt and have an immediate
kill switch. Signaling grants, TURN grants, video textures, late join, reconnect,
and revoke lifecycle are bounded and tested. Presenter encoding defaults to
1280×720 at 15 fps and 1.5 Mbps with capability-safe browser fallback.
- `MediaSurface` records identify office/room/screen, ACL, source, and state.
- WebRTC SFU track after authorization and explicit viewer opt-in; Three.js gets
a video texture only while subscribed.
- WebRTC peer track after authorization and explicit viewer opt-in; Three.js
gets a video texture only while subscribed. An SFU is a later scale-out
option, not a core requirement for the bounded eight-participant room.
- Share tab/window by default, muted viewer autoplay, visible broadcast state,
presenter kill switch, late join and reconnect.