Back to blog
GuidesRenderingPerformance

Full-page screenshots that don't cut off lazy-loaded content

Blank sections, missing images and half-rendered carousels are almost always a timing problem. Here are the four settings that fix them.

Ruby Le
Ruby Le
Project Manager
· Jun 10, 2026· 2 min read

You ask for isFullPage: true and get a beautiful hero followed by 6,000 pixels of grey boxes. The browser did exactly what it was told - it captured the page as soon as it was "loaded". The trick is telling it what loaded means for your page.

1. Pick the right waitUntil

waitUntil controls which page lifecycle event we wait for before capturing:

  • commit - The first response bytes
  • domcontentloaded - HTML parsed
  • load - All initial resources, including images (default)
  • networkidle - No network activity for a short period

For content-heavy pages, load or networkidle fixes most missing-image problems.

2. Give images time

imageLoadTimeout is the maximum time to wait for images after the page loads. We return early as soon as every image has finished, so a higher limit only costs time on pages that need it.

3. Add a delay for animations

Fade-ins, count-up numbers and carousels often start after load. delay adds a fixed pause (in milliseconds) before the shutter:

{
  "url": "https://example.com",
  "isFullPage": true,
  "waitUntil": "networkidle",
  "delay": 1500
}

4. Raise the timeout for slow sites

timeout is the navigation timeout. If a page regularly takes longer than the default to respond, raise it instead of retrying.

Still blank?

  • Some sites only load content when it scrolls into view and ignore full-page rendering. A longer delay usually helps.
  • Sticky headers can repeat down the page on some layouts. Capturing at a larger viewport height sometimes avoids it.
  • If the site shows a bot check instead of content, try antiBot: true.
Try Snapopa

Reading about screenshots? Try the API.

100 free tokens on signup. No credit card. One request is all it takes.

$ curl https://api.snapopa.com/capture \
    -H "Authorization: Bearer sk_•••" \
    -d '{"url":"https://stripe.com"}'

✓ 200 OK
{ "data": { "fileUrl": "https://cdn.snapopa.com/…" } }