Image Service

Resizing images for your site on the fly can be a little challenging to do. Storyblok's image service provides you with high-quality images in different formats and sizes for all devices and platforms! This guide will show you how to configure your images, including the format, layout, type, and image processing options.

You can also find documentation on v1 configuration options for frameworks like Nuxt and Gatsby.

NOTE:

This guide is about the current and newly released version of the image service. For the older version, read this section.

Installation / Requirements

Image service is native to Storyblok, you don't have to install anything in your application to use it. However, it's important to note that there are technical limits to image service.

Documentation

You can use Storyblok image service to optimize, resize and crop images for different platforms and devices. To do this, add a /m at the end of your asset URL, followed by additional filters and parameters we will learn in this guide.

The image service will transform every image on the Storyblok servers for you, and then sent through our CDN to it as fast as possible.

Note:

SVG (Scalable Vector Graphics) can’t be cropped, resized, or optimized since they can be scaled automatically.

Here's an example image below:

//a.storyblok.com/f/39898/3310x2192/e4ec08624e/demo-image.jpeg

Automatic WebP support detection

WebP is an image format that is well known for providing better compression compared to other formats. Since smaller images will make your pages load faster, our image service will help you increase your project's speed.

All the images delivered through the service will be automatically served in WebP format if the client supports it; otherwise the service will use the original file type.
You can force a specific format by using the format filter.


Optimize

You can make your images lighter by simply appending /m/ at the end of the URLs. This will enable server-side WebP support detection without performing any other change on the image.

Example:

https://a.storyblok.com/f/39898/3310x2192/e4ec08624e/demo-image.jpeg/m/


Resizing

Type Path Param
Original
Resized - Static /m /500x500
Proportional to Width /m /200x0
Proportional to Height /m /0x200

Resizing: Static

Resizing: static

Resizing: Proportional to Width

Image resized proportionally to the width

Resizing: Proportional to Height

Image resized proportionally to the height

Fit-In

The fit-in argument specifies that the image should not be auto-cropped but auto-resized (shrunk) to fit inside the imaginary width and height box instead.

