From bb3450f401bea09df674149ef4e9ce7d275e81b2 Mon Sep 17 00:00:00 2001
From: webadderall <131426131+webadderall@users.noreply.github.com>
Date: Thu, 7 May 2026 18:47:35 +1000
Subject: [PATCH] fix: address motion blur review feedback
---
src/components/video-editor/VideoEditor.tsx | 15 +++++++++------
src/components/video-editor/VideoPlayback.tsx | 2 +-
src/components/video-editor/projectPersistence.ts | 2 +-
src/i18n/locales/en/editor.json | 5 +++++
src/i18n/locales/es/editor.json | 5 +++++
src/lib/exporter/frameRenderer.ts | 3 ---
src/lib/exporter/modernFrameRenderer.ts | 3 ---
7 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/src/components/video-editor/VideoEditor.tsx b/src/components/video-editor/VideoEditor.tsx
index 269eebaf..88a31e35 100644
--- a/src/components/video-editor/VideoEditor.tsx
+++ b/src/components/video-editor/VideoEditor.tsx
@@ -5282,18 +5282,21 @@ export default function VideoEditor() {
- Nothing's broken, but we won't be able to render an animated
- cursor overlay.
+ {t(
+ "editor.nativeCaptureUnavailable.title",
+ "Nothing’s broken, but we won’t be able to render an animated cursor overlay.",
+ )}
- Your device does not support native capture. This could be for a variety of
- reasons we haven't figured out yet. This doesn't break Recordly,
- but it does make cursor smoothening impossible.
+ {t(
+ "editor.nativeCaptureUnavailable.description",
+ "Your device does not support native capture. This could be for a variety of reasons we haven’t figured out yet. This doesn’t break Recordly, but it does make cursor smoothing impossible.",
+ )}
diff --git a/src/components/video-editor/VideoPlayback.tsx b/src/components/video-editor/VideoPlayback.tsx
index 764eef78..7202f25a 100644
--- a/src/components/video-editor/VideoPlayback.tsx
+++ b/src/components/video-editor/VideoPlayback.tsx
@@ -1299,7 +1299,7 @@ const VideoPlayback = forwardRef(
motionBlurStateRef.current = createMotionBlurState();
videoEffectsContainer.filters =
zoomMotionBlur > 0 ? [motionBlurFilter, zoomBlurFilter] : null;
- }, [zoomMotionBlur]);
+ }, [videoPath, zoomMotionBlur]);
useEffect(() => {
zoomMotionBlurTuningRef.current = zoomMotionBlurTuning;
diff --git a/src/components/video-editor/projectPersistence.ts b/src/components/video-editor/projectPersistence.ts
index 8022bff8..c81f32f2 100644
--- a/src/components/video-editor/projectPersistence.ts
+++ b/src/components/video-editor/projectPersistence.ts
@@ -376,7 +376,7 @@ export function normalizeProjectEditor(editor: Partial): Pro
(editor as Partial).zoomTemporalMotionBlur,
)
? clamp((editor as Partial).zoomTemporalMotionBlur as number, 0, 2)
- : 0;
+ : normalizedZoomMotionBlur;
const normalizedBackgroundBlur = isFiniteNumber(
(editor as Partial).backgroundBlur,
)
diff --git a/src/i18n/locales/en/editor.json b/src/i18n/locales/en/editor.json
index cf070cde..90252230 100644
--- a/src/i18n/locales/en/editor.json
+++ b/src/i18n/locales/en/editor.json
@@ -113,6 +113,11 @@
"project": {
"untitled": "Untitled"
},
+ "nativeCaptureUnavailable": {
+ "title": "Nothing’s broken, but we won’t be able to render an animated cursor overlay.",
+ "description": "Your device does not support native capture. This could be for a variety of reasons we haven’t figured out yet. This doesn’t break Recordly, but it does make cursor smoothing impossible.",
+ "confirm": "Okay"
+ },
"exportStatus": {
"exporting": "Exporting",
"renderingFile": "Rendering your file.",
diff --git a/src/i18n/locales/es/editor.json b/src/i18n/locales/es/editor.json
index a42ea123..40373f1a 100644
--- a/src/i18n/locales/es/editor.json
+++ b/src/i18n/locales/es/editor.json
@@ -113,6 +113,11 @@
"project": {
"untitled": "Sin título"
},
+ "nativeCaptureUnavailable": {
+ "title": "Nada está roto, pero no podremos renderizar una superposición de cursor animada.",
+ "description": "Tu dispositivo no es compatible con la captura nativa. Esto puede deberse a varias razones que todavía no hemos identificado. Recordly seguirá funcionando, pero hará imposible el suavizado del cursor.",
+ "confirm": "Entendido"
+ },
"exportStatus": {
"exporting": "Exportando",
"renderingFile": "Renderizando tu archivo.",
diff --git a/src/lib/exporter/frameRenderer.ts b/src/lib/exporter/frameRenderer.ts
index e8e61a48..ae2c5f2d 100644
--- a/src/lib/exporter/frameRenderer.ts
+++ b/src/lib/exporter/frameRenderer.ts
@@ -78,8 +78,6 @@ import { ForwardFrameSource } from "./forwardFrameSource";
import { resolveMediaElementSource } from "./localMediaSource";
import { buildTemporalSamplePlanUs, getTemporalMotionBlurConfig } from "./temporalMotionBlur";
-const TEMPORAL_ZOOM_MOTION_BLUR_ENABLED = false;
-
interface FrameRenderConfig {
width: number;
height: number;
@@ -1278,7 +1276,6 @@ export class FrameRenderer {
}
const temporalSnapshot =
- TEMPORAL_ZOOM_MOTION_BLUR_ENABLED &&
(this.config.zoomTemporalMotionBlur ?? 0) > 0 &&
typeof frameDurationUs === "number" &&
frameDurationUs > 0
diff --git a/src/lib/exporter/modernFrameRenderer.ts b/src/lib/exporter/modernFrameRenderer.ts
index 11342a83..bfd5f87f 100644
--- a/src/lib/exporter/modernFrameRenderer.ts
+++ b/src/lib/exporter/modernFrameRenderer.ts
@@ -94,8 +94,6 @@ import {
} from "./shadowProfile";
import { buildTemporalSamplePlanUs, getTemporalMotionBlurConfig } from "./temporalMotionBlur";
-const TEMPORAL_ZOOM_MOTION_BLUR_ENABLED = false;
-
import type { ExportRenderBackend } from "./types";
interface FrameRenderConfig {
@@ -2719,7 +2717,6 @@ export class FrameRenderer {
}
const temporalSnapshot =
- TEMPORAL_ZOOM_MOTION_BLUR_ENABLED &&
(this.config.zoomTemporalMotionBlur ?? 0) > 0 &&
typeof frameDurationUs === "number" &&
frameDurationUs > 0