{"kind":"Skill","metadata":{"namespace":"community","name":"cloudinary-automation","version":"0.1.0"},"spec":{"description":"Automate Cloudinary media management including folder organization, upload presets, asset lookup, transformations, and usage monitoring through natural language commands","files":{"SKILL.md":"---\nname: Cloudinary Automation\ndescription: \"Automate Cloudinary media management including folder organization, upload presets, asset lookup, transformations, and usage monitoring through natural language commands\"\nrequires:\n  mcp:\n    - rube\n---\n\n# Cloudinary Automation\n\nAutomate Cloudinary media management workflows -- create folders, configure upload presets, look up assets, manage transformations, search folders, and monitor usage -- all through natural language.\n\n**Toolkit docs:** [composio.dev/toolkits/cloudinary](https://composio.dev/toolkits/cloudinary)\n\n---\n\n## Setup\n\n1. Add the Rube MCP server to your environment: `https://rube.app/mcp`\n2. Connect your Cloudinary account when prompted (API key auth via Composio)\n3. Start issuing natural language commands for Cloudinary automation\n\n---\n\n## Core Workflows\n\n### 1. Organize Assets with Folders\n\nCreate folder structures for organizing hosted images, videos, and raw files.\n\n**Tool:** `CLOUDINARY_CREATE_FOLDER`\n\nKey parameters:\n- `folder` -- full path of the new asset folder (required), e.g., `images/events/2023`\n\nSupporting tools:\n- `CLOUDINARY_SEARCH_FOLDERS` -- search folders by name, path, or creation date using Lucene-like expressions\n  - `expression` -- search filter (e.g., `name:sample AND path:events`)\n  - `max_results` -- 1-500 results (default 50)\n  - `sort_by` -- list of sort objects (e.g., `[{\"created_at\": \"desc\"}]`)\n  - `next_cursor` -- pagination cursor\n- `CLOUDINARY_GET_RESOURCES_BY_ASSET_FOLDER` -- list assets within a specific folder\n\nExample prompt:\n\u003e \"Create a folder called 'marketing/campaigns/spring-2026' in Cloudinary\"\n\n---\n\n### 2. Configure Upload Presets\n\nDefine centralized upload behavior including target folder, allowed formats, transformations, tags, and overwrite rules.\n\n**Tool:** `CLOUDINARY_CREATE_UPLOAD_PRESET`\n\nKey parameters:\n- `name` -- preset name (auto-generated if omitted)\n- `folder` -- target folder path for uploads (e.g., `samples/`)\n- `allowed_formats` -- comma-separated list (e.g., `jpg,png,webp`)\n- `tags` -- comma-separated tags to apply (e.g., `marketing,thumbnail`)\n- `transformation` -- incoming transformation (e.g., `c_limit,w_500`)\n- `eager` -- eager transformations to generate on upload (e.g., `c_fill,g_face,h_150,w_150`)\n- `unsigned` -- allow unsigned uploads (`true`/`false`)\n- `overwrite` -- overwrite existing assets with same public_id (cannot be `true` when `unsigned=true`)\n- `resource_type` -- `image`, `video`, or `raw` (default `image`)\n- `unique_filename` -- append random suffix to avoid collisions (default `true`)\n- `use_filename` -- use original filename (default `false`)\n- `moderation` -- moderation type: `manual`, `webpurify`, `aws_rek`, etc.\n- `auto_tagging` -- confidence threshold 0.0-1.0 for AI auto-tagging\n- `notification_url` -- webhook URL for upload notifications\n\nExample prompt:\n\u003e \"Create an upload preset called 'product-images' that only allows JPG and PNG, stores in 'products/' folder, and auto-tags with 0.7 confidence\"\n\n---\n\n### 3. Look Up Asset Details\n\nRetrieve full details for a specific asset by its public ID, including metadata, derived assets, and related resources.\n\n**Tool:** `CLOUDINARY_GET_RESOURCE_BY_PUBLIC_ID`\n\nKey parameters:\n- `public_id` -- the asset's public ID (required)\n- `resource_type` -- `image`, `video`, or `raw` (required)\n- `type` -- delivery type: `upload`, `private`, `authenticated`, `fetch`, etc. (required)\n- `colors` -- include color histogram and predominant colors\n- `faces` -- include detected face coordinates\n- `media_metadata` -- include IPTC, XMP, and detailed metadata\n- `quality_analysis` -- include quality analysis scores\n- `phash` -- include perceptual hash for similarity detection\n- `versions` -- include backed-up versions\n- `related` -- include related assets\n- `max_results` -- max derived/related assets to return (1-500)\n\nExample prompt:\n\u003e \"Get full details for the image 'products/hero-banner' including color analysis and quality scores\"\n\n---\n\n### 4. Manage Transformations and Derived Assets\n\nList existing transformations, apply eager transformations to uploaded assets, and clean up derived resources.\n\n**Tools:**\n- `CLOUDINARY_GET_TRANSFORMATIONS` -- list all named and unnamed transformations\n  - `max_results` -- 1-500 (default 10)\n  - `next_cursor` -- pagination cursor\n- `CLOUDINARY_EXPLICIT_RESOURCE` -- update an existing asset: pre-generate transformations, update metadata, move to new folders, or modify tags\n  - `public_id` -- target asset (required)\n  - `eager` -- list of transformation strings to pre-generate (e.g., `[\"c_fill,w_300,h_200\", \"c_thumb,w_100,h_100,g_face\"]`)\n  - `eager_async` -- generate transformations asynchronously\n  - `tags` -- replace existing tags\n  - `asset_folder` -- move asset to a new folder\n  - `display_name` -- set display name\n  - `context` -- key-value metadata (e.g., `{\"alt\": \"Mountain view\"}`)\n  - `invalidate` -- invalidate CDN cache (takes up to 1 hour)\n- `CLOUDINARY_DELETE_DERIVED_RESOURCES` -- delete specific derived assets by IDs (up to 100 per call)\n\nExample prompt:\n\u003e \"Pre-generate a 300x200 fill crop and a 100x100 face-detection thumbnail for asset 'products/hero-banner'\"\n\n---\n\n### 5. Monitor Usage and Configuration\n\nCheck account-level usage limits, environment configuration, and tag inventory.\n\n**Tools:**\n- `CLOUDINARY_GET_USAGE` -- monitor storage, bandwidth, requests, and quota limits\n- `CLOUDINARY_GET_CONFIG` -- fetch environment config details\n  - `settings` -- set to `true` to include configuration settings like `folder_mode`\n- `CLOUDINARY_GET_TAGS` -- list all tags for a resource type\n\nExample prompt:\n\u003e \"Show me my Cloudinary account usage and remaining quota\"\n\n---\n\n### 6. Set Up Webhook Triggers\n\nCreate webhook notifications for specific Cloudinary events.\n\n**Tool:** `CLOUDINARY_CREATE_TRIGGER`\n\nUse to receive callbacks when uploads complete, transformations finish, or other events occur.\n\nExample prompt:\n\u003e \"Create a webhook trigger that notifies https://my-app.com/hook on upload events\"\n\n---\n\n## Known Pitfalls\n\n| Pitfall | Details |\n|---------|---------|\n| Folder creation idempotency | `CLOUDINARY_CREATE_FOLDER` may error or no-op if the path already exists -- design idempotent folder naming |\n| Preset-upload alignment | Upload preset options like `allowed_formats`, `folder`, and `unsigned` must match the actual upload method or uploads will be rejected |\n| Strict asset lookup | `CLOUDINARY_GET_RESOURCE_BY_PUBLIC_ID` fails if any of `resource_type`, `type`, or `public_id` is incorrect, even when the asset exists |\n| Folder path sensitivity | `CLOUDINARY_GET_RESOURCES_BY_ASSET_FOLDER` only lists assets in the exact folder specified; typos return empty results |\n| Quota blocking | `CLOUDINARY_GET_USAGE` reflects account-level limits -- hitting caps silently blocks uploads until usage is checked and addressed |\n| CDN invalidation delay | Setting `invalidate=true` on `CLOUDINARY_EXPLICIT_RESOURCE` takes up to 1 hour to propagate |\n| Unsigned vs overwrite conflict | Cannot set `overwrite=true` when `unsigned=true` in upload presets |\n\n---\n\n## Quick Reference\n\n| Action | Tool Slug | Key Params |\n|--------|-----------|------------|\n| Create folder | `CLOUDINARY_CREATE_FOLDER` | `folder` |\n| Search folders | `CLOUDINARY_SEARCH_FOLDERS` | `expression`, `max_results` |\n| List folder assets | `CLOUDINARY_GET_RESOURCES_BY_ASSET_FOLDER` | folder path |\n| Create upload preset | `CLOUDINARY_CREATE_UPLOAD_PRESET` | `name`, `folder`, `allowed_formats`, `tags` |\n| Get asset details | `CLOUDINARY_GET_RESOURCE_BY_PUBLIC_ID` | `public_id`, `resource_type`, `type` |\n| List transformations | `CLOUDINARY_GET_TRANSFORMATIONS` | `max_results`, `next_cursor` |\n| Update/transform asset | `CLOUDINARY_EXPLICIT_RESOURCE` | `public_id`, `eager`, `tags` |\n| Delete derived assets | `CLOUDINARY_DELETE_DERIVED_RESOURCES` | `derived_resource_ids` |\n| Get usage | `CLOUDINARY_GET_USAGE` | (none) |\n| Get config | `CLOUDINARY_GET_CONFIG` | `settings` |\n| List tags | `CLOUDINARY_GET_TAGS` | resource_type |\n| Create webhook | `CLOUDINARY_CREATE_TRIGGER` | event type, URL |\n\n---\n\n*Powered by [Composio](https://composio.dev)*\n"},"import":{"commit_sha":"f2b5e29bc315f04c8e09591ba275f4c4f7d4b8fe","imported_at":"2026-05-18T20:07:47Z","license_text":"","owner":"ComposioHQ","repo":"ComposioHQ/awesome-claude-skills","source_url":"https://github.com/ComposioHQ/awesome-claude-skills/tree/f2b5e29bc315f04c8e09591ba275f4c4f7d4b8fe/composio-skills/cloudinary-automation"}},"content_hash":[214,146,68,94,115,6,0,93,149,248,212,99,74,153,109,139,114,165,207,161,156,201,122,38,31,222,33,0,203,156,106,252],"trust_level":"unsigned","yanked":false}
