- Get Started
- Image & Video APIs overview
- Developer kickstart
- SDK quick starts
- Try it!
- MCP servers and LLM tools (Beta)
- VS Code Extension (Beta)
- Video tutorial library
- Programmatic asset management
- Programmatic upload
- Upload programmatically
- Create upload presets
- Auto upload
- Moderate images with AI
- Use AI to generate image captions
- Upload images in Flutter
- Upload images in Node.js
- Auto-tag images in Node.js
- Upload multiple files in Node.js
- Upload videos in Node.js
- Upload images in Python
- Auto-tag images in Python
- Upload videos in Python
- Upload images in PHP
- Upload images in Go
- Upload assets in a React app
- Upload assets in a Vue.js app
- Drag-and-drop uploads in React
- Upload assets in a Next.js app
- Upload assets with Server Actions
- Upload assets in Svelte
- Upload assets in a SvelteKit app
- Upload assets in a Remix app
- Upload images in Hono
- Use webhooks to remove backgrounds
- Upload images in Laravel
- Interaction with Cloudinary APIs
- Cloudinary SDKs
- Find your credentials
- Configure the JavaScript SDK
- Configure the React SDK
- Configure the Angular SDK
- Configure the Flutter SDK
- Configure Svelte Cloudinary
- Configure the Javascript SDK in Svelte
- Getting started with Cloudinary in Node.js
- Configure the Node.js SDK
- Configure the Python SDK
- Configure the PHP SDK
- Configure the Go SDK
- Configure the Vue.js SDK
- Configure the Next.js SDK
- List images in Next.js
- Lazy load images with Next.js
- Image fallbacks in JavaScript
- Captioning on upload with Node.js
- Delete assets with Node.js
- Manage images in a Django app
- Cloudinary CLI
- Widgets and tools
- Programmatic upload
- Optimization and delivery
- Transformations
- Get started with transformations
- Advanced transformation features
- Text overlay transformations
- Complex transformations
- Named transformations
- Named transformations using TX Builder
- Advanced image components
- Trim videos in Node.js
- Splice videos in Node.js
- Zoompan effect
- Video transformations
- Crop and resize images in React
- Crop and resize videos in React
- Crop and resize images in Python
- Remove backgrounds and add drop shadows
- AI generative fill in Next.js
- Color accessibility in JavaScript
- Transformations for social media
- Dev Hints on YouTube
- Dev Hints en Español
- Cloudinary Café Training Sessions
- Programmatic asset management
- Additional onboarding resources
- Guides
- Cloudinary Image
- Product overview
- Image transformations
- Image transformations overview
- Resizing and cropping
- Placing layers on images
- Effects and enhancements
- Background removal
- Generative AI transformations
- Face-detection based transformations
- Custom focus areas
- Transformation refiners
- Animated images
- Transformations on 3D models
- Conditional transformations
- User-defined variables and arithmetic transformations
- Custom functions
- Image optimization and delivery
- Programmatic image creation
- Product Gallery widget
- Media Editor widget
- Image add-ons
- Cloudinary Video
- Upload
- Asset management
- Account management
- Retail and e-commerce
- User-generated content
- Accessible media
- AI in action
- Native mobile
- Add-ons
- Advanced Facial Attributes Detection
- Amazon Rekognition AI Moderation
- Amazon Rekognition Video Moderation
- Amazon Rekognition Auto Tagging
- Amazon Rekognition Celebrity Detection
- Aspose Document Conversion
- Cloudinary AI Background Removal
- Cloudinary AI Content Analysis
- Cloudinary AI Vision
- Cloudinary Duplicate Image Detection
- Google AI Video Moderation
- Google AI Video Transcription
- Google Auto Tagging
- Google Automatic Video Tagging
- Google Translation
- Imagga Auto Tagging
- Imagga Crop and Scale
- Perception Point Malware Detection
- Microsoft Azure Video Indexer
- OCR Text Detection and Extraction
- Pixelz - Remove the Background
- URL2PNG Website Screenshots
- VIESUSTM Automatic Image Enhancement
- WebPurify Image Moderation
- Cloudinary Image
- References
- SDKs
- Release Notes
Step 3: Your first transformations
Last updated: Apr-23-2025
Optimization is just the tip of the iceberg of what you can do with Cloudinary URL API parameters.
Transformations can adjust, improve or even redesign the look, feel and visual experience, of any original image or video to meet your UI needs — think of transformations as having your own personal programmatic UX designer.
Once you decide what types of transformations you want to apply for a particular use case, you can use that same transformation definition on multiple, even thousands of assets, so it's kind of like having infinite UI designer genies at your beck & call.
Let's start by adding some fun visual transformations onto the image you optimized in Step 2.
- Task 1: Add a grayscale effect to your image
- Task 2: Add a border to your black and white image
- Task 3: Add a text layer
- Task 4: Change the format
~4 minutes
Task 1: Watch what happens when you add a grayscale effect parameter to your image
Make sure you've got the URL (with your cloud name) from Step 2 open in a browser tab:
- Add
/e_grayscalejust before the/c_scale,w_500component and reload the URL.
/ /) is applied to the result of the previous component. In this task, you applied the effect transformation action to the original, and then the resizing action followed by the optimization action were applied to the grayscaled image.Task 2: Now add a border to your black and white image
-
After
/e_grayscale, add/bo_40px_solid_greenand reload the URL.
Task 3: Now add a text layer
Now you'll add the text: Good morning! on your image, including definitions for font, size, weight, alignment and color of the text layer.
For layer transformations, you also need a layer_apply component that tells Cloudinary where and how to apply the defined layer and closes the layer definition (it acts like the closing parentheses of your layer transformation).
For this example, you'll place it at (set its gravity to) the bottom right, offset by 60px in each direction.
-
Just after the border transformation component (
/bo_...), but before the resize (/c_scale) component, paste the string below:/l_text:Arial_100_bold_alignment_center:Good%0Amorning!,co_orange/fl_layer_apply,g_south_east,x_60,y_60 Let's bring back the color. Delete the
e_grayscaletransformation component from your delivery URL and reload it.
Task 4: Change the format
Converting any image or video from one format to another is as easy as just changing the file extension!
-
Remove the
/f_autofrom your URL, and change the extension of your URL from.jpgto.pngand reload the URL.If you try to download or inspect, you'll see that you're now delivering a PNG file.
-
Put the
/f_autoback (after/q_auto) and reload.Now the format you actually deliver will be the one that Cloudinary's auto-format mechanism deems best for the requesting browser given the image, but taking into consideration the requested .png extension.
If the image had any transparent or partially transparent pixels, the resulting format would also be one that supports transparency. For example, it would be likely to deliver a WEBP or AVIF file in most browsers, though it may still deliver PNG if that's deemed the best supported format for the requesting browser.
But since this image doesn't have transparency, the resulting auto-format will be the one that results in the most performant file size. For example, depending on your account setup, the delivered image is likely to be a JPG or AVIF.