From 90cf3d415c92f5284eb63f50b31c62423654b613 Mon Sep 17 00:00:00 2001 From: Codex Date: Thu, 9 Jul 2026 02:34:19 +0000 Subject: [PATCH] Hide interactive controls in screenshots --- src/capture.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/capture.ts b/src/capture.ts index b4d0f7f..93623b1 100644 --- a/src/capture.ts +++ b/src/capture.ts @@ -22,6 +22,28 @@ interface ExtractedConversation { const chatGptIconUrl = "https://chatgpt.com/cdn/assets/favicon-l4nq08hd.svg"; +const screenshotOnlyCss = ` +button, +input, +select, +textarea, +summary, +.icon-button, +[contenteditable="true"], +[role="button"], +[role="checkbox"], +[role="combobox"], +[role="listbox"], +[role="menu"], +[role="menuitem"], +[role="radio"], +[role="slider"], +[role="spinbutton"], +[role="switch"], +[role="tab"] { + display: none !important; +}`; + function publicErrorFor(error: unknown): string { const message = error instanceof Error ? error.message : String(error); if (/captcha|verify|robot/i.test(message)) { @@ -659,6 +681,7 @@ async function generateScreenshotVariant(slug: string, variant: ScreenshotVarian }); const fileUrl = `file://${artifactIndexPath(slug)}?theme=${variant.theme}`; await page.goto(fileUrl, { waitUntil: "load", timeout: 60_000 }); + await page.addStyleTag({ content: screenshotOnlyCss }); const height = await page.evaluate(() => Math.ceil(document.documentElement.scrollHeight)); if (height > config.maxScreenshotHeight) { throw new Error(`Screenshot height ${height}px exceeds limit ${config.maxScreenshotHeight}px.`);