Fix Thumbalizr Screenshots with Missing Web Fonts or Icons
Diagnose missing fonts and icons in Thumbalizr screenshots. Check asset delivery, capture timing, and response headers, then choose a reliable next step.
If a Thumbalizr screenshot shows fallback text or missing icons, first check whether those assets load on the target page in a regular browser. If they do, try a longer Thumbalizr delay within your account’s available range and request a fresh capture. If they do not, fix the page’s font or icon asset delivery: waiting longer cannot make an inaccessible or misconfigured asset load.
Custom fonts may be fetched only when the browser first needs them. MDN documents that document.fonts.ready resolves after used fonts and related layout operations finish, which helps distinguish a timing issue from a delivery issue. MDN: CSS Font Loading API
1. Check whether the page itself loads the assets
- Open the exact target URL in a regular browser. Use the same viewport dimensions and page state as the Thumbalizr capture if possible.
- Check whether the typography and icons are already missing in that browser. If so, investigate the site’s CSS and asset delivery before adjusting screenshot settings.
- Open the browser’s developer tools and inspect the Network panel. Reload the page and filter for font files and icon resources, such as
.woff,.woff2, SVG sprites, or icon-font stylesheets. - Check each relevant request’s URL, status, and response. The screenshot browser must be able to reach the resource from the public web. A resource available only from a local file, authenticated session, private network, or restricted origin may not be available to the capture service.
- Check the Console for stylesheet, CORS, mixed-content, or font-decoding errors. Fix the underlying resource or configuration error if one appears.
This is general browser diagnosis; Thumbalizr’s documentation does not identify the cause of a particular site’s missing assets.
2. Test whether capture timing is the cause
Thumbalizr documents delay as the time to wait after page load, with a documented range of 1–30 seconds; its free option is listed as five seconds. Confirm the options available to your account in the Thumbalizr API documentation before relying on a custom value. A longer delay is a useful test when assets eventually appear in an ordinary browser. It does not repair a bad URL, blocked request, stylesheet error, or incorrect icon setup.
Use the same URL and capture dimensions for each comparison, increase the delay within the available range, and set a fresh timestamp so you are comparing a newly generated image rather than a prior result. The API documentation describes timestamp as a way to generate a new image.
curl -sS -D thumbalizr-headers.txt -o thumbalizr-shot.png \
--get 'https://api.thumbalizr.com/' \
--data-urlencode 'url=https://example.com' \
--data-urlencode 'delay=10' \
--data-urlencode 'timestamp=20261004T120000'
Use the endpoint and any required credentials or other parameters from your existing Thumbalizr integration; do not assume the illustrative request above matches every account’s API setup. The documented parameters include capture width, output format, quality, timestamp, screen/page size, delay, browser width and height, and browser country. Their availability and ranges may depend on the account tier.
3. If you control the capture workflow, wait for fonts explicitly
In a browser workflow that lets your own JavaScript decide when to capture, wait for used fonts before taking the screenshot:
await document.fonts.ready;
// Trigger your browser screenshot after this point.
MDN says this promise resolves when font loading and layout operations for fonts used by the document are complete. It is useful when you control the browser automation. The cited Thumbalizr API documentation does not list a custom JavaScript hook, so do not assume you can run this code inside a Thumbalizr capture.
4. Compare captures with consistent settings
For a useful before-and-after comparison, record the exact target URL, viewport width and height, capture size or mode, delay, generation time, HTTP response status, and screenshot status/error headers. Thumbalizr documents bwidth and bheight as browser dimensions and exposes X-Thumbalizr-Status and X-Thumbalizr-Error response headers. Its documented statuses include QUEUED, OK, and FAILED.
Inspect the returned image as well as the headers. A successful request status does not establish that the target page’s font or icon request succeeded. If the issue appeared around Thumbalizr’s backend transition, record when it began and compare repeated captures: Thumbalizr described a progressive transition from Browshot-powered infrastructure to ScreenshotCenter while saying integrations, API calls, embed codes, and settings remain unchanged. That announcement does not show whether a particular account has migrated. Thumbalizr migration announcement
5. Troubleshooting common symptoms
| Symptom | Likely area to inspect | Next step |
|---|---|---|
| Fallback font appears in the normal browser too | Page CSS or font asset delivery | Inspect the font request URL, response, stylesheet rules, and browser console. Fix the page issue before changing capture delay. |
| Font appears after a pause in the normal browser | Capture timing | Increase Thumbalizr’s documented post-load delay within your account’s available range, force a fresh image with timestamp, and compare. |
| Icon glyphs are missing but text renders | Icon font, stylesheet, SVG, or icon resource | Inspect the icon-related network requests and CSS separately from web-font requests. Confirm the screenshot browser can reach the resource. |
| Font works only when signed in or on a company network | Access to the asset | Check whether the font requires a session, private network, or credentials unavailable to the capture browser. Make the required asset available to the capture context. |
| Screenshot looks old despite changed page assets | Image freshness | Request a new capture using the documented timestamp parameter and compare its generation time. |
X-Thumbalizr-Status reports FAILED |
Capture request failure | Read X-Thumbalizr-Error, verify the target URL and parameters, and retry after correcting the reported issue. The header does not by itself identify a font-specific failure. |
| It works at one viewport but not another | Responsive CSS or different page state | Repeat with matching bwidth/bheight and inspect responsive font or icon rules at both widths. |
6. Reliability, performance, and cost considerations
- Delay trades speed for diagnostic confidence. A longer wait can help test whether resources arrive late, but it increases the time before a capture completes. If the asset never loads, a longer wait only delays the same failure.
- Keep comparisons controlled. Change one factor at a time—usually delay—while holding URL, viewport, capture mode, and page state steady. Use a new timestamp for each fresh capture.
- Do not upgrade based on this symptom alone. Thumbalizr documents tier-dependent parameter ranges, so check current account entitlements. The available evidence does not establish that a paid tier fixes inaccessible fonts or icons.
- Track response evidence. Save the image and response headers together so a visual defect can be distinguished from a queued or failed capture.
7. Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server. It can wait for a selector, a delay, or network idle, and its clean-shot flow accepts cookie banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture. Those steps can be turned off. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed; responses identify the page verdict and billing status in headers.
One GET request returns an image or PDF. For this page, try a fresh capture of the target URL:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
See the ScreenshotNeo API documentation for request options. Python and Node.js examples are also available there. The MCP server provides take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000, and every feature is available on every plan.
Sign up free for 1,000 screenshots a month, with no card required.
FAQ
Does a longer delay guarantee that Thumbalizr will render a web font?
No. It tests whether the capture was taken before a usable font finished loading. It cannot make a blocked, unavailable, or incorrectly configured asset load.
Can I use document.fonts.ready with Thumbalizr?
Use it when your own browser automation controls the capture timing. Thumbalizr’s cited API documentation does not list a custom JavaScript option.
How can I tell whether Thumbalizr generated a new capture?
Use the documented timestamp parameter to request a fresh image, then check the response status and error headers as well as the image itself.
Should I change screenshot dimensions while debugging?
Keep them fixed for the initial comparison. If the issue occurs only at a particular size, then compare browser dimensions deliberately because responsive page rules can change which assets or styles apply.


