The complete guide to crystal-clear, high-resolution images
Why Images Look Blurry
Blurry images are almost always caused by insufficient pixel density for the display they’re viewed on. Modern screens—especially smartphones, tablets, and high-resolution monitors—pack many more pixels into the same physical space than older displays.
The HTML/CSS to Image API automatically generates high-resolution images by default to ensure your images look crisp on all devices. Here’s everything you need to know about creating pixel-perfect images.
Default High Resolution
The HCTI API defaults to 2x resolution (device_scale: 2) for HTML images to prioritize image quality. This ensures your images look sharp on both standard and high-DPI displays.
Understanding Pixel Density
The Modern Display Challenge
Today’s screens vary dramatically in pixel density:
Standard displays: 1 physical pixel = 1 CSS pixel (1x)
When you create an image at standard resolution (1x) and display it on a high-density screen, the browser must stretch those pixels to fill the available space—resulting in a blurry, pixelated appearance.
The 2x Rule Explained
The 2x rule is simple: create images at double your intended display size.
Example:
Display size needed: 400×400px
Image source size: 800×800px (2x)
Result: Sharp image on all screens
This ensures you have enough pixel data to satisfy high-density displays while still looking great on standard screens.
Device Scale Settings
The HCTI API uses the device_scale parameter to control image resolution:
Setting
Resolution
Use Case
File Size
1
Standard (1x)
Legacy screens, thumbnails
Smallest
2
High (2x)
Recommended for web
Medium
3
Maximum (3x)
Print, premium displays
Largest
Default Behavior
HTML images: device_scale: 2 (high resolution by default)
Problem: Your source images are too small for high-DPI rendering.
Example: Using a 200×200px image that needs to display at 200×200px on a 2x display.
Solution: Use source images at 2x your display size:
<!-- Instead of this --><imgsrc="logo-200x200.png"width="200"height="200"><!-- Use this --><imgsrc="logo-400x400.png"width="200"height="200">
2. Incorrect Device Scale for URLs
Problem: URL screenshots default to device_scale: 1.
Solution: Explicitly set device_scale: 2 for URL images:
{"url":"https://example.com","device_scale":2}
3. Mixed Resolution Assets
Problem: Some images in your HTML are high-resolution while others are not.
Solution: Ensure ALL images follow the 2x rule:
<!-- Good: All images are 2x their display size --><imgsrc="header-800x200.png"width="400"height="100"><imgsrc="logo-200x200.png"width="100"height="100"><imgsrc="photo-1200x800.png"width="600"height="400">
Use SVG for logos and icons that scale perfectly at any resolution:
<imgsrc="logo.svg"width="200"height="60"><!-- SVG automatically scales to any device -->
Performance Considerations
File Size Impact
Higher resolution means larger files:
device_scale: 1 → Base file size
device_scale: 2 → ~4x larger files
device_scale: 3 → ~9x larger files
Optimization Strategies
Use appropriate compression: Balance quality vs. file size
Choose the right format:
PNG for graphics with transparency
JPG for photographs
WebP for modern browsers (when supported)
Consider bandwidth: Higher resolution may impact load times
Performance Tip
Use device_scale: 2 as the sweet spot for web usage. It provides excellent quality on all displays while keeping file sizes reasonable.
Troubleshooting Checklist
When your image still looks blurry:
Device scale is set to 2 (for HTML) or explicitly specified (for URLs)
All source images are 2x their display size
External CDN images have high-resolution versions available
CSS background images use appropriately sized sources
Vector graphics (SVG) are used where possible
The generated image is being displayed at the correct size
Browser Testing
Test your images across different scenarios:
<!-- Test HTML - put this in your browser --><!DOCTYPE html><htmllang="en"><head><metaname="viewport"content="width=device-width, initial-scale=1.0"></head><body><h1>Image Quality Test</h1><!-- Your generated image --><imgsrc="your-generated-image.png"width="400"height="300"><!-- View at different sizes --><imgsrc="your-generated-image.png"width="200"height="150"><imgsrc="your-generated-image.png"width="800"height="600"></body></html>
Need Help?
Still experiencing blurry images? We’re here to help debug your specific case.