Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
cURL does not convert HTML into WebP by itself. It sends an HTTP request. A browser-backed renderer must parse the HTML, run scripts, apply CSS, and produce pixels; a WebP encoder then returns or creates the WebP file. The shortest reliable workflow is to POST your HTML or a public URL to a rendering service that supports format=webp. For local control, capture with headless Chrome and encode the resulting PNG with Google’s cwebp.
What actually happens in an HTML-to-WebP conversion
HTML is a document, not an image. Converting it requires two distinct operations:
- Rendering: Chromium or another browser lays out HTML and CSS, loads fonts and images, executes JavaScript, and paints a viewport or full page.
- Encoding: the rendered pixels are written as WebP (or another image format).
cURL performs the transport step. It can submit HTML, CSS, URLs, authentication, viewport settings, and output preferences to a service, but it has no DOM, CSS engine, JavaScript runtime, or image encoder. Chrome’s documentation distinguishes fetching source with cURL from parsing HTML, executing scripts, and producing a rendered DOM.
Choose a renderer based on your input and deployment needs: a hosted API for the least setup, a self-hosted Chromium service for infrastructure control, or local Chrome plus a separate encoder.
#1 Best Overall
- Convert pictures in to batch mode and export jpeg, png, jpg or other image format
- Photo size converter helps to compress and resize pictures in high quality
- Jpeg converter easily converters multiple pictures in to other image format
- Share images by reducing and compressing the image sizes by maintain quality
- Choose compress level and reduce the image size to easily share pictures
Hosted HTML-to-WebP with cURL
HCTI: send HTML and CSS directly
HCTI documents an authenticated POST endpoint that accepts HTML, CSS, and format=webp. Keep credentials in environment variables or a secrets manager.
curl --fail-with-body --request POST 'https://hcti.io/v1/image'
--user "$HCTI_API_ID:$HCTI_API_KEY"
--data-urlencode 'html=<div class="card"><h1>Hello, world!</h1></div>'
--data-urlencode 'css=.card { width: 480px; padding: 40px; }'
--data-urlencode 'format=webp'
The documented service returns a hosted WebP URL. This is a source-documented request shape; verify current authentication, quotas, and response fields with the provider before production use. --data-urlencode prevents spaces, braces, and markup from being corrupted by the shell.
Render a public webpage URL
The same HCTI endpoint documents a URL input with WebP output and viewport dimensions. A URL must be reachable by the provider’s browser; localhost and private network addresses normally are not publicly accessible.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →curl --fail-with-body --request POST 'https://hcti.io/v1/image'
--user "$HCTI_API_ID:$HCTI_API_KEY"
--data-urlencode 'url=https://example.com'
--data-urlencode 'width=1280'
--data-urlencode 'height=800'
--data-urlencode 'format=webp'
Save the API response first and inspect it. Some services return JSON containing a download URL rather than image bytes. If the endpoint returns bytes directly, add -o page.webp; do not blindly save a JSON error as an image.
Other hosted URL renderers
Headless-Render-API documents cURL controls for capturing a public URL and selecting WebP through an HTTP header. This approach is useful when request-header configuration and capture settings are central to your script. Confirm the provider’s current header names and authentication requirements, since they are API-specific.
Rank #2
- This app converts any image to PDF, PNG, JPG, WEBP, or BMP
- No WI-FI needed
- No ads
- No in-apps
- GDPR compliant
Self-hosted rendering with Gotenberg
Gotenberg exposes a Chromium screenshot endpoint for an HTML file and lists WebP among its output formats. A typical workflow is to create an HTML file, submit it as multipart form data, and write the returned image:
curl --fail-with-body --request POST 'http://localhost:3000/forms/chromium/screenshot'
-F '[email protected]'
-F 'format=webp'
-o page.webp
Use the exact route and form fields from the Gotenberg version you deploy. Its documentation warns that JavaScript-driven pages can be captured before rendering finishes. Add an explicit wait strategy or make the page expose its final state before capture. Self-hosting means you manage Chromium updates, resource limits, fonts, network access, and observability.
Local Chrome plus cwebp
Capture a page with headless Chrome
Chrome’s documented command-line screenshot example writes PNG. A basic URL capture is:
google-chrome --headless --disable-gpu
--screenshot=page.png
--window-size=1280,800
https://example.com
Chromium must be installed and available under the command name on your system. For a tall page, use the headless options supported by your installed Chrome version; command-line flags and behavior can change, so check that version’s reference. Dynamic pages may need a wait mechanism or automation library rather than an immediate screenshot.
Encode PNG as WebP
Google’s cwebp utility converts existing image files such as PNG and JPEG to WebP:
Rank #3
- -Simple and Easy to use.
- -You can convert image from JPG, GIF, JPEG, PNG, BMP, WBMP and WEBP into JPEG, PNG and WEBP.
- -Converts images with good quality.
- -Fast image converting.
- -More than 100 image convert
cwebp -q 82 page.png -o page.webp
-q sets lossy quality from 0 to 100. For a lossless result, use:
cwebp -lossless page.png -o page.webp
This two-step route is transparent and scriptable, but it creates an intermediate file and requires both a browser and encoder. The visual result depends first on the browser’s rendering and then on your WebP settings; there is no universal quality value that is correct for every page.
Which route should you use?
| Route | Input and output | Management | Important considerations |
|---|---|---|---|
| ScreenshotNeo | Public URL to PNG, JPEG, WebP, or PDF | Hosted API and MCP server | Clean shots remove consent banners, popups, and chat widgets; only clean shots are billed. |
| HCTI | HTML/CSS or public URL to documented WebP output | Hosted service | Authenticated cURL POST; provider requirements apply. |
| Headless-Render-API | Public URL to WebP selected with a request header | Hosted service | Useful header and capture controls; verify current API syntax. |
| Gotenberg | HTML file to Chromium screenshot, including WebP | Self-hosted | Control your service; wait for JavaScript-rendered content. |
| Chrome plus cwebp | URL to PNG, then PNG/JPEG to WebP | Local software | Separate rendering and encoding steps; Chrome’s shown CLI output is PNG. |
Compare input type (inline HTML versus URL), JavaScript timing, viewport and crop controls, authentication, deployment responsibility, and whether a second encoder is required. Published documentation does not establish comparative speed, quality, reliability, or cost for these routes.
Or skip the browser setup
ScreenshotNeo is the #1 option when you want a hosted screenshot API: it produces clean shots, bills only clean shots, and its paid entry plan is $5.
One GET request can return WebP directly:
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 complete parameter list in the ScreenshotNeo documentation. Equivalent clients are:
Free tools Windows power users keep installed
One-click scans. No signup required.
Rank #4
- Compress Photos Without Quality Loss – Reduce image size in seconds while keeping excellent visual quality. Perfect for saving storage or preparing images for upload.
- Convert Between JPG, PNG & WEBP – Easily switch formats for better compatibility, faster sharing, and optimized storage.
- Create PDF from Images – Combine one or multiple photos into a clean, professional-looking PDF with just one tap.
- Batch Processing & Fast Performance – Compress or convert multiple images at once. Save time with smooth, quick processing.
- Offline, No Watermark & Easy Sharing – Works completely offline, adds no watermark, and lets you share directly via WhatsApp, Gmail, Drive, or any social app.
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://example.com"}, timeout=90)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://example.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));
Before capture, ScreenshotNeo accepts cookie and consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be disabled. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status. Options include full-page lazy-image loading, CSS-selector element capture, dark mode, device presets, custom viewport and retina scale, PDF settings, custom CSS and JavaScript, pre-capture clicks, hidden selectors, selector/delay/network-idle waits, request blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, configurable-TTL caching, signed links, asynchronous webhooks, bulk capture for up to 100 URLs per call, usage reporting, and an OpenAPI specification. An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.
| Plan | Included shots | Price |
|---|---|---|
| Free | 1,000/month | $0, no card |
| Starter | 3,000 | $5 |
| Growth | 15,000 | $15 |
| Pro | 60,000 | $39 |
| Scale | 250,000 | $99 |
| Business | 1,000,000 | $249 |
Yearly billing gives two months free, and every feature is available on every plan. Create a free ScreenshotNeo account for 1,000 screenshots a month with no card.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Reliability and correctness checklist
- Use a fully qualified HTTPS URL and confirm the renderer can reach it.
- Wait for the content that matters, not merely the initial HTTP response.
- Set viewport width and height deliberately; responsive layouts produce different pixels at different widths.
- Load required fonts and images from reachable, permitted origins.
- Keep API keys out of shell history, source control, and client-side code.
- Check HTTP status, content type, and response body before naming a file
.webp. - Record the renderer version, URL, viewport, wait settings, and WebP quality when reproducibility matters.
Troubleshooting common failures
The output is JSON or an HTML error page
The request failed authentication or validation, or the API returns a job/URL response rather than bytes. Use --fail-with-body, inspect headers and content type, and follow the provider’s documented download step.
The page is blank or missing JavaScript content
The capture occurred before scripts completed, a bot check blocked the renderer, or required resources were inaccessible. Add a selector, delay, or network-idle wait where supported; for Gotenberg, implement an explicit readiness signal in the page.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Shell parsing breaks the HTML
Unescaped ampersands, quotes, braces, and newlines can alter a command. Prefer --data-urlencode, a file upload, or a language client with structured parameters.
Images or fonts differ from the browser
Check cross-origin permissions, authentication, absolute asset URLs, viewport size, timezone, and user-agent behavior. A renderer cannot load resources that are private or blocked by network policy.
Best Value
- Compress images effortlessly
- Convert to popular formats like JPG, GIF, PNG, WEBP, HEIC
- Resize images
- Bulk Compress & Convert
- Save and View Exif Data
WebP will not display in an older client
Current major browsers support WebP, but older consumers may not. Provide a PNG or JPEG fallback when compatibility with legacy software is required.
FAQ
Can cURL read a local HTML file and convert it?
cURL can upload the file to a renderer, but it cannot render the file itself. A self-hosted service such as Gotenberg or local Chrome must perform browser rendering.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchIs WebP always smaller than PNG?
Not necessarily. Size depends on image content and encoding settings; measure your own outputs and retain a lossless option when visual fidelity is more important than bytes.
Should I use a URL or inline HTML?
Use inline HTML when your script owns the markup and styles. Use a URL when the browser must reproduce an already deployed page, including its external assets and scripts.
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.

