I'm pretty new to n8n I've created some basic workflows. I now want to generate a workflow for my ecommerce business. I used claude to build it but keep facing errors and have fixed a bunch but i'm stuck on node 8 and I have no credits left on claude to fix it and chat hasn't been that helpful...
Workflow goal: Use clothing flat and hanger images of clothes that I have taken and I want it to use the ai model I provide for it to generate front, back, side pose.
Problem: I am stuck on node 8.
There's an issue with the binary data/json I believe. I don't fully understand the errors.
Initially claude added nano banana as a webhook but I changed it to gemini.
I've attached the screenshot and the JSON is uploaded. I haven't changed anything past node 8 yet. I've included the screenshots of the images of the clothes and the ai model for context (this model already is wearing the clothing item but generally i'd have different clothing items uploaded to use that same model as a reference photo)
Also if you have a totally different suggestion on building something like this please let me know. I've watched plenty of tutorials but most don't include a loop and the photos aren't consistent i.e. the logo dissapears etc.
JSON FILE:
https://drive.google.com/file/d/1nxm-oOrgdzujRsnjMqdIPF_sbdWSwe4O/view?usp=sharing
https://preview.redd.it/o6a5isw4a8rg1.png?width=2080&format=png&auto=webp&s=48108cab3ea94524b6f3eec62891a39e07611a89
https://preview.redd.it/y176dtw4a8rg1.png?width=1822&format=png&auto=webp&s=1d16ceeb3169f7873de2abe95483e4c391b0162c
https://preview.redd.it/6wf9etw4a8rg1.png?width=2279&format=png&auto=webp&s=8d57a5a4bb0b940c386384accf75141a92c1ab3c
https://preview.redd.it/49ydoito98rg1.png?width=1324&format=png&auto=webp&s=ccd5ee27909915c813dfc3aec98094e2859c75e5
https://preview.redd.it/b3ul24aj98rg1.png?width=727&format=png&auto=webp&s=e0aa18662f9465538a34dfc6ad7b930773d588a2
{
"name": "My workflow 2",
"nodes": [
{
"parameters": {},
"id": "77ebd72a-ea40-4b39-b7c4-74be0eb4632f",
"name": "1. Manual Trigger (Click to Start)",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-368,
128
],
"typeVersion": 1,
"notes": "Click 'Test Workflow' to start. Processes everything currently in your INPUT batch folder."
},
{
"parameters": {
"resource": "fileFolder",
"filter": {
"folderId": {
"__rl": true,
"value": "1ilE7s1Fe8Sq-M5Hb4LC0of3kb58fGbWT",
"mode": "list",
"cachedResultName": "Organized prima",
"cachedResultUrl": "https://drive.google.com/drive/folders/1ilE7s1Fe8Sq-M5Hb4LC0of3kb58fGbWT"
}
},
"options": {}
},
"id": "7dc8c110-4881-4d9e-8ba5-76936b8bb245",
"name": "2. List All Files in INPUT Folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
-48,
128
],
"typeVersion": 3,
"credentials": {
"googleDriveOAuth2Api": {
"id": "cAIq7xOPWCA017Jw",
"name": "Google Drive account"
}
},
"notes": "Fetches all files from your INPUT folder. Set INPUT_FOLDER_ID in n8n Variables to your batch folder ID."
},
{
"parameters": {
"options": {}
},
"id": "e098b72b-6d14-4818-aac8-7c00b2cf6c91",
"name": "3. Process One File at a Time",
"type": "n8n-nodes-base.splitInBatches",
"position": [
256,
128
],
"typeVersion": 3,
"notes": "Loops through each file one by one so they don't interfere with each other."
},
{
"parameters": {
"jsCode": "if (!$json || !$json.name) {\n return [];\n}\n\nconst fileName = $json.name;\nconst fileId = $json.id;\n\nconst fullName = fileName.toLowerCase();\n\nlet imageType = 'unknown';\nif (fullName.includes('front-flat')) imageType = 'front-flat';\nelse if (fullName.includes('back-flat')) imageType = 'back-flat';\nelse if (fullName.includes('hanger-front')) imageType = 'hanger-front';\nelse if (fullName.includes('hanger-back')) imageType = 'hanger-back';\nelse if (fullName.includes('closeup') || fullName.includes('close-up')) imageType = 'closeup';\nelse if (fullName.includes('model-reference')) imageType = 'model-reference';\n\nlet productName = fileName.replace(/\\.(jpg|jpeg|png|webp)$/i, '');\nproductName = productName\n .replace(/-front-flat$/i, '')\n .replace(/-back-flat$/i, '')\n .replace(/-hanger-front$/i, '')\n .replace(/-hanger-back$/i, '')\n .replace(/-closeup$/i, '')\n .replace(/-close-up$/i, '')\n .replace(/-model-reference$/i, '')\n .replace(/^model-reference$/i, 'batch');\n\nreturn [\n {\n json: {\n fileName: fileName,\n fileId: fileId,\n productName: productName,\n imageType: imageType\n }\n }\n];"
},
"id": "2692db56-98e2-42cd-84f8-921b6e2ca262",
"name": "4. Parse Filename & Detect Image Type",
"type": "n8n-nodes-base.code",
"position": [
496,
96
],
"typeVersion": 2
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.imageType }}",
"operation": "notEqual",
"value2": "unknown"
}
]
},
"options": {}
},
"id": "bb629ffa-0994-4ff0-a2a8-7e4a73f84860",
"name": "5. Is Valid Image Type?",
"type": "n8n-nodes-base.if",
"position": [
768,
128
],
"typeVersion": 2.3,
"notes": "Files named incorrectly go to the NEEDS-RENAME folder. Correctly named files continue."
},
{
"parameters": {
"operation": "move",
"fileId": "={{ $json.fileId }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"value": "={{ $vars.NEEDS_RENAME_FOLDER_ID }}",
"mode": "id"
}
},
"id": "e4682dda-a1da-489c-a2ae-391bb37a7b96",
"name": "5a. Move to NEEDS-RENAME Folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
1040,
304
],
"typeVersion": 3,
"credentials": {
"googleDriveOAuth2Api": {
"id": "cAIq7xOPWCA017Jw",
"name": "Google Drive account"
}
},
"notes": "Incorrectly named files get moved here so you can fix and re-run."
},
{
"parameters": {
"operation": "download",
"fileId": "={{ $json.fileId }}",
"options": {}
},
"id": "4bf67447-a0ea-4440-a739-783d5bda0c97",
"name": "5b. Download Image from Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
1024,
64
],
"typeVersion": 3,
"credentials": {
"googleDriveOAuth2Api": {
"id": "cAIq7xOPWCA017Jw",
"name": "Google Drive account"
}
}
},
{
"parameters": {
"jsCode": "const items = $input.all();\n\nfor (const item of items) {\n const binary = item.binary?.data;\n\n if (!binary || !binary.data) {\n throw new Error('No binary data found');\n }\n\n const base64 = Buffer.from(binary.data, 'base64').toString('base64');\n\n item.json.base64Image = `data:${binary.mimeType};base64,${base64}`;\n}\n\nreturn items;"
},
"id": "0173fa40-3c0d-4ec8-b5e1-7da80add5b1c",
"name": "6. Convert to Base64",
"type": "n8n-nodes-base.code",
"position": [
1264,
128
],
"typeVersion": 2
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 3
},
"conditions": [
{
"id": "a0b2a230-8cd5-469b-afdb-cdb9168fc8d0",
"leftValue": "",
"rightValue": "",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"options": {}
},
"id": "84064f1c-c289-41fa-84f9-57f15465c138",
"name": "7. Is This a Front Flat?",
"type": "n8n-nodes-base.if",
"position": [
1488,
128
],
"typeVersion": 2.3,
"notes": "Front-flat triggers the full generation pipeline. All other image types get stored as references."
},
{
"parameters": {
"mode": "set",
"options": {}
},
"id": "fb0666f8-ca2d-45e8-bc18-5f1d7732a56e",
"name": "7a. Store Reference Image (not front-flat)",
"type": "n8n-nodes-base.set",
"position": [
1696,
320
],
"typeVersion": 3.4,
"notes": "Stores back-flat, hangers, closeup, and model-reference in workflow memory keyed by productname_type."
},
{
"parameters": {
"jsCode": "const items = $input.all();\nconst results = [];\n\nfor (const item of items) {\n const productName = item.json.productName;\n\n if (!item.binary || !item.binary.data) {\n throw new Error('Missing binary image');\n }\n\n const prompt = `Professional ecommerce front-facing photo of a Middle Eastern male model wearing this exact garment. White background. Full body. Preserve ALL garment details exactly. Gym wear styling.`;\n\n results.push({\n json: {\n productName: productName,\n shotType: \"front\",\n prompt: prompt\n },\n // This line is the \"bridge\" that lets the image reach the API\n binary: item.binary \n });\n}\n\nreturn results;"
},
"id": "32886495-352f-47f6-b76e-1991d310568c",
"name": "7b. Build Front Shot Payload",
"type": "n8n-nodes-base.code",
"position": [
1696,
128
],
"typeVersion": 2
},
{
"parameters": {
"method": "POST",
"url": "https://generativelanguage.googleapis.com/v1/models/gemini-2.5-flash:generateContent",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "key",
"value": "APIKEY"
}
]
},
"sendBody": true,
"specifyBody": "={\n \"contents\": [\n {\n \"parts\": [\n {\n \"text\": \"Professional ecommerce front-facing photo of a Middle Eastern male model wearing this exact garment. White background. Preserve ALL details exactly. Full body. Gym wear styling.\"\n },\n {\n \"inline_data\": {\n \"mime_type\": \"image/jpeg\",\n \"data\": \"={{ $binary.data.data }}\"\n }\n }\n ]\n }\n ]\n}",
"bodyParameters": {
"parameters": [
{}
]
},
"options": {}
},
"id": "86994868-2bcf-4295-bf3d-cdd3de34c56e",
"name": "8. Call NanaBanana API",
"type": "n8n-nodes-base.httpRequest",
"position": [
1936,
128
],
"typeVersion": 4.4,
"notes": "Sends the generation request. Returns a taskId for polling."
},
{
"parameters": {},
"id": "6393f6aa-ed25-4dac-b401-9260be4f6056",
"name": "9. Extract Task ID",
"type": "n8n-nodes-base.code",
"position": [
2144,
128
],
"typeVersion": 2
},
{
"parameters": {},
"id": "71069f48-e447-4448-9519-584d9768d377",
"name": "10. Wait 5 Seconds",
"type": "n8n-nodes-base.wait",
"position": [
2368,
128
],
"typeVersion": 1.1,
"webhookId": "f23c1fb2-b629-4515-bd7e-9594aa1db9c4"
},
{
"parameters": {
"url": "=https://www.nananobanana.com/api/v1/generate/{{ $json.taskId }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $vars.NANABANANA_API_KEY }}"
}
]
},
"options": {}
},
"id": "15c33b98-4111-4640-bb7b-969c2719d184",
"name": "11. Poll Task Status",
"type": "n8n-nodes-base.httpRequest",
"position": [
2576,
128
],
"typeVersion": 4.4
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.status || $json.data?.processingStatus }}",
"operation": "equal",
"value2": "completed"
}
]
},
"options": {}
},
"id": "49276b2d-bdb4-4f42-ba6a-d2a031549201",
"name": "12. Is Generation Complete?",
"type": "n8n-nodes-base.if",
"position": [
2800,
128
],
"typeVersion": 2.3
},
{
"parameters": {},
"id": "f20be5dc-20ff-4e27-8066-f2d6316eb2a7",
"name": "12a. Not Done Yet — Retry",
"type": "n8n-nodes-base.code",
"position": [
3024,
320
],
"typeVersion": 2
},
{
"parameters": {
"url": "={{ $json.output_url || $json.imageUrl || $json.image_url || $json.data?.outputImageUrls?.[0] || $json.result }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"id": "f3f147fa-0b83-4a0e-96d0-3b72f7708e87",
"name": "12b. Download Generated Image",
"type": "n8n-nodes-base.httpRequest",
"position": [
3024,
128
],
"typeVersion": 4.4
},
{
"parameters": {
"name": "={{ $('9. Extract Task ID').first().json.productName + '-' + $('9. Extract Task ID').first().json.shotType + '-generated.jpg' }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"value": "={{ $vars.OUTPUT_FOLDER_ID }}",
"mode": "id"
},
"options": {}
},
"id": "a2c94368-5c61-4df1-b644-29423913cdbc",
"name": "13. Save to OUTPUT Folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
3248,
128
],
"typeVersion": 3,
"credentials": {
"googleDriveOAuth2Api": {
"id": "cAIq7xOPWCA017Jw",
"name": "Google Drive account"
}
}
},
{
"parameters": {},
"id": "6e5103de-0094-4646-a372-fbcae9ad67b6",
"name": "14. Build Back Shot Payload",
"type": "n8n-nodes-base.code",
"position": [
3456,
128
],
"typeVersion": 2
},
{
"parameters": {
"method": "POST",
"url": "https://www.nananobanana.com/api/v1/generate",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $vars.NANABANANA_API_KEY }}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify($json.apiPayload) }}",
"options": {}
},
"id": "d8b9dafc-5d31-4034-b802-94294ec74534",
"name": "15. Call NanaBanana API (Back Shot)",
"type": "n8n-nodes-base.httpRequest",
"position": [
3680,
128
],
"typeVersion": 4.4
},
{
"parameters": {},
"id": "ddbe79a6-9eeb-4e4e-aa16-7d2b4a28c056",
"name": "16. Extract Back Shot Task ID",
"type": "n8n-nodes-base.code",
"position": [
3904,
128
],
"typeVersion": 2
},
{
"parameters": {},
"id": "9e6e65d8-8de8-47b2-9a59-8f8529734879",
"name": "17. Wait 5s (Back)",
"type": "n8n-nodes-base.wait",
"position": [
4128,
128
],
"typeVersion": 1.1,
"webhookId": "08976cd8-e117-4578-a63b-d3117f3a1e7a"
},
{
"parameters": {
"url": "=https://www.nananobanana.com/api/v1/generate/{{ $json.taskId }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $vars.NANABANANA_API_KEY }}"
}
]
},
"options": {}
},
"id": "625712d2-5b06-4109-b714-dde82185ec5f",
"name": "18. Poll Back Shot Status",
"type": "n8n-nodes-base.httpRequest",
"position": [
4336,
128
],
"typeVersion": 4.4
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.status || $json.data?.processingStatus }}",
"operation": "equal",
"value2": "completed"
}
]
},
"options": {}
},
"id": "946ebb03-d8ae-4e32-9983-201edc1dd0f3",
"name": "19. Back Shot Complete?",
"type": "n8n-nodes-base.if",
"position": [
4560,
128
],
"typeVersion": 2.3
},
{
"parameters": {},
"id": "293d7ee9-9cef-4111-8eed-58297fc00364",
"name": "19a. Retry Back Shot",
"type": "n8n-nodes-base.code",
"position": [
4784,
320
],
"typeVersion": 2
},
{
"parameters": {
"url": "={{ $json.output_url || $json.imageUrl || $json.data?.outputImageUrls?.[0] }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"id": "fb88ed72-fedd-4a7f-8d85-d7c8cd9fc13d",
"name": "19b. Download Back Shot",
"type": "n8n-nodes-base.httpRequest",
"position": [
4784,
128
],
"typeVersion": 4.4
},
{
"parameters": {
"name": "={{ $('16. Extract Back Shot Task ID').first().json.productName + '-back-generated.jpg' }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"value": "={{ $vars.OUTPUT_FOLDER_ID }}",
"mode": "id"
},
"options": {}
},
"id": "e1f32d0b-3799-42b7-8a39-118b099e83a3",
"name": "20. Save Back Shot to OUTPUT",
"type": "n8n-nodes-base.googleDrive",
"position": [
5008,
128
],
"typeVersion": 3,
"credentials": {
"googleDriveOAuth2Api": {
"id": "cAIq7xOPWCA017Jw",
"name": "Google Drive account"
}
}
},
{
"parameters": {},
"id": "59215609-0686-4fa3-be43-783f1d3e5f9b",
"name": "21. Build Closeup Shot Payload",
"type": "n8n-nodes-base.code",
"position": [
5216,
128
],
"typeVersion": 2
},
{
"parameters": {
"method": "POST",
"url": "https://www.nananobanana.com/api/v1/generate",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $vars.NANABANANA_API_KEY }}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify($json.apiPayload) }}",
"options": {}
},
"id": "4e8987b2-4634-4662-b4ed-8dbe3c0209a9",
"name": "22. Call NanaBanana API (Closeup)",
"type": "n8n-nodes-base.httpRequest",
"position": [
5440,
128
],
"typeVersion": 4.4
},
{
"parameters": {},
"id": "bc2cbc97-37cc-4b15-858e-082be2ae0437",
"name": "23. Extract Closeup Task ID",
"type": "n8n-nodes-base.code",
"position": [
5664,
128
],
"typeVersion": 2
},
{
"parameters": {},
"id": "211cba5d-050d-4ab7-9b33-521801e4c881",
"name": "24. Wait 5s (Closeup)",
"type": "n8n-nodes-base.wait",
"position": [
5888,
128
],
"typeVersion": 1.1,
"webhookId": "8354d792-1467-442d-8c87-e7b4e110acc2"
},
{
"parameters": {
"url": "=https://www.nananobanana.com/api/v1/generate/{{ $json.taskId }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $vars.NANABANANA_API_KEY }}"
}
]
},
"options": {}
},
"id": "82ae6a09-eac1-436d-81e5-5478289b17ff",
"name": "25. Poll Closeup Status",
"type": "n8n-nodes-base.httpRequest",
"position": [
6096,
128
],
"typeVersion": 4.4
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.status || $json.data?.processingStatus }}",
"operation": "equal",
"value2": "completed"
}
]
},
"options": {}
},
"id": "9af565d6-ac92-4216-ae7e-b3e5298d7542",
"name": "26. Closeup Complete?",
"type": "n8n-nodes-base.if",
"position": [
6320,
128
],
"typeVersion": 2.3
},
{
"parameters": {},
"id": "599a219e-b465-4914-8c1e-d6617780a937",
"name": "26a. Retry Closeup",
"type": "n8n-nodes-base.code",
"position": [
6544,
320
],
"typeVersion": 2
},
{
"parameters": {
"url": "={{ $json.output_url || $json.imageUrl || $json.data?.outputImageUrls?.[0] }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"id": "673d291c-53c6-462e-87cb-551c92fedb3e",
"name": "26b. Download Closeup",
"type": "n8n-nodes-base.httpRequest",
"position": [
6544,
128
],
"typeVersion": 4.4
},
{
"parameters": {
"name": "={{ $('23. Extract Closeup Task ID').first().json.productName + '-closeup-generated.jpg' }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"value": "={{ $vars.OUTPUT_FOLDER_ID }}",
"mode": "id"
},
"options": {}
},
"id": "8ff87fd2-c151-48b6-8559-d25aedf615c3",
"name": "27. Save Closeup to OUTPUT",
"type": "n8n-nodes-base.googleDrive",
"position": [
6768,
128
],
"typeVersion": 3,
"credentials": {
"googleDriveOAuth2Api": {
"id": "cAIq7xOPWCA017Jw",
"name": "Google Drive account"
}
}
},
{
"parameters": {},
"id": "adfff8f9-62bc-4bf1-8a5c-b9112c38659a",
"name": "28. Done! Log Completion",
"type": "n8n-nodes-base.code",
"position": [
6976,
128
],
"typeVersion": 2,
"notes": "Workflow complete for this product. The SplitInBatches node will automatically move to the next product."
},
{
"parameters": {
"resource": "image",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 2.1,
"position": [
2272,
272
],
"id": "8300d8e3-2135-43ac-a32e-735a43f63228",
"name": "Generate an image",
"credentials": {
"openAiApi": {
"id": "sJ9UzjOXW48JzMto",
"name": "OpenAi account"
}
}
}
],
"pinData": {
"1. Manual Trigger (Click to Start)": [
{
"json": {},
"pairedItem": {
"item": 0
}
}
]
},
"connections": {
"1. Manual Trigger (Click to Start)": {
"main": [
[
{
"node": "2. List All Files in INPUT Folder",
"type": "main",
"index": 0
}
]
]
},
"2. List All Files in INPUT Folder": {
"main": [
[
{
"node": "3. Process One File at a Time",
"type": "main",
"index": 0
}
]
]
},
"3. Process One File at a Time": {
"main": [
[],
[
{
"node": "4. Parse Filename & Detect Image Type",
"type": "main",
"index": 0
}
]
]
},
"4. Parse Filename & Detect Image Type": {
"main": [
[
{
"node": "5. Is Valid Image Type?",
"type": "main",
"index": 0
}
]
]
},
"5. Is Valid Image Type?": {
"main": [
[
{
"node": "5b. Download Image from Drive",
"type": "main",
"index": 0
}
],
[
{
"node": "5a. Move to NEEDS-RENAME Folder",
"type": "main",
"index": 0
}
]
]
},
"5b. Download Image from Drive": {
"main": [
[
{
"node": "6. Convert to Base64",
"type": "main",
"index": 0
}
]
]
},
"6. Convert to Base64": {
"main": [
[
{
"node": "7. Is This a Front Flat?",
"type": "main",
"index": 0
}
]
]
},
"7. Is This a Front Flat?": {
"main": [
[
{
"node": "7b. Build Front Shot Payload",
"type": "main",
"index": 0
}
],
[
{
"node": "7a. Store Reference Image (not front-flat)",
"type": "main",
"index": 0
}
]
]
},
"7b. Build Front Shot Payload": {
"main": [
[
{
"node": "8. Call NanaBanana API",
"type": "main",
"index": 0
}
]
]
},
"8. Call NanaBanana API": {
"main": [
[
{
"node": "9. Extract Task ID",
"type": "main",
"index": 0
},
{
"node": "Generate an image",
"type": "main",
"index": 0
}
]
]
},
"9. Extract Task ID": {
"main": [
[
{
"node": "10. Wait 5 Seconds",
"type": "main",
"index": 0
}
]
]
},
"10. Wait 5 Seconds": {
"main": [
[
{
"node": "11. Poll Task Status",
"type": "main",
"index": 0
}
]
]
},
"11. Poll Task Status": {
"main": [
[
{
"node": "12. Is Generation Complete?",
"type": "main",
"index": 0
}
]
]
},
"12. Is Generation Complete?": {
"main": [
[
{
"node": "12b. Download Generated Image",
"type": "main",
"index": 0
}
],
[
{
"node": "12a. Not Done Yet — Retry",
"type": "main",
"index": 0
}
]
]
},
"12a. Not Done Yet — Retry": {
"main": [
[
{
"node": "10. Wait 5 Seconds",
"type": "main",
"index": 0
}
]
]
},
"12b. Download Generated Image": {
"main": [
[
{
"node": "13. Save to OUTPUT Folder",
"type": "main",
"index": 0
}
]
]
},
"13. Save to OUTPUT Folder": {
"main": [
[
{
"node": "14. Build Back Shot Payload",
"type": "main",
"index": 0
}
]
]
},
"14. Build Back Shot Payload": {
"main": [
[
{
"node": "15. Call NanaBanana API (Back Shot)",
"type": "main",
"index": 0
}
]
]
},
"15. Call NanaBanana API (Back Shot)": {
"main": [
[
{
"node": "16. Extract Back Shot Task ID",
"type": "main",
"index": 0
}
]
]
},
"16. Extract Back Shot Task ID": {
"main": [
[
{
"node": "17. Wait 5s (Back)",
"type": "main",
"index": 0
}
]
]
},
"17. Wait 5s (Back)": {
"main": [
[
{
"node": "18. Poll Back Shot Status",
"type": "main",
"index": 0
}
]
]
},
"18. Poll Back Shot Status": {
"main": [
[
{
"node": "19. Back Shot Complete?",
"type": "main",
"index": 0
}
]
]
},
"19. Back Shot Complete?": {
"main": [
[
{
"node": "19b. Download Back Shot",
"type": "main",
"index": 0
}
],
[
{
"node": "19a. Retry Back Shot",
"type": "main",
"index": 0
}
]
]
},
"19a. Retry Back Shot": {
"main": [
[
{
"node": "17. Wait 5s (Back)",
"type": "main",
"index": 0
}
]
]
},
"19b. Download Back Shot": {
"main": [
[
{
"node": "20. Save Back Shot to OUTPUT",
"type": "main",
"index": 0
}
]
]
},
"20. Save Back Shot to OUTPUT": {
"main": [
[
{
"node": "21. Build Closeup Shot Payload",
"type": "main",
"index": 0
}
]
]
},
"21. Build Closeup Shot Payload": {
"main": [
[
{
"node": "22. Call NanaBanana API (Closeup)",
"type": "main",
"index": 0
}
]
]
},
"22. Call NanaBanana API (Closeup)": {
"main": [
[
{
"node": "23. Extract Closeup Task ID",
"type": "main",
"index": 0
}
]
]
},
"23. Extract Closeup Task ID": {
"main": [
[
{
"node": "24. Wait 5s (Closeup)",
"type": "main",
"index": 0
}
]
]
},
"24. Wait 5s (Closeup)": {
"main": [
[
{
"node": "25. Poll Closeup Status",
"type": "main",
"index": 0
}
]
]
},
"25. Poll Closeup Status": {
"main": [
[
{
"node": "26. Closeup Complete?",
"type": "main",
"index": 0
}
]
]
},
"26. Closeup Complete?": {
"main": [
[
{
"node": "26b. Download Closeup",
"type": "main",
"index": 0
}
],
[
{
"node": "26a. Retry Closeup",
"type": "main",
"index": 0
}
]
]
},
"26a. Retry Closeup": {
"main": [
[
{
"node": "24. Wait 5s (Closeup)",
"type": "main",
"index": 0
}
]
]
},
"26b. Download Closeup": {
"main": [
[
{
"node": "27. Save Closeup to OUTPUT",
"type": "main",
"index": 0
}
]
]
},
"27. Save Closeup to OUTPUT": {
"main": [
[
{
"node": "28. Done! Log Completion",
"type": "main",
"index": 0
}
]
]
},
"28. Done! Log Completion": {
"main": [
[
{
"node": "3. Process One File at a Time",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1",
"binaryMode": "separate",
"availableInMCP": false
},
"versionId": "1eadc896-f28d-49eb-ba0f-500d83dd62a2",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "73b953ef64e9d36dbeb73a1b68bce071cf6c7d1b2d4b8cbb58bd26f729544fcb"
},
"id": "tpFABnR80NHs23ef",
"tags": []
}