Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@ entry points (`.`, `./three`) are frozen for 1.x, while the **scene subpaths** (
`./splat`, `./model`) are a preview tier whose options may change in any release. Entries below say
which tier they touch, because that is what tells you whether an upgrade can move your pixels.

## Unreleased

Touches the **preview tier** (`./call`) only: one default. No export or type changes.

### `./call` — the stereo self view auto-converges too

- The call's self view now follows the call's **`autoConverge`** option (default `true`) instead of
being hard-wired off, so your own stereo camera feed sits at the display plane like the remote
tiles. `autoConverge: false` turns it off for both. (`samples/camera` also starts with
auto-convergence on.)

## 1.37.1 — 2026-10-07

### Depth cursor: hybrid anchor keeps the line of sight, not the foot
Expand Down
2 changes: 1 addition & 1 deletion docs/call.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ Disconnecting the element (`el.remove()`, a framework unmounting it) leaves the
| `camera` | `'auto'` | `'auto'` opens the best camera through [`/camera`](camera.md): a stereo device when one is present (the DisplayXR Browser's "3D Camera", or a wide side-by-side device) else the default webcam; `'stereo'` prefers the pair and falls back; `'mono'` never probes; a `deviceId` string; a `MediaStream` you own; or a `StereoCamera` from `openCamera()` (left open when the call ends) |
| `format` | `'mono'` | The format of a page-supplied `MediaStream` (`'sbs'` or `'mono'`). 3D-ness is never guessed from a stream |
| `audio` | `true` | Microphone, with echo cancellation and noise suppression |
| `autoConverge` | `true` | Measure the disparity of the point between a stereo peer's eyes and put that person at the display plane. No calibration needed |
| `autoConverge` | `true` | Measure the disparity of the point between a stereo peer's eyes and put that person at the display plane. No calibration needed. Also governs your own stereo self view |
| `mono3D` | `'auto'` | Lift 2D peers to 3D: `'auto'` · `'off'` · a `lift` function (see [`/call/full`](#callfull-vs-call--lift--which-import)) |
| `liftOptions` | — | Extra `lift()` options, e.g. `{ models }` for where the depth model is served from, plus `max` (default 4): concurrent lifted tiles; further 2D peers stay flat |
| `maxPeers` | `4` | Participants including you, clamped to 2–4 (full mesh) |
Expand Down
2 changes: 1 addition & 1 deletion js/inline3d-call.js
Original file line number Diff line number Diff line change
Expand Up @@ -1873,7 +1873,7 @@ class SelfTile {
// will not weave (firstWoven → woven:false, web#131), and the badge must follow it.
this.view = addCameraView(wall, this.canvas, cam, {
mirror: true,
autoConverge: false,
autoConverge: !!this.call.o.autoConverge, // the call option (default on) governs the self view too
aspect: this.call.o.tileAspect,
onRouteChange: (route, st) => {
if (this.cam !== cam) return; // a view this tile already replaced
Expand Down
2 changes: 1 addition & 1 deletion samples/camera/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ say(
inline3DAvailable() ? 'woven' : 'flat'
);

const view = addCameraView(wall, /** @type {HTMLCanvasElement} */ (document.getElementById('self')), cam, { mirror: true, autoConverge: false });
const view = addCameraView(wall, /** @type {HTMLCanvasElement} */ (document.getElementById('self')), cam, { mirror: true, autoConverge: true });
$('mirror').addEventListener('change', () => view.setMirror($('mirror').checked));
$('converge').addEventListener('change', () => view.setAutoConverge($('converge').checked));
$('depth').addEventListener('input', () => view.setDepth($('depth').valueAsNumber));
Expand Down
2 changes: 1 addition & 1 deletion samples/camera/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ <h1>camera</h1>
<button id="photo" type="button" disabled>Take 3D photo</button>
<button id="rec" type="button" disabled>Record</button>
<label><input id="mirror" type="checkbox" checked> Mirror</label>
<label><input id="converge" type="checkbox"> Auto-converge</label>
<label><input id="converge" type="checkbox" checked> Auto-converge</label>
<label>Depth <input id="depth" type="range" min="-1" max="1" step="0.05" value="0"></label>
<label><input id="mono" type="checkbox" checked> Also a 2D copy</label>
</div>
Expand Down
Loading