From dbd100aa16540100fb999fcac1ba1a6c5719ce63 Mon Sep 17 00:00:00 2001 From: djbravo06 Date: Wed, 22 Jul 2026 13:46:47 +0000 Subject: [PATCH 1/2] feat(web): logarithmic curve for video player volume --- .../asset-viewer/VideoNativeViewer.svelte | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/web/src/lib/components/asset-viewer/VideoNativeViewer.svelte b/web/src/lib/components/asset-viewer/VideoNativeViewer.svelte index ca0b8d3ef7..fe406c2026 100644 --- a/web/src/lib/components/asset-viewer/VideoNativeViewer.svelte +++ b/web/src/lib/components/asset-viewer/VideoNativeViewer.svelte @@ -232,6 +232,23 @@ $effect(() => { // reactive on `assetFileUrl` changes if (videoPlayer && assetFileUrl) { + if (!(videoPlayer as any)._logVolumeApplied) { + (videoPlayer as any)._logVolumeApplied = true; + const originalDesc = Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'volume')!; + let currentUiVolume = videoPlayer.volume; + Object.defineProperty(videoPlayer, 'volume', { + get() { + return currentUiVolume; + }, + set(val: number) { + currentUiVolume = val; + // Apply quadratic curve to hardware volume + originalDesc.set!.call(videoPlayer, Math.pow(val, 2)); + }, + configurable: true, + }); + videoPlayer.volume = currentUiVolume; + } hasFocused = false; rebuildCount = 0; releaseSession(); From 0c67c297aa11cc0b919637269ac04dfaf08513da Mon Sep 17 00:00:00 2001 From: djbravo06 Date: Wed, 22 Jul 2026 16:33:46 +0000 Subject: [PATCH 2/2] fix(web): resolve 'any' warning --- web/src/lib/components/asset-viewer/VideoNativeViewer.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/web/src/lib/components/asset-viewer/VideoNativeViewer.svelte b/web/src/lib/components/asset-viewer/VideoNativeViewer.svelte index 102044fafa..b9a14443dd 100644 --- a/web/src/lib/components/asset-viewer/VideoNativeViewer.svelte +++ b/web/src/lib/components/asset-viewer/VideoNativeViewer.svelte @@ -242,8 +242,9 @@ $effect(() => { // reactive on `assetFileUrl` changes if (videoPlayer && assetFileUrl) { - if (!(videoPlayer as any)._logVolumeApplied) { - (videoPlayer as any)._logVolumeApplied = true; + const player = videoPlayer as HTMLVideoElement & { _logVolumeApplied?: boolean }; + if (!player._logVolumeApplied) { + player._logVolumeApplied = true; const originalDesc = Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'volume')!; let currentUiVolume = videoPlayer.volume; Object.defineProperty(videoPlayer, 'volume', {