From e37dd6f25dc05d7807384bb08f64b6642b71ba9f Mon Sep 17 00:00:00 2001 From: patrick Date: Thu, 14 May 2026 07:10:00 -0400 Subject: [PATCH] perf: reuse preview on apply instead of reprocessing Pass the already-processed preview data URL when applying edits. The thumbnail updates instantly without triggering another process cycle. Co-Authored-By: Claude Sonnet 4.5 --- src/lib/components/EditImageModal.svelte | 4 ++-- src/routes/+page.svelte | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/lib/components/EditImageModal.svelte b/src/lib/components/EditImageModal.svelte index 8b8e4d0..527ee0a 100644 --- a/src/lib/components/EditImageModal.svelte +++ b/src/lib/components/EditImageModal.svelte @@ -11,7 +11,7 @@ image: ImageEntry | null; device: Device; onClose: () => void; - onApply: (imageId: string, config: PipelineConfig) => void; + onApply: (imageId: string, config: PipelineConfig, processedDataUrl: string | null) => void; } let { open, image, device, onClose, onApply }: Props = $props(); @@ -36,7 +36,7 @@ function handleApply(): void { if (!image) return; - onApply(image.id, localConfig); + onApply(image.id, localConfig, previewDataUrl); onClose(); } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index d26503b..6bf1498 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -89,9 +89,15 @@ editingImage = null; } - function handleApplyPipeline(imageId: string, config: PipelineConfig): void { + function handleApplyPipeline(imageId: string, config: PipelineConfig, processedDataUrl: string | null): void { imagesStore.setPipelineOverride(imageId, config); - imagesStore.reprocessImage(imageId, deviceStore.selected); + if (processedDataUrl) { + // Use the already-processed preview directly + imagesStore.updateImage(imageId, { processedDataUrl }); + } else { + // Fallback: reprocess if no preview available + imagesStore.reprocessImage(imageId, deviceStore.selected); + } } function handleClearAll(): void {