From 7d4b821e77ba5e34fe71ae7e0d312865343fa4ee Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Sun, 1 Mar 2026 00:09:35 +0300 Subject: [PATCH] Use full CanvasKit build for JPEG/WEBP encoding support The default canvaskit.wasm doesn't include JPEG/WEBP encoders (encodeToBytes returns null). The full build is only ~1MB larger. --- src/engine/render-image.ts | 6 +++++- src/stores/editor.ts | 5 ++++- vite.config.ts | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/engine/render-image.ts b/src/engine/render-image.ts index 756305147..bf7bad195 100644 --- a/src/engine/render-image.ts +++ b/src/engine/render-image.ts @@ -87,8 +87,12 @@ export function renderNodesToImage( surface.flush() const image = surface.makeImageSnapshot() const quality = options.quality ?? defaultQuality(options.format) - const encoded = image.encodeToBytes(ckImageFormat(ck, options.format), quality) + const fmt = ckImageFormat(ck, options.format) + const encoded = image.encodeToBytes(fmt, quality) image.delete() + if (!encoded) { + console.error(`encodeToBytes returned null for format=${options.format} quality=${quality}`) + } return encoded ? new Uint8Array(encoded) : null } finally { surface.delete() diff --git a/src/stores/editor.ts b/src/stores/editor.ts index e608a792e..76947a513 100644 --- a/src/stores/editor.ts +++ b/src/stores/editor.ts @@ -620,7 +620,10 @@ export function createEditorStore() { async function exportSelection(scale: number, format: ExportFormat) { const ids = [...state.selectedIds] const data = renderExportImage(ids, scale, format) - if (!data) return + if (!data) { + console.error(`Export failed: renderExportImage returned null for format=${format} scale=${scale}`) + return + } const node = ids.length === 1 ? graph.getNode(ids[0]) : undefined const baseName = node?.name ?? 'Export' diff --git a/vite.config.ts b/vite.config.ts index c82a9923c..07ce3c8b1 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -21,7 +21,7 @@ export default defineConfig(async () => ({ { name: 'copy-canvaskit-wasm', buildStart() { - const src = 'node_modules/canvaskit-wasm/bin/canvaskit.wasm' + const src = 'node_modules/canvaskit-wasm/bin/full/canvaskit.wasm' const dest = 'public/canvaskit.wasm' if (existsSync(src) && !existsSync(dest)) { copyFileSync(src, dest)