✅ ウイルスのReelsファクトリー
上級
これはContent Creation, Multimodal AI分野の自動化ワークフローで、37個のノードを含みます。主にIf, Jwt, Set, Wait, Switchなどのノードを使用。 Veo、Shotstack、Postizを使用したASMRガラス fruit動画制作と公開の自動化
前提条件
- •ターゲットAPIの認証情報が必要な場合あり
- •Google Sheets API認証情報
- •OpenAI API Key
使用ノード (37)
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "pUSSmWHjoH7Vl0pv",
"meta": {
"instanceId": "a8eeb9d69b670b2972288895a06a59218e20265c82cda64bdc11ce0136d2f8fb"
},
"name": "✅ Viral Reels Factory",
"tags": [],
"nodes": [
{
"id": "45400d45-c09e-432e-9ad9-819fa5db5b56",
"name": "過去のオブジェクトを取得",
"type": "n8n-nodes-base.googleSheets",
"position": [
224,
416
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hNzWblAWsI_5u4RUK7kC3tSbR9riex94ZUuslhhDb8o/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1hNzWblAWsI_5u4RUK7kC3tSbR9riex94ZUuslhhDb8o",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hNzWblAWsI_5u4RUK7kC3tSbR9riex94ZUuslhhDb8o/edit?usp=drivesdk",
"cachedResultName": "VEO ASMR"
}
},
"typeVersion": 4.6
},
{
"id": "e7530bf8-e164-4357-b37e-c1a6c7cd2bf8",
"name": "プロンプトエージェント",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1296,
416
],
"parameters": {
"text": "={{ $json.output.object }}",
"options": {
"systemMessage": "=# Overview \nYou are an AI agent that specializes in generating text-to-video prompts optimized for ASMR-style videos using Google Veo 3. \n\nYou will receive the name of a fruit-shaped glass object (e.g. \"glass apple\", \"glass mango\", \"glass croissant\"). Your task is to generate a hyper-realistic, sensory-rich video prompt of that object being gently and artistically divided in a controlled, CGI-rendered simulation.\n\n---\n\n## Policy Compliance Reminder (CRITICAL):\n\nTo ensure your prompt is accepted and not filtered out by Google Veo, you **must follow these safety guidelines**:\n\n- The scene must depict a **fully stylized digital animation**. It must be clearly artificial, artistic, and safe.\n- Do **not** say the object is being “cut,” “sliced,” “shattered,” “cleaved,” or “stabbed.” These words are policy triggers.\n- Instead, describe the object as made from a **resin-like material that mimics glass** and emphasize **pre-designed seams or grooves**.\n- The object should appear to **separate or open smoothly** as part of an animation, not through destructive force.\n- You may include a “blade” or “tool” only if it is described as sleek, polished, choreographed, and interacting with pre-defined lines in the object.\n- Avoid all aggressive words like “snap,” “pierce,” “strike,” or “break.”\n- Reassure at the end that this is **100% CGI, digitally rendered, with no physical tools or real materials involved**.\n\n---\n\n## Core Requirements:\n\n- The video must feel cinematic, photorealistic, and calming.\n- Framing: 9:16 vertical. The object should fill most of the vertical space.\n- Scene: Static vertical close-up of a dark walnut cutting board and a fruit-shaped resin object with subtle translucency and color.\n- The object should be described as **amber, ruby, or emerald-colored resin** — not literal glass.\n- A **polished steel blade** may appear, but it must move gracefully and along a **pre-designed groove**.\n- The action must be safe, simulated, and elegant. No force or destruction implied.\n- Include four ASMR sound layers:\n 1. A soft tonal contact as the blade touches the surface \n 2. A smooth glide sound as the form divides \n 3. A muted wooden note as the tool completes its motion \n 4. A light chime as the separated piece rests on the board \n- Keep language soft, immersive, and artistic.\n\n---\n\n## Prompt Output Format:\n\n**Subject**: A sculpted fruit form resembling a [object], made from a colored, semi-translucent resin that mimics glass, rests on a dark walnut cutting board, framed in vertical 9:16. \n**Setting**: Static vertical close-up, lit softly from above. Gentle light glides over the board’s surface and the object’s colored curves. \n**Action**: A sleek, polished steel blade enters from the top right. In a graceful, choreographed motion, the blade glides along a pre-designed groove in the resin form. The material responds with a controlled, simulated separation, revealing a smooth, inner core. There are no splinters, no breakage — only a seamless division along internal seams designed for the animation. \n**Style**: Stylized CGI realism. Every surface is rendered with photographic precision, but the entire scene is clearly artificial, safe, and elegant. \n**Sound**: Four clean ASMR layers: \n1. A crisp tone as the blade contacts the smooth resin \n2. A subtle glide as the form separates \n3. A soft wooden note as the blade rests \n4. A delicate chime as the separated half settles onto the board \n**Camera Motion**: Locked-off 9:16 composition. Focus shifts gently from the tool’s edge to the exposed interior. \n**Composition**: The object is centered vertically. The blade enters cleanly from the top. No hands are visible. \n**Ambiance**: No music, no speech — just layered, quiet cutting sounds in a controlled environment. \n\nThis is a digitally rendered simulation — no real glass, tools, or objects are shown. The scene is entirely safe, artistic, and stylized for ASMR effect.\n"
},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "f7f6370e-f9bd-48d3-a5db-e695fd9c2048",
"name": "アイデアエージェント",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
896,
416
],
"parameters": {
"text": "=Objects: {{ $json.objects.join(\", \") }}",
"options": {
"systemMessage": "=# Overview \nYou are an AI agent that selects unique **fruits** for ASMR-style glass cutting videos.\n\n## Your Task \nYou will receive a list of 7 fruits that have already been used. \nYour job is to generate **one new fruit** that is **not on that list**, and would look visually compelling if it were made of **glass** and cut with a knife in a close-up ASMR video.\n\n## Requirements\n- The fruit must **not repeat** any of the 7 provided items. \n- The fruit must have a **clear, recognizable shape** and be **physically feasible** to cut with a knife (even if it’s made of glass). \n- Prioritize fruits that would look **aesthetic and interesting** with a translucent, colored glass texture. \n- Do **not** explain or describe the fruit.\n\n## Output Format \nOutput a JSON object with the following structure:\n\n{\n \"object\": \"Glass [Object name]\",\n \"caption\": \"Glass [Object name] ASMR\"\n}\n\nReplace `[object name]` with the newly generated fruit. Do not include any punctuation or commentary.\n\n## Example Output \n{\n \"object\": \"Glass Apple\",\n \"caption\": \"Glass Apple ASMR\"\n}"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2
},
{
"id": "5778efac-9d2f-4647-baab-c58859139eca",
"name": "集約",
"type": "n8n-nodes-base.aggregate",
"position": [
448,
416
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "ac1edde2-1fd2-4934-a07d-330446fb95ba",
"name": "オブジェクトリストを設定",
"type": "n8n-nodes-base.set",
"position": [
672,
416
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "cf818c10-ad6d-4349-830f-393529a79d62",
"name": "objects",
"type": "array",
"value": "=[\"{{ $json.data[0].object }}\",\"{{ $json.data[1].object }}\"]"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "8bc3c143-c420-405b-994a-cdfcb7e23193",
"name": "オブジェクトとキャプション",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1056,
640
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"object\": {\n \"type\": \"string\",\n \"description\": \"A new object name in the format 'glass [object]', all lowercase with no punctuation.\"\n },\n \"caption\": {\n \"type\": \"string\",\n \"description\": \"A caption in the format 'glass [object] ASMR', matching the object field exactly.\"\n }\n },\n \"required\": [\"object\", \"caption\"]\n}"
},
"typeVersion": 1.3
},
{
"id": "7f96f17f-c901-42b5-9a70-ad18a6056f1f",
"name": "「ワークフローを実行」クリック時",
"type": "n8n-nodes-base.manualTrigger",
"position": [
0,
416
],
"parameters": {},
"typeVersion": 1
},
{
"id": "7fbb0979-6e84-433f-9a19-279b9f4e6f3b",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
928,
640
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "10073bf9-c998-47dd-9c34-91d9cc3c1455",
"name": "SET",
"type": "n8n-nodes-base.set",
"position": [
1696,
416
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "84fea8d5-e7cc-4519-963f-d2ae988337b5",
"name": "PROJECT_ID",
"type": "string",
"value": ""
},
{
"id": "1c227cbf-eb4a-4cb6-b13a-64900385a0e8",
"name": "CLIENT_EMAIL",
"type": "string",
"value": ""
},
{
"id": "d2e61510-9510-46e7-9025-82b3e5825ed7",
"name": "LOCATION_ID",
"type": "string",
"value": "us-central1"
},
{
"id": "050b1715-4fb9-4c60-9e14-ef07da4cd3e9",
"name": "API_ENDPOINT",
"type": "string",
"value": "us-central1-aiplatform.googleapis.com"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6968fc32-9cde-4810-9e33-bdf0fdb82684",
"name": "JWT",
"type": "n8n-nodes-base.jwt",
"position": [
1920,
416
],
"parameters": {
"options": {},
"useJson": true,
"claimsJson": "={\n \"iss\": \"{{ $json.CLIENT_EMAIL }}\",\n \"scope\": \"https://www.googleapis.com/auth/cloud-platform\",\n \"aud\": \"https://www.googleapis.com/oauth2/v4/token\",\n \"exp\": {{ Math.floor(Date.now() / 1000) + 3500 }},\n \"iat\": {{ Math.floor(Date.now() / 1000) }}\n}\n"
},
"typeVersion": 1
},
{
"id": "20094117-b83a-49c3-b3a9-fdd4a74f5fec",
"name": "GET TOKEN",
"type": "n8n-nodes-base.httpRequest",
"position": [
2144,
416
],
"parameters": {
"url": "https://www.googleapis.com/oauth2/v4/token",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "grant_type",
"value": "urn:ietf:params:oauth:grant-type:jwt-bearer"
},
{
"name": "assertion",
"value": "={{ $json.token }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "f836567d-e5a9-457c-89fb-2c42d2123867",
"name": "スイッチ",
"type": "n8n-nodes-base.switch",
"position": [
3040,
416
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "4642d47b-fafc-4487-8799-1f1e0e544ef1",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.response.videos[0].bytesBase64Encoded }}",
"rightValue": ""
}
]
}
}
]
},
"options": {
"fallbackOutput": "extra"
}
},
"typeVersion": 3.2
},
{
"id": "9a64b984-2aa0-48e8-8c1b-dd7fc9ccfb61",
"name": "動画を生成",
"type": "n8n-nodes-base.httpRequest",
"position": [
2368,
416
],
"parameters": {
"url": "=https://{{ $('SET').first().json.API_ENDPOINT }}/v1/projects/{{ $('SET').first().json.PROJECT_ID }}/locations/{{ $('SET').first().json.LOCATION_ID }}/publishers/google/models/veo-3.0-generate-preview:predictLongRunning ",
"method": "POST",
"options": {},
"jsonBody": "={\n \"endpoint\": \"projects/{{ $('SET').first().json.PROJECT_ID }}/locations/{{ $('SET').first().json.LOCATION_ID }}/publishers/google/models/veo-3.0-generate-preview\",\n \"instances\": [\n {\n \"prompt\": {{ JSON.stringify($('Prompt Agent').item.json.output) }}\n }\n ],\n \"parameters\": {\n \"aspectRatio\": \"16:9\",\n \"sampleCount\": 1,\n \"durationSeconds\": \"8\",\n \"personGeneration\": \"allow_all\",\n \"addWatermark\": false,\n \"includeRaiReason\": true,\n \"generateAudio\": true\n }\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $('GET TOKEN').item.json.access_token }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "deefd66e-6603-4e02-b867-d3fafc720fd9",
"name": "ステータスを取得",
"type": "n8n-nodes-base.httpRequest",
"position": [
2816,
336
],
"parameters": {
"url": "=https://{{ $('SET').first().json.API_ENDPOINT }}/v1/projects/{{ $('SET').first().json.PROJECT_ID }}/locations/{{ $('SET').first().json.LOCATION_ID }}/publishers/google/models/veo-3.0-generate-preview:fetchPredictOperation",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "operationName",
"value": "={{ $json.name }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $('GET TOKEN').item.json.access_token }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "4e474315-2704-4c7b-aeb6-65daf8a01ed9",
"name": "待機",
"type": "n8n-nodes-base.wait",
"position": [
2592,
416
],
"webhookId": "59528177-3bd5-4113-a61c-55c42a3bb52d",
"parameters": {
"amount": 20
},
"typeVersion": 1.1
},
{
"id": "10550efe-791e-4da3-9f9f-005ee678fdac",
"name": "ファイルに変換",
"type": "n8n-nodes-base.convertToFile",
"notes": "At this step, the video should be generated and ready to convert to 9:16 aspect ratio",
"position": [
3264,
416
],
"parameters": {
"options": {},
"operation": "toBinary",
"sourceProperty": "response.videos[0].bytesBase64Encoded"
},
"notesInFlow": true,
"typeVersion": 1.1
},
{
"id": "5e677094-e6bc-41e4-a6e1-d76fa293d47e",
"name": "レンダリング中...",
"type": "n8n-nodes-base.wait",
"position": [
3936,
416
],
"webhookId": "25193fe1-b3c9-48f5-ad10-89ad74293042",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "7258109f-ae30-4c4f-866a-b8f09aaab255",
"name": "最終動画をダウンロード",
"type": "n8n-nodes-base.httpRequest",
"position": [
4832,
416
],
"parameters": {
"url": "={{ $('Done?').item.json.response.url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "f8714eae-ab8b-46dd-a819-223c03ecc03b",
"name": "GCSにアップロード (URL経由でアクセス可能にするため)",
"type": "n8n-nodes-base.googleCloudStorage",
"position": [
3488,
416
],
"parameters": {
"resource": "object",
"operation": "create",
"bucketName": "veo_courses",
"createData": {},
"objectName": "ViralReelz",
"createQuery": {},
"requestOptions": {},
"encryptionHeaders": {}
},
"retryOnFail": true,
"typeVersion": 1,
"waitBetweenTries": 2000
},
{
"id": "b5b22d9c-93db-4a82-8db2-59eb6c88bb2f",
"name": "動画を9:16に変換",
"type": "n8n-nodes-base.httpRequest",
"position": [
3712,
416
],
"parameters": {
"url": "https://api.shotstack.io/v1/render",
"method": "POST",
"options": {},
"jsonBody": "={\n\t\"timeline\": {\n\t\t\"tracks\": [\n\t\t\t{\n\t\t\t\t\"clips\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"asset\": {\n\t\t\t\t\t\t\t\"type\": \"video\",\n\t\t\t\t\t\t\t\"src\": \"{{ $json.mediaLink }}\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"start\": 0,\n\t\t\t\t\t\t\"length\": 8,\n\t\t\t\t\t\t\"fit\": \"crop\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t},\n\t\"output\": {\n\t\t\"format\": \"mp4\",\n\t\t\"aspectRatio\": \"9:16\",\n\t\t\"resolution\": \"hd\"\n\t}\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "fd649de0-eaf2-4505-894d-42ae07eb9a52",
"name": "完了?",
"type": "n8n-nodes-base.if",
"position": [
4384,
416
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "fc24d410-040a-4ca6-b70f-7473af617bd9",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.response.status }}",
"rightValue": "done"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "1d4a8e28-74c8-4709-b5d2-b60e6aacbbbb",
"name": "Configure me",
"type": "n8n-nodes-base.set",
"position": [
4608,
416
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "0f5772c0-1f84-45e9-b131-8be1c8dd6d85",
"name": "postiz_api",
"type": "string",
"value": "https://api.postiz.com/public/v1"
},
{
"id": "f3d9536a-3dc9-4673-b774-0434ca64575f",
"name": "share_title",
"type": "string",
"value": "={{ $('Idea Agent').item.json.output.caption }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3396327d-8cbf-4301-91a0-e1de365c0139",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
4560,
192
],
"parameters": {
"color": 3,
"width": 220,
"height": 380,
"content": "# ❗ Config"
},
"typeVersion": 1
},
{
"id": "b41ab464-3fb0-411f-8216-266fdca03b9d",
"name": "完了?1",
"type": "n8n-nodes-base.httpRequest",
"position": [
4160,
336
],
"parameters": {
"url": "=https://api.shotstack.io/v1/render/{{ $('Turn video to 9:16').item.json.response.id }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "264a12c7-e626-4247-a8f4-0df60347574e",
"name": "Postizに動画をアップロード",
"type": "n8n-nodes-base.httpRequest",
"position": [
5056,
416
],
"parameters": {
"url": "=https://api.postiz.com/public/v1/upload",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "file",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "8e937887-b050-462a-8a38-0e7e7cd17e4e",
"name": "Postizの連携を取得",
"type": "n8n-nodes-base.httpRequest",
"position": [
5280,
416
],
"parameters": {
"url": "=https://api.postiz.com/public/v1/integrations",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "013ae745-6a51-45bd-967f-5cc98ecd776f",
"name": "Switch1",
"type": "n8n-nodes-base.switch",
"position": [
5504,
400
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "tiktok",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3ff74ffe-3f82-437d-9218-bce4f7551211",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.identifier }}",
"rightValue": "tiktok"
}
]
},
"renameOutput": true
},
{
"outputKey": "youtube",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2edc7f5f-18cf-45e2-9a10-03c6ee2a062f",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.identifier }}",
"rightValue": "youtube"
}
]
},
"renameOutput": true
},
{
"outputKey": "instagram",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f461c331-7506-486b-ab4a-de03823f82f9",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.identifier }}",
"rightValue": "instagram"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "99f9050c-7fbc-4ebb-b1fc-26cf1d5fac43",
"name": "Schedule YouTube",
"type": "n8n-nodes-base.httpRequest",
"position": [
5728,
416
],
"parameters": {
"url": "=https://api.postiz.com/public/v1/posts",
"method": "POST",
"options": {},
"jsonBody": "={\n \"type\": \"schedule\",\n \"date\": \"{{ $now.plus(1, 'days').toISO() }}\",\n \"tags\": [],\n \"shortLink\": false,\n \"posts\": [\n {\n \"integration\": {\n \"id\": \"{{ $('Switch1').item.json.id }}\"\n },\n \"value\": [\n {\n \"content\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n \"image\": [\n {\n \"id\": \"{{ $('Upload video to Postiz').item.json.id }}\",\n \"path\": \"{{ $('Upload video to Postiz').item.json.path }}\"\n }\n ]\n }\n ],\n \"settings\": {\n \"title\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n \"type\": \"public\"\n }\n }\n ]\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "2e16d4b6-1fee-4948-bb5f-c5442559b053",
"name": "Schedule TikTok",
"type": "n8n-nodes-base.httpRequest",
"position": [
5728,
224
],
"parameters": {
"url": "=https://api.postiz.com/public/v1/posts",
"method": "POST",
"options": {},
"jsonBody": "={\n \"type\": \"schedule\",\n \"date\": \"{{ $now.plus(1, 'days').toISO() }}\",\n \"tags\": [],\n \"shortLink\": false,\n \"posts\": [\n {\n \"integration\": {\n \"id\": \"{{ $('Switch1').item.json.id }}\"\n },\n \"value\": [\n {\n \"content\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n \"image\": [\n {\n \"id\": \"{{ $('Upload video to Postiz').item.json.id }}\",\n \"path\": \"{{ $('Upload video to Postiz').item.json.path }}\"\n }\n ]\n }\n ],\n \"settings\": {\n \"title\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n \"privacy_level\": \"PUBLIC_TO_EVERYONE\",\n \"duet\": \"false\",\n \"stitch\": \"false\",\n \"comment\": \"true\",\n \"autoAddMusic\": \"no\",\n \"brand_content_toggle\": \"false\",\n \"brand_organic_toggle\": \"false\",\n \"content_posting_method\": \"DIRECT_POST\"\n }\n }\n ]\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "9485041f-7139-4a2f-917f-0d05f0fe41ea",
"name": "Schedule Instagram",
"type": "n8n-nodes-base.httpRequest",
"position": [
5728,
608
],
"parameters": {
"url": "=https://api.postiz.com/public/v1/posts",
"method": "POST",
"options": {},
"jsonBody": "={\n \"type\": \"schedule\",\n \"date\": \"{{ $now.plus(1, 'days').toISO() }}\",\n \"tags\": [],\n \"shortLink\": false,\n \"posts\": [\n {\n \"integration\": {\n \"id\": \"{{ $('Switch1').item.json.id }}\"\n },\n \"value\": [\n {\n \"content\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n \"image\": [\n {\n \"id\": \"{{ $('Upload video to Postiz').item.json.id }}\",\n \"path\": \"{{ $('Upload video to Postiz').item.json.path }}\"\n }\n ]\n }\n ],\n \"settings\": {\n \"title\": \"{{ $('Get Past Objects').first().json.quote.replace(/\"/g, \"\") }}\",\n \"post_type\": \"post\"\n }\n }\n ]\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "301a2fb3-f381-4dc3-b57c-0a7c398f30b8",
"name": "付箋7",
"type": "n8n-nodes-base.stickyNote",
"position": [
5152,
112
],
"parameters": {
"color": 6,
"width": 464,
"height": 496,
"content": "## Checking the available channels"
},
"typeVersion": 1
},
{
"id": "dd760b85-96e1-4b05-abcc-0d86a3d6c2ee",
"name": "付箋8",
"type": "n8n-nodes-base.stickyNote",
"position": [
5616,
112
],
"parameters": {
"color": 3,
"width": 320,
"height": 656,
"content": "## Scheduling the posts"
},
"typeVersion": 1
},
{
"id": "6d0e6ac4-efb4-455c-bed4-4c746a901179",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-544,
-176
],
"parameters": {
"width": 432,
"height": 1376,
"content": "🎥 Veo Machine Reels Factory — Full User Guide\n🧭 Introduction\n\nThe Veo Machine Reels Factory is an automated content creation system built in n8n that turns creative ideas into fully rendered ASMR-style glass fruit reels, ready to post on TikTok, YouTube Shorts, and Instagram Reels.\n\nThis template connects multiple AI and automation services into a single, repeatable pipeline. It eliminates manual steps — from concept brainstorming to posting — allowing creators or marketing teams to produce viral short-form videos hands-free.\n\n⚙️ How It Works (In Short)\n\nThe workflow starts automatically every 8 hours (or manually when triggered).\n\nIt checks a Google Sheet to see which fruits have already been used.\n\nAn AI “Idea Agent” selects a new, unique glass fruit concept.\n\nAnother AI “Prompt Agent” writes a cinematic Google Veo 3 prompt describing the video.\n\nThe system sends that prompt to Google Veo, which generates the actual video file.\n\nThe video is automatically:\n\nConverted to 9:16 vertical format via Shotstack\n\nUploaded to Google Cloud Storage\n\nPosted to TikTok, YouTube, and Instagram through Postiz API\n\n🧱 Requirements\n\nBefore running this workflow, make sure you have the following ready:\n\nCategory\tRequirement\nGoogle Cloud\tProject ID, Service Account Email, and Storage Bucket (e.g., veo_courses)\nVeo Access\tAccess to Google Veo 3.0 API (through Vertex AI or similar endpoint)\nGoogle Sheets\tA sheet with previous fruit ideas (used for avoiding duplicates)\nOpenAI Account\tAPI key configured in n8n credentials\nShotstack Account\tAPI key (for cropping to 9:16)\nPostiz Account\tActive integrations for TikTok, YouTube, and Instagram\nn8n Instance\tVersion supporting LangChain, HTTP, JWT, and Google nodes\n🧩 Workflow Structure Overview\n\nThe workflow can be divided into five main parts:\n\n🕒 Automation & Data Input\n\n🧠 AI Generation (Idea + Prompt Creation)\n\n🎬 Video Generation with Google Veo\n\n📱 Video Conversion & Upload\n\n🚀 Auto-Publishing to Social Media\n\nLet’s go through each part in detail."
},
"typeVersion": 1
},
{
"id": "2d938bce-ddf1-4dee-bbdf-cb95df7b50d3",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
112,
80
],
"parameters": {
"color": 5,
"width": 464,
"height": 256,
"content": "How to Use\n\nMake sure your Google Sheet is linked and accessible with the same Google account connected to n8n.\n\nAdd previously used fruits in column A (one per line).\n\nIf you want to trigger it manually, click “Execute Workflow” in n8n instead of waiting for the schedule.\n\nResult:\nThe system prepares a list of “used” fruits to feed into the AI for idea generation"
},
"typeVersion": 1
},
{
"id": "90804430-3fdd-4d42-a70c-edec8b67234f",
"name": "付箋3",
"type": "n8n-nodes-base.stickyNote",
"position": [
736,
64
],
"parameters": {
"width": 816,
"height": 288,
"content": "🧠 PART 2 — AI Generation (Idea + Prompt Creation)\nPurpose\n\nThis section generates:\n\nA new “glass fruit” idea that hasn’t been used before.\n\nA cinematic Veo-compatible text prompt to generate the ASMR video.\n\nIncludes\n\nIdea Agent (LangChain Node + OpenAI GPT-4.1-mini)\n\nObject & Caption Output Parser\n\nPrompt Agent (LangChain Node + GPT-4.1-mini)\n\nHow it Works\n\nIdea Agent takes your list of used fruits and outputs a new idea like:\n\n{ \"object\": \"Glass Mango\", \"caption\": \"Glass Mango ASMR\" }\n\n\nOutput Parser ensures this format is clean JSON.\n\nPrompt Agent then writes a detailed text-to-video prompt for Google Veo based on that fruit.\n\nHow to Use\n\nNo manual input needed — this runs automatically.\n\nYou can tweak the creative tone or style rules by editing the system message in the Prompt Agent.\n\nIf you want shorter or different themes, adjust the descriptive text in the “Prompt Agent” node.\n\nResult:\nYou get a hyper-realistic, safe, cinematic prompt that’s fully compliant with Veo content policies."
},
"typeVersion": 1
},
{
"id": "c0f58447-7ac7-4d0a-96f6-96a2eed9ea5f",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1888,
64
],
"parameters": {
"width": 736,
"height": 288,
"content": "🎬 PART 3 — Video Generation (Google Veo 3.0)\nPurpose\n\nThis part authenticates with Google Cloud, sends the prompt to Veo, and retrieves the rendered video.\n\nIncludes\n\nSET (Google Cloud credentials)\n\nJWT + GET TOKEN (Authentication)\n\nGenerate Video (POST request to Veo API)\n\nWait → Fetch Status → Switch (Checks generation progress)\n\nHow it Works\n\nThe workflow builds a secure JWT, exchanges it for an OAuth token, and calls the Veo API.\n\nVeo starts generating the ASMR-style video based on the AI prompt.\n\nThe workflow waits, then checks every few seconds until Veo’s API confirms the video is ready.\n\nOnce done, it retrieves the base64-encoded video data.\n\nHow to Use\n\nYou must fill the PROJECT_ID and CLIENT_EMAIL in the SET node with your actual Google Cloud details.\n\nEnsure the Veo API endpoint (aiplatform.googleapis.com) matches your project’s region.\n\nThe “Wait” time can be increased if your videos take longer to generate.\n\nResult:\nA finished .mp4 video is now ready for post-processing."
},
"typeVersion": 1
},
{
"id": "29ab5742-a777-4c85-a035-aa08a3b7abf5",
"name": "付箋5",
"type": "n8n-nodes-base.stickyNote",
"position": [
3104,
64
],
"parameters": {
"width": 928,
"height": 288,
"content": "📱 PART 4 — Video Conversion & Upload\nPurpose\n\nPrepares the video for social media: converting to 9:16 format and uploading it to cloud storage.\n\nIncludes\n\nConvert to File\n\nUpload to Google Cloud Storage\n\nShotstack Conversion (Turn video to 9:16)\n\nRendering + Done Checks\n\nHow it Works\n\nConverts Veo’s output to an actual video file.\n\nUploads it to your Google Cloud Storage bucket (veo_courses).\n\nSends the video to Shotstack, which crops and renders it vertically (9:16).\n\nWaits until Shotstack finishes processing.\n\nHow to Use\n\nMake sure your GCS bucket exists and allows file uploads.\n\nAdd your Shotstack API key in n8n credentials.\n\nOptional: You can adjust video length or resolution inside the Shotstack JSON body.\n\nResult:\nYou now have a finished vertical HD ASMR video stored in the cloud."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "2615cbe8-8824-4f29-8654-103fabc62edb",
"connections": {
"6968fc32-9cde-4810-9e33-bdf0fdb82684": {
"main": [
[
{
"node": "20094117-b83a-49c3-b3a9-fdd4a74f5fec",
"type": "main",
"index": 0
}
]
]
},
"10073bf9-c998-47dd-9c34-91d9cc3c1455": {
"main": [
[
{
"node": "6968fc32-9cde-4810-9e33-bdf0fdb82684",
"type": "main",
"index": 0
}
]
]
},
"4e474315-2704-4c7b-aeb6-65daf8a01ed9": {
"main": [
[
{
"node": "deefd66e-6603-4e02-b867-d3fafc720fd9",
"type": "main",
"index": 0
}
]
]
},
"fd649de0-eaf2-4505-894d-42ae07eb9a52": {
"main": [
[
{
"node": "1d4a8e28-74c8-4709-b5d2-b60e6aacbbbb",
"type": "main",
"index": 0
}
],
[
{
"node": "5e677094-e6bc-41e4-a6e1-d76fa293d47e",
"type": "main",
"index": 0
}
]
]
},
"b41ab464-3fb0-411f-8216-266fdca03b9d": {
"main": [
[
{
"node": "fd649de0-eaf2-4505-894d-42ae07eb9a52",
"type": "main",
"index": 0
}
]
]
},
"f836567d-e5a9-457c-89fb-2c42d2123867": {
"main": [
[
{
"node": "10550efe-791e-4da3-9f9f-005ee678fdac",
"type": "main",
"index": 0
}
],
[
{
"node": "4e474315-2704-4c7b-aeb6-65daf8a01ed9",
"type": "main",
"index": 0
}
]
]
},
"013ae745-6a51-45bd-967f-5cc98ecd776f": {
"main": [
[
{
"node": "2e16d4b6-1fee-4948-bb5f-c5442559b053",
"type": "main",
"index": 0
}
],
[
{
"node": "99f9050c-7fbc-4ebb-b1fc-26cf1d5fac43",
"type": "main",
"index": 0
}
],
[
{
"node": "9485041f-7139-4a2f-917f-0d05f0fe41ea",
"type": "main",
"index": 0
}
]
]
},
"5778efac-9d2f-4647-baab-c58859139eca": {
"main": [
[
{
"node": "ac1edde2-1fd2-4934-a07d-330446fb95ba",
"type": "main",
"index": 0
}
]
]
},
"20094117-b83a-49c3-b3a9-fdd4a74f5fec": {
"main": [
[
{
"node": "9a64b984-2aa0-48e8-8c1b-dd7fc9ccfb61",
"type": "main",
"index": 0
}
]
]
},
"f7f6370e-f9bd-48d3-a5db-e695fd9c2048": {
"main": [
[
{
"node": "e7530bf8-e164-4357-b37e-c1a6c7cd2bf8",
"type": "main",
"index": 0
}
]
]
},
"1d4a8e28-74c8-4709-b5d2-b60e6aacbbbb": {
"main": [
[
{
"node": "7258109f-ae30-4c4f-866a-b8f09aaab255",
"type": "main",
"index": 0
}
]
]
},
"deefd66e-6603-4e02-b867-d3fafc720fd9": {
"main": [
[
{
"node": "f836567d-e5a9-457c-89fb-2c42d2123867",
"type": "main",
"index": 0
}
]
]
},
"e7530bf8-e164-4357-b37e-c1a6c7cd2bf8": {
"main": [
[
{
"node": "10073bf9-c998-47dd-9c34-91d9cc3c1455",
"type": "main",
"index": 0
}
]
]
},
"5e677094-e6bc-41e4-a6e1-d76fa293d47e": {
"main": [
[
{
"node": "b41ab464-3fb0-411f-8216-266fdca03b9d",
"type": "main",
"index": 0
}
]
]
},
"9a64b984-2aa0-48e8-8c1b-dd7fc9ccfb61": {
"main": [
[
{
"node": "4e474315-2704-4c7b-aeb6-65daf8a01ed9",
"type": "main",
"index": 0
}
]
]
},
"10550efe-791e-4da3-9f9f-005ee678fdac": {
"main": [
[
{
"node": "f8714eae-ab8b-46dd-a819-223c03ecc03b",
"type": "main",
"index": 0
}
]
]
},
"ac1edde2-1fd2-4934-a07d-330446fb95ba": {
"main": [
[
{
"node": "f7f6370e-f9bd-48d3-a5db-e695fd9c2048",
"type": "main",
"index": 0
}
]
]
},
"45400d45-c09e-432e-9ad9-819fa5db5b56": {
"main": [
[
{
"node": "5778efac-9d2f-4647-baab-c58859139eca",
"type": "main",
"index": 0
}
]
]
},
"8bc3c143-c420-405b-994a-cdfcb7e23193": {
"ai_outputParser": [
[
{
"node": "f7f6370e-f9bd-48d3-a5db-e695fd9c2048",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"7fbb0979-6e84-433f-9a19-279b9f4e6f3b": {
"ai_languageModel": [
[
{
"node": "f7f6370e-f9bd-48d3-a5db-e695fd9c2048",
"type": "ai_languageModel",
"index": 0
},
{
"node": "e7530bf8-e164-4357-b37e-c1a6c7cd2bf8",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"b5b22d9c-93db-4a82-8db2-59eb6c88bb2f": {
"main": [
[
{
"node": "5e677094-e6bc-41e4-a6e1-d76fa293d47e",
"type": "main",
"index": 0
}
]
]
},
"7258109f-ae30-4c4f-866a-b8f09aaab255": {
"main": [
[
{
"node": "264a12c7-e626-4247-a8f4-0df60347574e",
"type": "main",
"index": 0
}
]
]
},
"264a12c7-e626-4247-a8f4-0df60347574e": {
"main": [
[
{
"node": "8e937887-b050-462a-8a38-0e7e7cd17e4e",
"type": "main",
"index": 0
}
]
]
},
"8e937887-b050-462a-8a38-0e7e7cd17e4e": {
"main": [
[
{
"node": "013ae745-6a51-45bd-967f-5cc98ecd776f",
"type": "main",
"index": 0
}
]
]
},
"7f96f17f-c901-42b5-9a70-ad18a6056f1f": {
"main": [
[
{
"node": "45400d45-c09e-432e-9ad9-819fa5db5b56",
"type": "main",
"index": 0
}
]
]
},
"f8714eae-ab8b-46dd-a819-223c03ecc03b": {
"main": [
[
{
"node": "b5b22d9c-93db-4a82-8db2-59eb6c88bb2f",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - コンテンツ作成, マルチモーダルAI
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
WordPressブログの自動化プロフェッショナル版(先端研究)v2.1マーケットプラグイン
GPT-4o、Perplexity AI、そして多言語対応を使ったSEO最適化ブログ作成の自動化
If
Set
Xml
+
If
Set
Xml
125 ノードDaniel Ng
コンテンツ作成
LinkedInおよびXウイルスのなコンテンツ自動エンジン
AIを使ってLinkedInとXにウイルスのなコンテンツを自動生成して公開する
If
Set
Wait
+
If
Set
Wait
156 ノードDiptamoy Barman
コンテンツ作成
Gemini_NanoBanana_テンプレート
Google SheetsからFal.aiのモデル(nano-banana、WAN2.2、Veo3)でUGC広告生成
If
Set
Code
+
If
Set
Code
36 ノードJaruphat J.
コンテンツ作成
OpenAI、ElevenLabs、Fal.ai を使用した動画・パ odcast・ASM R向けのウイルス性コンテンツ自動作成
OpenAI、ElevenLabs、そして Fal.ai を使って動画、ポッドキャスト、ASMR に向けたウイルスのコンテンツ作成を自動化
Set
Code
Wait
+
Set
Code
Wait
97 ノードAdam Crafts
コンテンツ作成
FalAI_SeeDanceV1.0_英語テンプレート
GPT-4o、Fal.AI Seedance、音声でテキストプロンプトから映画級ビデオを生成
If
Code
Wait
+
If
Code
Wait
38 ノードJaruphat J.
コンテンツ作成
市場
FalAIとソーシャルメディア統合を使用したASMR動画制作と配布の自動化
Set
Wait
Aggregate
+
Set
Wait
Aggregate
31 ノードHarrison P
コンテンツ作成