💥 使用 NanoBanana 和 Seedance 创建病毒式广告,通过 upload-post 在社交媒体发布 VIDE II

高级

这是一个Miscellaneous、Multimodal AI领域的自动化工作流,包含 45 个节点。主要使用 If、Set、Code、Wait、Telegram 等节点。 使用 AI 创建病毒式多媒体广告:NanoBanana、Seedance 和 Suno 用于社交媒体

前置要求
  • Telegram Bot Token
  • Google Drive API 凭证
  • 可能需要目标 API 的认证凭证
  • Google Sheets API 凭证
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "9Ts6qVznkrvr6G0h",
  "meta": {
    "instanceId": "a2b23892dd6989fda7c1209b381f5850373a7d2b85609624d7c2b7a092671d44",
    "templateCredsSetupCompleted": true
  },
  "name": "💥 使用 NanoBanana 和 Seedance 创建病毒式广告,通过 upload-post 在社交媒体发布 VIDE II",
  "tags": [],
  "nodes": [
    {
      "id": "e8ef42d0-825f-43a3-91a3-6f0921f77fcd",
      "name": "Telegram:获取图片文件",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -768,
        -144
      ],
      "webhookId": "7270a625-b35a-4c3d-824e-e9d98cbe793f",
      "parameters": {
        "fileId": "={{ $json.message.photo[2].file_id }}",
        "resource": "file",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "3mty87fduTdA6SKM",
          "name": "Telegram account 13 - nanobanana II"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d768709c-4dd1-4698-a653-5aafd58e2126",
      "name": "Google Drive:上传图片",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -512,
        -144
      ],
      "parameters": {
        "name": "={{ $('Trigger: Receive Idea via Telegram').item.json.message.photo[2].file_unique_id }}",
        "driveId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "gzeHMd64HAz6HBIe",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "657506bc-4d83-4b76-938a-eb649601c639",
      "name": "LLM:结构化输出解析器",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        320,
        192
      ],
      "parameters": {
        "jsonSchemaExample": "{\n\t\"image_prompt\": \"string\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "9cf13394-f27b-4c28-9894-695cb705d1be",
      "name": "LLM:OpenAI 聊天",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        80,
        192
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini",
          "cachedResultName": "gpt-5-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "6h3DfVhNPw9I25nO",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ebaf73ce-731e-4e06-bf55-f15f18e101fe",
      "name": "生成图片提示",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        144,
        -64
      ],
      "parameters": {
        "text": "=Your task is to create an image prompt following the system guidelines.  \nEnsure that the reference image is represented as **accurately as possible**, including all text elements.  \n\nUse the following inputs:  \n\n- **User’s description:**  \n{{ $json.imagePrompt }}\n\n\nInclude optional overlay text in serif font in small font size:\n\"{{ $json.textOverlay }}\"\nCRITICAL: Stack the text in 4 SHORT LINES centered in the middle\nof the image. Each line must be very short to avoid cropping when\nconverted to 9:16. Keep all text in the center 40% of image\nwidth.",
        "options": {
          "systemMessage": "=ROLE: UGC Image Prompt Builder  \n\nGOAL:  \nGenerate one concise, natural, and realistic image prompt (≤120 words) from a given product or reference image. The prompt must simulate authentic UGC (user-generated content) photography.  \n\nRULES:  \nYou must always create a professional background for the product image. You must never return the image with a plain white or empty background. The background must always enhance and highlight the product in the photo.\n\n- Always output **one JSON object only** with the key:  \n  - `image_prompt`: (string with full description)  \n- Do **not** add commentary, metadata, or extra keys. JSON only.  \n- User node think to be creative\n\nSTYLE GUIDELINES:  \n- Tone: casual, unstaged, lifelike, handheld snapshot.  \n- Camera cues: include at least 2–3 (e.g., phone snapshot, handheld framing, off-center composition, natural indoor light, soft shadows, slight motion blur, auto exposure, unpolished look, mild grain).  \n- Realism: embrace imperfections (wrinkles, stray hairs, skin texture, clutter, smudges).  \n- Packaging/Text: preserve exactly as visible. Never invent claims, numbers, or badges.  \n- Diversity: if people appear but are unspecified, vary gender/ethnicity naturally; default age range = 21–38.  \n- Setting: default to real-world everyday spaces (home, street, store, gym, office).  \n- User node think to be creative\nYou must always create a professional background for the product image. You must never return the image with a plain white or empty background. The background must always enhance and highlight the product in the photo.\n\nSAFETY:  \n- No copyrighted character names.  \n- No dialogue or scripts. Only describe scenes.  \n\nOUTPUT CONTRACT:  \n- JSON only, no prose outside.  \n- Max 120 words in `image_prompt`.  \n- Must cover: subject, action, mood, setting, background, style/camera, colors, and text accuracy.  \n\nCHECKLIST BEFORE OUTPUT:  \n- Natural handheld tone?  \n- At least 2 camera cues included?  \n- Product text preserved exactly?  \n- Only JSON returned?  \n\n---  \n\n### Example  \n\nGood Example :  \n```json\n{ \"image_prompt\": \"a young adult casually holding a skincare tube near a bathroom mirror; action: dabs small amount on the back of the hand; mood: easy morning; setting: small apartment bathroom with towel on rack and toothbrush cup; background: professional-looking bathroom scene that enhances the product, never plain white or empty, always styled to highlight the tube naturally; style/camera: phone snapshot, handheld framing, off-center composition, natural window light, slight motion blur, mild grain; colors: soft whites and mint label; text accuracy: keep every word on the tube exactly as visible, no added claims\" }\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "9d0412cc-55cf-437f-a2aa-87f8a02f52a6",
      "name": "NanoBanana:创建图片",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        480,
        -64
      ],
      "parameters": {
        "url": "https://queue.fal.run/fal-ai/nano-banana/edit",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n\t\"prompt\": \"{{ $json.output.image_prompt.replace(/\\\"/g, '\\\\\\\"').replace(/\\n/g, '\\\\n') }}\",\n\"image_urls\": [\"{{ $('Google Drive: Upload Image').item.json.webContentLink }}\"]\n\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "kNULkYDcOZG3X0be",
          "name": "Fal.ai"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "38e06e0c-ffd0-42fd-b6bb-1903931d43d1",
      "name": "等待图片编辑",
      "type": "n8n-nodes-base.wait",
      "position": [
        704,
        -64
      ],
      "webhookId": "f2439e01-c63f-43a3-ae88-4f329a405c37",
      "parameters": {
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "8cb4ec4e-1d1f-4f6b-89d0-4dcb294d85a8",
      "name": "下载编辑后的图片",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        704,
        192
      ],
      "parameters": {
        "url": "={{ $json.response_url }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "kNULkYDcOZG3X0be",
          "name": "Fal.ai"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "ea09e08d-f71c-485b-8420-ac045d2827e9",
      "name": "便签说明4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1072,
        384
      ],
      "parameters": {
        "width": 1020,
        "height": 320,
        "content": "# 🟢 步骤 4 — 使用 Seedance 生成产品视频"
      },
      "typeVersion": 1
    },
    {
      "id": "271188a5-fcd6-43fb-b382-c53e3833213e",
      "name": "等待渲染",
      "type": "n8n-nodes-base.wait",
      "position": [
        -752,
        512
      ],
      "webhookId": "3ec9fd26-3bd2-438e-8918-dc2a179389e3",
      "parameters": {
        "amount": 20
      },
      "typeVersion": 1.1
    },
    {
      "id": "c32d6586-6730-404d-9d82-eb782e32fa12",
      "name": "从 Seedance 下载视频",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -496,
        512
      ],
      "parameters": {
        "url": "=https://api.kie.ai/api/v1/jobs/recordInfo?taskId={{ $json.data.taskId }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "ho8ZjaYj1SY0icGT",
          "name": "Kie AI"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d65291c2-25e3-47a1-a28e-4db5b085befc",
      "name": "便签说明",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        384
      ],
      "parameters": {
        "width": 908,
        "height": 320,
        "content": "# 🟢 步骤 5 — 使用 Suno 生成背景音乐"
      },
      "typeVersion": 1
    },
    {
      "id": "37fa5194-f024-4501-b671-8379328813bd",
      "name": "便签说明5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1072,
        -224
      ],
      "parameters": {
        "width": 1020,
        "height": 288,
        "content": "# 🟢 步骤 1 — 输入"
      },
      "typeVersion": 1
    },
    {
      "id": "02a0927c-5fc3-48b0-be1c-de72d50ece24",
      "name": "便签 6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        -224
      ],
      "parameters": {
        "width": 908,
        "height": 576,
        "content": "# 🟢 步骤 2 — 生成产品图片"
      },
      "typeVersion": 1
    },
    {
      "id": "620bd3a5-d7bd-46fc-a955-af7a1fd9e71b",
      "name": "便签 7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1072,
        80
      ],
      "parameters": {
        "color": 5,
        "width": 1020,
        "height": 272,
        "content": "# 🟢 步骤 3 — 在 Instagram 和 X 上发布产品图片"
      },
      "typeVersion": 1
    },
    {
      "id": "61f952e4-b77f-44fd-9076-effe6e30a5ac",
      "name": "便签8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1072,
        736
      ],
      "parameters": {
        "width": 1964,
        "height": 320,
        "content": "# 🟢 步骤 6 — 合并视频和音频为最终广告"
      },
      "typeVersion": 1
    },
    {
      "id": "68433349-3fce-4a26-9889-d79eb0ff8dec",
      "name": "便签 9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1072,
        1088
      ],
      "parameters": {
        "color": 5,
        "width": 1964,
        "height": 336,
        "content": "# 🟢 步骤 7 — 在社交媒体上发布最终广告"
      },
      "typeVersion": 1
    },
    {
      "id": "06b3d1aa-90df-4ca0-ac5e-732cce1a6f3a",
      "name": "通过 Telegram 发送视频 URL",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -128,
        1184
      ],
      "webhookId": "d18e9567-ca34-49fe-968b-4c950b75bfed",
      "parameters": {
        "text": "=Url VIDEO : {{ $json['URL FINAL VIDEO'] }}",
        "chatId": "={{ $node[\"Trigger: Receive Idea via Telegram\"].json.message.chat.id }}\n",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "3mty87fduTdA6SKM",
          "name": "Telegram account 13 - nanobanana II"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "54650c76-a045-40a3-8aa1-9e96a2cab303",
      "name": "发送最终视频预览",
      "type": "n8n-nodes-base.telegram",
      "position": [
        80,
        1184
      ],
      "webhookId": "fe371505-fc1f-46de-8d03-098e4744617a",
      "parameters": {
        "file": "={{ $('Save Ad Data to Google Sheets').item.json['URL FINAL VIDEO'] }}",
        "chatId": "={{ $json.result.chat.id }}",
        "operation": "sendVideo",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "3mty87fduTdA6SKM",
          "name": "Telegram account 13 - nanobanana II"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "06d8b993-88a7-4c72-bd87-b18afe7de32a",
      "name": "Telegram:发送通知",
      "type": "n8n-nodes-base.telegram",
      "position": [
        704,
        1184
      ],
      "webhookId": "51d2c6a2-88a2-4879-b81b-b2a6ba9ac710",
      "parameters": {
        "text": "Published",
        "chatId": "={{ $node[\"Trigger: Receive Idea via Telegram\"].json.message.chat.id }}\n",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "3mty87fduTdA6SKM",
          "name": "Telegram account 13 - nanobanana II"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "efc613ab-75d1-4676-8903-ac2f8f4ea428",
      "name": "触发器:通过 Telegram 接收创意",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -1008,
        -144
      ],
      "webhookId": "bde5c665-1b60-4fe6-b0a4-b450db8ec705",
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "3mty87fduTdA6SKM",
          "name": "Telegram account 13 - nanobanana II"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3e7bacee-43d5-4612-9126-2c44ab0275e3",
      "name": "将创意解析为提示词",
      "type": "n8n-nodes-base.code",
      "position": [
        -272,
        -144
      ],
      "parameters": {
        "jsCode": "const text = $('Trigger: Receive Idea via Telegram').first().json.message.caption;\nconst parts = text.split(';').map(part => part.trim());\nreturn {\nimagePrompt: parts[0],\ntextOverlay: parts[1],\nvideoPrompt: parts[2],\nmusicPrompt: parts[3]\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "2ce93a63-78e9-4270-9581-b571d7c84394",
      "name": "重写标题 (TikTok/Instagram)",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -992,
        176
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "GPT-4O"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are rewriting a TikTok video script, caption, and overlay —\nnot inventing a new one. You must follow this format and obey\nthese rules strictly.\n---\n### CONTEXT:\nHere is the content idea to use:{{ $('Parse Idea Into Prompts').item.json.imagePrompt }}\n\nTitle is : {{ $('Parse Idea Into Prompts').item.json.textOverlay }}\n\n\n\nWrite the caption text using the topic.\n\n---\n- MUST be under 200 characters (yes \"Characters\" not wordcount)\nthis is an absolute MUST, no more than 200 characters!!! \n\n### FINAL OUTPUT FORMAT (no markdown formatting):\n\nDO NOT return any explanations. Only return the Caption Text"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "6h3DfVhNPw9I25nO",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "05e3c5a5-2bb8-47a5-aa3d-057512ca99e2",
      "name": "将图片发布到 Instagram + X",
      "type": "n8n-nodes-upload-post.uploadPost",
      "position": [
        -272,
        176
      ],
      "parameters": {
        "user": "DRFIRAS",
        "title": "={{ $('Parse Idea Into Prompts').item.json.textOverlay }}",
        "photos": "={{ $('Download Edited Image').item.json.images[0].url }}",
        "caption": "={{ $json.message.content }}",
        "platform": [
          "instagram",
          "x"
        ]
      },
      "credentials": {
        "uploadPostApi": {
          "id": "tx0iFC5hVeA9z2YP",
          "name": "Upload Post account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "97832793-340b-41ee-ae40-1a1633597ac3",
      "name": "Seedance:从图片生成视频",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1008,
        512
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/jobs/createTask",
        "body": "={\n  \"model\": \"bytedance/v1-pro-image-to-video\",\n  \"input\": {\n    \"prompt\": \"{{ $('Parse Idea Into Prompts').item.json.videoPrompt }}\",\n    \"image_url\": \"{{ $json.images[0].url }}\",\n    \"resolution\": \"480p\",\n    \"duration\": \"8\",\n    \"aspect_ratio\": \"9:16\",\n    \"camera_fixed\": false,\n    \"seed\": -1,\n    \"enable_safety_checker\": true\n  }\n}\n",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "raw",
        "authentication": "genericCredentialType",
        "rawContentType": "application/json",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "ho8ZjaYj1SY0icGT",
          "name": "Kie AI"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "2c3a1c91-8adc-4eba-ac10-108776a6276c",
      "name": "设置:视频 URL",
      "type": "n8n-nodes-base.set",
      "position": [
        -272,
        512
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={{\n  JSON.stringify({\n    url_video: (()=>{\n      const o = JSON.parse($json.data.resultJson);\n      return o?.resultObject?.video?.url\n          || o?.resultUrls?.[0]\n          || '';\n    })()\n  })\n}}\n"
      },
      "typeVersion": 3.4
    },
    {
      "id": "ab226033-c1ab-4506-b9cf-2901b08ffb23",
      "name": "Suno:生成音乐",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        64,
        512
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/generate",
        "body": "={\n  \"model\": \"V3_5\",\n  \"callBackUrl\": \"https://YOUR_DOMAIN.com/api/kie-callback\",\n  \"customMode\": true,\n  \"instrumental\": true,\n  \"input\": {\n    \"prompt\": \"{{ $('Parse Idea Into Prompts').item.json.musicPrompt }}\",\n    \"style\": \"Classical\",\n    \"title\": \"Peaceful Piano Meditation\",\n    \"styleWeight\": 0.65,\n    \"weirdnessConstraint\": 0.65,\n    \"audioWeight\": 0.65\n  }\n}\n",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "raw",
        "authentication": "genericCredentialType",
        "rawContentType": "application/json",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "ho8ZjaYj1SY0icGT",
          "name": "Kie AI"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "45950718-2989-409c-847d-fda4851b793c",
      "name": "设置:音频 URL",
      "type": "n8n-nodes-base.set",
      "position": [
        704,
        512
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "03eb77a5-6838-408e-9e6e-58242501c238",
              "name": "url_audio",
              "type": "string",
              "value": "={{ $json.data.response.sunoData[0].audioUrl }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "74f7db08-09ce-4590-8d6e-44f3a9e21f47",
      "name": "下载音乐文件",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        480,
        512
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/generate/record-info",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "taskId",
              "value": "={{ $json.data.taskId }}"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "ho8ZjaYj1SY0icGT",
          "name": "Kie AI"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a6dac88d-9b62-4808-a22b-8a34c5e9fdf7",
      "name": "等待:音乐渲染",
      "type": "n8n-nodes-base.wait",
      "position": [
        256,
        512
      ],
      "webhookId": "26c2098e-9adb-4d89-ab2a-fe03299d8ad2",
      "parameters": {
        "amount": 120
      },
      "typeVersion": 1.1
    },
    {
      "id": "7dd8ac51-6121-4e6e-8d2d-bfef50f35d41",
      "name": "合并音频 + 视频",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1008,
        800
      ],
      "parameters": {
        "url": "https://queue.fal.run/fal-ai/ffmpeg-api/merge-audio-video",
        "body": "= {\n    \"video_url\": \"{{ $('Set: Video URL').item.json.url_video }}\",\n    \"audio_url\": \"{{ $json.url_audio }}\",\n    \"start_offset\": 0\n  }\n",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "raw",
        "authentication": "genericCredentialType",
        "rawContentType": "application/json",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "kNULkYDcOZG3X0be",
          "name": "Fal.ai"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "41bd5d79-3bdd-4036-a8a8-59a41b2feabb",
      "name": "等待:合并过程",
      "type": "n8n-nodes-base.wait",
      "position": [
        -752,
        800
      ],
      "webhookId": "cdc66d12-12f4-460d-86e9-9fe5ec061e38",
      "parameters": {
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "1342bf6a-2f31-4748-b14c-6397423b6e0c",
      "name": "检查合并状态",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -496,
        800
      ],
      "parameters": {
        "url": "={{ $json.status_url }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "kNULkYDcOZG3X0be",
          "name": "Fal.ai"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e8f55717-0f40-4dc4-80fa-d10749ff252d",
      "name": "如果合并完成",
      "type": "n8n-nodes-base.if",
      "position": [
        -272,
        800
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "4532b4f1-bd84-4896-b36b-929e925c80f7",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "COMPLETED"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "249b72cb-3239-4971-a412-549ff289ffed",
      "name": "下载最终视频",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        480,
        784
      ],
      "parameters": {
        "url": "={{ $json.video.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "9e5eb804-fb80-42bf-a799-c3722c002e68",
      "name": "检查合并状态 II",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        64,
        784
      ],
      "parameters": {
        "url": "={{$json.response_url}}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "kNULkYDcOZG3X0be",
          "name": "Fal.ai"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "5731a023-3925-4f52-abe8-7a559438ecb8",
      "name": "上传最终视频到 Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        704,
        784
      ],
      "parameters": {
        "name": "={{ $('Trigger: Receive Idea via Telegram').item.json.message.photo[2].file_unique_id }}",
        "driveId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "gzeHMd64HAz6HBIe",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "1ff9308c-e41c-4fc2-868a-5e5a88cda8f6",
      "name": "读取品牌设置",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1008,
        1184
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "51us92xkOlrvArhV",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "2073a516-f1e4-4013-ba0d-255d11d89e8f",
      "name": "提取品牌信息",
      "type": "n8n-nodes-base.code",
      "position": [
        -848,
        1184
      ],
      "parameters": {
        "jsCode": "const allRows = $input.all();\nreturn [{\njson: {\nproductName: allRows[0].json.col_2,\nproductCategory: allRows[1].json.col_2,\nmainOffer: allRows[2].json.col_2,\nkeyFeature1: allRows[3].json.col_2,\nkeyFeature2: allRows[4].json.col_2,\nwebsiteURL: allRows[5].json.col_2\n}\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "bff88b3b-cf60-4154-a441-aa35155d8311",
      "name": "广告文案生成器 (AI)",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -672,
        1184
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "GPT-4O"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are an expert ad copywriter for social media campaigns.\nYour task: Create compelling ad copy following this exact\nstructure:\n🚨 [Attention-grabbing headline with product benefit]\n✔ [Primary offer/benefit]\n✔ [Key product feature/quality]\n✔ [Trust/credibility element]\n[Call to action] → [website/link]\n# Input Variables:\nProduct Name: {{ $json.productName }}\nProduct Category: {{ $json.productCategory }}\nMain Offer: {{ $json.mainOffer }}\nKey Feature 1: {{ $json.keyFeature1 }}\nKey Feature 2: {{ $json.keyFeature2 }}\nWebsite URL: {{ $json.websiteURL }}\nRules:\n- Keep headline under 35 characters\n- Each checkmark line under 40 characters\n- Use power words that create urgency\n- Include specific product benefits, not generic claims\n- CTA must be action-oriented (Shop Now, Get Yours, Claim Offer,\netc.)\n- Output ONLY the ad copy text, no explanations\n- No quotes around the text\n- Maintain the emoji structure exactly as shown"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "6h3DfVhNPw9I25nO",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "a365514a-114f-4919-a84f-c921796717dd",
      "name": "保存广告数据到 Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -336,
        1184
      ],
      "parameters": {
        "columns": {
          "value": {
            "STATUS": "CREATE",
            "ADS TEXT": "={{ $json.message.content }}",
            "ID IMAGE": "={{ $node[\"Trigger: Receive Idea via Telegram\"].json.message.photo[2].file_unique_id }}\n",
            "URL IMAGE": "={{ $node[\"Download Edited Image\"].json.images[0].url }}\n",
            "URL VIDEO": "={{ $node[\"Set: Video URL\"].json.url_video }}\n",
            "URL FINAL VIDEO": "={{ $node[\"Download Final Video\"].json.video.url }}\n"
          },
          "schema": [
            {
              "id": "ID IMAGE",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ID IMAGE",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL IMAGE",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "URL IMAGE",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL VIDEO",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "URL VIDEO",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL FINAL VIDEO",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "URL FINAL VIDEO",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ADS TEXT",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ADS TEXT",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "STATUS",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "STATUS",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "ID IMAGE"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "51us92xkOlrvArhV",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "60791963-3ba2-4ad2-b88a-4047e7d5564f",
      "name": "在社交媒体 (FB, TikTok, YT) 上发布视频",
      "type": "n8n-nodes-upload-post.uploadPost",
      "position": [
        288,
        1184
      ],
      "parameters": {
        "user": "DRFIRAS",
        "title": "={{ $('Parse Idea Into Prompts').first().json.textOverlay }}",
        "video": "={{ $('Upload Final Video to Google Drive').first().json.webContentLink }}",
        "caption": "={{ $('Ads Copywriter Generator (AI)').item.json.message.content }}",
        "platform": [
          "facebook",
          "tiktok",
          "youtube"
        ],
        "operation": "uploadVideo",
        "facebookPageId": "101603614680195",
        "youtubeDescription": "={{ $('Ads Copywriter Generator (AI)').item.json.message.content }}",
        "youtubePrivacyStatus": "private",
        "facebookVideoDescription": "={{ $('Ads Copywriter Generator (AI)').item.json.message.content }}"
      },
      "credentials": {
        "uploadPostApi": {
          "id": "tx0iFC5hVeA9z2YP",
          "name": "Upload Post account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0de87c01-99eb-4f3c-8b7d-46fedccfa680",
      "name": "保存发布状态到 Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        496,
        1184
      ],
      "parameters": {
        "columns": {
          "value": {
            "STATUS": "Published",
            "ID IMAGE": "={{ $node[\"Trigger: Receive Idea via Telegram\"].json.message.photo[2].file_unique_id }}"
          },
          "schema": [
            {
              "id": "ID IMAGE",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ID IMAGE",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL IMAGE",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "URL IMAGE",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL VIDEO",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "URL VIDEO",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL FINAL VIDEO",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "URL FINAL VIDEO",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ADS TEXT",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "ADS TEXT",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "STATUS",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "STATUS",
              "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": [
            "ID IMAGE"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "51us92xkOlrvArhV",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "51b8f1ef-971b-4fb1-838f-b394d6e90456",
      "name": "思考",
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "position": [
        224,
        192
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "a577cb57-4900-42b1-b1af-03d49d7125d8",
      "name": "便签10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1792,
        -224
      ],
      "parameters": {
        "color": 6,
        "width": 700,
        "height": 1652,
        "content": "# 💥 使用 NanoBanana 和 Seedance 创建病毒式广告 — 通过 Upload-Post 在社交媒体发布 (作者:Dr. Firas)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "e9f05d86-a1c9-4a5e-bcf7-df21cb5d3aad",
  "connections": {
    "Think": {
      "ai_tool": [
        [
          {
            "node": "Generate Image Prompt",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Set: Audio URL": {
      "main": [
        [
          {
            "node": "Merge Audio + Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set: Video URL": {
      "main": [
        [
          {
            "node": "Suno: Generate Music",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM: OpenAI Chat": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Image Prompt",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Check Merge Status": {
      "main": [
        [
          {
            "node": "If Merge Completed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Brand Info": {
      "main": [
        [
          {
            "node": "Ads Copywriter Generator (AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If Merge Completed": {
      "main": [
        [
          {
            "node": "Check Merge Status II",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait: Merge Process",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Rendering": {
      "main": [
        [
          {
            "node": "Download Video from Seedance",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Music File": {
      "main": [
        [
          {
            "node": "Set: Audio URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Audio + Video": {
      "main": [
        [
          {
            "node": "Wait: Merge Process",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Brand Settings": {
      "main": [
        [
          {
            "node": "Extract Brand Info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Image Edit": {
      "main": [
        [
          {
            "node": "Download Edited Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait: Merge Process": {
      "main": [
        [
          {
            "node": "Check Merge Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Final Video": {
      "main": [
        [
          {
            "node": "Upload Final Video to Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Suno: Generate Music": {
      "main": [
        [
          {
            "node": "Wait: Music Rendering",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Merge Status II": {
      "main": [
        [
          {
            "node": "Download Final Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Edited Image": {
      "main": [
        [
          {
            "node": "Seedance: Generate Video from Image",
            "type": "main",
            "index": 0
          },
          {
            "node": "Rewrite Caption (TikTok/Instagram)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Image Prompt": {
      "main": [
        [
          {
            "node": "NanoBanana: Create Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait: Music Rendering": {
      "main": [
        [
          {
            "node": "Download Music File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Idea Into Prompts": {
      "main": [
        [
          {
            "node": "Generate Image Prompt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "NanoBanana: Create Image": {
      "main": [
        [
          {
            "node": "Wait for Image Edit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Final Video Preview": {
      "main": [
        [
          {
            "node": "Post Video on Social Media (FB, TikTok, YT)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram: Get Image File": {
      "main": [
        [
          {
            "node": "Google Drive: Upload Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive: Upload Image": {
      "main": [
        [
          {
            "node": "Parse Idea Into Prompts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Video URL via Telegram": {
      "main": [
        [
          {
            "node": "Send Final Video Preview",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Video from Seedance": {
      "main": [
        [
          {
            "node": "Set: Video URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ads Copywriter Generator (AI)": {
      "main": [
        [
          {
            "node": "Save Ad Data to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM: Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Generate Image Prompt",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Save Ad Data to Google Sheets": {
      "main": [
        [
          {
            "node": "Send Video URL via Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rewrite Caption (TikTok/Instagram)": {
      "main": [
        [
          {
            "node": "Post Image to Instagram + X",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger: Receive Idea via Telegram": {
      "main": [
        [
          {
            "node": "Telegram: Get Image File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Final Video to Google Drive": {
      "main": [
        [
          {
            "node": "Read Brand Settings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Seedance: Generate Video from Image": {
      "main": [
        [
          {
            "node": "Wait for Rendering",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Publishing Status to Google Sheets": {
      "main": [
        [
          {
            "node": "Telegram: Send notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post Video on Social Media (FB, TikTok, YT)": {
      "main": [
        [
          {
            "node": "Save Publishing Status to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

这是一个高级难度的工作流,适用于Miscellaneous、Multimodal AI等场景。适合高级用户,包含 16+ 个节点的复杂工作流

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量45
分类2
节点类型16
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Dr. Firas

Dr. Firas

@drfiras

Automation expert and certified trainer. I create hands-on courses to master automation with n8n. Contact me to access my exclusive training and start building powerful workflows today. 🚀

外部链接
在 n8n.io 上查看 →

分享此工作流