AutomationFlowsSlack & Telegram › Generate Studio Product Photos for New Shopify Products with Dreem AI

Generate Studio Product Photos for New Shopify Products with Dreem AI

ByKristian Jønsson @kristianj on n8n.io

This workflow triggers on new Shopify products, generates studio-style product shots from one product image using Dreem.ai and appends the rendered images back to the Shopify product listing, with optional Slack posting and approval before publishing. A Shopify webhook fires…

Event trigger★★★★☆ complexity20 nodesShopify TriggerSlackN8N Nodes DreemShopify
Slack & Telegram Trigger: Event Nodes: 20 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #16896 — we link there as the canonical source.

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
{
  "id": "eLkSGa2q1ewvvQTK",
  "name": "Generate studio product photos for new Shopify products with Dreem.ai",
  "tags": [],
  "nodes": [
    {
      "id": "b716140f-6e3b-47ef-aa91-1598278791e4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -112,
        0
      ],
      "parameters": {
        "width": 480,
        "height": 896,
        "content": "## Generate studio product photos for new Shopify products with Dreem AI\n\n### How it works\n\nThis workflow starts when a new Shopify product is created, checks that it has an image, and uses Dreem AI to generate studio-style front product shots. After waiting for the render to complete, it posts the generated shots to Slack for human approval before publishing them back to Shopify. Once the front shots are approved and published, it launches a separate Dreem AI pass for back shots and publishes those when rendering completes, with Slack timeout notifications if either render stage fails to finish.\n\n### Setup steps\n\n- Connect Shopify credentials for both the product trigger and product image publishing nodes.\n- Connect Dreem AI credentials and configure the front-shot and back-shot generation prompts or templates.\n- Connect Slack credentials and choose the channel or user that should receive generated image previews, approval messages, and timeout alerts.\n- Configure the approval interaction used by the Slack approval step so the \"Is Approved?\" condition can evaluate the reviewer response.\n- Review wait durations and completion checks for both render stages so they match Dreem AI render times and timeout expectations.\n\n### Customization\n\nAdjust the Dreem prompts for different product photography styles, backgrounds, camera angles, or aspect ratios. You can also change the Slack approval channel, make approval optional, or add additional Shopify image slots for side, detail, or lifestyle shots."
      },
      "typeVersion": 1
    },
    {
      "id": "32fbdb10-1f07-4ebc-bb4d-1b0ab5646862",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        448,
        272
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 336,
        "content": "## Detect new product\n\nStarts the workflow from Shopify and checks whether the new product has an image available before sending it into the photo-generation flow."
      },
      "typeVersion": 1
    },
    {
      "id": "17ce775e-f85d-4bb3-9304-45f71e7199eb",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        896,
        320
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 304,
        "content": "## Generate front shots\n\nUses Dreem AI to create front-facing studio product images, waits for the render, and checks whether the generation completed successfully."
      },
      "typeVersion": 1
    },
    {
      "id": "784d79e1-eddd-4d47-98a0-b553874466ba",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1616,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 912,
        "height": 480,
        "content": "## Review and publish front\n\nPosts completed front shots to Slack, collects approval, evaluates the response, and publishes approved images to the Shopify product."
      },
      "typeVersion": 1
    },
    {
      "id": "417e19de-1dec-4ad3-bd36-a55db541fc85",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        832,
        816
      ],
      "parameters": {
        "color": 7,
        "width": 912,
        "height": 304,
        "content": "## Generate back shots\n\nRuns a second, spatially separate Dreem AI render for back-facing product shots, waits for completion, validates the render status, and publishes successful results to Shopify."
      },
      "typeVersion": 1
    },
    {
      "id": "d5aa85cf-0147-4064-a2fb-337fdd9f3479",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2064,
        512
      ],
      "parameters": {
        "color": 7,
        "height": 368,
        "content": "## Send timeout alert\n\nSends a Slack notification when either the front-shot or back-shot render does not complete within the expected time window."
      },
      "typeVersion": 1
    },
    {
      "id": "790f9321-9d35-42bb-99f7-c2961a47e2cf",
      "name": "When New Shopify Product Added",
      "type": "n8n-nodes-base.shopifyTrigger",
      "position": [
        496,
        448
      ],
      "parameters": {
        "topic": "products/create",
        "authentication": "accessToken"
      },
      "typeVersion": 1
    },
    {
      "id": "e1636b5a-231b-45a2-9e8d-4d691224e836",
      "name": "Wait for Render Completion",
      "type": "n8n-nodes-base.wait",
      "position": [
        1184,
        448
      ],
      "parameters": {
        "resume": "webhook",
        "options": {},
        "httpMethod": "POST",
        "resumeUnit": "minutes",
        "resumeAmount": 20,
        "limitWaitTime": true
      },
      "typeVersion": 1.1
    },
    {
      "id": "0cfa2f1d-ef8f-4430-9499-d6fd19f4b877",
      "name": "Check Render Complete",
      "type": "n8n-nodes-base.if",
      "position": [
        1424,
        448
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.body?.status ?? $json.status }}",
              "rightValue": "completed"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9e0c5e1f-5ae7-4f14-a96a-c59dadf20f75",
      "name": "Wait for Slack Approval",
      "type": "n8n-nodes-base.slack",
      "disabled": true,
      "position": [
        1904,
        304
      ],
      "parameters": {
        "select": "channel",
        "message": "=Approve the product shots above for *{{ $('When New Shopify Product Added').item.json.title }}*? *Approve & publish* adds them to the product; *Reject* skips them. (Links stay valid ~12 hours.)",
        "options": {
          "limitWaitTime": {
            "values": {
              "resumeAmount": 12
            }
          }
        },
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "operation": "sendAndWait",
        "authentication": "oAuth2",
        "approvalOptions": {
          "values": {
            "approvalType": "double",
            "approveLabel": "Approve & publish",
            "disapproveLabel": "Reject"
          }
        }
      },
      "typeVersion": 2.5
    },
    {
      "id": "98aea0db-2260-4d7c-b346-65a635dff292",
      "name": "Check Slack Approval",
      "type": "n8n-nodes-base.if",
      "disabled": true,
      "position": [
        2144,
        304
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "340fd444-2c80-4bb4-9058-a4e83faa5db2",
      "name": "Notify Slack of Timeout",
      "type": "n8n-nodes-base.slack",
      "disabled": true,
      "position": [
        2112,
        720
      ],
      "parameters": {
        "text": "=\u26a0\ufe0f Dreem render timed out for *{{ $('When New Shopify Product Added').item.json.title }}*. Nothing was published. Check the Dreem dashboard and retry.",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "typeVersion": 2.5
    },
    {
      "id": "57a90f33-06d4-49b5-a79f-930ac2f11c2f",
      "name": "Create Front Shots with Dreem",
      "type": "n8n-nodes-dreem.dreem",
      "position": [
        944,
        448
      ],
      "parameters": {
        "operation": "generateProductShots",
        "shotCodes": [
          "flat_lay_front",
          "invisible_mannequin_front"
        ],
        "callbackUrl": "={{ $execution.resumeUrl }}",
        "backImageUrl": "={{ $json.images?.[1]?.src ?? '' }}",
        "outputFormat": "jpeg",
        "frontImageUrl": "={{ $json.images[0].src }}",
        "authentication": "apiKey",
        "outputAspectRatio": 5
      },
      "typeVersion": 1
    },
    {
      "id": "ec4d9935-a6f2-4a25-ae7d-7d04e6ccb92b",
      "name": "Publish Product Fronts to Shopify",
      "type": "n8n-nodes-base.shopify",
      "position": [
        2384,
        304
      ],
      "parameters": {
        "resource": "product",
        "operation": "update",
        "productId": "={{ $('When New Shopify Product Added').item.json.id }}",
        "updateFields": {
          "images": "={{ ($('When New Shopify Product Added').item.json.images || []).map(i => ({ id: i.id })).concat(($('Wait for Render Completion').item.json.body.outputs || []).map(o => ({ src: o.files[0].url }))) }}"
        },
        "authentication": "accessToken"
      },
      "typeVersion": 1
    },
    {
      "id": "d6624ac4-2384-42d7-af10-f28284b8967d",
      "name": "Create Back Shots with Dreem",
      "type": "n8n-nodes-dreem.dreem",
      "disabled": true,
      "position": [
        880,
        944
      ],
      "parameters": {
        "operation": "generateProductShots",
        "shotCodes": [
          "flat_lay_back",
          "invisible_mannequin_back"
        ],
        "callbackUrl": "={{ $execution.resumeUrl }}",
        "backImageUrl": "={{ $('When New Shopify Product Added').item.json.images?.[1]?.src ?? '' }}",
        "outputFormat": "jpeg",
        "frontImageUrl": "={{ $('When New Shopify Product Added').item.json.images[0].src }}",
        "authentication": "apiKey",
        "outputAspectRatio": 5
      },
      "typeVersion": 1
    },
    {
      "id": "41cc427f-72ee-4ec9-9cdd-e7f6162e1252",
      "name": "Wait for Back Shot Render",
      "type": "n8n-nodes-base.wait",
      "disabled": true,
      "position": [
        1120,
        944
      ],
      "parameters": {
        "resume": "webhook",
        "options": {},
        "httpMethod": "POST",
        "resumeUnit": "minutes",
        "resumeAmount": 20,
        "limitWaitTime": true
      },
      "typeVersion": 1.1
    },
    {
      "id": "082f7cce-9e4f-4c92-ae52-2b7d47926b97",
      "name": "Check Back Render Complete",
      "type": "n8n-nodes-base.if",
      "disabled": true,
      "position": [
        1360,
        944
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.body?.status ?? $json.status }}",
              "rightValue": "completed"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "84559904-199d-4bea-9c92-08283fd4f7d8",
      "name": "Publish Product Backs to Shopify",
      "type": "n8n-nodes-base.shopify",
      "disabled": true,
      "position": [
        1600,
        944
      ],
      "parameters": {
        "resource": "product",
        "operation": "update",
        "productId": "={{ $('When New Shopify Product Added').item.json.id }}",
        "updateFields": {
          "images": "={{ ($('Publish Product Fronts to Shopify').item.json.images || []).map(i => ({ id: i.id })).concat(($('Wait for Back Shot Render').item.json.body.outputs || []).map(o => ({ src: o.files[0].url }))) }}"
        },
        "authentication": "accessToken"
      },
      "typeVersion": 1
    },
    {
      "id": "51c0b2d3-41ef-4024-8c89-b37410cef6e9",
      "name": "Check for Existing Product Image",
      "type": "n8n-nodes-base.if",
      "position": [
        704,
        448
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "has-image-1",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.images?.[0]?.src ?? '' }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a49ec4a8-ba6a-40ee-9b65-51f72f34c501",
      "name": "Notify Slack of Front Shots",
      "type": "n8n-nodes-base.slack",
      "disabled": true,
      "position": [
        1664,
        128
      ],
      "parameters": {
        "text": "=*New Dreem product shots* for *{{ $('When New Shopify Product Added').item.json.title }}*\n{{ ($('Wait for Render Completion').item.json.body?.outputs ?? $('Wait for Render Completion').item.json.outputs ?? []).map(o => o.files[0].url).join('\\n') }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "typeVersion": 2.5
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "6f529581-b5d5-4e84-be70-1349e6f7df7a",
  "nodeGroups": [],
  "connections": {
    "Check Slack Approval": {
      "main": [
        [
          {
            "node": "Publish Product Fronts to Shopify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Render Complete": {
      "main": [
        [
          {
            "node": "Notify Slack of Front Shots",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify Slack of Timeout",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Slack Approval": {
      "main": [
        [
          {
            "node": "Check Slack Approval",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Back Shot Render": {
      "main": [
        [
          {
            "node": "Check Back Render Complete",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Back Render Complete": {
      "main": [
        [
          {
            "node": "Publish Product Backs to Shopify",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify Slack of Timeout",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Render Completion": {
      "main": [
        [
          {
            "node": "Check Render Complete",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Slack of Front Shots": {
      "main": [
        [
          {
            "node": "Wait for Slack Approval",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Back Shots with Dreem": {
      "main": [
        [
          {
            "node": "Wait for Back Shot Render",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Front Shots with Dreem": {
      "main": [
        [
          {
            "node": "Wait for Render Completion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When New Shopify Product Added": {
      "main": [
        [
          {
            "node": "Check for Existing Product Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check for Existing Product Image": {
      "main": [
        [
          {
            "node": "Create Front Shots with Dreem",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish Product Fronts to Shopify": {
      "main": [
        [
          {
            "node": "Create Back Shots with Dreem",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

This workflow triggers on new Shopify products, generates studio-style product shots from one product image using Dreem.ai and appends the rendered images back to the Shopify product listing, with optional Slack posting and approval before publishing. A Shopify webhook fires…

Source: https://n8n.io/workflows/16896/ — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

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

Slack & Telegram

This workflow turns every new Shopify product into a complete photo set with Dreem.ai: studio product shots plus an on-model render, generated from one photo and added straight back to the listing. Op

Shopify Trigger, N8N Nodes Dreem, Shopify +1
Slack & Telegram

This workflow turns a product photo into a short product video with Dreem AI. Tag a product dreem-video in Shopify and the finished clip arrives in Slack for approval, then lands in the product's medi

Shopify Trigger, N8N Nodes Dreem, Slack +2
Slack & Telegram

This workflow fires when a new Shopify product is created, renders it on a virtual model with Dreem.ai, and appends the shot back to the product - with optional Slack posting and approval. A Shopify w

Shopify Trigger, N8N Nodes Dreem, Slack +1
Slack & Telegram

New products get attention; the back catalog doesn't. This workflow sweeps your Shopify catalog, finds every product that still has just one photo, and generates the missing studio product shots with

Shopify, Slack, N8N Nodes Dreem
Slack & Telegram

This workflow is essential for dropshippers, e-commerce store owners, and anyone looking to quickly import product catalogs from specific websites into their Shopify store.

Shopify, Slack, HTTP Request +2