From 8a1d37cf3e8d06dd7af75b5d6f9181afcc797f84 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Wed, 1 Apr 2026 15:15:12 +0200 Subject: fix: align background blur with effect blur intensity scale --- .../storage/migrations/transformers/v20-to-v21.ts | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 apps/web/src/services/storage/migrations/transformers/v20-to-v21.ts (limited to 'apps/web/src/services/storage/migrations/transformers') diff --git a/apps/web/src/services/storage/migrations/transformers/v20-to-v21.ts b/apps/web/src/services/storage/migrations/transformers/v20-to-v21.ts new file mode 100644 index 00000000..63ad24de --- /dev/null +++ b/apps/web/src/services/storage/migrations/transformers/v20-to-v21.ts @@ -0,0 +1,66 @@ +import { DEFAULT_BLUR_INTENSITY } from "@/constants/project-constants"; +import { INTENSITY_TO_SIGMA_DIVISOR } from "@/lib/effects/definitions/blur"; +import type { MigrationResult, ProjectRecord } from "./types"; +import { getProjectId, isRecord } from "./utils"; + +export function transformProjectV20ToV21({ + project, +}: { + project: ProjectRecord; +}): MigrationResult { + if (!getProjectId({ project })) { + return { project, skipped: true, reason: "no project id" }; + } + + const version = project.version; + if (typeof version !== "number") { + return { project, skipped: true, reason: "invalid version" }; + } + if (version >= 21) { + return { project, skipped: true, reason: "already v21" }; + } + if (version !== 20) { + return { project, skipped: true, reason: "not v20" }; + } + + return { + project: { + ...migrateBackgroundBlurScale({ project }), + version: 21, + }, + skipped: false, + }; +} + +function migrateBackgroundBlurScale({ + project, +}: { + project: ProjectRecord; +}): ProjectRecord { + if (!isRecord(project.settings)) { + return project; + } + + const settings = { ...project.settings }; + const background = settings.background; + if (!isRecord(background) || background.type !== "blur") { + return { ...project, settings }; + } + + const raw = background.blurIntensity; + const blurIntensity = + typeof raw === "number" && Number.isFinite(raw) + ? raw * INTENSITY_TO_SIGMA_DIVISOR + : DEFAULT_BLUR_INTENSITY; + + return { + ...project, + settings: { + ...settings, + background: { + ...background, + blurIntensity, + }, + }, + }; +} -- cgit v1.3.1