Cloudinary Transformation Rules
When to Use
- Building Cloudinary delivery/transformation URLs
- Converting natural language requests to transformation syntax
- Debugging transformation URLs that aren't working
- Optimizing images or videos with Cloudinary
- Applying effects, overlays, resizing, or cropping
Quick Start
Default Best Practice: Always Optimize
Add to the end of nearly every transformation URL (as final components):
- Automatically delivers optimal format
- Optimizes quality for best balance of visual quality and file size
- Reduces bandwidth and improves performance
Example: c_fill,g_auto,w_400,h_300/f_auto/q_auto
Exceptions - Don't add optimization when:
- Account has "Optimize By Default" enabled (already applied automatically)
- Special quality requirements (use , , or manual instead)
- Specific format required (replace with , , etc.)
- Delivering exact original with no modifications
Examples of common transformations (with optimization):
- Resize:
c_scale,w_400/f_auto/q_auto
- Smart crop:
c_fill,g_auto,h_300,w_400/f_auto/q_auto
- Background removal:
e_background_removal/f_png/q_auto
- Text overlay:
co_yellow,l_text:Arial_40:Hello%20World/fl_layer_apply,g_south/f_auto/q_auto
- Image overlay:
l_logo/c_scale,w_100/fl_layer_apply,g_north_west,x_10,y_10/f_auto/q_auto
Important: All transformation strings shown throughout this skill are illustrative examples to demonstrate syntax and concepts. When generating transformations, choose specific values (dimensions, colors, positions, etc.) based on the user's actual requirements and use case, not the example values shown.
For debugging: See references/debugging.md for detailed troubleshooting steps.
Gathering Requirements
Before generating a transformation URL, if not already specified, clarify these details based on the user's request:
For Resize/Crop Requests
Required:
- At least one dimension (width OR height)
- Crop behavior if both dimensions specified (fill, pad, scale, limit, etc.)
Clarify:
- Focal point/gravity (especially for cropping): Face detection? Center? Smart auto-detection?
- Maintain aspect ratio? (if only one dimension, this is automatic)
Example questions:
- "What dimensions do you need? (width and/or height)"
- "Should this fill the space (may crop) or fit within it (no cropping)?"
- "Any important focal point? (faces, center, specific area)"
For AI Transformation Requests
Background removal:
- Output format needs (PNG for transparency vs JPG with solid background)
- What to do with transparent area (keep transparent, add color, or gen_fill)
Generative fill:
- Target dimensions or aspect ratio
- How much extension needed
Generative replace:
- What object to replace (from)
- What to replace it with (to)
- Preserve original shape? (for clothing/objects)
Generative remove:
- What object(s) to remove
- Remove all instances or just one?
Generative background replace:
- Describe desired background (or use auto-generation)
- Need reproducibility? (consider seed parameter)
For Video Transformation Requests
Trimming:
- Start and end time, or duration
- Seconds or percentage of video
Codec/format:
- Output format needs (MP4, WebM, etc.)
- Quality requirements (use if unsure)
Audio:
- Keep or remove audio track
- If for autoplay, suggest removing audio ()
Always Recommend
Unless user specifies otherwise:
- Add at the end of transformation URLs (see Quick Start section for exceptions)
- Use for smart cropping when filling dimensions
- Consider cost for AI transformations (inform user of transformation credits)
Quick Reference
URL Structure
https://res.cloudinary.com/<cloud_name>/<asset_type>/<delivery_type>/<transformations>/<version>/<public_id>.<ext>
Key Rules:
- Commas () separate parameters within a component
- Slashes () separate components between transformations
- Each component acts on the output of the previous one
Parameter Types
Action parameters: Perform transformations (one action per component: each action transformation should be separated by a slash)
Qualifier parameters: Modify action behavior (in the same component as the action, using commas as separators)
Check the
Transformation Reference to determine if a parameter is an action or qualifier.
Core Transformations
Resize & Crop
Dimension value formats:
- Whole numbers (e.g., , ) = pixels
- Decimal values (e.g., , ) = percentage of original dimensions (0.5 = 50%, 1.0 = 100%)
Choosing the right crop mode:
- Resizing while maintaining original aspect ratio
- Specify only ONE dimension (width OR height)
- No cropping needed
- The user intentionally wants to stretch or squash an image by changing the aspect ratio
- Must fit exact dimensions (e.g., thumbnail grid, fixed layout)
- Okay to crop parts of image
- Combine with for smart cropping, or for portraits
- Image must fit within dimensions without cropping
- Okay to have empty space
- Maintaining full image content is critical
- Must fit exact dimensions without cropping
- Need to fill empty space with background color/blur/AI-generated pixels
- Use with or (blurred background) or
- Set maximum dimensions but don't upscale small images
- Preserving original quality of small images matters
- Creating thumbnails (typically avatars)
- Use with for face-centered crops
- Cloudinary should intelligently crop to interesting content
- Combine with for best results
- Good for dynamic content where focal point varies
Examples:
c_scale,w_400 # Resize width to 400px, maintain aspect ratio
c_scale,w_0.5 # Resize to 50% of original width
c_fill,g_auto,h_300,w_400 # Fill 400x300px dimensions, smart crop
c_fit,h_300,w_400 # Fit within dimensions, no crop
c_pad,b_white,h_300,w_400 # Pad to exact size with white background
c_pad,w_1.0 # Pad to original width (100%)
c_limit,w_1000 # Limit max width, no upscale
c_thumb,g_face,h_150,w_150 # Face-centered square thumbnail
c_auto,g_auto,w_800 # Auto crop to interesting area
Important: Always specify a crop mode explicitly. Avoid using both dimensions with
(will distort if aspect ratios don't match) - prefer one dimension to maintain aspect ratio.
Gravity (Focal Point)
Gravity determines which part of the image to focus on when cropping:
- - Smart detection (recommended for varied content; detects faces, objects, contrast)
- - Face detection (portraits, avatars)
- - Center position (centered subjects, logos)
- , , etc. - Compass positions (fixed locations, overlay positioning)
- - Custom offsets (integers = pixels, floats = percentage: 0.8 = 80%)
Examples:
c_fill,g_auto,w_400,h_300 # Smart crop
c_thumb,g_face,w_200,h_200 # Face-centered
l_logo/fl_layer_apply,g_south_east,x_10,y_10 # Logo bottom-right
Important:
- only works with , , , ,
- When using x, y, h, w together, use all integers OR all floats (don't mix)
Format & Quality
Recommended defaults:
- - Use for most production images (WebP to supported browsers, optimized file size)
Specific formats (when requirements dictate):
- - Transparency needed (e.g., after background removal)
- - Force JPEG (remove transparency)
- - Manual quality 1-100 (e.g., for thumbnails, for hero images)
- - Retina displays (Chromium-only, requires Client Hints - see limitations below)
Examples:
f_auto/q_auto # Recommended default
f_png/q_auto # PNG with transparency
q_80 # Manual 80% quality
Best Practice: Use
to separate format and quality as distinct components.
Responsive Images (, )
- Automatically adapts to device pixel ratio (Retina displays)
- Chromium-only (Chrome, Edge, Opera, Samsung Internet)
- Requires Client Hints configuration
- Falls back to on other browsers
- Does NOT work inside named transformations
Alternative for universal support: Use explicit
or
with 1x/2x variants
For Client Hints configuration, browser compatibility, responsive breakpoints, and framework integration, see references/responsive-images.md
Effects
Common effects:
- - Black and white (artistic, accessibility)
- - Vintage/nostalgic feel
- - Blur (privacy, placeholders; N typically 300-2000)
- - Enhance clarity (useful after resizing)
- - Illustrated style
co_rgb:RRGGBB,e_colorize:N
- Color tint (N = intensity 0-100, for brand theming)
- - See AI Transformations section
Examples:
e_blur:800 # Blur effect
e_sharpen # Enhance clarity
co_rgb:0044ff,e_colorize:40 # Blue tint at 40%
Note: Color (
) is a qualifier - use in same component as
.
Overlays & Underlays
Use for:
- - Image overlays (logos, watermarks, badges)
- - Image underlays (custom backgrounds behind transparent subjects)
- - Text overlays (labels, social cards, dynamic text)
Pattern:
- Declare: or or
l_text:Arial_40:Hello%20World
- Transform (optional): e.g. or (opacity)
- Apply:
/fl_layer_apply,g_<position>,x_<offset>,y_<offset>
Critical: Using for overlay dimensions:
- Without : Dimensions are relative to the overlay's original size
- Example: = 100% of the overlay image's width (not useful for small images)
- With : Dimensions are relative to the base image's size
- Example: = 100% of the base image's width (covers entire width)
- Always use when sizing overlays as a percentage of the base image
Examples:
l_logo/c_scale,w_100/fl_layer_apply,g_north_west,x_10,y_10 # Logo at 100px
l_logo/c_scale,fl_relative,w_0.25/fl_layer_apply,g_north_west,x_10,y_10 # Logo at 25% of image width
l_docs:one_black_pixel/c_scale,fl_relative,h_1.0,w_1.0/o_50/fl_layer_apply # Full-image semi-transparent overlay
co_yellow,l_text:Arial_40:Hello%20World/fl_layer_apply,g_south # Text overlay
u_background/e_background_removal # Custom background
Important:
- Color () is a qualifier — use in the same component as text overlay declaration
- Always use when you want overlay dimensions as a percentage of the base image
Borders & Rounding
- - Rounded corners (N = radius in pixels; for modern UI, cards)
- - Perfect circle (use with square dimensions; avatars, icons)
- - Border (frame images, separate from background)
Examples:
r_20 # 20px rounded corners
r_max # Perfect circle
bo_5px_solid_black # 5px black border
r_20,bo_5px_solid_rgb:0066ff # Rounded with border (same component)
Important: For borders that follow rounded corners, use border as qualifier in same component.
Background Color
- - Fill empty space with solid color (product images, letterboxing)
- - Blurred original as background (elegant alternative to solid)
- - AI-extended background (change aspect ratio without cropping; see AI Transformations for cost)
Examples:
b_lightblue,c_pad,w_1.0 # Light blue background
b_auto,c_pad,ar_16:9 # Blurred background, 16:9
b_gen_fill,c_pad,ar_1:1 # AI-extended to square
Critical: Background (
) is a qualifier - use
with pad crop in same component:
, NOT
.
Rotation & Flips
- , , - Rotate in 90° increments (correct orientation)
- - Rotate by degrees (e.g., to straighten crooked photos)
- - Horizontal flip (mirror selfies, directional images)
- - Vertical flip (reflections)
- / - Auto-rotate based on EXIF orientation
Examples:
a_90 # Rotate 90° clockwise
a_-2 # Straighten slight tilt
a_hflip # Mirror horizontally
a_auto_right # Auto-fix from EXIF
Named Transformations
Named transformations (
) save transformation chains for reuse. Suggest for:
- Transformations used across multiple assets
- Complex transformation chains
- Expensive operations (to enable baseline transformations and reduce costs)
Baseline transformations (
) cache expensive named transformations so they don't need to be regenerated. Use
instead of
for AI transformations (background removal, generative AI) that will have variations applied. This can reduce costs from 75-230 tx per variation down to 1 tx each after the initial baseline is generated.
Example: bl_bg_removed/c_scale,w_500
- Uses cached background removal result, only pays for resize (1 tx instead of 75 tx)
Important: ,
, and
don't work inside named transformations - use them directly in URLs:
For complete details, limitations, and baseline transformation examples, see references/named-transformations.md
Generative AI Transformations
Proactively suggest these AI transformations when appropriate:
Note: Numbers in parentheses (e.g., 75 tx) indicate additional transformation credits consumed per use. Standard transformations = 1 tx.
- (75 tx) - Remove backgrounds (e-commerce, profiles; combine with or )
- (50 tx) - Extend backgrounds (change aspect ratio without cropping; use with )
e_gen_background_replace:prompt_<text>
(230 tx) - AI-generated backgrounds (custom environments, seasonal variations; high cost)
e_gen_replace:from_<obj>;to_<new>
(120 tx) - Swap objects (product variations, colors; use for clothing)
e_gen_remove:prompt_<text>
(50 tx) - Remove objects (clean up distractions)
- (100 tx) - Improve quality (fix poor lighting/exposure)
- (10-100 tx) - Enlarge without quality loss (low-res to high-res)
Important: AI transformations cost significantly more (50-230 tx vs 1 tx). Inform users of costs and consider baseline transformations (e.g.,
bl_bg_removed/c_scale,w_500
) to avoid re-processing expensive operations - see
references/named-transformations.md and
references/transformation-costs.md for details.
For complete details, syntax, and powerful combinations, see references/ai-transformations.md
Video-Specific Transformations
Critical: Use
(not just
) to ensure video output - plain
may return an image thumbnail.
- - Automatic codec (recommended; optimal for browser/device)
- - Trim (start/end in seconds; create clips, remove intro/outro)
- - Remove audio (essential for autoplay; reduces file size)
- - Set frame rate (lower = smaller file; standardize rates)
- Video resizing - Same crop modes as images (, , )
Common patterns:
vc_auto/ac_none/f_auto:video/q_auto # Autoplay-ready
so_0/du_10/vc_auto/f_auto:video/q_auto # First 10 seconds
c_scale,w_720/vc_auto/f_auto:video/q_auto # Resize to 720p width
c_fill,g_auto,h_720,w_1280/vc_auto/f_auto:video/q_auto # 720p HD, smart crop
For complete details including codecs, trimming strategies, and video concatenation, see references/video-transformations.md
Variables & Conditionals
Variables reuse values and create templates:
$size_300/c_fill,h_$size,w_$size # Reuse value
$iw/w_$iw_div_2 # Half original width (arithmetic)
Conditionals adapt transformations dynamically:
if_w_gt_1000/c_scale,w_1000/if_end # Responsive sizing
if_ar_gt_1.0/c_fill,w_800,h_450/if_else/c_fill,w_450,h_800/if_end # Orientation handling
Key rules:
- Variable names: alphanumeric, start with letter, no underscores
- Conditionals: Must close with
- Arithmetic: , , , (left-to-right evaluation)
For complete syntax, arithmetic operations, nested conditionals, and real-world patterns, see references/advanced-features.md
Self-Validation Checklist
Before returning a transformation URL, verify:
- ✅ URL structure is complete (cloud_name, asset_type or or , delivery_type, public_id)
- ✅ Each component has only one action parameter (e.g., one crop mode per component)
- ✅ Crop mode is explicit (don't rely on defaults; avoid both dimensions with )
- ✅ Overlays end with in separate component
- ✅ Text strings are URL-encoded (spaces = , special chars encoded)
- ✅ Variable names follow rules (alphanumeric, start with letter, no underscores)
- ✅ compatibility (only works with , , , , )
- ✅ Background as qualifier (use with pad crop: , not )
- ✅ Format/quality at end (prefer as final components)
Quick syntax check:
- Commas separate parameters within a component:
- Slashes separate components:
c_fill,w_400/f_auto/q_auto
- Actions vs qualifiers: Only one action per component, qualifiers modify that action
See references/debugging.md for detailed examples of each check.
Debugging Checklist
When a transformation isn't working:
- Verify URL structure: Check that all required URL parts are present:
- Cloud name:
- Asset type: or or
- Delivery type: or etc.
- Public ID at the end
- Check the X-Cld-Error header: Cloudinary reports errors in the HTTP response header
- Check parameter names against Transformation Reference
- Check crop mode: Specify crop mode explicitly; avoid both dimensions with (causes distortion if aspect ratios don't match)
- Verify gravity compatibility: doesn't work with , , ,
- Check action vs qualifier: Only one action per component, qualifiers in same component
- Verify overlay pattern: Must end with component
- Check variable names: No underscores, must start with letter
- Verify URL encoding: Text overlays need URL-encoded strings (spaces = )
- Check auto parameters in named transformations: , , and don't work inside named transformations - use them directly in URLs
- Verify Client Hints for /: These only work on Chromium browsers with Client Hints enabled; fallback to otherwise (see references/responsive-images.md for configuration)
- Video returns image instead of video: Use (not just ) for video transformations - plain may return an image thumbnail
Checking X-Cld-Error Header
The
header contains error details when a transformation fails. To check it:
Using browser DevTools:
- Open Developer Tools (Network tab)
- Request the transformation URL
- Look for in Response Headers
Using code (fetch the URL):
javascript
fetch('https://res.cloudinary.com/demo/image/upload/w_abc/sample.jpg')
.then(response => {
const error = response.headers.get('x-cld-error');
if (error) {
console.log('Cloudinary Error:', error);
}
});
Common X-Cld-Error messages:
- - Width parameter expects a number
Invalid transformation syntax
- Malformed transformation string
- - Asset doesn't exist or public ID is incorrect
Transformation limit exceeded
- Account transformation quota reached
Online tool: Use the
X-Cld-Error Inspector to check any Cloudinary URL
For more details, see
Error Handling
Transformation Costs
Important: Warn users about high-cost transformations before generating URLs. AI effects cost significantly more than standard transformations (50-230 tx vs 1 tx).
For complete cost details and cost reduction strategies, see references/transformation-costs.md
Additional Resources
Skill References (Progressive Disclosure)
- references/debugging.md - Use when transformations return errors or unexpected results
- references/ai-transformations.md - Use when you need AI transformation prompt syntax, cost details, or complex AI combinations
- references/video-transformations.md - Use when working with video codecs, trimming strategies, or concatenation
- references/advanced-features.md - Use when building complex logic with variables, conditionals, or arithmetic
- references/responsive-images.md - Use when implementing responsive images, configuring Client Hints, or using dpr_auto/w_auto
- references/transformation-costs.md - Use when optimizing for cost or explaining cost implications to users
- references/named-transformations.md - Use when creating reusable transformations or reducing costs for repeated operations
- references/examples.md - Use when you need real-world examples beyond the Quick Start (social cards, e-commerce, responsive images)
Core Cloudinary Documentation
Image Transformations
Video Transformations
Common Mistakes & Best Practices
Avoid:
- ❌ → ✅ (both dimensions with c_scale distorts image; prefer one dimension)
- ❌ → ✅ (g_auto doesn't work with c_scale)
- ❌
l_logo/fl_layer_apply,g_north_west
→ ✅ l_logo/c_scale,w_100/fl_layer_apply,g_north_west
- ❌ → ✅
b_lightblue,c_pad,w_1.0/e_trim
(background as qualifier)
Always:
- Prefer in separate components over
- Use for smart cropping unless specific focal point needed
- Specify crop mode with width/height; prefer one dimension with
- Never guess parameter names - verify against documentation