The screenshot module posts the deployed screenshot page's URL and the
viewport to Browser Rendering's REST endpoint and gets the image back, so
the same code runs under Node and in a Worker. It waits for network idle
as the puppeteer version did. Puppeteer, the local HTTP server, and the
browserless configuration are gone.
Posts render once per media type a client needs: PNG for the public copy
and Twitter, JPEG for Bluesky, which limits image size. That replaces the
sharp conversion in the Bluesky client, which now takes the media as
given and includes the aspect ratio when the size is known (from the
viewport for screenshots, from the PNG header for stage images).
Configuration mirrors splatoon3.ink: SITE_URL, CLOUDFLARE_ACCOUNT_ID, and
CLOUDFLARE_BROWSER_RUN_API_TOKEN.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>