Multi_Ad_Image
Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 22 nœuds.Utilise principalement des nœuds comme If, Set, Wait, SplitOut, GoogleDrive. Générer des images publicitaires de produits IA à partir de Google Sheets avec Fal.ai et OpenAI
- •Informations d'identification Google Drive API
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Informations d'identification Google Sheets API
- •Clé API OpenAI
Nœuds utilisés (22)
Catégorie
{
"id": "pyErkv743Qswub8C",
"meta": {
"instanceId": "2c12b0b552404dc07af67cd5f092afd21d18c808d4fdabdb04cb4b064195b6fb",
"templateCredsSetupCompleted": true
},
"name": "Multi_Ad_Image",
"tags": [],
"nodes": [
{
"id": "1c6ff80d-c6dc-485d-9708-38b9f7af4961",
"name": "Lors du clic sur 'Exécuter le workflow'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
304,
176
],
"parameters": {},
"typeVersion": 1
},
{
"id": "0ebd375b-d9c4-4ae0-90ac-5295b788a253",
"name": "Obtenir la/les ligne(s) dans la feuille",
"type": "n8n-nodes-base.googleSheets",
"position": [
480,
176
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "Create",
"lookupColumn": "status"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XAKLXfhRqPB7RjA8neUHYGwF4FKpM38edJUONHxt9pE/edit#gid=0",
"cachedResultName": "product"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XAKLXfhRqPB7RjA8neUHYGwF4FKpM38edJUONHxt9pE",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XAKLXfhRqPB7RjA8neUHYGwF4FKpM38edJUONHxt9pE/edit?usp=drivesdk",
"cachedResultName": "n8n_Multi_Ad_Image"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "0RVWjnYzlWor2bMu",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "e982d7e4-dced-4897-85cf-708e09d5bc4e",
"name": "Analyser l'image",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
816,
176
],
"parameters": {
"text": "=You are an AI system specialized in **image analysis for advertising**. \nYour task is to carefully analyze the given product image and generate \nstructured insights that will later be used to create high-quality \nadvertising prompts.\n\n### Instructions:\n1. **Identify Product** \n - Type of product (e.g., sneakers, skincare, electronics). \n - Key visible features (color, shape, size, packaging). \n - Materials or textures that can be inferred. \n\n2. **Branding & Style** \n - Any visible logos, brand elements, or design patterns. \n - Style impression (luxury, casual, eco-friendly, tech-oriented). \n\n3. **Target Audience Guess** \n - Suggest who the product might appeal to (young adults, parents, professionals, etc.). \n\n4. **Ad Creative Angles (3–5 ideas)** \n - Marketing hooks inspired by the image. \n - Focus on visual storytelling (e.g., “minimalist lifestyle shot”, “dynamic sports action scene”). \n\n5. **Output Format (JSON)** \n ```json\n {\n \"product_type\": \"...\",\n \"features\": [\"...\", \"...\"],\n \"style\": \"...\",\n \"target_audience\": \"...\",\n \"ad_angles\": [\n \"Ad idea 1\",\n \"Ad idea 2\",\n \"Ad idea 3\",\n \"Ad idea 4\",\n \"Ad idea 5\"\n ]\n }\n",
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"resource": "image",
"inputType": "base64",
"operation": "analyze"
},
"credentials": {
"openAiApi": {
"id": "28LXl50ZdQjnkMJs",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "dcb3134c-a3aa-4384-9f37-e59ea93472f7",
"name": "Télécharger le fichier",
"type": "n8n-nodes-base.googleDrive",
"position": [
640,
176
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "url",
"value": "={{ $json.product_image_url }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "QVrgALkld7whKIgB",
"name": "Google Drive account - Peakwave"
}
},
"typeVersion": 3
},
{
"id": "c87947e9-97eb-4758-b18c-bf14cc232573",
"name": "Agent IA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1024,
176
],
"parameters": {
"text": "=You will receive a real product image and its short description. \nAnalyze them and generate exactly {{ $('Get row(s) in sheet').item.json.num_variations }} distinct, production-ready advertising image prompts.\nIf a campaign is provided, weave its seasonal or promotional context into the prompts naturally. \nIf campaign is empty or \"none\", ignore it.\n\n=== INPUTS ===\n- Product Image URL: {{ $('Get row(s) in sheet').item.json.product_image_url }}\n- Product Name: {{ $('Get row(s) in sheet').item.json.product_name }}\n- Product Description: \"{{ $('Get row(s) in sheet').item.json.product_description }}\"\n- Campaign (optional): {{ $('Get row(s) in sheet').item.json.campaign }} // e.g., \"8.8\", \"10.10\", \"Songkran\", \"Halloween\", \"none\"\n- Target Model: {{ $('Get row(s) in sheet').item.json.model_target }} // e.g., \"SDXL\", \"Midjourney\", \"Flux\", \"Veo\"\n- Aspect Ratio: {{ $('Get row(s) in sheet').item.json.aspect_ratio }} // e.g., \"1:1\", \"4:5\", \"16:9\"\n- Number of Variations (N): {{ $('Get row(s) in sheet').item.json.num_variations }}\n- Brand Guidelines (optional): {{ $('Get row(s) in sheet').item.json.brand_notes }} // e.g., brand palette hex codes, keep logo visible, avoid surreal\n- Creative Constraints (optional): {{ $('Get row(s) in sheet').item.json.constraints }} // e.g., \"no people\", \"no surreal\", \"text-safe negative space\"\n\n=== TASK ===\n1) Treat the product image as ground truth; keep product identity accurate (color, form, logo).\n2) Generate {{ $('Get row(s) in sheet').item.json.num_variations }} visually distinct prompts that are advertising-ready and usable by {{ $('Get row(s) in sheet').item.json.model_target }}.\n3) Vary at least one of: scene/environment, style, lighting, camera, background, composition, color mood, post-process.\n4) If \"campaign\" is provided (not empty/none), incorporate tasteful thematic elements: \n - Halloween → spooky mood, pumpkins, warm/orange accents, moody lighting\n - Songkran → water splashes, summer vibe, bright daylight, outdoor festivity\n - 8.8 / 10.10 / 11.11 → energetic sale vibe, dynamic composition, bold accents\n - Christmas → warm lights, pine elements, cozy red/green palette\n Keep it subtle and brand-safe; do not add new logos or misleading claims.\n5) Follow strictly the JSON schema in the **system prompt** (no extra text).\n6) If any subfield cannot be inferred safely, leave it as an empty string \"\".\n7) Ensure each \"prompt\" is **one line** and does not break JSON.\n\n=== REMINDERS ===\n- Avoid vague adjectives. Be concrete and visual.\n- Composition tips: centered hero, rule-of-thirds lifestyle, top-down flat-lay, negative space for copy.\n- Lighting tips: softbox/rim for packshots, natural daylight for lifestyle, golden hour for warmth.\n- Camera tips: 35mm/50mm for natural look, 85mm for product portrait with shallow DoF, macro for texture.\n- Color mood: align gently with any campaign; otherwise, use clean brand-safe palettes.\n\n=== RETURN FORMAT ===\n- Return a **single JSON object** only, matching the schema in the system prompt.\n",
"options": {
"systemMessage": "=You are an **Advertising Image Prompt Designer**.\n\nInputs you may receive:\n- product_image_url (image of the real product; treat as ground truth)\n- product_name\n- product_description\n- campaign (optional; e.g., \"8.8\", \"10.10\", \"Songkran\", \"Halloween\", \"Black Friday\", \"Christmas\")\n- model_target (e.g., \"SDXL\", \"Midjourney\", \"Flux\", \"Veo\")\n- aspect_ratio (e.g., \"1:1\", \"4:5\", \"16:9\")\n- N (number of distinct variations to generate)\n\nGoal:\n- Analyze the given product image, short description, and optional campaign context.\n- Produce **N distinct, production-ready image prompts** for ad creation.\n- **Preserve the product’s true identity** (color, form, logo, key features). Do not invent or alter the product.\n\nOutput:\n- Return **JSON only** following the schema below. **No extra text** outside the JSON.\n\nQuality rules:\n- Each prompt must be visually distinct (vary at least one major axis: scene, mood, style, lighting, camera, background, composition).\n- Use concise, concrete descriptors; avoid vague words (e.g., “nice”, “beautiful”).\n- Keep prompts brand-safe and realistic unless the user explicitly allows surreal concepts.\n- Prefer modern ad aesthetics: clean hero shots, lifestyle, editorial, macro texture, flat-lay, outdoor ambient, etc.\n- If any requested field is missing in the user input, **infer from the image**; if you cannot infer safely, set that subfield to an empty string.\n- If a **campaign** is provided, incorporate its seasonal or promotional theme **naturally and tastefully** (e.g., \n • Halloween → moody/spooky, pumpkins, warm/orange accents, fog \n • Songkran → water splash, festive Thai summer vibe, bright daylight \n • 8.8 / 10.10 / 11.11 → bold sale energy, dynamic composition, price-tag visual cues without adding logos \n • Christmas → cozy, pine, warm lights, red/green palette \n • Black Friday → high contrast, dark sleek backdrops). \n If no campaign is provided (empty or “none”), **ignore** campaign styling.\n\nTarget models:\n- Prompts should be usable by **Midjourney, SDXL, Flux, or Veo**. Avoid model-specific tokens unless provided in the user input (e.g., “--ar 16:9”, “--style raw”).\n\nPrompt composition guidance (recommended ingredients):\n- **Subject/Product**: exact product + salient features visible in the image (material, finish, color, unique parts).\n- **Scene/Environment**: studio / lifestyle / outdoor / occasion-linked (if campaign present).\n- **Style/Art direction**: minimalist / cinematic / editorial / lifestyle / high-fashion / tech-forward / cozy, etc.\n- **Lighting**: softbox / rim light / natural daylight / golden hour / neon / HDRI; mention shadows/reflections if relevant.\n- **Camera**: 35mm / 85mm / wide / macro / top-down / tilt-shift, F-stop or DoF if helpful.\n- **Composition**: centered / rule of thirds / flat-lay / hero shot / negative space for text.\n- **Background**: seamless white/black, textured concrete, wooden desk, gradient, seasonal set pieces (only if campaign present).\n- **Color mood**: pastel / vibrant / monochrome / brand palette; align gently with any campaign palette.\n- **Post-process**: subtle film grain / glossy reflections / HDR / product retouch / shadow catching.\n- **Marketing angle**: premium luxury / eco-friendly / active lifestyle / tech-forward / festive sale energy.\n\nBrand-safety & integrity:\n- Do **not** add or modify logos, certifications, or claims not present in the description.\n- Do **not** imply medical/health claims unless explicitly provided.\n- Avoid depicting real people/celebrities. If humans are implied, keep them generic and non-identifiable.\n\nRequired JSON schema (return this object only):\n{\n \"product_name\": string,\n \"product_description\": string,\n \"image_url\": string,\n \"campaign\": string, // optional; leave \"\" if none\n \"model_target\": string, // e.g., \"SDXL\", \"Midjourney\", \"Flux\", \"Veo\"\n \"aspect_ratio\": string, // e.g., \"1:1\", \"4:5\", \"16:9\"\n \"variations\": [\n {\n \"variation_id\": number,\n \"prompt\": string, // full generation prompt (one line)\n \"style\": string, // e.g., minimalist / cinematic / editorial / lifestyle / surreal\n \"scene\": string, // e.g., studio / outdoor / cafe / gym / beach\n \"lighting\": string, // e.g., softbox / natural daylight / neon / golden hour / rim light\n \"camera\": string, // e.g., 35mm / 85mm / macro / top-down / tilt-shift, include DoF if useful\n \"composition\": string, // e.g., centered / rule of thirds / flat-lay / hero shot / negative space\n \"background\": string, // e.g., white seamless / textured concrete / gradient / city night\n \"color_mood\": string, // e.g., pastel / vibrant / monochrome / brand palette\n \"post_process\": string, // e.g., subtle film grain / glossy reflections / HDR / product retouch\n \"marketing_angle\": string // e.g., premium luxury / eco-friendly / active lifestyle / tech-forward\n }\n ]\n}\n\nValidation:\n- Produce **exactly N** variations.\n- Ensure each \"prompt\" is a **single line** without JSON-breaking characters.\n- Escape any internal quotes if needed. Do not include commentary outside the JSON block.\n\nFailure handling:\n- If the image cannot be analyzed (unreachable URL or ambiguous), still return a valid JSON with minimal safe prompts derived from the description; leave unknown subfields as \"\" and add a short note in \"notes\".\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "f4b60076-6dd2-4da1-90db-117eabe4715c",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1008,
288
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "28LXl50ZdQjnkMJs",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "12f40103-c60f-4a7b-82d1-960bd6b32755",
"name": "Diviser les sorties",
"type": "n8n-nodes-base.splitOut",
"position": [
1312,
176
],
"parameters": {
"options": {},
"fieldToSplitOut": "output.scenes"
},
"typeVersion": 1
},
{
"id": "e695e646-9759-46c4-a33c-36cda24da934",
"name": "Ajouter une ligne dans la feuille",
"type": "n8n-nodes-base.googleSheets",
"position": [
1456,
176
],
"parameters": {
"columns": {
"value": {
"prompt": "={{ $json.prompt }}",
"status": "Ready",
"scene_ref": "={{ $('Get row(s) in sheet').item.json.product_name }}_{{ $json.scene_id }}",
"product_name": "={{ $('Get row(s) in sheet').item.json.product_name }}"
},
"schema": [
{
"id": "scene_ref",
"type": "string",
"display": true,
"required": false,
"displayName": "scene_ref",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "product_name",
"type": "string",
"display": true,
"required": false,
"displayName": "product_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "prompt",
"type": "string",
"display": true,
"required": false,
"displayName": "prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "status",
"type": "string",
"display": true,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "output_url",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "output_url",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1544343606,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XAKLXfhRqPB7RjA8neUHYGwF4FKpM38edJUONHxt9pE/edit#gid=1544343606",
"cachedResultName": "ad_image"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XAKLXfhRqPB7RjA8neUHYGwF4FKpM38edJUONHxt9pE",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XAKLXfhRqPB7RjA8neUHYGwF4FKpM38edJUONHxt9pE/edit?usp=drivesdk",
"cachedResultName": "n8n_Multi_Ad_Image"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "0RVWjnYzlWor2bMu",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "e1bb5b31-1f2b-4d9e-80ff-d91bbeac3793",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"disabled": true,
"position": [
-64,
384
],
"parameters": {
"width": 1840,
"height": 192,
"content": "### 🟨 Zone 2: Create Image\n\n1. **When clicking 'Execute workflow**\n2. **Get ImageURL and Prompt(Google Sheets)**\n3. **Create Image by Fal.ai (nano banana)**\n4. **Analys image for preparing video**"
},
"typeVersion": 1
},
{
"id": "d53e1592-7956-4154-9df9-bf8b7943e7fc",
"name": "Attendre",
"type": "n8n-nodes-base.wait",
"position": [
976,
464
],
"webhookId": "98549686-33c2-4bef-a176-92ead56ad0d1",
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "c75b4d0b-3309-4f03-8402-d13accc7edbc",
"name": "Si",
"type": "n8n-nodes-base.if",
"position": [
816,
416
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "38f5427f-4fc7-4c07-87d5-fa7f5964deb2",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "=COMPLETED"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "b313b28e-10e0-4815-b8e5-a5e8c1ad4542",
"name": "Obtenir le statut de l'image",
"type": "n8n-nodes-base.httpRequest",
"position": [
656,
416
],
"parameters": {
"url": "={{ $json.status_url }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "8aXZ3G10Qvvsc8FY",
"name": "Fal AI"
}
},
"typeVersion": 4.2
},
{
"id": "16e46dfb-8cf7-45fd-9d72-c71b1b3eefad",
"name": "Appeler Fal.ai API (nannoBanana)",
"type": "n8n-nodes-base.httpRequest",
"position": [
480,
416
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/{{ $('Get row(s) in sheet').item.json.model_target }}/edit",
"method": "=POST",
"options": {},
"jsonBody": "={\n \"prompt\": \"{{ $json.prompt }} {{ $json.notes }}\",\n \"image_urls\": [\n \"{{ $json.product }}\"\n ],\n \"num_images\": 1,\n \"output_format\": \"jpeg\"\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "8aXZ3G10Qvvsc8FY",
"name": "Fal AI"
}
},
"typeVersion": 4.2
},
{
"id": "56a8079f-6e4d-46db-b975-433463b9fa68",
"name": "Mettre à jour la ligne dans la feuille",
"type": "n8n-nodes-base.googleSheets",
"position": [
1584,
400
],
"parameters": {
"columns": {
"value": {
"status": "Complete",
"scene_ref": "={{ $('Append row in sheet').item.json.scene_ref }}",
"output_url": "={{ $json.webViewLink }}"
},
"schema": [
{
"id": "scene_ref",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "scene_ref",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "product_name",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "product_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "prompt",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "notes",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "output_url",
"type": "string",
"display": true,
"required": false,
"displayName": "output_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"scene_ref"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1544343606,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XAKLXfhRqPB7RjA8neUHYGwF4FKpM38edJUONHxt9pE/edit#gid=1544343606",
"cachedResultName": "ad_image"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XAKLXfhRqPB7RjA8neUHYGwF4FKpM38edJUONHxt9pE",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XAKLXfhRqPB7RjA8neUHYGwF4FKpM38edJUONHxt9pE/edit?usp=drivesdk",
"cachedResultName": "n8n_Multi_Ad_Image"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "0RVWjnYzlWor2bMu",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "8ae70d5b-3dd5-42e6-9c32-f6d36d299b21",
"name": "Téléverser le fichier",
"type": "n8n-nodes-base.googleDrive",
"position": [
1440,
400
],
"parameters": {
"name": "={{ $('Get row(s) in sheet').item.json.product_name }}_{{ $('Append row in sheet').item.json.scene_ref }}.jpeg",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1GyJp-XK4NIwjvUp13CHBUMiGNum1Yzl8",
"cachedResultUrl": "https://drive.google.com/drive/folders/1GyJp-XK4NIwjvUp13CHBUMiGNum1Yzl8",
"cachedResultName": "outputImage"
},
"inputDataFieldName": "=data"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "QVrgALkld7whKIgB",
"name": "Google Drive account - Peakwave"
}
},
"typeVersion": 3
},
{
"id": "69afdf78-491a-4952-936e-03208adc6787",
"name": "Modifier les champs",
"type": "n8n-nodes-base.set",
"position": [
320,
416
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "62a409c6-c607-452b-9bbb-f3d29c86dddf",
"name": "product",
"type": "string",
"value": "={{ \n (() => { \n const u = $('Get row(s) in sheet').item.json.product_image_url || ''; \n const q = u.match(/[?&]id=([-\\w]{25,})/); \n const d = u.match(/\\/d\\/([-\\w]{25,})/); \n const any = u.match(/[-\\w]{25,}/); \n const id = q?.[1] || d?.[1] || (any ? any[0] : ''); \n return id ? 'https://drive.google.com/uc?export=view&id=' + id : ''; \n })() \n}}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "bc750bdb-45ad-4380-ad1d-6688cb242850",
"name": "Analyseur de sortie structurée",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1168,
288
],
"parameters": {
"jsonSchemaExample": "\n{\n \"product_name\": \"Smart Water Bottle\",\n \"product_description\": \"A sleek stainless steel smart water bottle with LED temperature display.\",\n \"image_url\": \"https://drive.google.com/uc?export=view&id=123abcXYZ\",\n \"scenes\": [\n {\n \"scene_id\": 1,\n \"prompt\": \"smart stainless steel water bottle on a minimalist white marble counter, cinematic studio lighting, soft shadows, product hero shot, centered composition\"\n },\n {\n \"scene_id\": 2,\n \"prompt\": \"smart water bottle on a wooden gym bench, fitness lifestyle, natural sunlight from window, sweat towel nearby, cinematic depth of field\"\n },\n {\n \"scene_id\": 3,\n \"prompt\": \"product placed in a futuristic cyberpunk neon city background, glowing reflections, dramatic rim lighting, 35mm lens, bold composition\"\n }\n ]\n}\n"
},
"typeVersion": 1.3
},
{
"id": "ee86e519-9ea5-41f0-b887-559558b1b206",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"position": [
1296,
400
],
"parameters": {
"url": "={{ $json.images[0].url }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "8aXZ3G10Qvvsc8FY",
"name": "Fal AI"
}
},
"typeVersion": 4.2
},
{
"id": "e8505d4b-2bf8-4a36-be98-4e0fc0597fbf",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"disabled": true,
"position": [
-64,
160
],
"parameters": {
"color": 4,
"width": 1840,
"height": 208,
"content": "### 🟩 Zone 1: Create Image\n\n1. **When clicking 'Execute workflow**\n2. **Get ImageURL and Product Detail(Google Sheets)**\n3. **Analys image for create Ad image**\n4. **AI generate Prompt for Ad_Image**"
},
"typeVersion": 1
},
{
"id": "3c27ccb4-b7f0-4ddd-ad17-bb3563920552",
"name": "Obtenir l'image1",
"type": "n8n-nodes-base.httpRequest",
"position": [
1136,
400
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/nano-banana/requests/{{ $json.request_id }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "8aXZ3G10Qvvsc8FY",
"name": "Fal AI"
}
},
"retryOnFail": true,
"typeVersion": 4.2,
"alwaysOutputData": false
},
{
"id": "c0798b64-0f44-44eb-b3f9-16c58f19f762",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"disabled": true,
"position": [
-48,
608
],
"parameters": {
"color": 4,
"width": 336,
"height": 464,
"content": "## Product Image\n\n"
},
"typeVersion": 1
},
{
"id": "9ab9daa1-fce9-47ab-86de-c577327cf1b0",
"name": "Note adhésive5",
"type": "n8n-nodes-base.stickyNote",
"disabled": true,
"position": [
304,
608
],
"parameters": {
"color": 4,
"width": 1472,
"height": 464,
"content": "## Product Image - nano Banana\n   "
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "d4b9b60e-31d7-4a7e-b78b-8dd85b374edc",
"connections": {
"c75b4d0b-3309-4f03-8402-d13accc7edbc": {
"main": [
[
{
"node": "3c27ccb4-b7f0-4ddd-ad17-bb3563920552",
"type": "main",
"index": 0
}
],
[
{
"node": "d53e1592-7956-4154-9df9-bf8b7943e7fc",
"type": "main",
"index": 0
}
]
]
},
"d53e1592-7956-4154-9df9-bf8b7943e7fc": {
"main": [
[
{
"node": "b313b28e-10e0-4815-b8e5-a5e8c1ad4542",
"type": "main",
"index": 0
}
]
]
},
"c87947e9-97eb-4758-b18c-bf14cc232573": {
"main": [
[
{
"node": "12f40103-c60f-4a7b-82d1-960bd6b32755",
"type": "main",
"index": 0
}
]
]
},
"12f40103-c60f-4a7b-82d1-960bd6b32755": {
"main": [
[
{
"node": "e695e646-9759-46c4-a33c-36cda24da934",
"type": "main",
"index": 0
}
]
]
},
"69afdf78-491a-4952-936e-03208adc6787": {
"main": [
[
{
"node": "16e46dfb-8cf7-45fd-9d72-c71b1b3eefad",
"type": "main",
"index": 0
}
]
]
},
"8ae70d5b-3dd5-42e6-9c32-f6d36d299b21": {
"main": [
[
{
"node": "56a8079f-6e4d-46db-b975-433463b9fa68",
"type": "main",
"index": 0
}
]
]
},
"ee86e519-9ea5-41f0-b887-559558b1b206": {
"main": [
[
{
"node": "8ae70d5b-3dd5-42e6-9c32-f6d36d299b21",
"type": "main",
"index": 0
}
]
]
},
"e982d7e4-dced-4897-85cf-708e09d5bc4e": {
"main": [
[
{
"node": "c87947e9-97eb-4758-b18c-bf14cc232573",
"type": "main",
"index": 0
}
]
]
},
"dcb3134c-a3aa-4384-9f37-e59ea93472f7": {
"main": [
[
{
"node": "e982d7e4-dced-4897-85cf-708e09d5bc4e",
"type": "main",
"index": 0
}
]
]
},
"3c27ccb4-b7f0-4ddd-ad17-bb3563920552": {
"main": [
[
{
"node": "ee86e519-9ea5-41f0-b887-559558b1b206",
"type": "main",
"index": 0
}
]
]
},
"b313b28e-10e0-4815-b8e5-a5e8c1ad4542": {
"main": [
[
{
"node": "c75b4d0b-3309-4f03-8402-d13accc7edbc",
"type": "main",
"index": 0
}
]
]
},
"f4b60076-6dd2-4da1-90db-117eabe4715c": {
"ai_languageModel": [
[
{
"node": "c87947e9-97eb-4758-b18c-bf14cc232573",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"e695e646-9759-46c4-a33c-36cda24da934": {
"main": [
[
{
"node": "69afdf78-491a-4952-936e-03208adc6787",
"type": "main",
"index": 0
}
]
]
},
"0ebd375b-d9c4-4ae0-90ac-5295b788a253": {
"main": [
[
{
"node": "dcb3134c-a3aa-4384-9f37-e59ea93472f7",
"type": "main",
"index": 0
}
]
]
},
"bc750bdb-45ad-4380-ad1d-6688cb242850": {
"ai_outputParser": [
[
{
"node": "c87947e9-97eb-4758-b18c-bf14cc232573",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"16e46dfb-8cf7-45fd-9d72-c71b1b3eefad": {
"main": [
[
{
"node": "b313b28e-10e0-4815-b8e5-a5e8c1ad4542",
"type": "main",
"index": 0
}
]
]
},
"1c6ff80d-c6dc-485d-9708-38b9f7af4961": {
"main": [
[
{
"node": "0ebd375b-d9c4-4ae0-90ac-5295b788a253",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Création de contenu, IA Multimodale
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Jaruphat J.
@jaruphatjProject Manager who passionate about Automation & AI and continuously explore innovative ways to improve business processes through intelligent workflow automation. Let’s connect and automate the future!
Partager ce workflow