Image optimization
WebP · AVIF · JPEG · PNGMake every pixel count.
Resize, crop, compress, and convert. Deliver images sized for the screen, in the format you need.
Optimize images, transcode video, compress PDFs, and turn HTML into documents. One place for the media work behind your next great build.
Explore the demo. No account required.

Drag to compare. Same dimensions, measured file sizes.
Illustrative local encoding; savings vary by image.
From a product image to a generated report, handle your media through a consistent HTTP API.
Resize, crop, compress, and convert. Deliver images sized for the screen, in the format you need.
Convert video for the web. Choose your resolution, trim a clip, extract a thumbnail, or remove audio.
Balance file size and clarity with four compression presets, from screen reading to print.
Turn a public page or raw HTML into a PDF, document, or screenshot for reports and repeatable workflows.
Use the HTTP client you already know. Send a file and your processing options, then use the URL in the response.
Explore the API reference# One image. Ready for the web.
curl https://api.latticemedia.xyz/v1/process/image \
-H "X-API-Key: $LATTICE_API_KEY" \
-F 'file=@photo.jpg' \
-F 'options={"format":"webp","quality":80}'// Node.js 22+ · native fetch
import { openAsBlob } from 'node:fs';
const form = new FormData();
form.append('file', await openAsBlob('photo.jpg'),
'photo.jpg');
form.append('options', JSON.stringify({
format: 'webp', quality: 80
}));
const response = await fetch(
'https://api.latticemedia.xyz/v1/process/image',
{ method: 'POST', body: form,
headers: { 'X-API-Key': process.env.LATTICE_API_KEY }
}
);
if (!response.ok) throw new Error(await response.text());
const result = await response.json();# pip install requests
import json
import os
import requests
with open('photo.jpg', 'rb') as image:
response = requests.post(
'https://api.latticemedia.xyz/v1/process/image',
headers={'X-API-Key': os.environ['LATTICE_API_KEY']},
files={'file': image},
data={'options': json.dumps({
'format': 'webp', 'quality': 80
})},
timeout=60,
)
response.raise_for_status()
result = response.json()Connect your CMS or send processed files straight to your own storage.
Choose the limits that fit your workload.
Monthly plans, billed in Australian dollars.
Have a larger workload or specific infrastructure requirements? Let’s work out the right setup.
The next step is a single image.