To fill out the box with a color, use the fill filter filters:fill(CCCCCC) with a hexadecimal RGB expression (without the # character). If you want to fill your image with transparent pixels use filter:fill(transparent) combined with :format(png). This might add transparent pixels and make the asset a png image even with .jpeg
as the file extension of your original image.

Type Path Param
Original
Fit-In with CCCCCC background /m /fit-in/200x200/filters:fill(CCCCCC)
Fit-In with transparent background /m /fit-in/200x200/filters:fill(transparent):format(png)

Fit-In with CCCCCC background

Image with fit-in colored background

Fit-In with transparent background

Image with fit-in transparent background

Changing the format

To change the image format, use the format filter. Supported formats are "webp", "jpeg" and "png".

Example:

https://a.storyblok.com/f/39898/3310x2192/e4ec08624e/demo-image.jpeg/m/200x0/filters:format(png)

Image converted to png

Quality optimization

You can change the compression rate of your JPEG images using the quality filter. The value can be 0-100.

Type Path Param
Original
10% Quality /m /filters:quality(10)
Resized and 10% Quality /m /200x0/filters:quality(10)

Resized and 10% Quality

Image with 10% quality set

Facial detection and smart cropping

When cropping an image, define a smart filter that crops around the focal point. To use, insert the keyword ‘smart’ after the size definition. In our example, a different demo image since flowers don't have a face.

Type Path Param
Original
Resized without Smart Crop /m /600x130
Resized with Smart Crop /m /600x130/smart

Resized without Smart Crop

Image without smart crop

Resized with Smart Crop

Image with smart crop


Custom focal point

Use the focal point method to define the center of an image, Do this by adding the filter to the URL of the image as shown below:

filters:focal(<left>x<top>:<right>x<bottom>)

Examples:

To focus on the bottom of the image:

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/600x130/filters:focal(450x500:550x600)

Image with custom focus to the bottom

Focus on the top of the image:

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/600x130/filters:focal(450x0:550x100)
Image with custom focus to the top


Manual cropping

You can manually crop specific areas of an image by defining a rectangular cropping area. To do this, declare coordinates for the two points.

The two points of the rectangle are the top-left (first-point) and the bottom-right corners of the rectangle. You have to define the points as pairs of coordinates starting from the top-left corner of the image.

/<left>x<top>:<left>x<top>/

You can also combine cropping with the resizing functionality.

Examples:

To crop a square of 100 pixels starting from the coordinate 300 (x) and 200 (y):

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/300x200:400x300/

Storyblok editing capabilities

Cropping around the focal point

If you want to crop an area around a focal point in your image. Do this by calculating the coordinates of the top-left and bottom-right.


Given your focal point with coordinates X and Y and the size of the area around your point L, calculate the coordinates of the top left corner and bottom right corner of your cropping area with this method:

  • top-left x = X - L/2

  • top-left y = Y - L/2

  • bottom-right x = X + L/2

  • bottom-right y = Y + L/2

Examples:

Your focal point has coordinates 400:300 and you want to crop a square of 100 pixels around it.

  • top-left x: 400 - 100/2 = 350

  • top-left y: 300 - 100/2 = 250

  • bottom-right x: 400 + 100/2 = 450

  • bottom-right y: 300 + 100/2 = 350

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/350x250:450x350
Manually cropped image


Grayscale

You can serve black and white images with the grayscale() filter.

Examples:

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/600x130/filters:grayscale()

Grayscale image


Blur

You can blur images with the blur(radius, [sigma]) filter. This is particularly useful for placeholders for lazy-loaded images.
The parameters are:

  • radius: An int value between 0 and 150. the higher the number, the more blurred the image will be;

  • sigma: Optional. Defaults to the same value as the radius. Sigma is used in the gaussian function for blurring.

Examples:

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/600x230/filters:blur(10)

Blurred image


Rotation

You rotate your images with rotate(angle) filter. Angle is a value between 0 and 359.

Examples:

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/230x230/filters:rotate(90)

Storyblok editing capabilities


Flip

Flip your images with the resizing parameter. Adding a - in front of one of the sizes will make the image flip on the same axis. If you don't need to resize your image, use 0 as a value for that axis.

Examples:

Horizontally flipped image without resizing

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/-0x0

Storyblok editing capabilities

Vertically flipped image without resizing

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/0x-0
Storyblok editing capabilities

Images flipped on both axis with resizing

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/-600x-230
Storyblok editing capabilities


Brightness

Set the brightness of your image with the param, brightness(amount) where the amount is a value between -100 and 100.

Examples:

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/filters:brightness(80)

Storyblok editing capabilities


Rounded corners

Add rounded corners to your image and define a different radius for each of them with the round_corner(a|b,r,g,b,[transparent]) filter.
The parameters are:

  • a is an integer representing the radius size;

  • b is optional, and it's another parameter for the ellipsis of the rounded corners;

  • r, g, b are the background color outside the rounded corners;

  • transparent is an optional value from 0 to 1 to set the opacity of the background color.

filters:round_corner(<top-left>,<top-right>,<bottom-right>,<bottom-left>)

Examples:

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/600x230/filters:round_corner(30,255,255,255)
Image with rounder borders


Combining filters

You can combine multiple filters chaining them with colons: You have to write filters: just once at the start of the list.

Examples:

https://a.storyblok.com/f/39898/1000x600/d962430746/demo-image-human.jpeg/m/600x130/filters:focal(450x500:550x600):grayscale()

Storyblok editing capabilities


Migrating from the previous version of the service

If you are still using the previous version of the image service and are happy with that, keep using it. Anyway, we strongly advise you to migrate to the new version because you can benefit from the automatic WebP support detection, which will let you deliver lighter images to the users of your platform.

Migrating to the new version is very simple because you just need to:

  • change back the domain img2.storyblok.com to simply a.storyblok.com, which is the default domain for assets;

  • add /m at the end of the URL;

  • move the filters from the beginning of your path to the end;

  • if you are also using a custom domain to serve the assets stored in Storyblok, you need to forward the accept header from your CloudFront distribution. You can check the updates to the Custom Assets' Domain doc to update your configuration.

Examples

The URL of your asset is https://a.storyblok.com/f/39898/3310x2192/e4ec08624e/demo-image.jpeg and you want to apply the filters /200x0/filters:format(png). The URL with the first version of the image service is:

https://img2.storyblok.com/200x0/filters:format(png)/f/39898/3310x2192/e4ec08624e/demo-image.jpeg

In the new version, after applying the three transformations from the list above, the URL will look like this:

https://a.storyblok.com/f/39898/3310x2192/e4ec08624e/demo-image.jpeg/m/200x0/filters:format(png)

Note: You can see a live demo of the image service with Vue.js here.