From 06df07a2f8d6cb46a6a62b40b2e9ff0b7a0c98b4 Mon Sep 17 00:00:00 2001 From: webadderall <131426131+webadderall@users.noreply.github.com> Date: Sat, 4 Apr 2026 13:07:57 +1100 Subject: [PATCH] save export preferences in editor --- .../video-editor/editorPreferences.test.ts | 16 +++++++++ .../video-editor/editorPreferences.ts | 33 ++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/components/video-editor/editorPreferences.test.ts b/src/components/video-editor/editorPreferences.test.ts index 9983717f..0958f0ad 100644 --- a/src/components/video-editor/editorPreferences.test.ts +++ b/src/components/video-editor/editorPreferences.test.ts @@ -98,7 +98,11 @@ describe("editorPreferences", () => { borderRadius: DEFAULT_EDITOR_PREFERENCES.borderRadius, padding: DEFAULT_EDITOR_PREFERENCES.padding, aspectRatio: "native", + exportEncodingMode: DEFAULT_EDITOR_PREFERENCES.exportEncodingMode, + exportBackendPreference: DEFAULT_EDITOR_PREFERENCES.exportBackendPreference, + exportPipelineModel: DEFAULT_EDITOR_PREFERENCES.exportPipelineModel, exportQuality: DEFAULT_EDITOR_PREFERENCES.exportQuality, + mp4FrameRate: DEFAULT_EDITOR_PREFERENCES.mp4FrameRate, exportFormat: "gif", gifFrameRate: 30, gifLoop: false, @@ -163,7 +167,11 @@ describe("editorPreferences", () => { cursorSway: DEFAULT_EDITOR_PREFERENCES.cursorSway, borderRadius: DEFAULT_EDITOR_PREFERENCES.borderRadius, padding: DEFAULT_EDITOR_PREFERENCES.padding, + exportEncodingMode: DEFAULT_EDITOR_PREFERENCES.exportEncodingMode, + exportBackendPreference: DEFAULT_EDITOR_PREFERENCES.exportBackendPreference, + exportPipelineModel: DEFAULT_EDITOR_PREFERENCES.exportPipelineModel, exportQuality: DEFAULT_EDITOR_PREFERENCES.exportQuality, + mp4FrameRate: DEFAULT_EDITOR_PREFERENCES.mp4FrameRate, exportFormat: DEFAULT_EDITOR_PREFERENCES.exportFormat, gifFrameRate: DEFAULT_EDITOR_PREFERENCES.gifFrameRate, gifLoop: DEFAULT_EDITOR_PREFERENCES.gifLoop, @@ -224,7 +232,11 @@ describe("editorPreferences", () => { borderRadius: 18, padding: 30, aspectRatio: "4:5", + exportEncodingMode: "quality", + exportBackendPreference: DEFAULT_EDITOR_PREFERENCES.exportBackendPreference, + exportPipelineModel: DEFAULT_EDITOR_PREFERENCES.exportPipelineModel, exportQuality: "source", + mp4FrameRate: DEFAULT_EDITOR_PREFERENCES.mp4FrameRate, exportFormat: "gif", gifFrameRate: 20, gifLoop: false, @@ -260,7 +272,11 @@ describe("editorPreferences", () => { borderRadius: 18, padding: 30, aspectRatio: "4:5", + exportEncodingMode: "quality", + exportBackendPreference: DEFAULT_EDITOR_PREFERENCES.exportBackendPreference, + exportPipelineModel: DEFAULT_EDITOR_PREFERENCES.exportPipelineModel, exportQuality: "source", + mp4FrameRate: DEFAULT_EDITOR_PREFERENCES.mp4FrameRate, exportFormat: "gif", gifFrameRate: 20, gifLoop: false, diff --git a/src/components/video-editor/editorPreferences.ts b/src/components/video-editor/editorPreferences.ts index 6523de7b..85633641 100644 --- a/src/components/video-editor/editorPreferences.ts +++ b/src/components/video-editor/editorPreferences.ts @@ -1,4 +1,10 @@ -import { normalizeProjectEditor, type ProjectEditorState } from "./projectPersistence"; +import { + normalizeExportBackendPreference, + normalizeExportMp4FrameRate, + normalizeExportPipelineModel, + normalizeProjectEditor, + type ProjectEditorState, +} from "./projectPersistence"; type PersistedEditorControls = Pick< ProjectEditorState, @@ -28,7 +34,11 @@ type PersistedEditorControls = Pick< | "padding" | "webcam" | "aspectRatio" + | "exportEncodingMode" + | "exportBackendPreference" + | "exportPipelineModel" | "exportQuality" + | "mp4FrameRate" | "exportFormat" | "gifFrameRate" | "gifLoop" @@ -76,7 +86,11 @@ export const DEFAULT_EDITOR_PREFERENCES: EditorPreferences = { padding: DEFAULT_EDITOR_CONTROLS.padding, webcam: DEFAULT_EDITOR_CONTROLS.webcam, aspectRatio: DEFAULT_EDITOR_CONTROLS.aspectRatio, + exportEncodingMode: DEFAULT_EDITOR_CONTROLS.exportEncodingMode, + exportBackendPreference: DEFAULT_EDITOR_CONTROLS.exportBackendPreference, + exportPipelineModel: DEFAULT_EDITOR_CONTROLS.exportPipelineModel, exportQuality: DEFAULT_EDITOR_CONTROLS.exportQuality, + mp4FrameRate: DEFAULT_EDITOR_CONTROLS.mp4FrameRate, exportFormat: DEFAULT_EDITOR_CONTROLS.exportFormat, gifFrameRate: DEFAULT_EDITOR_CONTROLS.gifFrameRate, gifLoop: DEFAULT_EDITOR_CONTROLS.gifLoop, @@ -154,7 +168,20 @@ function normalizeEditorControls( padding: raw.padding ?? fallback.padding, webcam: raw.webcam ?? fallback.webcam, aspectRatio: raw.aspectRatio ?? fallback.aspectRatio, + exportEncodingMode: raw.exportEncodingMode ?? fallback.exportEncodingMode, + exportBackendPreference: + raw.exportBackendPreference === undefined + ? fallback.exportBackendPreference + : normalizeExportBackendPreference(raw.exportBackendPreference), + exportPipelineModel: + raw.exportPipelineModel === undefined + ? fallback.exportPipelineModel + : normalizeExportPipelineModel(raw.exportPipelineModel), exportQuality: raw.exportQuality ?? fallback.exportQuality, + mp4FrameRate: + raw.mp4FrameRate === undefined + ? fallback.mp4FrameRate + : normalizeExportMp4FrameRate(raw.mp4FrameRate), exportFormat: raw.exportFormat ?? fallback.exportFormat, gifFrameRate: raw.gifFrameRate ?? fallback.gifFrameRate, gifLoop: raw.gifLoop ?? fallback.gifLoop, @@ -190,7 +217,11 @@ function normalizeEditorControls( padding: normalized.padding, webcam: normalized.webcam, aspectRatio: normalized.aspectRatio, + exportEncodingMode: normalized.exportEncodingMode, + exportBackendPreference: normalized.exportBackendPreference, + exportPipelineModel: normalized.exportPipelineModel, exportQuality: normalized.exportQuality, + mp4FrameRate: normalized.mp4FrameRate, exportFormat: normalized.exportFormat, gifFrameRate: normalized.gifFrameRate, gifLoop: normalized.gifLoop,