From e41a2cfd70fbf6c104464c68e2782ff3ca4057ec Mon Sep 17 00:00:00 2001 From: Kibi Kelburton Date: Fri, 2 Oct 2026 00:42:40 +0200 Subject: [PATCH] Own camera: mirror consistently in preview, tile and large view; not a camera facing away Co-Authored-By: Claude Opus 5.5 --- src/lib/share.svelte.ts | 4 ++++ src/ui/ShareDialog.svelte | 4 +++- src/ui/VoiceStage.svelte | 6 +++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/lib/share.svelte.ts b/src/lib/share.svelte.ts index b828cfb..84128c4 100644 --- a/src/lib/share.svelte.ts +++ b/src/lib/share.svelte.ts @@ -43,6 +43,9 @@ class ScreenShare { host = $state.raw(null); stream = $state.raw(null); kind = $state('screen'); + // Show our own camera mirrored to ourselves, as a mirror would. Not a camera pointing away + // from us (a phone's back camera), and never what the others get. + mirror = $state(false); viewers = $state(0); // Streams we receive: one screen at a time, and any number of cameras next to it watches = $state.raw([]); @@ -142,6 +145,7 @@ class ScreenShare { } this.usesVirtualMic = usesVirtualMic; this.kind = kind; + this.mirror = kind === 'camera' && stream.getVideoTracks()[0]?.getSettings().facingMode !== 'environment'; this.host = s; this.stream = stream; this.send(s, this.others(s), SHARE.on, kind); diff --git a/src/ui/ShareDialog.svelte b/src/ui/ShareDialog.svelte index f056d09..94d8428 100644 --- a/src/ui/ShareDialog.svelte +++ b/src/ui/ShareDialog.svelte @@ -220,7 +220,7 @@ Preview
- + {#if !preview}

Nothing chosen yet

{/if}
@@ -280,6 +280,8 @@ .name { font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .preview { position: relative; background: #000; aspect-ratio: 16 / 9; max-height: 240px; margin: 0 auto; width: 100%; } .preview video { width: 100%; height: 100%; object-fit: contain; display: block; } + /* Your own camera as a mirror shows you; a camera facing away is left as it is */ + .preview video.mirror { transform: scaleX(-1); } .preview p { position: absolute; inset: 0; margin: 0; display: flex; align-items: center; justify-content: center; color: #aaa; font-size: 13px; } .check { display: flex; align-items: center; gap: 8px; text-transform: none; font-weight: 400; letter-spacing: 0; font-size: 14px; color: var(--text); margin-top: 12px; } .check input { width: auto; } diff --git a/src/ui/VoiceStage.svelte b/src/ui/VoiceStage.svelte index a515202..4dc70e3 100644 --- a/src/ui/VoiceStage.svelte +++ b/src/ui/VoiceStage.svelte @@ -267,7 +267,7 @@ {:else}