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

With Splash, you take a screenshot by loading a URL in a browser tab and returning image bytes from Lua: call splash:go(args.url), then splash:png() or splash:jpeg(). Those methods capture the current viewport. Full-page images, crops, and element shots require a different viewport or selector workflow.

This guide uses the stable Splash 3.5 scripting reference. Splash is a web-rendering service, not a desktop screenshot shortcut. The documentation and changelog provide historical context (release notes through Splash 3.4 on 2019-10-25), but they do not establish current maintenance status or compatibility with modern operating systems and browsers. Verify your deployment before putting it into production.

What you need before taking a screenshot

  • A running Splash service that accepts Lua scripts through its HTTP API. The official documentation describes the scripting API, but this article does not assume a particular reverse proxy, port, authentication setup, or hosting provider.
  • A target URL reachable from the Splash server. A URL that works in your laptop browser may be blocked, require a VPN, or resolve differently from the server.
  • A Lua script containing a main(splash, args) function. Pass the target as args.url.

The procedural reference is Splash Scripts Reference (Splash 3.5). It is the authority for method behavior and options used below.

Minimal viewport screenshot

Use this script when you need exactly what is visible in the browser viewport after navigation:

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.
function main(splash, args)
    assert(splash:go(args.url))
    return splash:png()
end

splash:go() navigates and returns a success value or error; assert stops the script if navigation fails. splash:png() returns PNG image data. Replace it with splash:jpeg() for JPEG output. If the method cannot produce an image, it returns nil.

The script captures the current viewport, not the entire document. Viewport dimensions are controlled by your Splash request or instance configuration; they are not inferred from the page’s full height.

Wait for content before capturing

Navigation can finish before images, client-rendered components, or fonts appear. Add an explicit wait when you know the page needs settling time:

function main(splash, args)
    assert(splash:go(args.url))
    assert(splash:wait(0.5))
    return {png=splash:png()}
end

The 0.5-second value is illustrative documentation code, not a universal settling time. Dynamic pages may need a page-specific condition or additional handling. A fixed delay that works for one route can be too short after a slow API response and unnecessarily long for a static page.

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.

Because Splash renders JavaScript in a browser tab, make your wait decision from the page’s behavior: wait for a known state in your own script or use a delay long enough for the resources you require. The reviewed reference does not provide one universally reliable wait recipe.

Capture a full page

Resize the effective viewport

After navigation and a settling wait, call splash:set_viewport_full(), then capture:

function main(splash, args)
    assert(splash:go(args.url))
    assert(splash:wait(0.5))
    splash:set_viewport_full()
    return {png=splash:png()}
end

The reference says to use set_viewport_full after the page has loaded and some time has passed. This matters for pages whose JavaScript reacts to viewport changes. If resizing triggers layout or lazy-loading code, wait again before the final image.

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.

Use the render-all option

The rendering API also documents render_all=true for rendering the whole page. Use the form supported by your Splash HTTP endpoint and keep the option with the request that runs your script. The two approaches express the same goal—capture beyond the initial viewport—but a page may behave differently when its viewport is resized, so test long, responsive, or lazy-loaded layouts.

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

Choose PNG, JPEG, dimensions, and scaling

Need What to use Important behavior
Lossless UI, text, or transparency splash:png() PNG output; PNG extensions are transparent.
Smaller or faster photographic output splash:jpeg({quality=...}) (with the quality option supported by your request) JPEG has configurable quality and a white background. Splash documentation says JPEG is often 1.5–2× faster than PNG; that is a documentation qualification, not a benchmark for your page.
Fixed output width Pass width Scales the image to that width.
Control vertical extent Pass height Trims or extends vertically; it does not scale page content.
Resize with vector scaling Use the documented scaling option Vector scaling can be sharper and more performant, but the reference warns it may create rendering artifacts; use it cautiously.

Option syntax depends on whether you call the Lua method directly or expose options through your HTTP request. Keep the option names from the Splash 3.5 reference and verify your endpoint’s request schema.

Crop a region of the viewport

Pass region={left, top, right, bottom} to crop. Coordinates are relative to the current scroll position:

function main(splash, args)
    assert(splash:go(args.url))
    assert(splash:wait(0.5))
    return splash:png({region={left=0, top=0, right=800, bottom=600}})
end

Region capture is viewport-constrained. Splash currently cannot use region to capture content outside a viewport. If you need a lower section, scroll or set the full viewport first, then capture the visible area. For a known DOM node, an element screenshot is usually simpler and less fragile than hand-calculated coordinates.

Capture one DOM element

Select the node and call its image method:

function main(splash, args)
    assert(splash:go(args.url))
    assert(splash:wait(0.5))
    local element = splash:select('#my-element')
    assert(element)
    return element:png()
end

Use element:jpeg() for JPEG. Add the element API’s padding option when you need space around the node. Check that the selector matches an existing, visible element; a missing or invisible element can produce an empty result (nil). Selectors that depend on generated class names are more likely to break than stable IDs or data attributes.

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

Calling Splash from an HTTP client

