Multi_Ad_Image
高级
这是一个Content Creation, Multimodal AI领域的自动化工作流,包含 22 个节点。主要使用 If, Set, Wait, SplitOut, GoogleDrive 等节点。 使用Fal.ai和OpenAI从Google表格生成AI产品广告图像
前置要求
- •Google Drive API 凭证
- •可能需要目标 API 的认证凭证
- •Google Sheets API 凭证
- •OpenAI API Key
使用的节点 (22)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "pyErkv743Qswub8C",
"meta": {
"instanceId": "2c12b0b552404dc07af67cd5f092afd21d18c808d4fdabdb04cb4b064195b6fb",
"templateCredsSetupCompleted": true
},
"name": "Multi_Ad_Image",
"tags": [],
"nodes": [
{
"id": "1c6ff80d-c6dc-485d-9708-38b9f7af4961",
"name": "当点击\"执行工作流\"时",
"type": "n8n-nodes-base.manualTrigger",
"position": [
304,
176
],
"parameters": {},
"typeVersion": 1
},
{
"id": "0ebd375b-d9c4-4ae0-90ac-5295b788a253",
"name": "获取表格中的行",
"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": "分析图像",
"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": "下载文件",
"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": "AI Agent",
"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 聊天模型",
"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": "拆分输出",
"type": "n8n-nodes-base.splitOut",
"position": [
1312,
176
],
"parameters": {
"options": {},
"fieldToSplitOut": "output.scenes"
},
"typeVersion": 1
},
{
"id": "e695e646-9759-46c4-a33c-36cda24da934",
"name": "在表格中追加行",
"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": "便签",
"type": "n8n-nodes-base.stickyNote",
"disabled": true,
"position": [
-64,
384
],
"parameters": {
"width": 1840,
"height": 192,
"content": "### 🟨 区域 2:创建图像"
},
"typeVersion": 1
},
{
"id": "d53e1592-7956-4154-9df9-bf8b7943e7fc",
"name": "等待",
"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": "如果",
"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": "获取图像状态",
"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": "调用 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": "在表格中更新行",
"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": "上传文件",
"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": "编辑字段",
"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": "结构化输出解析器",
"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 请求",
"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": "便签1",
"type": "n8n-nodes-base.stickyNote",
"disabled": true,
"position": [
-64,
160
],
"parameters": {
"color": 4,
"width": 1840,
"height": 208,
"content": "### 🟩 区域 1:创建图像"
},
"typeVersion": 1
},
{
"id": "3c27ccb4-b7f0-4ddd-ad17-bb3563920552",
"name": "获取图像1",
"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": "便签4",
"type": "n8n-nodes-base.stickyNote",
"disabled": true,
"position": [
-48,
608
],
"parameters": {
"color": 4,
"width": 336,
"height": 464,
"content": "## 产品图像"
},
"typeVersion": 1
},
{
"id": "9ab9daa1-fce9-47ab-86de-c577327cf1b0",
"name": "便签5",
"type": "n8n-nodes-base.stickyNote",
"disabled": true,
"position": [
304,
608
],
"parameters": {
"color": 4,
"width": 1472,
"height": 464,
"content": "## 产品图像 - nano Banana"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "d4b9b60e-31d7-4a7e-b78b-8dd85b374edc",
"connections": {
"If": {
"main": [
[
{
"node": "Get the image1",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Get image status",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Call Fal.ai API (nannoBanana)",
"type": "main",
"index": 0
}
]
]
},
"Upload file": {
"main": [
[
{
"node": "Update row in sheet",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "Upload file",
"type": "main",
"index": 0
}
]
]
},
"Analyze image": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Download file": {
"main": [
[
{
"node": "Analyze image",
"type": "main",
"index": 0
}
]
]
},
"Get the image1": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Get image status": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Append row in sheet": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in sheet": {
"main": [
[
{
"node": "Download file",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Call Fal.ai API (nannoBanana)": {
"main": [
[
{
"node": "Get image status",
"type": "main",
"index": 0
}
]
]
},
"When clicking ‘Execute workflow’": {
"main": [
[
{
"node": "Get row(s) in sheet",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 内容创作, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
Gemini_NanoBanana_模板
使用 Fal.ai 模型(nano-banana、WAN2.2、Veo3)从 Google Sheets 生成 UGC 广告
If
Set
Code
+13
36 节点Jaruphat J.
内容创作
FalAI_SeeDanceV1.0_英文模板
使用GPT-4o、Fal.AI Seedance和音频从文本提示生成电影级视频
If
Code
Wait
+12
38 节点Jaruphat J.
内容创作
1. 播放列表详情设置机器人副本
使用 Suno、GPT-4、Runway 和 Creatomate 创建 AI 生成的 YouTube 音乐播放列表
If
Set
Code
+22
203 节点Joseph
内容创作
AI驱动的邮件分诊与自动回复系统,集成OpenAI代理和Gmail
AI驱动的邮件分诊与自动回复系统,集成OpenAI代理和Gmail
If
Set
Gmail
+20
68 节点Abdullahi Ahmed
内容创作
💥 使用NanoBanana、Seedream 4、ChatGPT Image和Veo 3自动化视频广告 - VIDE
使用AI(NanoBanana、Seedream、GPT-4o、Veo 3)自动化和发布视频广告活动
Set
Code
Wait
+16
63 节点Dr. Firas
内容创作
WordPress博客自动化专业版(深度研究)v2.1市场
使用GPT-4o、Perplexity AI和多语言支持自动化SEO优化的博客创建
If
Set
Xml
+27
125 节点Daniel Ng
内容创作
工作流信息
难度等级
高级
节点数量22
分类2
节点类型13
作者
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!
外部链接
在 n8n.io 查看 →
分享此工作流