From d78bcb3b40a0e43f154857dcffb5cc4b7e284a65 Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Thu, 21 May 2026 01:57:11 +0300 Subject: [PATCH] fix(fig): render headless export thumbnails --- packages/core/src/io/formats/fig/export.ts | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/core/src/io/formats/fig/export.ts b/packages/core/src/io/formats/fig/export.ts index 3f41b1ef7..c77913166 100644 --- a/packages/core/src/io/formats/fig/export.ts +++ b/packages/core/src/io/formats/fig/export.ts @@ -82,6 +82,21 @@ function collectImageEntries(graph: SceneGraph): Array<{ name: string; data: Uin const THUMBNAIL_WIDTH = 400 const THUMBNAIL_HEIGHT = 225 +async function renderFigThumbnail( + graph: SceneGraph, + pageId: string | undefined, + ck?: CanvasKit, + renderer?: SkiaRenderer +): Promise { + if (!pageId) return THUMBNAIL_1X1 + if (ck && renderer) { + return renderThumbnail(ck, renderer, graph, pageId, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT) ?? THUMBNAIL_1X1 + } + if (IS_BROWSER || IS_TAURI) return THUMBNAIL_1X1 + const { headlessRenderThumbnail } = await import('#core/io/formats/raster') + return (await headlessRenderThumbnail(graph, pageId, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT)) ?? THUMBNAIL_1X1 +} + function assignVariableGuids( graph: SceneGraph, localIdCounter: { value: number }, @@ -326,10 +341,7 @@ export async function exportFigFile( const kiwiData = compiled.encodeMessage(msg) const currentPageId = pageId ?? pages[0]?.id - const thumbnailPng = - (ck && renderer && currentPageId - ? renderThumbnail(ck, renderer, graph, currentPageId, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT) - : null) ?? THUMBNAIL_1X1 + const thumbnailPng = await renderFigThumbnail(graph, currentPageId, ck, renderer) const metaJson = JSON.stringify({ version: 1,