AutomationFlowsSocial Media › Batch Social Media Mockups from Google Drive

Batch Social Media Mockups from Google Drive

Original n8n title: Content Creator - Social Media Mockup Batch

Content Creator - Social Media Mockup Batch. Uses googleDriveTrigger, n8n-nodes-sudomock, editImage, googleDrive. Event-driven trigger; 19 nodes.

Event trigger★★★★☆ complexity19 nodesGoogle Drive TriggerN8N Nodes SudomockEdit ImageGoogle DriveHTTP RequestBufferSlack
Social Media Trigger: Event Nodes: 19 Complexity: ★★★★☆ Added:
Batch Social Media Mockups from Google Drive — n8n workflow card showing Google Drive Trigger, N8N Nodes Sudomock, Edit Image integration

This workflow follows the Editimage → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Content Creator - Social Media Mockup Batch",
  "nodes": [
    {
      "parameters": {
        "content": "## \ud83c\udfa8 Content Creator Mockup Automation\n\n**What this workflow does:**\nAuto-creates platform-optimized mockups for Instagram, Twitter, LinkedIn when you upload a design\n\n**Requirements:**\n- SudoMock API key ([Free tier: 500 credits](https://sudomock.com))\n- Google Drive folder setup\n- Device mockup PSDs (laptop, phone, billboard)\n- Buffer account (optional for auto-scheduling)\n\n**Output:**\nEvery design \u2192 12 mockup variants\n(3 devices \u00d7 4 platforms)",
        "height": 372,
        "width": 428,
        "color": 4
      },
      "id": "7bda0224-f7c8-4ced-a21e-0daacb4f4660",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        10720,
        5040
      ]
    },
    {
      "parameters": {
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "fileCreated"
      },
      "id": "cbe34a0b-8ea4-415f-b65c-7d04c8518a97",
      "name": "Watch Designs Folder",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "typeVersion": 1,
      "position": [
        10720,
        5440
      ],
      "notes": "Trigger when new design uploaded to Google Drive"
    },
    {
      "parameters": {
        "operation": "listMockups",
        "additionalOptions": {}
      },
      "id": "27b74eb1-d8f6-47f2-a2d0-6af8bff5f4d0",
      "name": "Get Mockup Templates",
      "type": "n8n-nodes-sudomock.sudoMock",
      "typeVersion": 1,
      "position": [
        10944,
        5440
      ],
      "notes": "Get context mockups: MacBook, iPhone, Billboard, etc."
    },
    {
      "parameters": {
        "jsCode": "const designFile = $('Watch Designs Folder').item.json;\nconst mockups = $input.item.json.data.mockups;\n\n// Social media platforms and their optimal sizes\nconst platforms = [\n  { name: 'Instagram-Post', size: 1080, ratio: '1:1' },\n  { name: 'Instagram-Story', size: 1080, ratio: '9:16' },\n  { name: 'Twitter-Post', size: 1200, ratio: '16:9' },\n  { name: 'LinkedIn-Post', size: 1200, ratio: '1.91:1' }\n];\n\nconst combinations = [];\n\nfor (const mockup of mockups) {\n  for (const platform of platforms) {\n    const smartObject = mockup.smart_objects[0];\n    \n    combinations.push({\n      designName: designFile.name,\n      designUrl: designFile.webViewLink,\n      mockupName: mockup.name,\n      mockupUuid: mockup.uuid,\n      smartObjectUuid: smartObject.uuid,\n      platform: platform.name,\n      targetSize: platform.size,\n      aspectRatio: platform.ratio,\n      outputName: `${designFile.name.split('.')[0]}_${mockup.name}_${platform.name}`\n    });\n  }\n}\n\nreturn combinations.map(c => ({ json: c }));"
      },
      "id": "f5c0f48d-3ecf-4f1d-b34a-fb340c4569a3",
      "name": "Create Mockup\u00d7Platform Matrix",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        11168,
        5440
      ],
      "notes": "Create: design\u00d7laptop\u00d7Instagram, design\u00d7phone\u00d7Twitter, etc."
    },
    {
      "parameters": {
        "content": "## \ud83d\udd04 Platform Optimization\n\n**What happens:**\n1. Design uploaded to Google Drive\n2. Creates mockup \u00d7 platform combinations:\n   - Instagram Post (1080\u00d71080)\n   - Instagram Story (1080\u00d71920)\n   - Twitter Post (1200\u00d7675)\n   - LinkedIn Post (1200\u00d7628)\n3. Renders each with correct device mockup\n4. Adds watermark automatically\n5. Resizes for platform specs\n\n**Time saved:**\n12 variants per design (~12 seconds to render)\nManual: ~1 hour \u2192 Automated: ~30 seconds",
        "height": 380,
        "width": 400,
        "color": 5
      },
      "id": "0e8bb9b1-b5cb-4b1b-8e66-8dfcb25ba1ac",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        11376,
        5040
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "c8e1c3f9-6e0b-4741-a440-f0ec0503b5d8",
      "name": "Loop Through Variants",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        11376,
        5440
      ]
    },
    {
      "parameters": {
        "mockupUuid": "={{ $json.mockupUuid }}",
        "smartObjects": {
          "items": [
            {
              "uuid": "={{ $json.smartObjectUuid }}",
              "assetUrl": "={{ $json.designUrl }}",
              "additionalOptions": {}
            }
          ]
        },
        "exportOptions": {
          "imageFormat": "webp",
          "imageSize": "={{ $json.targetSize }}",
          "quality": 90,
          "exportLabel": "={{ $json.outputName }}"
        }
      },
      "id": "19854909-3008-41ea-b810-23d28e146a83",
      "name": "Render Mockup",
      "type": "n8n-nodes-sudomock.sudoMock",
      "typeVersion": 1,
      "position": [
        11600,
        5440
      ],
      "continueOnFail": true,
      "notes": "Render with platform-specific size optimization"
    },
    {
      "parameters": {},
      "id": "d8e16b38-ff96-4a88-a7dd-1eca8f96aeda",
      "name": "Add Watermark & Resize",
      "type": "n8n-nodes-base.editImage",
      "typeVersion": 1.1,
      "position": [
        11824,
        5440
      ],
      "notes": "Add branding watermark and resize for platform"
    },
    {
      "parameters": {
        "jsCode": "const loopData = $('Loop Through Variants').item.json;\nconst renderResult = $('Render Mockup').item.json;\nconst editedImage = $input.item.json;\n\nreturn [{\n  json: {\n    designName: loopData.designName,\n    mockupName: loopData.mockupName,\n    platform: loopData.platform,\n    outputName: loopData.outputName,\n    aspectRatio: loopData.aspectRatio,\n    mockupUrl: renderResult.renderedImageUrl || null,\n    finalImageData: editedImage.data,\n    success: !!renderResult.renderedImageUrl\n  }\n}];"
      },
      "id": "3ba02331-f8f7-4c75-95da-b6c67c2c0d06",
      "name": "Collect Result",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        12048,
        5440
      ]
    },
    {
      "parameters": {
        "jsCode": "const allResults = $input.all();\n\n// Group by platform for Buffer scheduling\nconst byPlatform = {\n  'Instagram-Post': [],\n  'Instagram-Story': [],\n  'Twitter-Post': [],\n  'LinkedIn-Post': []\n};\n\nallResults.forEach(r => {\n  const platform = r.json.platform;\n  if (byPlatform[platform]) {\n    byPlatform[platform].push(r.json);\n  }\n});\n\nconst designName = allResults[0]?.json?.designName || 'Design';\n\nreturn [{\n  json: {\n    designName: designName,\n    totalVariants: allResults.length,\n    successCount: allResults.filter(r => r.json.success).length,\n    byPlatform: byPlatform,\n    allUrls: allResults.filter(r => r.json.mockupUrl).map(r => r.json.mockupUrl)\n  }\n}];"
      },
      "id": "3c5f12b1-09aa-4fef-b4ec-a5b24047d63b",
      "name": "Group by Platform",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        12048,
        5632
      ],
      "notes": "Organize variants by social media platform"
    },
    {
      "parameters": {
        "content": "## \ud83d\udcf1 Auto-Schedule & Organize\n\n**Organized output:**\nGoogle Drive folder structure:\n```\nMyDesign - Social Media Pack/\n\u251c\u2500\u2500 Instagram-Post/\n\u251c\u2500\u2500 Instagram-Story/\n\u251c\u2500\u2500 Twitter-Post/\n\u2514\u2500\u2500 LinkedIn-Post/\n```\n\n**Buffer integration:**\n- Auto-schedules posts across platforms\n- Optimal posting times\n- Includes mockup images\n\n**Team notification:**\nSlack message with summary + Drive link",
        "height": 408,
        "width": 400,
        "color": 6
      },
      "id": "c6ac651f-2435-4c8f-8a6e-048152e3c848",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        12704,
        5200
      ]
    },
    {
      "parameters": {
        "resource": "folder",
        "name": "={{ $json.designName + ' - Social Media Pack' }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "root",
          "cachedResultName": "/ (Root folder)"
        },
        "options": {}
      },
      "id": "e2a9e8c1-24d1-4387-a9f9-f93c0e9cce56",
      "name": "Create Drive Folder",
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        12256,
        5632
      ]
    },
    {
      "parameters": {
        "mode": "combine",
        "combinationMode": "multiplex",
        "options": {}
      },
      "id": "7ecd6c3d-872e-4ea9-abdf-625e6b6cc47d",
      "name": "Merge URLs with Folder",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 2.1,
      "position": [
        12480,
        5632
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "486704cb-a99f-49d8-8efd-d2daeeb89a64",
      "name": "Loop Upload Files",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        12704,
        5632
      ]
    },
    {
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "id": "71c9f2a4-3d86-4689-8a6e-33dfcaf83605",
      "name": "Download Image",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.1,
      "position": [
        12928,
        5632
      ]
    },
    {
      "parameters": {
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "folderId": "={{ $('Create Drive Folder').item.json.id }}",
        "options": {}
      },
      "id": "7580a36d-0412-4bc1-834e-44a195a2a855",
      "name": "Upload to Folder",
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        13136,
        5632
      ]
    },
    {
      "parameters": {},
      "id": "05b851ba-fc25-404a-ad9c-64a16be564e4",
      "name": "Continue Loop",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        13360,
        5632
      ]
    },
    {
      "parameters": {},
      "id": "526fe38c-198c-4cf4-bdac-2bfe0614b1e9",
      "name": "Schedule to Buffer",
      "type": "n8n-nodes-base.buffer",
      "typeVersion": 1,
      "position": [
        12704,
        5840
      ],
      "notes": "Schedule posts across all platforms"
    },
    {
      "parameters": {
        "text": "={{ '\ud83c\udfa8 *New Design Ready for Social Media!*\\n\\n*Design:* ' + $json.designName + '\\n*Variants:* ' + $json.successCount + ' mockups created\\n*Platforms:* Instagram, Twitter, LinkedIn\\n\\n\u2705 Uploaded to Google Drive\\n\ud83d\udcc5 Scheduled in Buffer for ' + $now.plus(1, 'hour').toFormat('HH:mm') }}",
        "otherOptions": {}
      },
      "id": "1096f624-f736-4f7d-979c-d18676222a90",
      "name": "Notify Team",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 2.1,
      "position": [
        12928,
        5840
      ]
    }
  ],
  "connections": {
    "Watch Designs Folder": {
      "main": [
        [
          {
            "node": "Get Mockup Templates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Mockup Templates": {
      "main": [
        [
          {
            "node": "Create Mockup\u00d7Platform Matrix",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Mockup\u00d7Platform Matrix": {
      "main": [
        [
          {
            "node": "Loop Through Variants",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Through Variants": {
      "main": [
        [
          {
            "node": "Group by Platform",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Render Mockup",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Collect Result": {
      "main": [
        [
          {
            "node": "Loop Through Variants",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Group by Platform": {
      "main": [
        [
          {
            "node": "Create Drive Folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Drive Folder": {
      "main": [
        [
          {
            "node": "Merge URLs with Folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge URLs with Folder": {
      "main": [
        [
          {
            "node": "Loop Upload Files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Upload Files": {
      "main": [
        [
          {
            "node": "Continue Loop",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Download Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Image": {
      "main": [
        [
          {
            "node": "Upload to Folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to Folder": {
      "main": [
        [
          {
            "node": "Loop Upload Files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "availableInMCP": false
  },
  "versionId": "672ca7bb-6223-488d-9fa8-dc6a0937dbb1",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "hJ48C57K9kadS90L",
  "tags": []
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Content Creator - Social Media Mockup Batch. Uses googleDriveTrigger, n8n-nodes-sudomock, editImage, googleDrive. Event-driven trigger; 19 nodes.

Source: https://github.com/sudomock/n8n-nodes-sudomock/blob/main/demos/content-creator-mockup-batch-workflow.json — original creator credit. Request a take-down →

More Social Media workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Social Media

This n8n workflow automates the process of uploading video and image advertisements to Meta Ads Manager via the Meta Graph API (Facebook Ads) directly from Google Sheets and Google Drive. The workflow

Facebook Graph Api, Google Sheets, HTTP Request +2
Social Media

🎥 Auto-Caption Videos for Instagram with Google Drive + Submagic

Google Drive Trigger, HTTP Request, Google Drive
Social Media

OCR receipts from Google Drive. Uses httpRequest, googleDriveTrigger, googleDrive, googleSheets. Event-driven trigger; 10 nodes.

HTTP Request, Google Drive Trigger, Google Drive +1
Social Media

This automation template is designed for content creators, social media managers, and influencers who want to streamline their video publishing workflow. It automatically detects new videos uploaded t

Google Drive Trigger, Google Drive, Airtable +6
Social Media

This automation template is designed for content creators, digital marketers, and social media managers looking to simplify their video posting workflow. It automates the process of generating engagin

Google Drive Trigger, Google Drive, Error Trigger +5