8
n8n ํ•œ๊ตญ์–ดamn8n.com

๐Ÿ’ฅ VEO 3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ฐ”์ด๋Ÿฌ์Šค ๋น„๋””์˜ค ์ƒ์„ฑํ•˜๊ณ  TikTok์— ์—…๋กœ๋“œ

๊ณ ๊ธ‰

์ด๊ฒƒ์€Content Creation, Miscellaneous, Multimodal AI๋ถ„์•ผ์˜์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ๋กœ, 24๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.์ฃผ๋กœ Set, Code, Wait, HttpRequest, GoogleSheets ๋“ฑ์˜ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ. VEO 3์„ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ฐ”์ด๋Ÿฌ์Šค ๋น„๋””์˜ค ์ƒ์„ฑํ•˜๊ณ  TikTok์— ์—…๋กœ๋“œ

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ
  • โ€ข๋Œ€์ƒ API์˜ ์ธ์ฆ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ
  • โ€ขGoogle Sheets API ์ธ์ฆ ์ •๋ณด
  • โ€ขOpenAI API Key
์›Œํฌํ”Œ๋กœ์šฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉฐ, ํ™•๋Œ€/์ถ•์†Œ ๋ฐ ์ด๋™์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค
์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด๋ณด๋‚ด๊ธฐ
๋‹ค์Œ JSON ๊ตฌ์„ฑ์„ ๋ณต์‚ฌํ•˜์—ฌ n8n์— ๊ฐ€์ ธ์˜ค๋ฉด ์ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
{
  "id": "AtyhZTTVbhFDWFhM",
  "meta": {
    "instanceId": "a2b23892dd6989fda7c1209b381f5850373a7d2b85609624d7c2b7a092671d44"
  },
  "name": "๐Ÿ’ฅ Generate AI Viral Videos with VEO 3 and Upload to TikTok ",
  "tags": [],
  "nodes": [
    {
      "id": "958b1b16-4eb0-436a-ac87-b5d529e414bc",
      "name": "ํŠธ๋ฆฌ๊ฑฐ: ์ผ์ผ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ์‹œ์ž‘",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -240,
        112
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3d6bbc87-c411-434a-aa74-7e8e9893acc7",
      "name": "๋„๊ตฌ: ์ฐฝ์˜์  ๊ด€์  ์ฃผ์ž… (์•„์ด๋””์–ด)",
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "position": [
        240,
        384
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "824f3d5a-c7c2-42b4-ba28-24ba4cbc972b",
      "name": "AI ์ถœ๋ ฅ ํŒŒ์‹ฑ (์•„์ด๋””์–ด, ํ™˜๊ฒฝ, ์‚ฌ์šด๋“œ)",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        416,
        384
      ],
      "parameters": {
        "jsonSchemaExample": "[\n  {\n    \"Caption\": \"Diver Removes Nets Off Whale ๐Ÿ‹ #whalerescue #marinelife #oceanrescue #seahelpers #love #nature #instagood #explore #viral #savenature #oceanguardians #cleanoceans\",\n    \"Idea\": \"Diver carefully cuts tangled net from distressed whale in open sea\",\n    \"Environment\": \"Open ocean, sunlight beams through water, diver and whale, cinematic realism\",\n    \"Sound\": \"Primary sound description under 15 words\",\n    \"Status\": \"for production\"\n  }\n]\n"
      },
      "typeVersion": 1.2
    },
    {
      "id": "4fc884ca-3611-4148-9f22-e6f6543363d0",
      "name": "์•„์ด๋””์–ด ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ Google ์‹œํŠธ์— ์ €์žฅ",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        592,
        112
      ],
      "parameters": {
        "columns": {
          "value": {
            "id": "==ROW()-1",
            "idea": "={{ $json.output[0].Idea }}",
            "caption": "={{ $json.output[0].Caption }}",
            "production": "={{ $json.output[0].Status }}",
            "sound_prompt": "={{ $json.output[0].Sound }}",
            "environment_prompt": "={{ $json.output[0].Environment }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "idea",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "idea",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "caption",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "caption",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "production",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "production",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "environment_prompt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "environment_prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sound_prompt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "sound_prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "final_output",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "final_output",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "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.5
    },
    {
      "id": "5017f6ed-03cb-408c-bd47-97008e2d7352",
      "name": "์ฐฝ์˜์ ์ธ ์˜์ƒ ์•„์ด๋””์–ด ์ƒ์„ฑ",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        160,
        112
      ],
      "parameters": {
        "text": "=Generate a creative concept involving:\n\n[[\nA striking BEFORE/AFTER transformation of a single non-human subject (object, environment, or natural phenomenon). The concept must specify:\n- BEFORE state: clear, visually distinct\n- AFTER state: contrasting outcome\n- TRANSITION: one word (e.g., morph, hard cut, timelapse, glitch, wipe, burst)\n- STYLE tags: 2โ€“3 visual adjectives (e.g., cinematic, macro, neon, minimalist)\n- PALETTE: 2โ€“3 color keywords\n- CAMERA: one movement (e.g., slow push-in, top-down, dolly-in)\n- LIGHTING: one descriptor (e.g., soft backlight, moody rim light)\n\nAvoid humans, brands, and clichรฉs (messyโ†’clean room, burgerโ†’salad, generic glow-up). Ensure novelty and immediate visual clarity suitable for vertical 9:16.\n\nYour response must follow this exact one-line structure:\n\n\"BEFORE: [short phrase] โ†’ AFTER: [short phrase] | TRANSITION: [style] | STYLE: [tag1, tag2] | PALETTE: [color1, color2] | CAMERA: [movement] | LIGHTING: [descriptor]\"\n]]\n\nReflect carefully before answering to ensure originality and visual appeal.\n\nUse the Think tool to review your output\n",
        "options": {
          "systemMessage": "=**Role:**  \nYou are an AI designed to generate **one original BEFORE/AFTER transformation video concept** optimized for TikTok and the VEO 3 API. Your output must be formatted as a **single-line JSON array** and follow the rules below exactly.\n\n---\n\n### RULES\n\n1. **Number of ideas**  \n   - Return **only one idea**.\n\n2. **Theme**  \n   - The user will always provide the theme: โ€œBefore/After transformation.โ€  \n   - Every idea must clearly show a striking **contrast** between the BEFORE and AFTER states.\n\n3. **Idea**  \n   - Maximum 15 words.  \n   - Describe the transformation in a cinematic, visually appealing way.\n\n4. **Caption**  \n   - Short, punchy, viral-friendly.  \n   - Include **one emoji**.  \n   - Exactly **12 hashtags** in this order:  \n     1. 4 transformation-relevant hashtags  \n     2. 4 all-time most popular hashtags  \n     3. 4 currently trending hashtags (based on live research)  \n   - All in lowercase.\n\n5. **Environment**  \n   - Maximum 20 words.  \n   - Must match the action in the Idea exactly.  \n   - Specify setting (room, landscape, labโ€ฆ), visual details (lighting, textures, transitionsโ€ฆ), and style (cinematic, stylized, timelapse, slow-motionโ€ฆ).\n\n6. **Sound**  \n   - Maximum 15 words.  \n   - Describe the sound design (e.g., โ€œbeat drop at transition,โ€ โ€œsoft rain before, energetic music afterโ€).\n\n7. **Status**  \n   - Always set to `\"for production\"`.\n\n---\n\n### OUTPUT FORMAT (single-line JSON array)\n\n```json\n[\n  {\n    \"Caption\": \"Your short viral title with emoji #4_topic_hashtags #4_all_time_popular_hashtags #4_trending_hashtags\",\n    \"Idea\": \"Your before/after transformation idea under 15 words\",\n    \"Environment\": \"Your vivid setting under 20 words matching the action\",\n    \"Sound\": \"Your primary sound description under 15 words\",\n    \"Status\": \"for production\"\n  }\n]\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.9
    },
    {
      "id": "d167d2b8-320e-4ea8-9f83-fae9840db585",
      "name": "LLM: ์›์‹œ ์•„์ด๋””์–ด ์ƒ์„ฑ (GPT-5)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        64,
        384
      ],
      "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": "9c487748-bee0-40b8-b8d4-0deff7294f60",
      "name": "OpenAI ์ฑ„ํŒ… ๋ชจ๋ธ",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -224,
        816
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "6h3DfVhNPw9I25nO",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6434e3ed-7f71-467c-9a7c-625feb9024c9",
      "name": "์ƒ๊ฐํ•˜๊ธฐ",
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "position": [
        -80,
        816
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "854036f1-bca7-4252-be3a-1095526ee614",
      "name": "๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ ํŒŒ์„œ",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        48,
        816
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"title\": \"string\",\n  \"final_prompt\": \"string\"\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "be8ad1f9-2de7-4c61-810a-fa3ab483835d",
      "name": "๋งˆ์Šคํ„ฐ ํ”„๋กฌํ”„ํŠธ ์„ค์ •",
      "type": "n8n-nodes-base.set",
      "position": [
        592,
        352
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "cc2e0500-57b1-4615-82cb-1c950e5f2ec4",
              "name": "json_master",
              "type": "string",
              "value": "={\n  \"description\": \"Brief narrative description of the scene, focusing on key visual storytelling and product transformation.\",\n  \"style\": \"cinematic | photorealistic | stylized | gritty | elegant\",\n  \"camera\": {\n    \"type\": \"fixed | dolly | Steadicam | crane combo\",\n    \"movement\": \"describe any camera moves like slow push-in, pan, orbit\",\n    \"lens\": \"optional lens type or focal length for cinematic effect\"\n  },\n  \"lighting\": {\n    \"type\": \"natural | dramatic | high-contrast\",\n    \"sources\": \"key lighting sources (sunset, halogen, ambient glow...)\",\n    \"FX\": \"optional VFX elements like fog, reflections, flares\"\n  },\n  \"environment\": {\n    \"location\": \"describe location or room (kitchen, desert, basketball court...)\",\n    \"set_pieces\": [\n      \"list of key background or prop elements\",\n      \"e.g. hardwood floors, chain-link fence, velvet surface\"\n    ],\n    \"mood\": \"describe the ambient atmosphere (moody, clean, epic...)\"\n  },\n  \"elements\": [\n    \"main physical items involved (product box, accessories, vehicles...)\",\n    \"include brand visibility (logos, packaging, texture...)\"\n  ],\n  \"subject\": {\n    \"character\": {\n      \"description\": \"optional โ€“ physical description, outfit\",\n      \"pose\": \"optional โ€“ position or gesture\",\n      \"lip_sync_line\": \"optional โ€“ spoken line if thereโ€™s a voiceover\"\n    },\n    \"product\": {\n      \"brand\": \"Brand name\",\n      \"model\": \"Product model or name\",\n      \"action\": \"description of product transformation or assembly\"\n    }\n  },\n  \"motion\": {\n    \"type\": \"e.g. transformation, explosion, vortex\",\n    \"details\": \"step-by-step visual flow of how elements move or evolve\"\n  },\n  \"VFX\": {\n    \"transformation\": \"optional โ€“ describe style (neon trails, motion blur...)\",\n    \"impact\": \"optional โ€“ e.g. shockwave, glow, distortion\",\n    \"particles\": \"optional โ€“ embers, sparks, thread strands...\",\n    \"environment\": \"optional โ€“ VFX affecting the scene (ripples, wind...)\"\n  },\n  \"audio\": {\n    \"music\": \"optional โ€“ cinematic score, trap beat, ambient tone\",\n    \"sfx\": [\n      \"list of sound effects (zip, pop, woosh...)\"\n    ],\n    \"ambience\": \"optional โ€“ background soundscape (traffic, wind...)\",\n    \"voiceover\": {\n      \"delivery\": \"tone and style (confident, whisper, deep...)\",\n      \"line\": \"text spoken if applicable\"\n    }\n  },\n  \"ending\": \"Final shot description โ€“ what is seen or felt at the end (freeze frame, logo pulse, glow...)\",\n  \"text\": \"none | overlay | tagline | logo pulse at end only\",\n  \"format\": \"16:9 | 4k | vertical\",\n  \"keywords\": [\n    \"brand\",\n    \"scene style\",\n    \"motion type\",\n    \"camera style\",\n    \"sound mood\",\n    \"target theme\"\n  ]\n}\n"
            },
            {
              "id": "3c6ea609-e426-46d3-8617-2e289a833a64",
              "name": "model",
              "type": "string",
              "value": "veo3_fast"
            },
            {
              "id": "f15acf81-840c-4e09-9ff3-1647b634875f",
              "name": "aspectRatio",
              "type": "string",
              "value": "9:16"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d823f8e0-f1fe-48d3-bcd8-d312c23c06dc",
      "name": "AI ์—์ด์ „ํŠธ: ์˜์ƒ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -176,
        592
      ],
      "parameters": {
        "text": "=Create a BEFORE/AFTER transformation video prompt using the provided idea.\n\n**Inputs**\n\n- idea : {{ $('Save Idea & Metadata to Google Sheets').item.json.idea }}\n- environment : {{ $('Save Idea & Metadata to Google Sheets').item.json.environment_prompt }}\n- sound : {{ $('Save Idea & Metadata to Google Sheets').item.json.sound_prompt }}\n\n**Rules**\n- The style must be cinematic, visually striking, and optimized for vertical 9:16 TikTok content.\n- Explicitly include: BEFORE scene, AFTER scene, TRANSITION style, CAMERA movement, LIGHTING, COLOR PALETTE, and MOOD.\n- Default model: `veo3_fast` (unless otherwise specified).\n- Output only **one JSON object** with the keys: `title` and `final_prompt`.\n- Use the Think tool to review your output\n",
        "options": {
          "systemMessage": "=\"system_prompt:\n  ## SYSTEM PROMPT: Structured Transformation Video Prompt Generator\n  A - Ask:\n    Generate a structured BEFORE/AFTER transformation video prompt for VEO 3 cinematic generation, strictly based on the master schema provided in: {{ $json.json_master }}.\n    The final result must be a JSON object with exactly two top-level keys: `title` and `final_prompt`.\n\n  G - Guidance:\n    role: Creative Director\n    output_count: 1\n    character_limit: None\n    constraints:\n      - The output must be valid JSON.\n      - The `title` field should contain a short, descriptive and unique title (max 15 words).\n      - The `final_prompt` field must contain a **single-line JSON string** that follows the exact structure of {{ $json.json_master }} with all fields preserved.\n      - The `final_prompt` string must clearly describe: BEFORE scene, AFTER scene, TRANSITION, CAMERA, LIGHTING, PALETTE, STYLE, and SOUND.\n      - Do not include any explanations, markdown, or extra text โ€” only the JSON object.\n      - Escape all inner quotes in the `final_prompt` string so it is valid as a stringified JSON inside another JSON.\n    tool_usage:\n      - Ensure consistent alignment across all fields (camera, lighting, transition, palette, etc.).\n      - Maintain full structure even for optional fields (use \"none\", \"\", or [] as needed).\n\n  N - Notation:\n    format: JSON\n    expected_output:\n      {\n        \"title\": \"A unique short title for the transformation\",\n        \"final_prompt\": \"{...stringified JSON of the full prompt...}\"\n      }\n\"\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2
    },
    {
      "id": "ca35eeb6-ad4a-43a4-932d-982ea8c5b34c",
      "name": "VEO3๋กœ ์˜์ƒ ์ƒ์„ฑ",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        592,
        592
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/veo/generate",
        "body": "={\n  \"prompt\": {{ $json.prompt }},\n  \"model\": \"{{ $('Set Master Prompt').item.json.model }}\",\n  \"aspectRatio\": \"{{ $('Set Master Prompt').item.json.aspectRatio }}\"\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": "58b989a8-21a0-41a3-b6b0-1962720e0440",
      "name": "VEO3 ๋ Œ๋”๋ง ๋Œ€๊ธฐ",
      "type": "n8n-nodes-base.wait",
      "position": [
        320,
        784
      ],
      "webhookId": "f8f1a8a7-0870-4f09-b732-425a8937f229",
      "parameters": {
        "unit": "minutes",
        "amount": 3
      },
      "typeVersion": 1.1
    },
    {
      "id": "e7a619a0-035f-4506-a92e-c501a7e63786",
      "name": "VEO3์—์„œ ์˜์ƒ ๋‹ค์šด๋กœ๋“œ",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -256,
        1024
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/veo/record-info",
        "options": {},
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "taskId",
              "value": "={{ $('Generate Video with VEO3').item.json.data.taskId }}"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "ho8ZjaYj1SY0icGT",
          "name": "Kie AI"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4fdbd573-2ff1-48e5-8a60-0138900ca4ab",
      "name": "ํ”„๋กฌํ”„ํŠธ ํฌ๋งทํŒ…",
      "type": "n8n-nodes-base.code",
      "position": [
        320,
        592
      ],
      "parameters": {
        "jsCode": "const structuredPrompt = $input.first().json.output.final_prompt;\nreturn {\n  json: {\n    prompt: JSON.stringify(structuredPrompt), // this escapes it correctly!\n    model: \"veo3_fast\",\n    aspectRatio: \"9:16\"\n  }\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "b2090577-e3e8-46e2-861d-5ad595335324",
      "name": "URL ์ตœ์ข… ์˜์ƒ",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -48,
        1024
      ],
      "parameters": {
        "columns": {
          "value": {
            "idea": "={{ $('Save Idea & Metadata to Google Sheets').item.json.idea }}",
            "production": "done",
            "final_output": "={{ $json.data.response.resultUrls[0] }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "idea",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "idea",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "caption",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "caption",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "production",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "production",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "environment_prompt",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "environment_prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sound_prompt",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "sound_prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "final_output",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "final_output",
              "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": [
            "idea"
          ],
          "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.5
    },
    {
      "id": "5133195b-ccd0-4749-a871-26c56c68b019",
      "name": "BLOTATO์— ์˜์ƒ ์—…๋กœ๋“œ",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        160,
        1024
      ],
      "parameters": {
        "mediaUrl": "={{ $json.final_output }}",
        "resource": "media"
      },
      "credentials": {
        "blotatoApi": {
          "id": "NtMnRSKAAN5u9lyc",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "2f892860-6576-4c64-89a7-213162a623c2",
      "name": "์ƒํƒœ๋ฅผ '์™„๋ฃŒ'๋กœ ์—…๋ฐ์ดํŠธ",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        592,
        1024
      ],
      "parameters": {
        "columns": {
          "value": {
            "idea": "={{ $('Save Idea & Metadata to Google Sheets').first().json.idea }}",
            "production": "Publish"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "idea",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "idea",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "caption",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "caption",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "production",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "production",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "environment_prompt",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "environment_prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sound_prompt",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "sound_prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "final_output",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "final_output",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "idea"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "51us92xkOlrvArhV",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "1825853b-1c3e-479b-acff-4d2804cf10d9",
      "name": "TikTok",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        368,
        1024
      ],
      "parameters": {
        "options": {},
        "platform": "tiktok",
        "accountId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        },
        "postContentText": "={{ $('Save Idea & Metadata to Google Sheets').first().json.caption }}",
        "postContentMediaUrls": "={{ $json.url }}",
        "postCreateTiktokOptionIsAiGenerated": true
      },
      "credentials": {
        "blotatoApi": {
          "id": "NtMnRSKAAN5u9lyc",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "007b1c04-31b3-4b5d-aceb-a5a650908dee",
      "name": "์Šคํ‹ฐ์ปค ๋…ธํŠธ8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -864,
        -80
      ],
      "parameters": {
        "width": 528,
        "height": 1328,
        "content": "## ๐ŸŽฅ Watch This Tutorial\n\n@[youtube](E-_8KZ_FSeY)\n\n\n### ๐Ÿ“ฅ  [Open full documentation on Notion](https://automatisation.notion.site/Generate-AI-Viral-Videos-with-VEO-3-and-Upload-to-TikTok-2703d6550fd980aa9ea1dd7867c1cccf?source=copy_link)\n\n---\n### 1. Set Up OpenAI Connection\n#### Get Your API Key\n1. Visit the [OpenAI API Keys](https://platform.openai.com/api-keys) page.\n2. Go to [OpenAI Billing](https://platform.openai.com/settings/organization/billing/overview).\n3. Add funds to your billing account.\n4. Copy your API key into your **OpenAI credentials** in n8n (or your chosen platform).\n\n---\n### 2. Setup\n1. Import this workflow into your n8n instance.  \n2. Connect your Google Sheets, Gmail, and Google Calendar credentials. Tutorial: Configure Your Google Sheets, Gmail, Calendar [Credentials](https://youtu.be/fDzVmdw7bNU)\n3. Connect Your Data in Google Sheets. Data must follow this format: [Sample Sheets Data](https://docs.google.com/spreadsheets/d/1pdMs3jWqiYQn3BNdmPhFYhbelQD3jRVtm72ECoCxo0o/copy)\n4. Test the workflow using the **Connected Chat Trigger** node to start conversations with the AI Agent.  \n\n---\n### 3. Integrate VEO 3 (Kie) into n8n\n1. Sign up or log in to the **Kie (VEO 3)** dashboard.  \n2. Go to **API Keys** โ†’ **Create new key** โ†’ copy the key (keep it secret).  \n3. Base API URL: `https://api.kie.ai/api/v1/veo/generate`.\n\n---\n### 4. Install the Blotato node in n8n (Community Nodes)\n1. In n8n, open **Settings โ†’ Community Nodes**.\n2. Click **Install**, then add: `@blotato/n8n-nodes-blotato`. \n3. Log in to **Blotato**.\n4. Go to **Settings โ†’ API Keys**.\n5. Go to **Credentials โ†’ New**.\n6. Choose **Blotato API** (provided by the community node you installed).\n\n\n---\n## ๐Ÿ“ฌ Need Help or Want to Customize This?\n**Contact me for consulting and support:** [LinkedIn](https://www.linkedin.com/in/dr-firas/) / [YouTube](https://www.youtube.com/@DRFIRASS)  \n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "98797c5f-7a99-4f61-ab61-47772925ed0b",
      "name": "์Šคํ‹ฐ์ปค ๋…ธํŠธ",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -336,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 1152,
        "height": 1328,
        "content": "## Generate AI Viral Videos with VEO3 and Upload to TikTok (By Dr. Firas)\n### What problem is this workflow solving? / Use case\nCreating short-form video content that stands out takes time: ideation, scriptwriting, video generation, and publishing. This workflow automates the entire pipeline โ€” from idea generation to TikTok upload โ€” enabling you to scale your content strategy and focus on creativity rather than repetitive tasks.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c13b5356-80d0-4d62-a3e8-a65a32f730f9",
      "name": "์Šคํ‹ฐ์ปค ๋…ธํŠธ7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 1104,
        "height": 480,
        "content": "## | INPUT: Starting Idea Section\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f7433a4a-89e0-41c7-a0b2-55fcdeeac374",
      "name": "์Šคํ‹ฐ์ปค ๋…ธํŠธ9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        960
      ],
      "parameters": {
        "color": 3,
        "width": 1104,
        "height": 256,
        "content": "## | Step 2 โ€” Publish Video to TikTok\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7412d83f-e434-4e72-ae12-fd2d97ba05e6",
      "name": "์Šคํ‹ฐ์ปค ๋…ธํŠธ1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        528
      ],
      "parameters": {
        "color": 7,
        "width": 1104,
        "height": 432,
        "content": "## | Step 1 โ€” Generate Video with VEO3"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "b1fa6d8c-9f83-4ae1-8c99-952ef3e97229",
  "connections": {
    "6434e3ed-7f71-467c-9a7c-625feb9024c9": {
      "ai_tool": [
        [
          {
            "node": "d823f8e0-f1fe-48d3-bcd8-d312c23c06dc",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "1825853b-1c3e-479b-acff-4d2804cf10d9": {
      "main": [
        [
          {
            "node": "2f892860-6576-4c64-89a7-213162a623c2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4fdbd573-2ff1-48e5-8a60-0138900ca4ab": {
      "main": [
        [
          {
            "node": "ca35eeb6-ad4a-43a4-932d-982ea8c5b34c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b2090577-e3e8-46e2-861d-5ad595335324": {
      "main": [
        [
          {
            "node": "5133195b-ccd0-4749-a871-26c56c68b019",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9c487748-bee0-40b8-b8d4-0deff7294f60": {
      "ai_languageModel": [
        [
          {
            "node": "d823f8e0-f1fe-48d3-bcd8-d312c23c06dc",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "be8ad1f9-2de7-4c61-810a-fa3ab483835d": {
      "main": [
        [
          {
            "node": "d823f8e0-f1fe-48d3-bcd8-d312c23c06dc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5133195b-ccd0-4749-a871-26c56c68b019": {
      "main": [
        [
          {
            "node": "1825853b-1c3e-479b-acff-4d2804cf10d9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "58b989a8-21a0-41a3-b6b0-1962720e0440": {
      "main": [
        [
          {
            "node": "e7a619a0-035f-4506-a92e-c501a7e63786",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e7a619a0-035f-4506-a92e-c501a7e63786": {
      "main": [
        [
          {
            "node": "b2090577-e3e8-46e2-861d-5ad595335324",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ca35eeb6-ad4a-43a4-932d-982ea8c5b34c": {
      "main": [
        [
          {
            "node": "58b989a8-21a0-41a3-b6b0-1962720e0440",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "854036f1-bca7-4252-be3a-1095526ee614": {
      "ai_outputParser": [
        [
          {
            "node": "d823f8e0-f1fe-48d3-bcd8-d312c23c06dc",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "5017f6ed-03cb-408c-bd47-97008e2d7352": {
      "main": [
        [
          {
            "node": "4fc884ca-3611-4148-9f22-e6f6543363d0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d167d2b8-320e-4ea8-9f83-fae9840db585": {
      "ai_languageModel": [
        [
          {
            "node": "5017f6ed-03cb-408c-bd47-97008e2d7352",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "d823f8e0-f1fe-48d3-bcd8-d312c23c06dc": {
      "main": [
        [
          {
            "node": "4fdbd573-2ff1-48e5-8a60-0138900ca4ab",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4fc884ca-3611-4148-9f22-e6f6543363d0": {
      "main": [
        [
          {
            "node": "be8ad1f9-2de7-4c61-810a-fa3ab483835d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "958b1b16-4eb0-436a-ac87-b5d529e414bc": {
      "main": [
        [
          {
            "node": "5017f6ed-03cb-408c-bd47-97008e2d7352",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3d6bbc87-c411-434a-aa74-7e8e9893acc7": {
      "ai_tool": [
        [
          {
            "node": "5017f6ed-03cb-408c-bd47-97008e2d7352",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "824f3d5a-c7c2-42b4-ba28-24ba4cbc972b": {
      "ai_outputParser": [
        [
          {
            "node": "5017f6ed-03cb-408c-bd47-97008e2d7352",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}
์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

์ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜์š”?

์œ„์˜ JSON ๊ตฌ์„ฑ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ n8n ์ธ์Šคํ„ด์Šค์—์„œ ์ƒˆ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  "JSON์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ"๋ฅผ ์„ ํƒํ•œ ํ›„, ๊ตฌ์„ฑ์„ ๋ถ™์—ฌ๋„ฃ๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์ธ์ฆ ์„ค์ •์„ ์ˆ˜์ •ํ•˜์„ธ์š”.

์ด ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์–ด๋–ค ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ํ•ฉํ•œ๊ฐ€์š”?

๊ณ ๊ธ‰ - ์ฝ˜ํ…์ธ  ์ œ์ž‘, ๊ธฐํƒ€, ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ AI

์œ ๋ฃŒ์ธ๊ฐ€์š”?

์ด ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์™„์ „ํžˆ ๋ฌด๋ฃŒ์ด๋ฉฐ ์ง์ ‘ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์‚ฌ ์„œ๋น„์Šค(์˜ˆ: OpenAI API)๋Š” ์‚ฌ์šฉ์ž ์ง์ ‘ ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ฒœ

๐Ÿ’ฅ NanoBanana, Seedream 4, ChatGPT Image ๋ฐ Veo 3๋ฅผ ์‚ฌ์šฉํ•œ ๋™์˜์ƒ ๊ด‘๊ณ  ์ž๋™ํ™” - VIDE
AI(NanoBanana, Seedream, GPT-4o, Veo 3)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋””์˜ค ๊ด‘๊ณ  ์บ ํŽ˜์ธ ์ž๋™ํ™” ๋ฐ ๊ฒŒ์‹œ
Set
Code
Wait
+
Set
Code
Wait
63 ๋…ธ๋“œDr. Firas
์ฝ˜ํ…์ธ  ์ œ์ž‘
๐Ÿ’ฅ NanoBanana์™€ VEO3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ฐ”์ด๋Ÿฌ์Šค ๋น„๋””์˜ค ์ƒ์„ฑํ•˜๊ณ  Blotato๋ฅผ ํ†ตํ•ด ์†Œ์…œ ํ”Œ๋žซํผ์— ๊ณต์œ  - ๋น„๋””์˜ค
NanoBanana์™€ VEO3์„ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ฐ”์ด๋Ÿฌ์Šค ๋น„๋””์˜ค ์ƒ์„ฑํ•˜๊ณ  Blotato๋ฅผ ํ†ตํ•ด ์†Œ์…œ ๋ฏธ๋””์–ด์—์„œ ๊ณต์œ 
Set
Code
Wait
+
Set
Code
Wait
47 ๋…ธ๋“œDr. Firas
๊ธฐํƒ€
๐Ÿ’ฅNanoBanana์™€ Seedance๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ด๋Ÿฌ์Šค์ ์ธ ๊ด‘๊ณ  ์ƒ์„ฑ, VIDE II๋ฅผ ํ†ตํ•ด ์†Œ์…œ ๋ฏธ๋””์–ด์— upload-post๊ฒŒ์‹œ
์‚ฌ์šฉ AI๋กœ ๋ฐ”์ด๋Ÿฌ์Šค์ ์ธ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ๊ด‘๊ณ  ์ƒ์„ฑ: NanoBanana, Seedance, Suno๋ฅผ ์†Œ์…œ ๋ฏธ๋””์–ด์— ์‚ฌ์šฉ
If
Set
Code
+
If
Set
Code
45 ๋…ธ๋“œDr. Firas
๊ธฐํƒ€
๐Ÿ’ฅ HeyGen II - ๋‚˜๋ฅผ ๋ณต์ œํ•˜๋ผ - ์•„์ด๋””์–ด๋ถ€ํ„ฐ ๊ฒŒ์‹œ๊นŒ์ง€: YouTube, TikTok, Instagram์„ ์œ„ํ•œ GPT-5 ๋น„๋””์˜ค ์ž๋™ํ™” - ๋น„๋””์˜ค
HeyGen, GPT-5 ๋ฐ ์†Œ์…œ ๊ฒŒ์‹œ๋ฅผ ์‚ฌ์šฉํ•œ ์Œ์„ฑ ์ž…๋ ฅ ๋น„๋””์˜ค ์ œ์ž‘ ์ž๋™ํ™”
If
Set
Wait
+
If
Set
Wait
41 ๋…ธ๋“œDr. Firas
์ฝ˜ํ…์ธ  ์ œ์ž‘
HeyGen๊ณผ Google Sheets ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ AI ๊ฐ€์ƒ ์ด๋ฏธ์ง€ ๋น„๋””์˜ค ์ƒ์„ฑ
GPT-5์„ ์‚ฌ์šฉํ•˜์—ฌ AI ๊ฐ€์ƒ ์ธ๋ฌผ ๋น„๋””์˜ค ์ƒ์„ฑ ๋ฐ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์— ๊ฒŒ์‹œ
If
Set
Wait
+
If
Set
Wait
41 ๋…ธ๋“œDr. Firas
์ฝ˜ํ…์ธ  ์ œ์ž‘
๐Ÿ’ฅ VEO3์™€ Blotato๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 9๊ฐœ ํ”Œ๋žซํผ์— ์ž๋™์œผ๋กœ ๊ฒŒ์‹œํ•˜๋Š” AI ๋น„๋””์˜ค ์ƒ์„ฑ
VEO3์„ ์‚ฌ์šฉํ•˜์—ฌ AI ๋น„๋””์˜ค ์ƒ์„ฑๅนถํ†ตํ•ด Blotato ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์— ๋ฐฐํฌ
Set
Wait
Telegram
+
Set
Wait
Telegram
29 ๋…ธ๋“œDr. Firas
์ฝ˜ํ…์ธ  ์ œ์ž‘
์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด
๋‚œ์ด๋„
๊ณ ๊ธ‰
๋…ธ๋“œ ์ˆ˜24
์นดํ…Œ๊ณ ๋ฆฌ3
๋…ธ๋“œ ์œ ํ˜•12
๋‚œ์ด๋„ ์„ค๋ช…

๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ 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์—์„œ ๋ณด๊ธฐ โ†’

์ด ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ 

์นดํ…Œ๊ณ ๋ฆฌ

์นดํ…Œ๊ณ ๋ฆฌ: 34