{
  "nodes": [
    {
      "parameters": {},
      "id": "74979871-aa7f-439b-8862-eee4f2342515",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -1696,
        608
      ]
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "YOUR_SPREADSHEET_ID",
          "mode": "list",
          "cachedResultName": "Video  A T\u1ef5 _ Minh Tri\u1ebft",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1iGdzzSDO0nV_-bC6qqzSJm6xOrDgwlib4T6Wrj64_Fo/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 599470117,
          "mode": "list",
          "cachedResultName": "video short ",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1iGdzzSDO0nV_-bC6qqzSJm6xOrDgwlib4T6Wrj64_Fo/edit#gid=599470117"
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "status",
              "lookupValue": "PROCESSING"
            }
          ]
        },
        "options": {
          "returnFirstMatch": true
        }
      },
      "id": "60585606-84f1-440a-86ec-4b67e36147c4",
      "name": "Get Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        -1472,
        432
      ],
      "retryOnFail": true,
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=T\u1ea1o d\u00e0n \u00fd video ng\u1eafn (TikTok/Shorts/Reels) d\u01b0\u1edbi 80 gi\u00e2y v\u1edbi d\u1eef li\u1ec7u sau:\n\n- Kh\u00e1i ni\u1ec7m tri\u1ebft h\u1ecdc: {{ $json.philosophical_concept }}\n- N\u1ed7i \u0111au ch\u00ednh: {{ $json.target_pain_point }}\n- Phong c\u00e1ch gi\u1ecdng \u0111i\u1ec7u: {{ $json.voice_tone_style }}\n\nC\u1ea4U TR\u00daC B\u1eaeT BU\u1ed8C (3 ph\u1ea7n):\n\nPH\u1ea6N 1 \u2014 HOOK (3\u20135 gi\u00e2y):\n\u0110\u00e1nh th\u1eb3ng v\u00e0o n\u1ed7i \u0111au ho\u1eb7c \u0111\u01b0a ra 1 ph\u00e1t ng\u00f4n l\u00e0m ng\u01b0\u1eddi xem d\u1eebng l\u1ea1i ngay l\u1eadp t\u1ee9c. Kh\u00f4ng gi\u1edbi thi\u1ec7u d\u00e0i d\u00f2ng.\n\nPH\u1ea6N 2 \u2014 N\u1ed8I DUNG CH\u00cdNH (35\u201345 gi\u00e2y):\n- K\u1ec3 1 c\u00e2u chuy\u1ec7n \u1ea9n d\u1ee5 ho\u1eb7c t\u00ecnh hu\u1ed1ng \u0111\u1eddi th\u1ef1c li\u00ean quan \u0111\u1ebfn n\u1ed7i \u0111au.\n- Gi\u1ea3i th\u00edch tri\u1ebft l\u00fd {{ $json.philosophical_concept }} theo ng\u00f4n ng\u1eef \u0111\u1eddi th\u01b0\u1eddng (kh\u00f4ng h\u00e0n l\u00e2m).\n- \u0110\u01b0a ra 1 h\u00e0nh \u0111\u1ed9ng c\u1ee5 th\u1ec3, \u00e1p d\u1ee5ng \u0111\u01b0\u1ee3c ngay (Actionable advice).\n\nPH\u1ea6N 3 \u2014 CTA (5 gi\u00e2y):\nK\u00eau g\u1ecdi l\u01b0u video, chia s\u1ebb ho\u1eb7c follow. Ph\u1ea3i t\u1ef1 nhi\u00ean, kh\u00f4ng s\u00e1o r\u1ed7ng.\n\nXu\u1ea5t ra d\u00e0n \u00fd chi ti\u1ebft t\u1eebng ph\u1ea7n. Kh\u00f4ng th\u00eam l\u1eddi gi\u1ea3i th\u00edch ngo\u00e0i l\u1ec1.\n",
        "options": {
          "systemMessage": "=You are \"Minh Tri\u1ebft\" \u2013 Tri\u1ebft gia k\u1ec3 chuy\u1ec7n hi\u1ec7n \u0111\u1ea1i.\n\nCHUY\u00caN M\u00d4N: Chuy\u1ec3n h\u00f3a tri\u1ebft h\u1ecdc Trung Hoa c\u1ed5 \u0111\u1ea1i (\u0110\u1ea1o \u0110\u1ee9c Kinh, Nho Gi\u00e1o, Ph\u1eadt Gi\u00e1o Thi\u1ec1n T\u00f4ng, Binh Ph\u00e1p T\u00f4n T\u1eed) th\u00e0nh n\u1ed9i dung video ng\u1eafn c\u00f3 chi\u1ec1u s\u00e2u, d\u1ec5 hi\u1ec3u v\u00e0 \u1ee9ng d\u1ee5ng \u0111\u01b0\u1ee3c ngay v\u00e0o \u0111\u1eddi s\u1ed1ng, c\u00f4ng vi\u1ec7c th\u1ef1c t\u1ebf.\n\nNGUY\u00caN T\u1eaeC N\u1ed8I DUNG:\n- G\u1ea7n g\u0169i m\u1ecdi t\u1ea7ng l\u1edbp: N\u00f4ng d\u00e2n, sinh vi\u00ean, doanh nh\u00e2n \u0111\u1ec1u hi\u1ec3u \u0111\u01b0\u1ee3c.\n- C\u00f3 gi\u00e1 tr\u1ecb th\u1ef1c: M\u1ed7i video ph\u1ea3i gi\u1ea3i quy\u1ebft 1 n\u1ed7i \u0111au th\u1eadt c\u1ee7a ng\u01b0\u1eddi xem.\n- Kh\u00f4ng g\u00e2y h\u1ea1i n\u00e3o b\u1ed9: Kh\u00f4ng gi\u1eadt g\u00e2n b\u1ea9n, kh\u00f4ng th\u00f4ng tin sai l\u1ec7ch, kh\u00f4ng k\u00edch \u0111\u1ed9ng c\u1ea3m x\u00fac ti\u00eau c\u1ef1c thu\u1ea7n t\u00fay.\n- Tri\u1ebft h\u1ecdc l\u00e0 c\u00f4ng c\u1ee5, kh\u00f4ng ph\u1ea3i m\u1ee5c ti\u00eau: D\u00f9ng tri\u1ebft l\u00fd \u0111\u1ec3 soi s\u00e1ng v\u1ea5n \u0111\u1ec1 th\u1ef1c t\u1ebf, kh\u00f4ng rao gi\u1ea3ng h\u00e0n l\u00e2m.\n\nPHONG C\u00c1CH NG\u00d4N NG\u1eee:\n- N\u00f3i chuy\u1ec7n nh\u01b0 ng\u01b0\u1eddi anh c\u1ea3 kinh nghi\u1ec7m \u0111ang r\u1ec9 tai \u0111\u00e0n em \u2014 s\u1eafc b\u00e9n, \u1ea5m \u00e1p, kh\u00f4ng ph\u00e1n x\u00e9t.\n- KH\u00d4NG d\u00f9ng: \"mang t\u00ednh\", \"nh\u1eadn bi\u1ebft \u00fd ki\u1ebfn\", \"v\u1ec1 vi\u1ec7c\", \"Tri\u1ebft l\u00fd ph\u01b0\u01a1ng \u0110\u00f4ng g\u1ecdi l\u00e0...\"\n- C\u00e2u ng\u1eafn. \u00dd g\u1ecdn. S\u1ee9c n\u1eb7ng n\u1eb1m \u1edf s\u1ef1 th\u1eadt, kh\u00f4ng ph\u1ea3i \u1edf t\u1eeb hoa m\u1ef9.\n\nNHI\u1ec6M V\u1ee4: Ch\u1ec9 xu\u1ea5t ra D\u00c0N \u00dd. Kh\u00f4ng gi\u1ea3i th\u00edch th\u00eam, kh\u00f4ng b\u00ecnh lu\u1eadn ngo\u00e0i l\u1ec1.\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        -1216,
        432
      ],
      "id": "59601d4a-cd6d-4979-b69b-c42ce7df9d92",
      "name": "MINH_TRIET_LAP_DAN_Y",
      "retryOnFail": true
    },
    {
      "parameters": {
        "model": "google/gemini-2.5-flash-lite",
        "options": {
          "maxTokens": 2000,
          "temperature": 0.7
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "typeVersion": 1,
      "position": [
        -1216,
        640
      ],
      "id": "5a6ecd3b-b90d-422c-9a0b-a3b5c95c52a0",
      "name": "OpenRouter Chat Model",
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=G\u1ecdi Wikipedia 1 l\u1ea7n duy nh\u1ea5t \u0111\u1ec3 tra kh\u00e1i ni\u1ec7m tri\u1ebft h\u1ecdc trong d\u00e0n \u00fd, sau \u0111\u00f3 vi\u1ebft k\u1ecbch b\u1ea3n.\n\nD\u00c0N \u00dd: {{ $json.output }}\n\nCH\u1ec8 TR\u1ea2 V\u1ec0 JSON SAU, KH\u00d4NG TH\u00caM G\u00cc KH\u00c1C:\n{\n  \"scenes\": [\n    {\n      \"scene_number\": 1,\n      \"section\": \"Hook\",\n      \"voice_text\": \"C\u00e2u tho\u1ea1i ti\u1ebfng Vi\u1ec7t...\",\n      \"image_prompt\": \"9:16 Vertical, Minimalist black and white stick figure animation, hand-drawn thin ink lines on pure white background. The same stick figure \u2014 simple circle head, thin straight body, line arms and legs \u2014 [m\u00f4 t\u1ea3 h\u00e0nh \u0111\u1ed9ng \u1ea9n d\u1ee5 ng\u1eafn g\u1ecdn]\"\n    },\n    {\n      \"scene_number\": 2,\n      \"section\": \"Main\",\n      \"voice_text\": \"...\",\n      \"image_prompt\": \"...\"\n    },\n    {\n      \"scene_number\": 3,\n      \"section\": \"Main\",\n      \"voice_text\": \"...\",\n      \"image_prompt\": \"...\"\n    },\n    {\n      \"scene_number\": 4,\n      \"section\": \"Main\",\n      \"voice_text\": \"...\",\n      \"image_prompt\": \"...\"\n    },\n    {\n      \"scene_number\": 5,\n      \"section\": \"CTA\",\n      \"voice_text\": \"...\",\n      \"image_prompt\": \"...\"\n    }\n  ]\n}\n",
        "options": {
          "systemMessage": "==You are \"Minh Tri\u1ebft\" \u2013 Tri\u1ebft gia k\u1ec3 chuy\u1ec7n, Visual Director & Copywriting Expert.\n\nNH\u00c2N V\u1eacT C\u1ed0 \u0110\u1ecaNH XUY\u00caN SU\u1ed0T VIDEO:\nM\u1ed9t nh\u00e2n v\u1eadt ng\u01b0\u1eddi que (stick figure) duy nh\u1ea5t: \u0111\u1ea7u tr\u00f2n \u0111\u01a1n gi\u1ea3n, th\u00e2n m\u1ea3nh, tay ch\u00e2n que m\u1ea3nh. KH\u00d4NG THAY \u0110\u1ed4I trong b\u1ea5t k\u1ef3 scene n\u00e0o.\n\nVOICE TEXT (Ti\u1ebfng Vi\u1ec7t):\n- Vi\u1ebft nh\u01b0 ng\u01b0\u1eddi anh c\u1ea3 \u0111ang r\u1ec9 tai \u0111\u00e0n em \u2014 s\u1eafc b\u00e9n, \u1ea5m \u00e1p, g\u1ea7n g\u0169i.\n- C\u00e2u ng\u1eafn, \u00fd g\u1ecdn, ng\u1eaft nh\u1ecbp TikTok/Reels.\n- TUY\u1ec6T \u0110\u1ed0I KH\u00d4NG d\u00f9ng: \"mang t\u00ednh\", \"v\u1ec1 vi\u1ec7c\", \"Tri\u1ebft l\u00fd ph\u01b0\u01a1ng \u0110\u00f4ng g\u1ecdi l\u00e0...\"\n- Vi\u1ebft cho \u0111\u1ebfn khi \u00fd tr\u1ecdn v\u1eb9n, kh\u00f4ng \u0111\u1ebfm th\u1eddi gian.\n\nIMAGE PROMPT (English Only):\n- Lu\u00f4n b\u1eaft \u0111\u1ea7u: \"9:16 Vertical, Minimalist black and white stick figure animation, hand-drawn thin ink lines on pure white background. The same stick figure \u2014 simple circle head, thin straight body, line arms and legs \u2014\"\n- \u1ea8n d\u1ee5 tri\u1ebft h\u1ecdc. KH\u00d4NG m\u00e0u s\u1eafc, KH\u00d4NG 3D, KH\u00d4NG photo. T\u1ed1i \u0111a 35 words m\u1ed7i prompt.\n\nTAVILY SEARCH TOOL \u2014 QUY T\u1eaeC S\u1eec D\u1ee4NG:\n- G\u1ecdi tool `tavily_search` \u0110\u00daNG 1 L\u1ea6N DUY NH\u1ea4T \u0111\u1ec3 nghi\u00ean c\u1ee9u s\u00e2u v\u1ec1 kh\u00e1i ni\u1ec7m tri\u1ebft h\u1ecdc trong d\u00e0n \u00fd.\n- QUERY g\u1eedi cho tool ph\u1ea3i l\u00e0 TI\u1ebeNG ANH (V\u00ed d\u1ee5: \"Wu Wei meaning and practical life lessons\") \u0111\u1ec3 l\u1ea5y d\u1eef li\u1ec7u chu\u1ea9n nh\u1ea5t.\n- \u01afu ti\u00ean \u0111\u1ecdc n\u1ed9i dung trong tr\u01b0\u1eddng \"answer\" c\u1ee7a k\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 \u0111\u1ec3 n\u1eafm b\u1eaft tinh hoa tri\u1ebft l\u00fd.\n- Ch\u1ec9 sau khi c\u00f3 k\u1ebft qu\u1ea3 t\u1eeb Tavily m\u1edbi \u0111\u01b0\u1ee3c b\u1eaft \u0111\u1ea7u vi\u1ebft k\u1ecbch b\u1ea3n.\n\nGI\u1edaI H\u1ea0N B\u1eaeT BU\u1ed8C:\n- T\u1ed1i \u0111a 5 scenes. Kh\u00f4ng h\u01a1n.\n- M\u1ed7i image_prompt kh\u00f4ng qu\u00e1 35 words.\n\nOUTPUT RULES (NGHI\u00caM C\u1ea4M VI PH\u1ea0M):\n- Ch\u1ec9 tr\u1ea3 v\u1ec1 JSON object thu\u1ea7n t\u00fay.\n- KH\u00d4NG d\u00f9ng markdown (kh\u00f4ng c\u00f3 ```json).\n- KH\u00d4NG vi\u1ebft b\u1ea5t k\u1ef3 ch\u1eef n\u00e0o ngo\u00e0i c\u1eb7p ngo\u1eb7c {}.\n- Response ph\u1ea3i b\u1eaft \u0111\u1ea7u b\u1eb1ng { v\u00e0 k\u1ebft th\u00fac b\u1eb1ng }.\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        -912,
        432
      ],
      "id": "8a1f95a9-b4c6-4c38-843f-f0606bc393ea",
      "name": "MINH_TRIET_VIET_SCRIPT",
      "retryOnFail": true
    },
    {
      "parameters": {
        "model": "anthropic/claude-haiku-4.5",
        "options": {
          "maxTokens": 6000,
          "temperature": 0.5
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "typeVersion": 1,
      "position": [
        -912,
        640
      ],
      "id": "82e2f028-b5a7-426b-9a2d-2b2c40f02616",
      "name": "OpenRouter Chat Model1",
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "try {\n  let content = $input.first().json.output;\n\n  const outputTagMatch = content.match(/<output>([\\s\\S]*?)<\\/output>/);\n  if (outputTagMatch) content = outputTagMatch[1].trim();\n\n  const mdMatch = content.match(/```(?:json)?\\s*([\\s\\S]*?)\\s*```/);\n  if (mdMatch) content = mdMatch[1];\n\n  const start = content.indexOf('{');\n  const end = content.lastIndexOf('}');\n  if (start === -1 || end === -1) throw new Error('JSON b\u1ecb c\u1eaft \u0111\u1ee9t - t\u0103ng maxTokens');\n\n  const parsed = JSON.parse(content.substring(start, end + 1));\n\n  if (!parsed.scenes || !Array.isArray(parsed.scenes)) {\n    throw new Error('Thi\u1ebfu m\u1ea3ng scenes');\n  }\n\n  return parsed.scenes.map(scene => ({\n    json: {\n      ...scene,\n      voice_text: (scene.voice_text || '')\n        .replace(/\\\\n/g, ' ')\n        .replace(/\\n/g, ' ')\n        .replace(/\\r/g, '')\n        .replace(/\\t/g, ' ')\n        .replace(/\\s+/g, ' ')\n        .trim()\n    }\n  }));\n\n} catch (error) {\n  return [{ json: { has_error: true, error_message: error.message } }];\n}\n"
      },
      "id": "051ac160-3c45-49e2-b2af-1312c1b0132e",
      "name": "Split Scenes",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -608,
        432
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "8a9cebf2-ccd3-4073-a6b6-2c49a8673600",
      "name": "Loop Scenes",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        -368,
        432
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "YOUR_NCA_API_BASE_URL/v1/video/concatenate",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "YOUR_NCA_API_KEY"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "video_urls",
              "value": "={{ $json.video_urls }}"
            }
          ]
        },
        "options": {}
      },
      "id": "0aef64ce-131f-4d1a-8679-ab068c77c856",
      "name": "Concatenate Final",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        192,
        112
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "YOUR_NCA_API_BASE_URL/audio-mixing",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "YOUR_NCA_API_KEY"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"video_url\": \"{{ $json.response }}\",\n  \"audio_url\": \"{{ $('Get Sheet').item.json.music_url }}\",\n  \"video_vol\": 100,\n  \"audio_vol\": 15,\n  \"output_length\": \"video\"\n}",
        "options": {
          "timeout": 300000
        }
      },
      "id": "f3f2c827-73f1-47aa-9db7-ee5e4332b7c3",
      "name": "Add Background Music",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        464,
        112
      ],
      "retryOnFail": true,
      "maxTries": 2
    },
    {
      "parameters": {
        "url": "={{ $json.response }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "id": "3bf55c1b-9321-4153-9ebd-44d06aecc845",
      "name": "Download Final Video",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        736,
        112
      ]
    },
    {
      "parameters": {
        "name": "={{ $('Get Sheet').item.json.title || 'podcast_final' }}.mp4",
        "driveId": {
          "__rl": true,
          "value": "My Drive",
          "mode": "list"
        },
        "folderId": {
          "__rl": true,
          "value": "YOUR_DRIVE_FOLDER_ID",
          "mode": "id"
        },
        "options": {}
      },
      "id": "13b5f49c-3ee4-41bb-8015-46f713a5feef",
      "name": "Upload Final Video",
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        1008,
        112
      ],
      "retryOnFail": true,
      "maxTries": 2,
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "YOUR_SPREADSHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": 599470117,
          "mode": "list",
          "cachedResultName": "video short ",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1iGdzzSDO0nV_-bC6qqzSJm6xOrDgwlib4T6Wrj64_Fo/edit#gid=599470117"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "status": "READY",
            "row_number": 0,
            "episode_id": "={{ $('Get Sheet').item.json.episode_id }}",
            "output_video_url": "={{ $json.webViewLink }}"
          },
          "matchingColumns": [
            "episode_id"
          ],
          "schema": [
            {
              "id": "episode_id",
              "displayName": "episode_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "displayName": "title",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "video_loop_url",
              "displayName": "video_loop_url",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "music_url",
              "displayName": "music_url",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "output_video_url",
              "displayName": "output_video_url",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "status",
              "displayName": "status",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "philosophical_concept",
              "displayName": "philosophical_concept",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "target_pain_point",
              "displayName": "target_pain_point",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "voice_tone_style",
              "displayName": "voice_tone_style",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "link_audio",
              "displayName": "link_audio",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "create_time_audio",
              "displayName": "create_time_audio",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "link_thumbnail",
              "displayName": "link_thumbnail",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "create_time_video",
              "displayName": "create_time_video",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "status_tiktok",
              "displayName": "status_tiktok",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "row_number",
              "displayName": "row_number",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "readOnly": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "ea0d6904-71cc-4ce7-b772-cde25699d178",
      "name": "Update Sheet Status",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        1216,
        112
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "resume": "webhook",
        "httpMethod": "POST",
        "options": {}
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        368,
        448
      ],
      "id": "2b4b35cc-1017-4a1b-916c-e69f0f8370c9",
      "name": "Wait for VBee"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "YOUR_NCA_API_BASE_URL/v1/media/metadata",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "YOUR_NCA_API_KEY"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"media_url\": \"{{ $json.body?.audio_link || $json.audio_link || $json.result?.audio_link }}\"\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        688,
        448
      ],
      "id": "794c0260-f375-42a5-ac2d-b5be66edebc4",
      "name": "Get Audio Duration"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://vbee.vn/api/v1/tts",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "app_id",
              "value": "YOUR_VBEE_APP_ID"
            },
            {
              "name": "response_type",
              "value": "indirect"
            },
            {
              "name": "callback_url",
              "value": "={{ $execution.resumeUrl }}"
            },
            {
              "name": "input_text",
              "value": "={{ $('Loop Scenes').item.json.voice_text }}"
            },
            {
              "name": "voice_code",
              "value": "s_sg_male_thientam_ytstable_vc"
            },
            {
              "name": "audio_type",
              "value": "mp3"
            },
            {
              "name": "bitrate",
              "value": "128"
            },
            {
              "name": "speed_rate",
              "value": "1.0"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        0,
        448
      ],
      "id": "2a60a83e-b007-4d25-963f-704d43b6c99e",
      "name": "VBee API - Generate Audio MP",
      "retryOnFail": true,
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "auth",
              "name": "Authorization",
              "value": "Bearer YOUR_WHISK_TOKEN",
              "type": "string"
            },
            {
              "id": "proj",
              "name": "ProjectID",
              "value": "YOUR_WHISK_PROJECT_ID",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1248,
        448
      ],
      "id": "2b9ff2d9-0906-4d96-86cc-49db1d91a26d",
      "name": "Whisk Config1"
    },
    {
      "parameters": {
        "name": "={{ 'scene_' + $json.scene_number + '.png' }}",
        "driveId": {
          "__rl": true,
          "value": "My Drive",
          "mode": "list"
        },
        "folderId": {
          "__rl": true,
          "value": "YOUR_DRIVE_FOLDER_ID",
          "mode": "id"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        288,
        736
      ],
      "id": "8fbe7583-ac26-484b-80e4-4586794f9e70",
      "name": "Upload Image Drive1",
      "retryOnFail": true,
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "url",
              "name": "image_url",
              "value": "=https://drive.google.com/uc?export=download&confirm=t&id={{ $json.id }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        512,
        736
      ],
      "id": "3a26de16-a9d3-4baa-88f6-b6b3285ac056",
      "name": "img_url1"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "YOUR_NCA_API_BASE_URL/v1/image/convert/video",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "YOUR_NCA_API_KEY"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"image_url\": \"{{ $json.image_url }}\",\n  \"length\": {{ $('Prep Scene Data1').item.json.audio_duration }},\n  \"frame_rate\": 30,\n  \"zoom_speed\": 3,\n  \"id\": \"scene_{{ $('Loop Scenes').item.json.scene_number }}\"\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        784,
        736
      ],
      "id": "94cdc225-2747-4040-b973-377723254391",
      "name": "NCA Zoom1",
      "retryOnFail": true
    },
    {
      "parameters": {
        "method": "POST",
        "url": "YOUR_NCA_API_BASE_URL/v1/ffmpeg/compose",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "YOUR_NCA_API_KEY"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "inputs",
              "value": "={{ $json.inputs }}"
            },
            {
              "name": "outputs",
              "value": "={{ $json.outputs }}"
            },
            {
              "name": "id",
              "value": "={{ $json.id }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        1248,
        736
      ],
      "id": "55429978-30c3-4062-b094-9223ba76a9d1",
      "name": "NCA Compose Scene1"
    },
    {
      "parameters": {
        "toolDescription": "D\u00f9ng \u0111\u1ec3 tra c\u1ee9u ki\u1ebfn th\u1ee9c tri\u1ebft h\u1ecdc chuy\u00ean s\u00e2u, l\u1ecbch s\u1eed v\u00e0 gi\u1ea3i ngh\u0129a c\u00e1c kh\u00e1i ni\u1ec7m Nho - Ph\u1eadt - \u0110\u1ea1o. Tool tr\u1ea3 v\u1ec1 c\u00e2u tr\u1ea3 l\u1eddi \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00f3m t\u1eaft v\u00e0 c\u00e1c ngu\u1ed3n uy t\u00edn.",
        "method": "POST",
        "url": "https://api.tavily.com/search",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "api_key",
              "value": "YOUR_TAVILY_API_KEY"
            },
            {
              "name": "query",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `T\u1eeb kh\u00f3a t\u00ecm ki\u1ebfm tri\u1ebft h\u1ecdc b\u1eb1ng ti\u1ebfng Anh (v\u00ed d\u1ee5: Wu Wei meaning and history)`, 'string') }}"
            },
            {
              "name": "include_answer",
              "value": "basic"
            },
            {
              "name": "search_depth",
              "value": "advanced"
            }
          ]
        },
        "options": {},
        "optimizeResponse": true
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.4,
      "position": [
        -736,
        656
      ],
      "id": "ff6bddaf-8eaf-43bd-ba2b-da35ebb4e679",
      "name": "tavily_search",
      "rewireOutputLogTo": "ai_tool"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "field_image_prompt",
              "name": "image_prompt",
              "value": "={{ $('Loop Scenes').item.json.image_prompt.trim() }}",
              "type": "string"
            },
            {
              "id": "field_audio_link",
              "name": "audio_link",
              "value": "={{ ($('Wait for VBee').item.json.body?.audio_link || $('Wait for VBee').item.json.audio_link || \"\").trim() }}",
              "type": "string"
            },
            {
              "id": "field_audio_duration",
              "name": "audio_duration",
              "value": "={{ Math.ceil(parseFloat($('Get Audio Duration').item.json?.response?.format?.duration) || $('Get Audio Duration').item.json?.response?.duration || $('Get Audio Duration').item.json?.duration || 5) + 1 }}\n",
              "type": "number"
            }
          ]
        },
        "options": {}
      },
      "id": "efa7593c-aefc-465c-8778-c9c0aeb7d34a",
      "name": "Prep Scene Data1",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        992,
        448
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://aisandbox-pa.googleapis.com/v1/whisk:generateImage",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ $json.Authorization }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"clientContext\": {\n    \"workflowId\": \"{{ $json.ProjectID }}\",\n    \"tool\": \"BACKBONE\",\n    \"sessionId\": \"{{ new Date().getTime() }}\"\n  },\n  \"imageModelSettings\": {\n    \"imageModel\": \"GEM_PIX\",\n    \"aspectRatio\": \"IMAGE_ASPECT_RATIO_PORTRAIT\"\n  },\n  \"prompt\": \"{{ $('Prep Scene Data1').item.json.image_prompt }}\"\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1488,
        448
      ],
      "id": "494bc64e-74c1-41e8-9b1d-8afe8ee2b127",
      "name": "Whisk Scene Image1"
    },
    {
      "parameters": {
        "operation": "toBinary",
        "sourceProperty": "imagePanels[0].generatedImages[0].encodedImage",
        "options": {
          "fileName": "={{ 'scene_' + $('Loop Scenes').item.json.scene_number + '.png' }}"
        }
      },
      "id": "c5559441-1541-4fc1-b2e7-96746862dfd5",
      "name": "Format Image Data1",
      "type": "n8n-nodes-base.convertToFile",
      "typeVersion": 1,
      "position": [
        64,
        736
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "inputs_array",
              "name": "inputs",
              "value": "={{ [{file_url: $json.response[0]?.file_url || $json.response?.file_url || $json.response}, {file_url: $('Prep Scene Data1').item.json.audio_link}] }}",
              "type": "array"
            },
            {
              "id": "outputs_array",
              "name": "outputs",
              "value": "={{ [{options: [{option: \"-map\", argument: \"0:v:0\"}, {option: \"-map\", argument: \"1:a:0\"}, {option: \"-c:v\", argument: \"copy\"}, {option: \"-c:a\", argument: \"aac\"}, {option: \"-shortest\", argument: null}]}] }}",
              "type": "array"
            },
            {
              "id": "id_string",
              "name": "id",
              "value": "={{ 'scene_' + $('Loop Scenes').item.json.scene_number }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "a2bd5c6c-d89a-41ed-8e2e-cbf835ca8e2c",
      "name": "Prep Compose1",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        992,
        736
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "YOUR_NCA_API_BASE_URL/v1/video/caption",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "YOUR_NCA_API_KEY"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"video_url\": \"{{ $json.response[0]?.file_url || $json.response?.file_url || $json.response }}\",\n  \"webhook_url\": \"{{ $execution.resumeUrl }}\",\n  \"settings\": {\n    \"style\": \"karaoke\",\n    \"line_color\": \"#FFFFFF\",\n    \"word_color\": \"#FFD700\",\n    \"outline_color\": \"#000000\",\n    \"all_caps\": false,\n    \"max_words_per_line\": 6,\n    \"position\": \"bottom_center\",\n    \"alignment\": \"center\",\n    \"font_family\": \"Roboto\",\n    \"font_size\": 28,\n    \"bold\": true,\n    \"outline_width\": 3,\n    \"shadow_offset\": 2\n  },\n  \"language\": \"vi\"\n}",
        "options": {
          "timeout": 300000
        }
      },
      "id": "caption-scene-node-001",
      "name": "Add Caption Scene",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        1488,
        736
      ],
      "retryOnFail": true,
      "maxTries": 2
    },
    {
      "parameters": {
        "resume": "webhook",
        "httpMethod": "POST",
        "options": {}
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        1728,
        736
      ],
      "id": "wait-for-caption-node-123",
      "name": "Wait for Caption"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "video_url_field",
              "name": "video_url",
              "value": "={{ (() => { let item = $('Wait for Caption').item || {}; let body = ($json && $json.body) || (item.json && item.json.body) || {}; let res = body.response || body.video_url || body.file_url; if (!res) return 'ERROR: ' + (body.message || body.error || 'Unknown Error'); if (typeof res === 'string' && res.startsWith('http')) return res; if (typeof res === 'string') { try { res = JSON.parse(res); } catch(e) {} } if (Array.isArray(res)) return res[0]?.file_url || res[0]; if (typeof res === 'object') return res.file_url || res.url || res.video_url; return res; })() }}",
              "type": "string"
            },
            {
              "id": "scene_num_field",
              "name": "scene_number",
              "value": "={{ $('Loop Scenes').item.json.scene_number }}",
              "type": "number"
            }
          ]
        },
        "options": {}
      },
      "id": "ba0ccef1-d6e2-457d-a71b-b09483409856",
      "name": "Pass to Loop1",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1968,
        736
      ]
    },
    {
      "parameters": {
        "jsCode": "const items = $input.all();\nconst video_urls = items\n  .filter(i => i.json.video_url)\n  .map(i => ({ \n    video_url: i.json.video_url \n  })); \n\nreturn [{\n  json: {\n    video_urls,\n    scene_count: video_urls.length\n  }\n}];\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -64,
        112
      ],
      "id": "76e025fc-3ce2-4ae6-80d7-6150697c6ab1",
      "name": "Aggregate Videos"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -1696,
        432
      ],
      "id": "9ab53d44-b4a4-4bc0-a452-4b5648a03f40",
      "name": "Schedule Trigger"
    },
    {
      "parameters": {
        "content": "                              L\u1ea4Y TI\u00caU \u0110\u1ec0 VIDEO ",
        "height": 400,
        "width": 480
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1792,
        368
      ],
      "id": "d5b2d5a0-69e2-496d-b15b-f2554aaa28aa",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "                  \n            AI VI\u1ebeT K\u1ecaCH B\u1ea2N",
        "height": 400,
        "width": 848
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1296,
        368
      ],
      "id": "010be31b-6d33-4f9e-9165-a1a77d182ff9",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "                       \n                                                       G\u1eccI API T\u1ea0O AUDIO                                                  \n                                    G\u1eccI API T\u1ea0O \u1ea2NH \u2192 GH\u00c9P VIDEO \u2192 CH\u00c8N CAPTION T\u1eeaNG SCENE\n                                       GH\u00c9P  TH\u00c0NH VIDEO  NG\u1eaeN  (\u0110\u00c3 C\u00d3 CAPTION)",
        "height": 608,
        "width": 2336,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -432,
        368
      ],
      "id": "f2a0dd14-0104-420f-be98-f04390303196",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "GH\u00c9P C\u00c1C VIDEO (\u0110\u00c3 C\u00d3 CAPTION) \u2192 ADD BACKGROUND MUSIC \u2192 UP GOOGLE DRIVE / GOOGLE SHEET\n",
        "height": 320,
        "width": 1584,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -144,
        32
      ],
      "id": "c005130d-1cea-4d32-8138-e5ac000633bc",
      "name": "Sticky Note3"
    }
  ],
  "connections": {
    "Get Sheet": {
      "main": [
        [
          {
            "node": "MINH_TRIET_LAP_DAN_Y",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MINH_TRIET_LAP_DAN_Y": {
      "main": [
        [
          {
            "node": "MINH_TRIET_VIET_SCRIPT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "MINH_TRIET_LAP_DAN_Y",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "MINH_TRIET_VIET_SCRIPT": {
      "main": [
        [
          {
            "node": "Split Scenes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "MINH_TRIET_VIET_SCRIPT",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Split Scenes": {
      "main": [
        [
          {
            "node": "Loop Scenes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Scenes": {
      "main": [
        [
          {
            "node": "Aggregate Videos",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "VBee API - Generate Audio MP",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Concatenate Final": {
      "main": [
        [
          {
            "node": "Add Background Music",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Background Music": {
      "main": [
        [
          {
            "node": "Download Final Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Final Video": {
      "main": [
        [
          {
            "node": "Upload Final Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Final Video": {
      "main": [
        [
          {
            "node": "Update Sheet Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for VBee": {
      "main": [
        [
          {
            "node": "Get Audio Duration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Audio Duration": {
      "main": [
        [
          {
            "node": "Prep Scene Data1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "VBee API - Generate Audio MP": {
      "main": [
        [
          {
            "node": "Wait for VBee",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Whisk Config1": {
      "main": [
        [
          {
            "node": "Whisk Scene Image1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Image Drive1": {
      "main": [
        [
          {
            "node": "img_url1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "img_url1": {
      "main": [
        [
          {
            "node": "NCA Zoom1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "NCA Zoom1": {
      "main": [
        [
          {
            "node": "Prep Compose1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "NCA Compose Scene1": {
      "main": [
        [
          {
            "node": "Add Caption Scene",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Caption Scene": {
      "main": [
        [
          {
            "node": "Wait for Caption",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Caption": {
      "main": [
        [
          {
            "node": "Pass to Loop1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "tavily_search": {
      "ai_tool": [
        [
          {
            "node": "MINH_TRIET_VIET_SCRIPT",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Prep Scene Data1": {
      "main": [
        [
          {
            "node": "Whisk Config1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Whisk Scene Image1": {
      "main": [
        [
          {
            "node": "Format Image Data1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Image Data1": {
      "main": [
        [
          {
            "node": "Upload Image Drive1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prep Compose1": {
      "main": [
        [
          {
            "node": "NCA Compose Scene1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pass to Loop1": {
      "main": [
        [
          {
            "node": "Loop Scenes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Videos": {
      "main": [
        [
          {
            "node": "Concatenate Final",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Get Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}