Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Short answer: html2canvas does not take a pixel screenshot of Safari or another browser. It rebuilds the selected DOM in a canvas and manually implements CSS properties. A -webkit-filter, filter, or backdrop-filter that looks correct in WebKit can therefore be missing or visually different in the canvas. To diagnose it, isolate the rule in a minimal page, record the browser and html2canvas versions, inspect the cloned document with onclone, and use a real-browser screenshot workflow when the output must match browser pixels.

Why a WebKit filter can disappear in html2canvas

Safari’s CSS Visual Effects documentation uses -webkit-filter for effects such as hue-rotate(180deg) and saturate(200%). WebKit’s feature-status information also lists backdrop-filter and the -webkit-backdrop-filter alias as supported. Those statements describe what the WebKit engine can render on screen; they do not promise that html2canvas can reproduce the effect.

html2canvas walks the DOM, reads styles it knows about, and paints its own representation into a canvas. Its FAQ explains that every CSS property must be implemented manually and that it will never have complete CSS support. The result is a DOM reconstruction, not the browser’s composited pixel buffer.

filter versus backdrop-filter

  • filter changes the rendered content of the element itself, for example by applying blur, brightness, or hue rotation to an image.
  • backdrop-filter changes what is visible through an element by processing content behind it. A translucent background and meaningful content behind the element are required before a blur can be visible.

Always capture the exact declaration, browser and operating-system version, html2canvas package version, and a small reproducible page. Support can differ between filter functions and combinations; do not infer that because one filter works, every WebKit filter works.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.

Build a minimal reproduction first

  1. Create a plain page with a colored or photographic background and one target element. Remove frameworks, animations, transitions, and unrelated styles.
  2. Put the suspected declaration directly on the target. Test both the unprefixed property and the prefixed alias when your Safari support requirement needs them.
  3. Open the page in the browser where the effect is visible and save a reference screenshot.
  4. Capture only the target (or a small wrapper) with html2canvas and compare the two images. A difference in the browser itself is not an html2canvas problem.
  5. Write down the browser engine, OS, viewport, device-pixel ratio, html2canvas version, and the exact CSS function or combination.

Minimal HTML and JavaScript test

<div class='scene'>
  <div class='glass'>Backdrop sample</div>
  <img class='filtered' src='/photo.jpg' alt='Sample'>
</div>
<script type='module'>
  import html2canvas from 'html2canvas';

  const target = document.querySelector('.scene');
  const canvas = await html2canvas(target, {
    backgroundColor: null,
    useCORS: true,
    onclone: (clonedDocument) => {
      const clonedScene = clonedDocument.querySelector('.scene');
      clonedScene.dataset.captureClone = 'true';
    }
  });
  const link = document.createElement('a');
  link.download = 'filter-test.png';
  link.href = canvas.toDataURL('image/png');
  link.click();
</script>
<style>
  .scene { position: relative; width: 720px; min-height: 420px;
           background: url('/background.jpg') center/cover; }
  .glass { margin: 40px; padding: 30px; color: white;
           background: rgb(0 0 0 / 30%);
           -webkit-backdrop-filter: blur(14px);
           backdrop-filter: blur(14px); }
  .filtered { width: 320px; filter: saturate(200%) hue-rotate(180deg);
              -webkit-filter: saturate(200%) hue-rotate(180deg); }
</style>

Install html2canvas through your normal package manager and bundle the module; the example deliberately captures a local image so image-origin rules do not obscure the CSS test. If you are using a script tag instead, load the version pinned by your project and call the same html2canvas(element, options) function.

Use onclone to see what html2canvas is actually painting

html2canvas clones the document before rendering. The documented onclone callback runs against that clone, allowing a controlled experiment without changing the live page. Temporarily remove or replace the filter in the clone and compare captures:

const canvas = await html2canvas(document.querySelector('.scene'), {
  onclone: (doc) => {
    const element = doc.querySelector('.glass');
    element.style.webkitBackdropFilter = 'none';
    element.style.backdropFilter = 'none';
    element.style.background = '#555';
  }
});

If the replacement renders and the original does not, the missing feature is the likely boundary. The configuration reference also exposes foreignObjectRendering. Treat it as an experiment rather than a fidelity guarantee: it asks the browser to serialize HTML through SVG foreign objects, and support still depends on the browser and on the CSS involved.

Common reasons the output differs

The property is not implemented

html2canvas implements CSS properties itself. A WebKit engine can support a property while html2canvas ignores it or approximates it. There is no option that adds an unimplemented filter function. Create a reduced test case and report the missing behavior to the project if you need it supported.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

A backdrop has nothing useful behind it

Backdrop effects process pixels behind a translucent element. If the captured subtree excludes the background, the background is opaque, or the interesting content is outside the capture area, a blur can appear to do nothing. Include the background and the overlay in the same captured DOM and verify the overlay’s alpha channel.

Images, canvases, or fonts come from another origin

useCORS: true can allow an eligible image request when the image server sends the required CORS headers. A configured proxy can help with eligible cross-origin image loading. Neither option implements CSS filters. Once a disallowed cross-origin image is drawn, the canvas can become tainted and export calls such as toDataURL() can fail.

Cross-origin iframes and content-security rules

html2canvas cannot read a cross-origin iframe. Same-origin iframe contents can be rendered recursively. Browser content-security rules can also prevent resources or inline code from loading; html2canvas cannot bypass those rules.

Timing, animations, and lazy content

