Transforming Sanity Images ​
When working with Sanity.io images, you can leverage Sanity's built-in image transformation capabilities instead of using the sharp
plugin. This is particularly useful for handling Sanity's hotspot and crop features.
Fetching Images with GROQ ​
First, ensure your GROQ query includes all necessary image fields:
typescript
import { defineConfig } from '@bluecadet/launchpad-core';
import { sanitySource } from '@bluecadet/launchpad-content';
export default defineConfig({
content: {
sources: [
sanitySource({
id: 'content',
projectId: 'your-project-id',
queries: [{
id: 'pages',
query: `*[_type == "page"]{
image {
...,
asset->
}
}`
}]
})
],
plugins: [
mediaDownloader()
]
}
});
The asset->
reference is crucial for accessing the full image data, including hotspot and crop information.
Using the Image URL Transform Plugin ​
Add the sanityImageUrlTransform
plugin to transform image references into URLs:
typescript
import { defineConfig } from '@bluecadet/launchpad-core';
import { sanityImageUrlTransform, sanitySource } from '@bluecadet/launchpad-content';
export default defineConfig({
content: {
sources: [
sanitySource({
id: 'content',
projectId: 'your-project-id',
queries: [/* ... */]
})
],
plugins: [
sanityImageUrlTransform({
projectId: 'your-project-id',
dataset: 'production',
buildUrl: (builder) => builder
.width(800)
.format('webp')
.fit('crop')
.crop('center')
}),
mediaDownloader()
]
}
});
TIP
It's added before the mediaDownloader (unlike the sharp
plugin) because it modifies
Available Transformations ​
Sanity's image URL builder supports many transformations:
typescript
import { defineConfig } from '@bluecadet/launchpad-core';
import { sanityImageUrlTransform, sanitySource } from '@bluecadet/launchpad-content';
export default defineConfig({
content: {
sources: [
sanitySource({
id: 'content',
projectId: 'your-project-id',
queries: [/* ... */]
})
],
plugins: [
sanityImageUrlTransform({
projectId: 'your-project-id',
dataset: 'production',
buildUrl: (builder) => builder
.width(800) // Set width
.height(600) // Set height
.format('webp') // Convert format
.quality(80) // Adjust quality
.auto('format') // Auto-select best format
.fit('crop') // Crop fitting
.crop('center') // Crop position
.blur(10) // Apply blur
}),
mediaDownloader()
]
}
});
Resources ​
- Sanity Image URLs Reference
- Image Image Presentation Documentation
- sanityImageUrlTransform Plugin
- Sanity Content Source
Unlike the sharp
plugin, Sanity's image transformations are performed on their CDN, reducing your build time and server load.