Splash exposes these scripts through its HTTP API. The exact URL, authentication, and parameter names depend on how you deployed it, so use the endpoint and request shape documented for your instance. A typical request must provide the Lua script (or a reference to it), the target URL as an argument, and the response format expected by your client. Save the response as binary data; do not decode PNG or JPEG as text.

For repeatable automation, keep the script in source control, set a timeout in your HTTP client, check the HTTP status, and verify that the response body is non-empty before writing the file. Return a table such as {png=splash:png()} when your endpoint expects named output, or return the image directly when it expects raw bytes.

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.

Reliable workflows for real pages

Lazy-loaded images

Full-page resizing does not guarantee every lazy image has loaded. Navigate, wait for the page’s own ready state, and, where your page requires it, trigger the scrolling or DOM actions that load deferred content before calling set_viewport_full. Confirm the result visually on representative pages.

Responsive breakpoints

A full viewport can cross a CSS breakpoint and change navigation, columns, or typography. Set the intended viewport before navigation when the layout matters, then use full-page capture only after checking how the page responds to the resize.

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

Sticky headers and fixed widgets

Viewport screenshots may include a fixed header or chat control that is absent from a document-style printout. If you need a clean section image, use a stable element selector or a region after scrolling to the required position.

Authenticated and private pages

Authentication, cookies, and network access are properties of your Splash deployment and script. Do not place credentials in URLs or log output. Confirm that the server can reach the page and that the session is established before debugging image methods.

Troubleshooting

Navigation assertion fails

Cause: DNS failure, TLS problem, blocked egress, redirect policy, or an invalid URL. Fix: test the URL from the Splash host, inspect the navigation error, and try the final HTTPS URL. A browser opening the site on your workstation does not prove server reachability.

The image is blank or nil

Cause: capture occurred before rendering, the selected element is absent or hidden, or the page returned an interstitial. Fix: add a page-appropriate wait, verify the selector, and capture a basic viewport to distinguish page loading from element selection.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

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

Full-page output is clipped

Cause: capture happened before set_viewport_full, or a region was requested outside the viewport. Fix: navigate, wait, call splash:set_viewport_full(), then capture; do not use region for off-viewport content.

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

Layout changes unexpectedly

Cause: viewport resizing crossed a responsive breakpoint or triggered JavaScript. Fix: set dimensions deliberately, wait after resizing, and compare a viewport shot with the full-page version.

Output cannot be opened

Cause: the client saved an error page or text response as an image. Fix: check HTTP status and response headers, ensure the body is non-empty, and write bytes without text conversion.

Performance, quality, and operational trade-offs

  • Choose JPEG when its white background and lossy compression are acceptable; Splash documents that it is often 1.5–2× faster than PNG.
  • Use PNG for transparency, crisp text, and pixel-sensitive comparisons.
  • Full-page rendering and element waits cost more time than a simple viewport capture, especially on pages with heavy JavaScript.
  • Vector scaling may improve sharpness and performance but can introduce artifacts. Compare output at the size your users will consume.
  • Cache or deduplicate requests in your own pipeline when the target content is unchanged; Splash’s reference does not establish a hosted caching or billing policy.

Splash’s Docker image is mentioned in its historical changelog, but the cited pages do not establish current image tags, security support, operating-system compatibility, uptime, or pricing. Treat deployment and maintenance as your responsibility unless your operator provides current guarantees.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

ScreenshotNeo provides a hosted screenshot API and MCP server. A single GET request returns PNG, JPEG, WebP, or PDF. It accepts cookie and consent banners as a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each cleanup step can be disabled. 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.

With the API key and target URL changed as needed, the cURL request is:

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 all parameters. Equivalent clients are useful when your application already runs in Python or Node.js:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

ScreenshotNeo also supports full-page capture with lazy images, CSS-selector element shots, dark mode, 12 device presets and custom viewports, retina scale, PDF paper and page options, custom CSS and JavaScript, click-before-capture, waits for selectors, delays or network idle, request blocking, headers, cookies, user agents, Authorization, timezone, geolocation, transparent backgrounds, resizing, configurable-TTL caching, signed image links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification. Its MCP tools—take_screenshot, get_page_info, and capture_pdf—let Claude, Cursor, and other MCP clients request captures.

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

Every plan includes every feature: Free provides 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots. Yearly billing gives two months free. Sign up free for ScreenshotNeo to try it without a card.

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.

FAQ

Does Splash take a screenshot of my local computer?

No. It renders the URL in Splash’s browser service and returns image data through its API.

Can I use a region to capture an entire long page?

No. A region is limited to the current viewport and uses coordinates relative to the current scroll position.

Which format should I automate first?

Start with PNG when fidelity or transparency matters; choose JPEG when a white background and the documented potential speed advantage fit your workload.

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

Frequently Asked Questions

Does Splash take a screenshot of my local computer?

No. It renders the URL in Splash’s browser service and returns image data through its API.

Can I use a region to capture an entire long page?

No. A region is limited to the current viewport and uses coordinates relative to the current scroll position.

Which format should I automate first?

Start with PNG when fidelity or transparency matters; choose JPEG when a white background and the documented potential speed advantage fit your workload.

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.

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