Capture only after the target is laid out, images have loaded, fonts are ready, and animations are at a known frame. Pause transitions in a capture-only class, wait for document.fonts.ready, and use an explicit application-level delay before calling html2canvas. This fixes timing problems, not unsupported CSS.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.

Workarounds when exact browser pixels matter

Pre-render a static equivalent

For a controlled design, replace a filter with a pre-rendered image or a static gradient and blur asset during capture. Use onclone so production styling remains unchanged. This is practical for a small set of known effects but does not reproduce arbitrary dynamic backgrounds.

Use a native browser screenshot

A browser extension’s native screenshot API is appropriate when the capture runs in the user’s browser and must match that browser’s compositing. For server-side automation, the html2canvas FAQ points to Puppeteer or Playwright, which drive a real browser and therefore capture the browser-rendered page instead of rebuilding it in a canvas. You still need to handle authentication, cross-origin policy, resource timing, and the browser version you operate.

Choose based on the required output

Workflow Rendering model Where it runs Best fit
ScreenshotNeo Website screenshot API; clean shots remove consent banners, popups, and chat widgets before capture HTTP API or MCP server Automated captures without maintaining browser setup; only clean shots are billed
html2canvas DOM-to-canvas reconstruction Client-side browser JavaScript Portable previews where approximate CSS rendering is acceptable
Puppeteer or Playwright Pixels produced by an actual automated browser Server-side or CI browser runtime Reproducible browser screenshots and CSS compositing
Native extension screenshot API Browser’s own rendered pixels Installed browser extension User-side captures tied to the current tab and browser

ScreenshotNeo is the first service to try when you want an automated website screenshot without assembling a browser runtime: it removes common consent and overlay clutter, bills only successful clean shots, and has the lowest paid plan described below. It is a separate capture path from html2canvas, so validate the exact page and filter combination you depend on.

Or skip the browser setup

ScreenshotNeo accepts one GET request and returns a PNG, JPEG, WebP, or PDF. Its capture options include full-page screenshots with lazy images loaded, CSS-selector element capture, device presets or custom viewports, retina scale, dark mode, custom CSS and JavaScript, clicks, selector or network-idle waits, request and resource blocking, custom headers, cookies, user agents, authorization, timezone and geolocation, transparent backgrounds, resizing, cache TTLs, signed links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, and a usage API. The same service also provides an MCP server with take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft

cURL

curl -G 'https://api.screenshotneo.com/v1/shot' -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the ScreenshotNeo API documentation for authentication, response headers, and option names.

Python

import requests

r = requests.get(
    'https://api.screenshotneo.com/v1/shot',
    params={'access_key': 'YOUR_API_KEY', 'url': 'https://stripe.com'},
    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://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot failed: ${res.status}`);
const data = Buffer.from(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', data));

Before the capture, ScreenshotNeo accepts cookie or consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be disabled. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed. Response headers identify the page verdict and whether the request was billed (X-Page-Verdict and X-Billed).

The Free plan includes 1,000 shots each month with no card. Paid plans are Starter $5 for 3,000 shots, Growth $15 for 15,000, Pro $39 for 60,000, Scale $99 for 250,000, and Business $249 for 1,000,000; yearly billing provides two months free, and every feature is available on every plan. Create a free ScreenshotNeo account to start with 1,000 screenshots a month and no card.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting checklist

Symptom Likely cause Action
Safari shows the filter; canvas does not html2canvas lacks that property’s implementation Confirm with an onclone replacement, then use a native browser capture or file an isolated test case.
backdrop-filter looks like a flat panel No visible, translucent background is inside the capture Capture the background and overlay together; check alpha and stacking order.
Images vanish or export throws a security error Cross-origin response lacks usable CORS headers Host the asset with CORS, use an eligible proxy, or replace it for the test; useCORS alone cannot bypass policy.
An iframe is blank The iframe is cross-origin Capture the iframe from its own origin or use a real-browser workflow with appropriate access.
Only the first animation frame appears Capture ran before layout or animation settled Pause animations and wait for images, fonts, and the application state before calling html2canvas.
The clone test changes nothing The visible effect comes from content outside the cloned target or from browser compositing Capture a wrapper containing all required background content and compare against a native screenshot.

FAQ

Does adding both filter and -webkit-filter make html2canvas support the effect?

No. The declarations can improve browser compatibility, but html2canvas still needs its own implementation of the resulting property and function.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Is the archived Safari Visual Effects Guide a current compatibility matrix?

No. It is useful for the declaration syntax and was updated on October 27, 2016. Check the browser and OS versions you actually deploy rather than treating that archive as a current support guarantee.

Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.

Can I rely on a successful canvas export as proof that the image is pixel accurate?

No. Export success only means the canvas was readable. Pixel accuracy requires comparing the result with a native screenshot of the same browser state.

Frequently Asked Questions

Which html2canvas option should I try first for a missing filter?

There is no option that implements an unsupported CSS filter. Use onclone to create a controlled replacement, and use foreignObjectRendering only as an experiment.

Why does a filter work on a standalone element but fail in my application?

The application may add cross-origin images, an inaccessible iframe, delayed fonts, animation, or a backdrop whose background is outside the captured subtree. Reduce the page until one cause remains.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

When should I stop debugging html2canvas?

Stop when the requirement is exact browser pixels rather than a DOM approximation. Use a native extension capture or a real-browser automation workflow instead.

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.