{
  "id": "ogcWGpljXKKgzHYZ",
  "name": "Restyle your Fashion Catalogs Every Season with dreem.ai",
  "tags": [],
  "nodes": [
    {
      "id": "ebe98a14-acbb-4989-8664-2f14af2c0c7a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "width": 480,
        "height": 896,
        "content": "## Restyle your Fashion Catalogs Every Season with dreem.ai\n\n### How it works\n\nThis workflow runs on scheduled season-change dates, retrieves Shopify products, and filters for items tagged for seasonal restyling. It processes products in batches, generates updated female and male catalog images with dreem.ai, waits for render completion, then publishes completed shots back to Shopify. Slack notifications report skipped renders and when the full seasonal flip is complete.\n\n### Setup steps\n\n- Configure the schedule trigger for the intended seasonal dates, such as March 1 and September 1.\n- Connect Shopify credentials and confirm the product query, tag filter, and publish/update operations target the correct store and product image fields.\n- Connect dreem.ai credentials and configure the seasonal generation prompts or templates for female and male catalog shots.\n- Connect Slack credentials and choose the channels or recipients for skipped-render and completion notifications.\n\n### Customization\n\nAdjust the product tag used for eligibility, the seasonal styling prompts in the dreem.ai nodes, wait durations or completion checks, and whether both female and male shots are generated for every product."
      },
      "typeVersion": 1
    },
    {
      "id": "5e042b13-ccbe-420b-9025-4bac24d1b41e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        128
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 352,
        "content": "## Find seasonal products\n\nStarts the workflow on season-flip dates, retrieves products from Shopify, and filters the list down to products tagged for seasonal restyling."
      },
      "typeVersion": 1
    },
    {
      "id": "b30feed5-1107-4b6d-925c-d6a25683c180",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1232,
        -48
      ],
      "parameters": {
        "color": 7,
        "width": 432,
        "height": 528,
        "content": "## Batch loop control\n\nControls iteration over the filtered product list and sends the final Slack completion message once all products have finished processing."
      },
      "typeVersion": 1
    },
    {
      "id": "fef01fdc-1f45-4413-b244-17bf59bd9314",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1696,
        144
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 464,
        "content": "## Generate female render\n\nRequests a seasonal female catalog render from dreem.ai for the current product and waits before checking the render status."
      },
      "typeVersion": 1
    },
    {
      "id": "947a661d-0891-4f3a-8eb4-04e266f57f9d",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2128,
        128
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 576,
        "content": "## Handle female result\n\nChecks whether the female render is complete, publishes successful output to Shopify, or sends a Slack skipped notification for incomplete or failed output. The skipped notification node also receives failures from the nearby male completion check."
      },
      "typeVersion": 1
    },
    {
      "id": "fc24ea07-f5f1-41b1-8ae5-ff3eb3278b1a",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1472,
        736
      ],
      "parameters": {
        "color": 7,
        "width": 848,
        "height": 320,
        "content": "## Generate male image\n\nAfter the female image is published, this lower canvas cluster generates the male seasonal render, waits for completion, checks the result, and publishes the male shot back to Shopify before returning to the batch loop."
      },
      "typeVersion": 1
    },
    {
      "id": "80233ecb-2b83-41ed-ab72-662db02ad0a5",
      "name": "Trigger Seasonal Update",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        608,
        320
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 9 1 3,9 *"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5766aef9-d01d-4016-ae50-40509031345c",
      "name": "Fetch Products from Shopify",
      "type": "n8n-nodes-base.shopify",
      "position": [
        832,
        320
      ],
      "parameters": {
        "resource": "product",
        "operation": "getAll",
        "returnAll": true,
        "authentication": "accessToken",
        "additionalFields": {}
      },
      "credentials": {
        "shopifyAccessTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "39372c0f-6c0a-4c03-b949-141b16772308",
      "name": "Filter Seasonal Products",
      "type": "n8n-nodes-base.filter",
      "position": [
        1056,
        320
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": false,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ ($json.tags || '').split(',').map(t => t.trim()).includes('seasonal-restyle') }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f63ad85b-0827-4cce-85e3-3922adaa4987",
      "name": "Notify Flip Completion",
      "type": "n8n-nodes-base.slack",
      "position": [
        1520,
        160
      ],
      "parameters": {
        "text": "Seasonal catalog restyle complete.",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "C0BEBLUUHNZ"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.5
    },
    {
      "id": "0bdbb8e5-c5c5-4507-a34d-596e8ac703cc",
      "name": "Create Female Seasonal Design",
      "type": "n8n-nodes-dreem.dreem",
      "position": [
        1744,
        448
      ],
      "parameters": {
        "talentId": "b2c80190-4a00-4718-9d3f-c531472d5984",
        "shotCodes": [
          "model_front_women"
        ],
        "callbackUrl": "={{ $execution.resumeUrl }}",
        "outputFormat": "jpeg",
        "frontImageUrl": "={{ $json.images[0].src }}",
        "authentication": "apiKey",
        "outputAspectRatio": 5
      },
      "credentials": {
        "dreemApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ee929c9b-29a1-4e3b-9b13-97cce1706c4f",
      "name": "Wait for Design Render",
      "type": "n8n-nodes-base.wait",
      "position": [
        1952,
        448
      ],
      "parameters": {
        "resume": "webhook",
        "options": {},
        "httpMethod": "POST",
        "resumeUnit": "minutes",
        "resumeAmount": 20,
        "limitWaitTime": true
      },
      "typeVersion": 1.1
    },
    {
      "id": "0fe6c768-4e97-42c2-b0a9-7f28c34e4b4b",
      "name": "Check Design Completion",
      "type": "n8n-nodes-base.if",
      "position": [
        2176,
        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": "7d5b48e3-f487-4c2d-a982-2bb450ff5d00",
      "name": "Update Shopify with Design",
      "type": "n8n-nodes-base.shopify",
      "position": [
        2400,
        368
      ],
      "parameters": {
        "resource": "product",
        "operation": "update",
        "productId": "={{ $('Process Products in Batches').item.json.id }}",
        "updateFields": {
          "images": "={{ ($('Process Products in Batches').item.json.images || []).map(i => ({ id: i.id })).concat(($('Wait for Design Render').item.json.body.outputs || []).map(o => ({ src: o.files[0].url }))) }}"
        },
        "authentication": "accessToken"
      },
      "credentials": {
        "shopifyAccessTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "3ac3b229-7488-4e18-b1d2-0a6e5b2b3d7d",
      "name": "Process Products in Batches",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1280,
        320
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "79139836-9073-4db2-b35d-17efa031837d",
      "name": "Notify Skipped Products",
      "type": "n8n-nodes-base.slack",
      "position": [
        2400,
        544
      ],
      "parameters": {
        "text": "=Seasonal restyle skipped *{{ $('Process Products in Batches').item.json.title }}* \u2014 render didn't finish.",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "C0BEBLUUHNZ"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.5
    },
    {
      "id": "a69a3e68-7fa8-49d4-833b-4c5db441e613",
      "name": "Create Male Seasonal Design",
      "type": "n8n-nodes-dreem.dreem",
      "disabled": true,
      "position": [
        1520,
        896
      ],
      "parameters": {
        "talentId": "ddb6969e-5099-4337-b528-2e85888eef38",
        "shotCodes": [
          "model_hands_in_pockets_front_men"
        ],
        "callbackUrl": "={{ $execution.resumeUrl }}",
        "outputFormat": "jpeg",
        "frontImageUrl": "={{ $('Process Products in Batches').item.json.images[0].src }}",
        "authentication": "apiKey",
        "outputAspectRatio": 5
      },
      "credentials": {
        "dreemApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c478bbac-30a2-4c4a-b482-6102fd2a91aa",
      "name": "Wait for Male Design Render",
      "type": "n8n-nodes-base.wait",
      "disabled": true,
      "position": [
        1728,
        896
      ],
      "parameters": {
        "resume": "webhook",
        "options": {},
        "httpMethod": "POST",
        "resumeUnit": "minutes",
        "resumeAmount": 20,
        "limitWaitTime": true
      },
      "typeVersion": 1.1
    },
    {
      "id": "9a8bb0d4-f6f8-48cf-bd08-2d0729fff69f",
      "name": "Check Male Design Completion",
      "type": "n8n-nodes-base.if",
      "disabled": true,
      "position": [
        1952,
        896
      ],
      "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": "45feae4c-0551-445e-b039-d3a58c2d7b36",
      "name": "Update Shopify with Male Design",
      "type": "n8n-nodes-base.shopify",
      "disabled": true,
      "position": [
        2176,
        896
      ],
      "parameters": {
        "resource": "product",
        "operation": "update",
        "productId": "={{ $('Process Products in Batches').item.json.id }}",
        "updateFields": {
          "images": "={{ ($('Update Shopify with Design').item.json.images || []).map(i => ({ id: i.id })).concat(($('Wait for Male Design Render').item.json.body.outputs || []).map(o => ({ src: o.files[0].url }))) }}"
        },
        "authentication": "accessToken"
      },
      "credentials": {
        "shopifyAccessTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "b8d94ee9-b8c9-463e-8032-9248ff5c47a3",
  "nodeGroups": [],
  "connections": {
    "Wait for Design Render": {
      "main": [
        [
          {
            "node": "Check Design Completion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Design Completion": {
      "main": [
        [
          {
            "node": "Update Shopify with Design",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify Skipped Products",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Skipped Products": {
      "main": [
        [
          {
            "node": "Process Products in Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger Seasonal Update": {
      "main": [
        [
          {
            "node": "Fetch Products from Shopify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Seasonal Products": {
      "main": [
        [
          {
            "node": "Process Products in Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Shopify with Design": {
      "main": [
        [
          {
            "node": "Create Male Seasonal Design",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Male Seasonal Design": {
      "main": [
        [
          {
            "node": "Wait for Male Design Render",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Products from Shopify": {
      "main": [
        [
          {
            "node": "Filter Seasonal Products",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Products in Batches": {
      "main": [
        [
          {
            "node": "Notify Flip Completion",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create Female Seasonal Design",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Male Design Render": {
      "main": [
        [
          {
            "node": "Check Male Design Completion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Male Design Completion": {
      "main": [
        [
          {
            "node": "Update Shopify with Male Design",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify Skipped Products",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Female Seasonal Design": {
      "main": [
        [
          {
            "node": "Wait for Design Render",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Shopify with Male Design": {
      "main": [
        [
          {
            "node": "Process Products in Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}