Skip to content
Focal

Focal makes pages faster, images lighter, catalogues cleaner and developers' lives easier.

Resize, crop and convert the images in your own storage by changing the URL.

Start free trial

Free for 14 days on 8 workers, then $449 a month.

Change any setting. Focal makes a new image, and the URL below it changes to match.

Demo output: the landscape photo at 1200 by 600 pixels
Source image

Output 1200 × 600 px

1200 px
600 px

Set one side to 0 and Focal keeps the image's proportions.

Common sizes
Focal URL https://img.focaltool.com/demo/1200x600/landscape.jpg

How Focal works

Your images stay in your bucket or on your server. When a browser asks for a size, Focal fetches the original and makes that size. Focal caches the result at the edge. The next request for that size comes from the cache. You change the size by changing the URL.

Start free trial
How Focal works Originals stay in your bucket (S3, GCS or R2) or on your own server. Focal is one server that fetches the original, transforms it, caches the result at the edge and delivers it. A phone gets a 400 by 800 crop, a tablet 800 by 1100, and a laptop 1600 by 960, each from its own URL. Your bucket S3, GCS or R2 Your own server Any public HTTPS URL originals Focal One server, four steps 1 Fetch Reads the original from storage 2 Transform Resizes, crops and converts it 3 Cache Keeps each version at the edge 4 Deliver Sends the size the URL asks for 1600x960 800x1100 400x800 How Focal works Originals stay in your bucket (S3, GCS or R2) or on your own server. Focal is one server that fetches the original, transforms it, caches the result at the edge and delivers it. A phone gets a 400 by 800 crop, a tablet 800 by 1100, and a laptop 1600 by 960, each from its own URL. Your bucket S3, GCS or R2 Your own server Any public HTTPS URL Focal One server, four steps 1 Fetch Reads the original from storage 2 Transform Resizes, crops and converts it 3 Cache Keeps each version at the edge 4 Deliver Sends the size the URL asks for 400x800 800x1100 1600x960

Every plan has every feature

You choose the number of workers. A worker is one image Focal can process at a time. Images served from cache use no worker.

from

$449 /mo

14-day free trial on 8 workers

  • Every feature
  • Unlimited transformations
  • Bandwidth included under fair use
  • Email support
  • Cancel any time

What Focal does today

You ask for most of these in the URL. The URL API lists each option with an example.

Image formats
  • Reads and writes JPEG, PNG, GIF, WebP and AVIF jpegpnggifwebpavif
  • Makes AVIF only when the URL asks for it format(avif)
Resizing and cropping
  • Resizes to a box, where 0 keeps the proportion 300x200800x0
  • Fits the whole image inside the box fit-infull-fit-inadaptive-fit-in
  • Keeps the part of the image you choose when it crops leftcenterrighttopmiddlebottom
  • Crops to exact pixel coordinates 10x20:300x400
  • Trims a plain background, with a tolerance you set trim:top-left:80
  • Flips the image when a size is negative -300x200
Optimisation
  • Sets the encoder quality quality(75)
  • Sends WebP to browsers that accept it when the URL names no format
  • Caches each format separately
  • Removes the colour profile strip_icc()
  • Removes EXIF metadata, GPS included, from every image
Filters
  • Blurs or sharpens blur(5)sharpen(1,1,true)
  • Turns the image grayscale grayscale()
  • Rotates by a quarter turn rotate(90)
  • Fills the space that fit-in leaves fill(white)
  • Scales relative to the source, or enlarges small images proportion(0.5)upscale()
Delivery
  • Reads originals from any public HTTPS location: an S3, GCS or R2 bucket, or your own server
  • Caches every result at the edge
  • Shows your usage on the dashboard
Read the URL API

Blog posts

See all posts

Try Focal on your own images

Add a bucket or server as your origin. Then request any size by URL. The trial lasts 14 days.

Your first URL looks like this

https://img.focaltool.com/your-key/unsafe/800x0/products/chair.jpg

Focal gives each project its own key. The part after unsafe/ is the size, then the path to the original in your storage.