{
  "name": "Cloudinary — Social Video Variations (one source → every platform)",
  "nodes": [
    {
      "parameters": {},
      "id": "11110000-0000-4a01-9001-000000000001",
      "name": "Start",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        240,
        360
      ]
    },
    {
      "parameters": {
        "resource": "upload",
        "operation": "uploadUrl",
        "url": "https://res.cloudinary.com/demo/video/upload/dog.mp4",
        "resource_type": "video",
        "additionalFields": {
          "public_id": "n8n_blog/social_source_reel",
          "tags": "n8n-blog,social-source"
        }
      },
      "id": "11110000-0000-4a01-9001-000000000002",
      "name": "Upload Source Video",
      "type": "n8n-nodes-cloudinary.cloudinary",
      "typeVersion": 1,
      "position": [
        520,
        360
      ]
    },
    {
      "parameters": {
        "resource": "transform",
        "operation": "combineTransformations",
        "transformPublicId": "={{ $('Upload Source Video').item.json.public_id }}",
        "type": "upload",
        "multiStepResourceType": "video",
        "transformSteps": {
          "step": [
            {
              "stepType": "trim",
              "start": "",
              "end": "5",
              "duration": ""
            },
            {
              "stepType": "crop",
              "cropMode": "aspectRatio",
              "aspectRatio": "9:16",
              "focus": "auto",
              "cropAspectWidth": 1080
            },
            {
              "stepType": "optimize",
              "quality": "auto"
            }
          ]
        }
      },
      "id": "11110000-0000-4a01-9001-000000000003",
      "name": "TikTok / Reels (9:16)",
      "type": "n8n-nodes-cloudinary.cloudinary",
      "typeVersion": 1,
      "position": [
        820,
        180
      ]
    },
    {
      "parameters": {
        "resource": "transform",
        "operation": "combineTransformations",
        "transformPublicId": "={{ $('Upload Source Video').item.json.public_id }}",
        "type": "upload",
        "multiStepResourceType": "video",
        "transformSteps": {
          "step": [
            {
              "stepType": "trim",
              "start": "",
              "end": "5",
              "duration": ""
            },
            {
              "stepType": "crop",
              "cropMode": "aspectRatio",
              "aspectRatio": "1:1",
              "focus": "auto",
              "cropAspectWidth": 1080
            },
            {
              "stepType": "optimize",
              "quality": "auto"
            }
          ]
        }
      },
      "id": "11110000-0000-4a01-9001-000000000004",
      "name": "Feed (1:1)",
      "type": "n8n-nodes-cloudinary.cloudinary",
      "typeVersion": 1,
      "position": [
        820,
        360
      ]
    },
    {
      "parameters": {
        "resource": "transform",
        "operation": "combineTransformations",
        "transformPublicId": "={{ $('Upload Source Video').item.json.public_id }}",
        "type": "upload",
        "multiStepResourceType": "video",
        "transformSteps": {
          "step": [
            {
              "stepType": "trim",
              "start": "",
              "end": "5",
              "duration": ""
            },
            {
              "stepType": "crop",
              "cropMode": "aspectRatio",
              "aspectRatio": "16:9",
              "focus": "auto",
              "cropAspectWidth": 1280
            },
            {
              "stepType": "optimize",
              "quality": "auto"
            },
            {
              "stepType": "convert",
              "format": "mp4"
            }
          ]
        }
      },
      "id": "11110000-0000-4a01-9001-000000000005",
      "name": "YouTube / Web (16:9)",
      "type": "n8n-nodes-cloudinary.cloudinary",
      "typeVersion": 1,
      "position": [
        820,
        540
      ]
    },
    {
      "parameters": {
        "resource": "transform",
        "operation": "videoThumbnail",
        "transformPublicId": "={{ $('Upload Source Video').item.json.public_id }}",
        "type": "upload",
        "thumbnailFrameMode": "auto",
        "thumbnailFormat": "jpg"
      },
      "id": "11110000-0000-4a01-9001-000000000006",
      "name": "9:16 Poster (auto frame)",
      "type": "n8n-nodes-cloudinary.cloudinary",
      "typeVersion": 1,
      "position": [
        1120,
        180
      ]
    },
    {
      "parameters": {
        "resource": "transform",
        "operation": "videoThumbnail",
        "transformPublicId": "={{ $('Upload Source Video').item.json.public_id }}",
        "type": "upload",
        "thumbnailFrameMode": "auto",
        "thumbnailFormat": "jpg"
      },
      "id": "11110000-0000-4a01-9001-000000000007",
      "name": "1:1 Poster (auto frame)",
      "type": "n8n-nodes-cloudinary.cloudinary",
      "typeVersion": 1,
      "position": [
        1120,
        360
      ]
    },
    {
      "parameters": {
        "resource": "transform",
        "operation": "videoThumbnail",
        "transformPublicId": "={{ $('Upload Source Video').item.json.public_id }}",
        "type": "upload",
        "thumbnailFrameMode": "time",
        "thumbnailTimestamp": "1",
        "thumbnailFormat": "jpg"
      },
      "id": "11110000-0000-4a01-9001-000000000008",
      "name": "16:9 Poster (frame @1s)",
      "type": "n8n-nodes-cloudinary.cloudinary",
      "typeVersion": 1,
      "position": [
        1120,
        540
      ]
    },
    {
      "parameters": {
        "mode": "append",
        "numberInputs": 3
      },
      "id": "11110000-0000-4a01-9001-00000000000b",
      "name": "Merge Variants",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        1320,
        360
      ]
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "language": "javaScript",
        "jsCode": "// Collect every platform variant + its poster into one summary the next node can act on.\nreturn [\n  { json: {\n    platform: 'TikTok / Reels',\n    aspect: '9:16',\n    video_url: $('TikTok / Reels (9:16)').first().json.secure_url,\n    poster_url: $('9:16 Poster (auto frame)').first().json.secure_url,\n  }},\n  { json: {\n    platform: 'Feed',\n    aspect: '1:1',\n    video_url: $('Feed (1:1)').first().json.secure_url,\n    poster_url: $('1:1 Poster (auto frame)').first().json.secure_url,\n  }},\n  { json: {\n    platform: 'YouTube / Web',\n    aspect: '16:9',\n    video_url: $('YouTube / Web (16:9)').first().json.secure_url,\n    poster_url: $('16:9 Poster (frame @1s)').first().json.secure_url,\n  }},\n];"
      },
      "id": "11110000-0000-4a01-9001-000000000009",
      "name": "Collect Variants",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1620,
        360
      ]
    },
    {
      "parameters": {
        "content": "## 🎬 Social Video Variations\n\n**One source video → a cut for every platform**, in a single pass. No re-encoding by hand, no local ffmpeg, no per-platform export.\n\n### What it does\n1. **Upload Source Video** brings a video into Cloudinary (here, a public demo clip).\n2. Three **Compose: Combine Transformations** nodes each build one delivery URL that **trims → crops to the platform aspect ratio (auto focus keeps the subject in frame) → auto-optimizes** — TikTok/Reels `9:16`, Feed `1:1`, YouTube/Web `16:9`.\n3. Three **Video: Thumbnail** nodes generate a matching poster frame for each cut.\n4. **Collect Variants** rolls everything into one tidy list of `{platform, aspect, video_url, poster_url}`.\n\n### Make it yours\n- **Swap the source:** point *Upload Source Video* at your own URL (or replace it with *Upload File* / a trigger that brings in new footage).\n- **Add platforms:** copy a Combine node and change the aspect ratio.\n- **Publish:** wire *Collect Variants* into HTTP Request, Google Drive, a CMS, or a social-scheduler node — the `video_url`s are ready-to-serve Cloudinary CDN links.\n\n### Setup\n👉 Open any Cloudinary node and select (or create) your **Cloudinary API** credential — Cloud name, API Key, API Secret from your [Cloudinary Console](https://console.cloudinary.com/settings/api-keys). Credentials are **not** included in this template.\n\n💾 **Then press `Cmd/Ctrl+S` to save before running.** That one save persists the credential to *every* Cloudinary node at once, so a full **Execute Workflow** run finds credentials everywhere. Skip the save and the run can fail node-after-node with *\"Node does not have any credentials set\"* — even though the credential looks selected. (If **Execute step** works but **Execute Workflow** doesn't, you forgot the save.)",
        "height": 970,
        "width": 600
      },
      "id": "11110000-0000-4a01-9001-00000000000a",
      "name": "README",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        200,
        600
      ]
    }
  ],
  "connections": {
    "Start": {
      "main": [
        [
          {
            "node": "Upload Source Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Source Video": {
      "main": [
        [
          {
            "node": "TikTok / Reels (9:16)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Feed (1:1)",
            "type": "main",
            "index": 0
          },
          {
            "node": "YouTube / Web (16:9)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "TikTok / Reels (9:16)": {
      "main": [
        [
          {
            "node": "9:16 Poster (auto frame)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Feed (1:1)": {
      "main": [
        [
          {
            "node": "1:1 Poster (auto frame)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "YouTube / Web (16:9)": {
      "main": [
        [
          {
            "node": "16:9 Poster (frame @1s)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9:16 Poster (auto frame)": {
      "main": [
        [
          {
            "node": "Merge Variants",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1:1 Poster (auto frame)": {
      "main": [
        [
          {
            "node": "Merge Variants",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "16:9 Poster (frame @1s)": {
      "main": [
        [
          {
            "node": "Merge Variants",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Merge Variants": {
      "main": [
        [
          {
            "node": "Collect Variants",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "meta": {}
}
