Content Delivery API > Images and videos

Images and videos

All the assets are augmented with some extra fields exposed via the GraphQL API, providing you some extra possibilities on the frontend.

Images

Besides all the fields that you can explore via the CMS interface, the API can return both the BlurHash and the ThumbHash of every image, also as a Data-URLs.

You can embed the Data URL directly in the HTML of the page and then swap it with the actual image at a later time, to offer a smooth experience when loading images (LQIP).

If you're on React, Vue, or Svelte our Image components make everything extremely simple to implement.

Alternatively, a more minimal option is to use the dominant colors to prepare the space where the image will be shown:

{
allUploads {
blurhash
thumbhash
blurUpThumb
colors { hex }
}
}

Responsive images

One special augmentation that we offer on top of images in our GraphQL API is the responsiveImage object.

In this object you can find pre-computed image attributes that will help you setting up responsive images in your frontend without any additional manipulation.

We support all the imgix parameters and also, for extra control, the sizes argument, that we simply return inside the response so that you can control media query conditions:

{
allUploads {
responsiveImage(imgixParams: {fm: jpg, fit: crop, w: 600, h: 600}, sizes: "(max-width: 600px) 100vw, 600px") {
# always required
src
srcSet
width
height
# not required, but strongly suggested!
alt
title
# LQIP (base64-encoded)
base64
# Alternatively, a background color placeholder
bgColor
# you can omit 'sizes' if you explicitly pass the 'sizes' prop to the image component
sizes
}
}

One particularly handy feature of the CDA Playground in DatoCMS is that you can explore all the imgix parameters and read the documentation by searching for them in the docs panel:

For imgix Parameters that accept more than one value, you can pass them as an array in your graphQL query manually:

To read all the details of the responsiveImage object head to the blog post where you can also find some examples and integrations.

Videos

If you chose to upload videos on DatoCMS, thanks to the integration with Mux, we augment the video objects with:

Like so:

{
allUploads(filter: {type: {eq: video}}) {
video {
streamingUrl
mp4High: mp4Url(res: high)
mp4Med: mp4Url(res: medium)
mp4Low: mp4Url(res: low)
duration
framerate
thumbJpg: thumbnailUrl(format: jpg)
thumbPng: thumbnailUrl(format: png)
thumbGif: thumbnailUrl(format: gif)
}
}
}

Filtering

You can filter on all the meaningful fields that we offer in the uploads.

Here's an example of what you'll see in your CDA Playground:

Fetch uploads straight from the context

For the GraphQL veterans this will be obvious, but still we are impressed how cool it is to be able to fetch all the augmented assets directly from the context where they are used:

{
allAuthors {
name
avatar {
responsiveImage {
base64
sizes
srcSet
alt
title
}
}
}
}