Back to Blog
n8nCloudinaryintegrationmedia managementautomationtutorial
n8n + Cloudinary Integration: 5 Powerful Workflows You Can Build Today
n8nautomation TeamApril 13, 2026
TL;DR: Integrate n8n with Cloudinary to automate image and video uploads, optimization, and content delivery. This guide provides five powerful workflows to streamline your media management, allowing you to save time and ensure your assets are always perfectly prepared for their target platforms.
Efficient media management is crucial for any modern business, and automating these processes can save countless hours. This is where the power of n8nautomation.cloud combined with Cloudinary shines. By integrating n8n with Cloudinary, you can effortlessly handle image and video uploads, transformations, optimization, and delivery, ensuring your digital assets are always perfect for any platform.
Streamline Your Media Management with n8n + Cloudinary
Cloudinary is a robust cloud-based media management platform that offers a comprehensive suite of tools for handling digital assets. From image and video uploads to advanced transformations, optimization, and secure delivery, Cloudinary simplifies complex media workflows. When you integrate Cloudinary with n8n, you unlock unparalleled automation capabilities, transforming tedious manual tasks into seamless, automated processes.Why Automate Cloudinary with n8n?
n8n's flexible workflow automation allows you to connect Cloudinary with hundreds of other applications and services. This means you can trigger media operations based on events in other systems, process assets, and then push them to their final destination without manual intervention. For example, you can automatically upload images from new Google Drive files, optimize user-generated content from Typeform, or transcode videos from YouTube uploads. The possibilities are endless, and the benefits include:- Time Savings: Eliminate repetitive manual tasks like uploading, resizing, and optimizing media.
- Improved Efficiency: Automate content pipelines, ensuring media is processed and delivered quickly.
- Consistency: Apply consistent transformations and optimizations across all your digital assets.
- Scalability: Easily handle growing volumes of media without increasing manual workload.
- Reduced Errors: Minimize human error in media handling processes.
Workflow 1: Automatic Image Upload from New Google Drive Files
Imagine you have a team that regularly uploads images to a specific Google Drive folder, and you need these images to be automatically uploaded to Cloudinary for further processing and delivery. This workflow automates that entire process.How it works:
- Google Drive Trigger: The workflow starts with a Google Drive Trigger node, configured to watch a specific folder for new files.
- Download File: A second Google Drive node (using the "Download a File" operation) fetches the newly added image.
- Cloudinary Upload: The Cloudinary node then takes the downloaded file and uploads it to your Cloudinary account. You can specify folders, tags, and even initial transformations here.
{
"nodes": [
{
"parameters": {
"folderId": "YOUR_GOOGLE_DRIVE_FOLDER_ID"
},
"name": "Google Drive Trigger",
"type": "n8n-nodes-base.googleDriveTrigger",
"typeVersion": 1,
"trigger": true,
"credentials": {
"googleDriveOAuth2Api": {
"id": "YOUR_GOOGLE_DRIVE_CREDENTIAL_ID",
"name": "Google Drive account"
}
}
},
{
"parameters": {
"fileId": "={{$json.file.id}}",
"binaryData": true
},
"name": "Download File",
"type": "n8n-nodes-base.googleDrive",
"typeVersion": 1,
"credentials": {
"googleDriveOAuth2Api": {
"id": "YOUR_GOOGLE_DRIVE_CREDENTIAL_ID",
"name": "Google Drive account"
}
}
},
{
"parameters": {
"operation": "upload",
"resourceType": "image",
"file": "={{$node["Download File"].binary.data}}"
},
"name": "Cloudinary Upload",
"type": "n8n-nodes-base.cloudinary",
"typeVersion": 1,
"credentials": {
"cloudinaryApi": {
"id": "YOUR_CLOUDINARY_CREDENTIAL_ID",
"name": "Cloudinary account"
}
}
}
],
"connections": {
"Google Drive Trigger": {
"main": [
[
"Download File",
"main"
]
]
},
"Download File": {
"main": [
[
"Cloudinary Upload",
"main"
]
]
}
}
}
Workflow 2: Optimizing and Delivering User-Generated Content from Typeform
Collecting user-generated content (UGC) is fantastic, but ensuring it's optimized and ready for web delivery can be a headache. This workflow automates the process of taking UGC images from Typeform, optimizing them with Cloudinary, and then notifying your team.How it works:
- Typeform Trigger: A Typeform Trigger node initiates the workflow when a new submission containing an image is received.
- Cloudinary Upload & Optimize: The Cloudinary node uploads the image. Importantly, you can specify transformation parameters directly in the upload step to automatically resize, crop, or apply effects for optimization.
- Slack Notification: A Slack node sends a notification to a designated channel, including the Cloudinary URL of the optimized image.
Tip: Cloudinary offers extensive image and video transformation capabilities directly through URL parameters. You can leverage these in subsequent HTTP Requests or directly within the Cloudinary node's upload options for powerful on-the-fly optimization.
{
"nodes": [
{
"parameters": {
"formId": "YOUR_TYPEFORM_FORM_ID"
},
"name": "Typeform Trigger",
"type": "n8n-nodes-base.typeformTrigger",
"typeVersion": 1,
"trigger": true,
"credentials": {
"typeformApi": {
"id": "YOUR_TYPEFORM_CREDENTIAL_ID",
"name": "Typeform account"
}
}
},
{
"parameters": {
"operation": "upload",
"resourceType": "image",
"file": "={{$json.answers.find(ans => ans.type === 'file_upload').file_url}}",
"transformations": [
{
"transformationType": "width",
"value": "800"
},
{
"transformationType": "crop",
"value": "fill"
},
{
"transformationType": "quality",
"value": "auto:good"
}
]
},
"name": "Cloudinary Upload & Optimize",
"type": "n8n-nodes-base.cloudinary",
"typeVersion": 1,
"credentials": {
"cloudinaryApi": {
"id": "YOUR_CLOUDINARY_CREDENTIAL_ID",
"name": "Cloudinary account"
}
}
},
{
"parameters": {
"channel": "#ugc-submissions",
"text": "New user-generated image submitted: {{$node["Cloudinary Upload & Optimize"].json.secure_url}}"
},
"name": "Slack Notification",
"type": "n8n-nodes-base.slack",
"typeVersion": 1,
"credentials": {
"slackApi": {
"id": "YOUR_SLACK_CREDENTIAL_ID",
"name": "Slack account"
}
}
}
],
"connections": {
"Typeform Trigger": {
"main": [
[
"Cloudinary Upload & Optimize",
"main"
]
]
},
"Cloudinary Upload & Optimize": {
"main": [
[
"Slack Notification",
"main"
]
]
}
}
}
Workflow 3: Resizing and Watermarking Images for E-commerce Product Updates
For e-commerce businesses, maintaining consistent product imagery across various platforms is critical. This workflow automates the process of resizing and adding a watermark to images, preparing them for your online store or other sales channels.How it works:
- Webhook Trigger: The workflow is initiated by a Webhook node, which could be triggered by your e-commerce platform (e.g., Shopify, WooCommerce) when a new product image is uploaded.
- Cloudinary Fetch & Transform: The first Cloudinary node fetches the original image (if it's already in Cloudinary) or takes the URL from the webhook. It then applies transformations for resizing and watermarking.
- Cloudinary Update (Optional) / Deliver: A second Cloudinary node or an HTTP Request node then pushes the transformed image URL back to your e-commerce platform or stores it for future use.
{
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "product-image-update"
},
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"trigger": true
},
{
"parameters": {
"operation": "upload",
"resourceType": "image",
"file": "={{$json.image_url}}",
"transformations": [
{
"transformationType": "width",
"value": "1200"
},
{
"transformationType": "height",
"value": "1200"
},
{
"transformationType": "crop",
"value": "fit"
},
{
"transformationType": "overlay",
"value": "text:Arial_30:Copyright"
},
{
"transformationType": "gravity",
"value": "south_east"
},
{
"transformationType": "opacity",
"value": "60"
}
]
},
"name": "Cloudinary Fetch & Transform",
"type": "n8n-nodes-base.cloudinary",
"typeVersion": 1,
"credentials": {
"cloudinaryApi": {
"id": "YOUR_CLOUDINARY_CREDENTIAL_ID",
"name": "Cloudinary account"
}
}
},
{
"parameters": {
"url": "YOUR_ECOMMERCE_PLATFORM_API_ENDPOINT",
"method": "POST",
"jsonBody": true,
"bodyParameters": [
{
"name": "productId",
"value": "={{$json.productId}}"
},
{
"name": "imageUrl",
"value": "={{$node["Cloudinary Fetch & Transform"].json.secure_url}}"
}
]
},
"name": "Update E-commerce Platform",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 1
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
"Cloudinary Fetch & Transform",
"main"
]
]
},
"Cloudinary Fetch & Transform": {
"main": [
[
"Update E-commerce Platform",
"main"
]
]
}
}
}
Workflow 4: Video Transcoding and Delivery for New YouTube Uploads
Managing video across different platforms (e.g., YouTube for public viewing, internal knowledge base for training) often requires specific formats or resolutions. This workflow automatically transcodes newly uploaded YouTube videos using Cloudinary and makes them available for other uses.How it works:
- YouTube Trigger: A YouTube Trigger node starts the workflow when a new video is uploaded to your channel.
- Cloudinary Video Upload & Transcode: The Cloudinary node takes the YouTube video URL and uploads it to Cloudinary. You can then apply video transformations, such as changing resolution, format, or adding intro/outro clips.
- Send to Internal System: An HTTP Request node or another integration node (e.g., Notion, Google Drive) sends the transcoded video's Cloudinary URL to an internal documentation system or storage.
Note: Video processing can be resource-intensive. Ensure your Cloudinary plan supports the video transformations you intend to use. When running complex video workflows, consider managing your own dedicated n8n instance with n8nautomation.cloud for guaranteed performance and uptime.
{
"nodes": [
{
"parameters": {
"channelId": "YOUR_YOUTUBE_CHANNEL_ID"
},
"name": "YouTube Trigger",
"type": "n8n-nodes-base.youTubeTrigger",
"typeVersion": 1,
"trigger": true,
"credentials": {
"youtubeOAuth2Api": {
"id": "YOUR_YOUTUBE_CREDENTIAL_ID",
"name": "YouTube account"
}
}
},
{
"parameters": {
"operation": "upload",
"resourceType": "video",
"file": "={{$json.items[0].snippet.thumbnails.high.url}}",
"uploadOptions": [
{
"name": "eager",
"value": "[{'width': 640, 'height': 360, 'format': 'mp4'}, {'width': 320, 'height': 180, 'format': 'webm'}]"
}
]
},
"name": "Cloudinary Video Upload & Transcode",
"type": "n8n-nodes-base.cloudinary",
"typeVersion": 1,
"credentials": {
"cloudinaryApi": {
"id": "YOUR_CLOUDINARY_CREDENTIAL_ID",
"name": "Cloudinary account"
}
}
},
{
"parameters": {
"url": "YOUR_INTERNAL_SYSTEM_API_ENDPOINT",
"method": "POST",
"jsonBody": true,
"bodyParameters": [
{
"name": "videoTitle",
"value": "={{$json.items[0].snippet.title}}"
},
{
"name": "webmUrl",
"value": "={{$node["Cloudinary Video Upload & Transcode"].json.eager[1].url}}"
}
]
},
"name": "Send to Internal System",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 1
}
],
"connections": {
"YouTube Trigger": {
"main": [
[
"Cloudinary Video Upload & Transcode",
"main"
]
]
},
"Cloudinary Video Upload & Transcode": {
"main": [
[
"Send to Internal System",
"main"
]
]
}
}
}
Workflow 5: Dynamic Image Generation for Social Media Posts
Creating engaging social media content often involves custom graphics. This workflow demonstrates how to dynamically generate images with Cloudinary based on content from a CMS (Content Management System) and then schedule them for social media posting.How it works:
- CMS Trigger (e.g., Strapi, headless WordPress): The workflow starts with a webhook or custom trigger from your CMS when a new blog post or promotional content is published.
- Set Social Media Text: A Set node extracts relevant text (e.g., title, excerpt) from the CMS data, formatting it for the social media image.
- Cloudinary Dynamic Image Creation: The Cloudinary node uses its text overlay capabilities on a base image to dynamically generate a social media graphic with the extracted text.
- Social Media Scheduler (e.g., Buffer, Hootsuite): An integration node for your chosen social media scheduler takes the dynamically generated image URL and schedules a post across your social channels.
{
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "new-blog-post"
},
"name": "CMS Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"trigger": true
},
{
"parameters": {
"mode": "merge",
"json": [
{
"name": "socialTitle",
"value": "={{$json.title}}"
},
{
"name": "socialExcerpt",
"value": "={{$json.excerpt.substring(0, 100)}}..."
}
],
"options": {}
},
"name": "Set Social Media Text",
"type": "n8n-nodes-base.set",
"typeVersion": 1
},
{
"parameters": {
"operation": "upload",
"resourceType": "image",
"file": "https://res.cloudinary.com/your_cloud_name/image/upload/v1/your_base_image",
"transformations": [
{
"transformationType": "overlay",
"value": "text:Arial_40:{{$node['Set Social Media Text'].json.socialTitle}}"
},
{
"transformationType": "color",
"value": "white"
},
{
"transformationType": "gravity",
"value": "north"
},
{
"transformationType": "y",
"value": "20"
},
{
"transformationType": "overlay",
"value": "text:Arial_20:{{$node['Set Social Media Text'].json.socialExcerpt}}"
},
{
"transformationType": "color",
"value": "white"
},
{
"transformationType": "gravity",
"value": "center"
},
{
"transformationType": "y",
"value": "60"
}
],
"fileName": "social_post_{{Date.now()}}"
},
"name": "Cloudinary Dynamic Image Creation",
"type": "n8n-nodes-base.cloudinary",
"typeVersion": 1,
"credentials": {
"cloudinaryApi": {
"id": "YOUR_CLOUDINARY_CREDENTIAL_ID",
"name": "Cloudinary account"
}
}
},
{
"parameters": {
"url": "YOUR_SOCIAL_MEDIA_SCHEDULER_API_ENDPOINT",
"method": "POST",
"jsonBody": true,
"bodyParameters": [
{
"name": "imageUrl",
"value": "={{$node["Cloudinary Dynamic Image Creation"].json.secure_url}}"
},
{
"name": "caption",
"value": "New post: {{$node['Set Social Media Text'].json.socialTitle}} #automation #n8n"
}
]
},
"name": "Social Media Scheduler",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 1
}
],
"connections": {
"CMS Webhook Trigger": {
"main": [
[
"Set Social Media Text",
"main"
]
]
},
"Set Social Media Text": {
"main": [
[
"Cloudinary Dynamic Image Creation",
"main"
]
]
},
"Cloudinary Dynamic Image Creation": {
"main": [
[
"Social Media Scheduler",
"main"
]
]
}
}
}