What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
If text and controls look sharp but a Flourish chart looks fuzzy, the problem is usually the chart’s rendering boundary, not the page’s CSS. Flourish embeds are often hosted in an iframe and may rasterize a canvas or SVG at a different effective device-pixel ratio. Set Puppeteer’s viewport dimensions and deviceScaleFactor before navigation, wait for the visualization’s own layout and animation to finish, then capture the iframe or chart element. If the visualization allows it, Flourish’s Live API snapshot can produce a higher-scale PNG or a vector SVG.
What the blur pattern tells you
Outer-page text is rendered by the browser’s document context. An embedded visualization can have its own document, CSS viewport, canvas bitmap, SVG sizing rules and animation timeline. A mismatch in any of those can make only the chart soft while headings, buttons and surrounding text remain crisp.
Do not assume that every Flourish template has the same structure. Some embeds use an iframe; selectors, renderer details and export permissions vary by visualization. Inspect the specific page before hard-coding a selector or readiness signal.
Check the embed before changing settings
- Open DevTools and inspect the chart container. Confirm whether the Flourish visualization is inside an
iframe. - Record the iframe’s CSS bounding box with
getBoundingClientRect(). Also inspect the chart document for its actual root element and dimensions. - Check the output file’s pixel dimensions. For a CSS viewport of 1,600 × 900 at a device scale factor of 2, a full-page or element capture should normally be about 3,200 × 1,800 pixels. A mismatch points to capture geometry or viewport configuration rather than chart styling.
Set an explicit viewport and device scale
Puppeteer’s documented default for deviceScaleFactor is 1. That is adequate for a CSS-sized preview but can look soft when a chart is rasterized at that resolution. Set width, height and scale together, and do it before goto() so the visualization lays itself out against the intended viewport.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →#1 Best Overall
- Improved ComfortView Plus: Reduces harmful blue light emissions to ≤35%, for all-day comfort without sacrificing color accuracy.
- Refresh rate: A smooth, tear-free experience with AMD FreeSync Premium (refresh rate up to 120Hz) and an ultra-low 0.03ms response time create a captivating experience for work and play.
- Vivid colors: Immerse yourself in breathtaking 4K visuals with in-plane switching technology. Enjoy vibrant colors with 99% sRGB. The 1500:1 contrast ratio and HDR readiness deliver excellent depth and detail.
- Re-engineered sound quality: Enjoy more detailed sound with spacious audio featuring greater output power, deeper frequency response and more decibel range than the previous generation.
- Ultra-thin bezel: Designed with a sleek, modern aesthetic and an ash white finish, this display features ultra-thin bezels for a refined, minimalist design.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();
await page.setViewport({
width: 1600,
height: 900,
deviceScaleFactor: 2
});
await page.goto('https://example.com/page-with-flourish', {
waitUntil: 'networkidle2'
});
// Replace this with the real selector found in DevTools.
const iframeHandle = await page.waitForSelector('iframe.flourish-embed-iframe', {
timeout: 15000
});
const frame = await iframeHandle.contentFrame();
if (!frame) throw new Error('The Flourish iframe has no content frame');
// Replace this illustrative signal with a real, stable signal in your chart.
await frame.waitForSelector('[data-ready=true]', {timeout: 15000});
// Captures the iframe region at the configured scale.
await iframeHandle.screenshot({path: 'flourish.png'});
await browser.close();
})();
The iframe and readiness selectors above are illustrative, not universal Flourish API names. If the chart has a stable root element, capture that element from the content frame instead:
const chart = await frame.waitForSelector('.chart-root', {timeout: 15000});
await chart.screenshot({path: 'flourish-chart.png'});
Element screenshots are useful when the deliverable is the chart rather than the complete page. A full-page screenshot preserves surrounding captions and layout, but it also includes every other page region and may be constrained by the outer document’s geometry.
Wait for the visualization, not just navigation
networkidle2 means network activity has quieted; it does not prove that data parsing, layout, font loading or animation has finished. A chart can be visually incomplete after navigation resolves.
Prefer a chart-specific readiness signal
Use a selector that appears only after the visualization has rendered, an application-provided ready flag, or a script-visible state that you have verified in that template. Wait inside the iframe’s content frame, not only on the parent page.
Free tools Windows power users keep installed
One-click scans. No signup required.
Rank #2
- 4K UHD with 1000:1 Contrast Ratio - This UltraFine display with a 1000:1 contrast ratio displays deeper blacks and vivid colors in UHD clarity. With wide viewing angles, it gives creative professionals the ability to view and work with highly-detailed, digital imagery.
- 4K HDR10 DCI-P3 - Explore HDR10 content the way it was meant to be seen with up to 90% DCI-P3 color gamut expression—an elevated color spectrum that brings brilliant color to life.
- Onscreen Control - You can customize the workspace by splitting the display or adjusting basic monitor options with just a few mouse clicks.
- Ergonomic Stand - The ergonomic stand makes it easy to flexibly adjust the tilt of the screen in the optimal position for you.
- What's In The Box - Stand Body, Stand Base, Screws, Power Adapter, HDMI Cable, Quick Start Guide, Registration Card, Warranty.
Use a bounded delay only as a fallback
If no reliable signal exists, wait for a bounded interval long enough for the known animation, then capture. Treat that delay as a practical fallback, not a guarantee: network conditions and data size can change the required time. A selector or application-ready event is more reliable.
Freeze motion when possible
If the page permits custom CSS, disable transitions and animations after the chart has initialized. Do not hide the chart itself; only target the animated classes or properties you have confirmed in that visualization. This can make repeated captures consistent, but it is template-specific.
Capture the correct rendering context
When the chart is in an iframe, page.screenshot() captures the parent page’s composition. It does not give you a separate control over the iframe’s internal layout. Obtain the frame with contentFrame(), wait for the chart there, and then choose one of these outputs:
- Iframe element screenshot: captures the iframe’s visible rectangle while retaining the outer page’s placement.
- Chart element screenshot: captures only the selected chart node inside the frame.
- Full-page screenshot: captures the complete document, including the chart and its surrounding content.
If the iframe is clipped by a fixed-height container, its screenshot can be sharp but incomplete. Check overflow, computed height and the chart’s internal scroll region before concluding that resolution is the problem.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Rank #3
- Master Every Pixel - Bring every detail to life with LG’s UltraFine 32” 4K UHD HDR display. Whether you’re editing, streaming, or multitasking, the expansive screen and rich color deliver clarity you can count on.
- Color Your World in 4K and HDR Content - Stream in stunning detail with the LG UltraFine 4K display. HDR technology delivers vibrant brightness and rich contrast, supporting up to 90% of the DCI-P3 color space for vivid, lifelike visuals that elevate every scene.
- Immersive Visuals for Tactical Edge - Game in crisp 4K UHD with rich visuals and immersive audio powered by Waves MaxxAudio. With gaming features such as Dynamic Action Sync and Black Stabilizer, you’ll react faster and spot enemies in the shadows—so you’re always one step ahead.
- Dynamic Action Sync - Don’t miss a beat. Dynamic Action Sync helps you spot the action and strike fast by reducing input lag and boosting responsiveness.
- Never in the Dark with Black Stabilzer - Never get caught off guard. Black Stabilizer enhances visibility in low-light scenes so you can spot threats before they see you.
Inspect dimensions with a diagnostic script
This short script reports the outer iframe rectangle and the dimensions available inside the frame. Replace the selector with the one used by your page.
const info = await page.evaluate(() => {
const el = document.querySelector('iframe.flourish-embed-iframe');
if (!el) return null;
const r = el.getBoundingClientRect();
return {cssWidth: r.width, cssHeight: r.height};
});
console.log(info);
const inner = await frame.evaluate(() => ({
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight,
dpr: window.devicePixelRatio
}));
console.log(inner);
Compare these CSS values and the reported device pixel ratio with the PNG’s dimensions. If the file is only the CSS size when you expected a 2× image, revisit the viewport setup and the element being captured.
Use Flourish’s native snapshot when it fits
Flourish documents a Live API snapshot method that can generate a bitmap or SVG image of a visualization. Its supported formats are PNG (the default), JPEG and SVG, and the scale option increases generated image resolution.
| Remedy | Output | Sharpness | What it preserves | Dependencies |
|---|---|---|---|---|
| Puppeteer iframe or element capture | Browser screenshot | Raster sharpness increases with device scale | Exact browser composition, including surrounding page when selected | Correct selectors, frame access and readiness timing |
| Flourish Live API snapshot | PNG, JPEG or SVG | SVG is vector when the visualization supports it; PNG/JPEG use the requested scale | Visualization export rather than the parent page layout | The visualization must expose the Live API and permit the requested export |
Choose the native snapshot when you need a chart-only asset and the visualization permits it. Choose Puppeteer when the surrounding page, browser state, custom CSS or exact viewport composition is part of the deliverable. No single setting guarantees identical results across all Flourish templates.
Rank #4
- Improved ComfortView Plus: Reduces harmful blue light emissions to ≤35%, for all-day comfort without sacrificing color accuracy.
- Refresh rate: A smooth, tear-free experience with AMD FreeSync Premium (refresh rate up to 120Hz) and an ultra-low 0.03ms response time create a captivating experience for work and play.
- Vivid colors: Immerse yourself in 4K visuals with a VA panel. Enjoy true-to-life colors with 99% sRGB and 95% DCI-P3 coverage. The 1500:1 contrast ratio and HDR readiness deliver excellent depth and detail.
- Re-engineered sound quality: Enjoy more detailed sound with spacious audio featuring greater output power, deeper frequency response and more decibel range than the previous generation.
- Ultra-thin bezel: Designed with a sleek, modern aesthetic and an ash white finish, this display features ultra-thin bezels for a refined, minimalist design.
Troubleshoot the common failure modes
| Symptom | Likely cause | Fix |
|---|---|---|
| Text is crisp but every chart mark is soft | The chart has its own iframe or canvas bitmap and was rendered at a lower effective scale. | Set explicit width, height and deviceScaleFactor before navigation; capture the frame or chart directly. |
| The first screenshot shows missing labels or half-drawn bars | Navigation completed before chart data, layout or animation finished. | Wait for a verified chart-specific selector or ready signal; use a bounded delay only as fallback. |
| Increasing scale changes nothing | The wrong viewport was configured, or a pre-rendered low-resolution asset is being displayed. | Log CSS dimensions, window.devicePixelRatio and output pixel dimensions. Inspect network responses and the chart’s internal element. |
contentFrame() returns null |
The handle is not an iframe, it has not loaded, or the frame was replaced. | Wait for the iframe element, verify its tag and source, then reacquire the handle after navigation or dynamic replacement. |
| The chart is sharp but clipped | The iframe or a parent container has fixed height or overflow clipping. | Inspect computed height and overflow. Capture the correctly sized chart element or adjust the test viewport and container. |
| Output is sharp but animation state differs between runs | Capture timing is nondeterministic. | Use a stable ready signal and disable only confirmed chart animations with custom CSS when the page allows it. |
| SVG export is unavailable | The specific visualization or account does not expose that export path. | Use a higher-scale PNG through the permitted snapshot method or the browser capture workflow. |
Performance, memory and repeatability
Higher device scale multiplies the number of pixels. A 2× scale has roughly four times as many pixels as a 1× capture at the same CSS dimensions, so memory use and encoding time can rise substantially. Use the smallest scale that meets the publication or print requirement, and avoid opening many high-scale pages concurrently.
Keep the CSS viewport fixed across runs, use the same readiness condition, and record the resulting pixel dimensions. If you need reproducible comparisons, use the same browser version, fonts and network conditions. A cache hit or a fast load can expose animation timing bugs that a slower run hides.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Or skip the browser setup
ScreenshotNeo can return a website screenshot through one request, including PNG, JPEG or WebP output, or a PDF. Its cleanup step accepts cookie and consent banners and removes more than 60 known consent platforms, newsletter popups and chat widgets before capture; each step can be turned off. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and the response identifies the result with X-Page-Verdict and X-Billed headers.
For a Flourish page, pass the page URL and use the service’s viewport, retina-scale, selector and wait controls as needed. Relevant options include full-page capture with lazy images loaded, one-element capture by CSS selector, custom viewport or device presets, dark mode, custom CSS and JavaScript, waiting for a selector, delay or network idle, request and resource blocking, custom headers and cookies, timezone and geolocation, transparent backgrounds, resizing, cache TTL, signed links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, and a usage API. An MCP server provides take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients.
cURL
curl -G 'https://api.screenshotneo.com/v1/shot' -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com/page-with-flourish -o shot.webp
Python
import requests
r = requests.get('https://api.screenshotneo.com/v1/shot', params={'access_key': 'YOUR_API_KEY', 'url': 'https://example.com/page-with-flourish'}, timeout=90)
r.raise_for_status()
open('shot.webp', 'wb').write(r.content)
Node.js
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://example.com/page-with-flourish' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
const fs = require('node:fs');
fs.writeFileSync('shot.webp', Buffer.from(await res.arrayBuffer()));
See the ScreenshotNeo documentation for request parameters and response headers. The Free plan includes 1,000 shots per month with no card. Paid plans start at $5 for 3,000 shots; Growth is $15 for 15,000, Pro $39 for 60,000, Scale $99 for 250,000 and Business $249 for 1,000,000. Yearly billing gives two months free, and every feature is included on every plan. Create a free ScreenshotNeo account to try the capture without a card.
Best Value
- Low blue light: The improved ComfortView Plus reduces harmful blue light emissions to ≤35%, for all-day comfort without sacrificing color accuracy.
- Refresh rate: A smooth, tear-free experience with AMD FreeSync Premium (refresh rate up to 120Hz) and an ultra-low 0.03ms response time create a captivating experience for work and play.
- Vivid colors: Immerse yourself in breathtaking 4K visuals with in-plane switching technology. Enjoy vibrant colors with 99% sRGB. The 1500:1 contrast ratio and HDR readiness deliver excellent depth and detail.
- Re-engineered sound quality: Enjoy more detailed sound with spacious audio featuring greater output power, deeper frequency response and more decibel range than the previous generation.
- Easy connectivity: Keep your desk organized and clutter-free with a single USB-C cable (up to 65W power delivery).
A practical decision checklist
- Need the whole webpage exactly as a visitor sees it? Use Puppeteer with an explicit viewport, verified readiness and an iframe or page capture.
- Need only the visualization and the Live API is available? Prefer an SVG snapshot; otherwise request a higher-scale PNG.
- Need automated captures without maintaining Chromium setup? Use ScreenshotNeo’s one-call API or MCP tools, and inspect its verdict and billing headers.
- Still seeing softness after a 2× capture? Validate the chart’s own dimensions and renderer; the source visualization may be supplying a low-resolution asset.
Frequently Asked Questions
Does every Flourish embed ignore Puppeteer’s deviceScaleFactor?
No. The available evidence does not establish one iframe structure or renderer for every Flourish template. Inspect the individual embed and compare its internal device-pixel ratio and output dimensions.
Can I guarantee a finished chart with a fixed sleep?
No. A fixed delay is only a bounded fallback. A template-specific ready selector or application signal is more dependable because load and animation time vary.
When is SVG preferable to PNG?
Use SVG when the visualization’s permitted Live API snapshot supports it and the next tool in your workflow accepts vector artwork. Otherwise, request a PNG at a suitable scale.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Repair Windows errors before they cause bigger problems3Scan for outdated or missing drivers - takes under a minuteWhy can a sharp iframe screenshot still look wrong on the page?
The iframe can be rendered at high resolution while its parent container clips or scales it. Check the outer CSS box, overflow rules and the chart’s intended display size.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




