From 190d5d8ecb2006c355c4c6b907599784b375bf52 Mon Sep 17 00:00:00 2001 From: Siddharth Date: Sun, 3 May 2026 17:54:21 -0700 Subject: [PATCH] 3d iso,tilt --- src/components/video-editor/SettingsPanel.tsx | 42 +- src/components/video-editor/VideoEditor.tsx | 24 + src/components/video-editor/VideoPlayback.tsx | 421 ++++++++++-------- .../video-editor/projectPersistence.ts | 7 + src/components/video-editor/types.ts | 129 ++++++ .../videoPlayback/zoomRegionUtils.ts | 29 +- src/i18n/locales/en/settings.json | 8 + src/lib/exporter/frameRenderer.ts | 185 ++++++-- src/lib/exporter/threeDPass.ts | 356 +++++++++++++++ 9 files changed, 979 insertions(+), 222 deletions(-) create mode 100644 src/lib/exporter/threeDPass.ts diff --git a/src/components/video-editor/SettingsPanel.tsx b/src/components/video-editor/SettingsPanel.tsx index 5cac573..1ffa0f4 100644 --- a/src/components/video-editor/SettingsPanel.tsx +++ b/src/components/video-editor/SettingsPanel.tsx @@ -54,13 +54,19 @@ import type { CropRegion, FigureData, PlaybackSpeed, + Rotation3DPreset, WebcamLayoutPreset, WebcamMaskShape, WebcamSizePreset, ZoomDepth, ZoomFocusMode, } from "./types"; -import { DEFAULT_WEBCAM_SIZE_PRESET, MAX_PLAYBACK_SPEED, SPEED_OPTIONS } from "./types"; +import { + DEFAULT_WEBCAM_SIZE_PRESET, + MAX_PLAYBACK_SPEED, + ROTATION_3D_PRESET_ORDER, + SPEED_OPTIONS, +} from "./types"; function CustomSpeedInput({ value, @@ -168,6 +174,8 @@ interface SettingsPanelProps { hasCursorTelemetry?: boolean; selectedZoomId?: string | null; onZoomDelete?: (id: string) => void; + selectedZoomRotationPreset?: Rotation3DPreset | null; + onZoomRotationPresetChange?: (preset: Rotation3DPreset | null) => void; selectedTrimId?: string | null; onTrimDelete?: (id: string) => void; shadowIntensity?: number; @@ -258,6 +266,8 @@ export function SettingsPanel({ hasCursorTelemetry = false, selectedZoomId, onZoomDelete, + selectedZoomRotationPreset, + onZoomRotationPresetChange, selectedTrimId, onTrimDelete, shadowIntensity = 0, @@ -647,6 +657,36 @@ export function SettingsPanel({ )} )} + {zoomEnabled && ( +
+ + {t("zoom.threeD.title")} + +
+ {ROTATION_3D_PRESET_ORDER.map((preset) => { + const isActive = selectedZoomRotationPreset === preset; + return ( + + ); + })} +
+
+ )} + {zoomEnabled && (