開発完了 - Veo3を使って商品広告を生成
これはContent Creation, Multimodal AI分野の自動化ワークフローで、16個のノードを含みます。主にCode, Form, Wait, Airtable, FormTriggerなどのノードを使用。 AI動画広告生成にはGoogle Veo 3、Gemini、Airtableを活用しましょう
- •Airtable API Key
- •ターゲットAPIの認証情報が必要な場合あり
{
"id": "O7BiL9gvzMRGnzco",
"meta": {
"instanceId": "1a54c41d9050a8f1fa6f74ca858828ad9fb97b9fafa3e9760e576171c531a787",
"templateCredsSetupCompleted": true
},
"name": "Development Done - Product Ads via Veo3",
"tags": [
{
"id": "m1paRrANi4GrQXxX",
"name": "AI Internal",
"createdAt": "2025-09-18T04:05:25.667Z",
"updatedAt": "2025-09-18T04:05:25.667Z"
}
],
"nodes": [
{
"id": "dc93f801-d671-49a1-80a1-a19f3c3d4e8d",
"name": "レコードを作成",
"type": "n8n-nodes-base.airtable",
"position": [
-48,
-64
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Base_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID",
"cachedResultName": "Dynamic Video Content"
},
"table": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Table_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID/Your_Airtable_Table_ID",
"cachedResultName": "Product Ads"
},
"columns": {
"value": {
"Status": "Pending",
"Image Prompt": "={{ $json[\"Idea Prompt\"] }}"
},
"schema": [
{
"id": "Id",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image Prompt",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Image Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image",
"type": "array",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Image",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Video",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Pending",
"value": "Pending"
},
{
"name": "Done",
"value": "Done"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "Your_Airtable_Credentials_ID",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2.1
},
{
"id": "2cffa033-d677-4c1a-8bbd-92f10814e14d",
"name": "画像ファイルを変換して保存",
"type": "n8n-nodes-base.code",
"position": [
400,
-64
],
"parameters": {
"jsCode": "// Get the first binary key dynamically\nconst binaryKey = Object.keys($input.item.binary || {})[0];\nif (!binaryKey) {\n throw new Error(\"No binary data found on input item.\");\n}\n\nconst binary = $input.item.binary[binaryKey];\n\n// Convert binary to base64\nconst base64File = binary.data.toString('base64');\n\n// Build JSON payload for Airtable\nreturn [\n {\n json: {\n contentType: binary.mimeType || \"image/jpeg\",\n file: base64File,\n filename: binary.fileName || \"upload.jpg\"\n },\n pairedItem: { item: 0 } // 🔑 keeps mapping to original input\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "22250c9d-136c-43cd-be88-8c3423c1c642",
"name": "画像をアップロード (Airtable)",
"type": "n8n-nodes-base.httpRequest",
"position": [
624,
-64
],
"parameters": {
"url": "=https://content.airtable.com/v0/Your_Airtable_Base_ID/{{ $('Create a record').item.json.id }}/[Your_Column_Name]/uploadAttachment",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "contentType",
"value": "={{$json[\"contentType\"]}}"
},
{
"name": "file",
"value": "={{$json[\"file\"]}}"
},
{
"name": "filename",
"value": "={{$json[\"filename\"]}}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer Your_Airtable_Personal_Access_Token"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "3007c7d8-a294-4146-b610-ba10aa344881",
"name": "レコードを取得",
"type": "n8n-nodes-base.airtable",
"position": [
848,
-64
],
"parameters": {
"id": "={{ $json.id }}",
"base": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Base_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID",
"cachedResultName": "Dynamic Video Content"
},
"table": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Table_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID/Your_Airtable_Table_ID",
"cachedResultName": "Product Ads"
},
"options": {}
},
"credentials": {
"airtableTokenApi": {
"id": "Your_Airtable_Credentials_ID",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2.1
},
{
"id": "04a074e2-dd05-4699-b30f-cf1f004170e5",
"name": "画像を分析",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
1056,
-64
],
"parameters": {
"text": "=You are an expert AI creative analyst. Your purpose is to analyze an input image together with the user’s creative request and produce a structured creative brief. Always treat the user’s request as the guiding vision, and reinterpret the image so that the final video concept fulfills that request. Your output must be only the plain text report as described below. Do not include any conversational filler or explanatory text.\n\nUSER REQUEST\n{{ $json[\"Image Prompt\"] }}\n\nIMAGE ANALYSIS\n\nDescription\nWrite a comprehensive, single-paragraph description of the image as it visually appears. Then explicitly describe how this image can be creatively reimagined or transformed to align with the user’s request.\n\nStyle Analysis\n\nCore Subject: Identify the main focus of the image and explain how it connects to the user’s request.\n\nSetting: Describe the environment/background and how it could be reinterpreted in the requested concept.\n\nMedium: Specify the artistic medium (e.g., product photography, 3D render) and suggest how the medium might shift in the video.\n\nLighting: Describe the current light and suggest adjustments to match the requested mood.\n\nMood: Define both the existing atmosphere of the image and the intended emotional tone per the user’s request.\n\nComposition: Describe the current framing/camera angle and how it might evolve in the video.\n\nColor Palette: List the dominant colors, then suggest enhancements or transformations to match the user’s request.\n\nText Overlay\nList and describe each distinct piece of text found in the image. If there is no text, simply write \"None.\"\n\nFor each text element, provide:\n- Text\n- Font\n- Effect\n- Color\n- Placement\n\nCREATIVE VIDEO BRIEF\n\nTranslate the user request and image analysis into a structured video brief suitable for Veo 3 generation:\n\nVideo Style: Describe the final style/genre of the requested video.\n\nTarget Emotion: Define the main emotional impact the video should deliver.\n\nMotion Guidance: Suggest dynamic camera motions, transitions, or visual effects that bring the user’s request to life.\n\nAudio/Music Direction: Suggest music/sound design that fits both the brand identity in the image and the requested theme.\n\nSuggested Script Elements: Provide a draft outline of possible voiceover or on-screen text. Ensure this ties the image (e.g., Pepsi product) with the user’s creative request (e.g., exploding into a disco party).\n",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.5-flash",
"cachedResultName": "models/gemini-2.5-flash"
},
"options": {},
"resource": "image",
"imageUrls": "={{ $json.Image[0].url }}",
"operation": "analyze"
},
"credentials": {
"googlePalmApi": {
"id": "Your_Gemini_API_Credentials_ID",
"name": "Gemini API Credentials"
}
},
"typeVersion": 1
},
{
"id": "e0533567-2b84-414d-b841-97f40163b08d",
"name": "待機",
"type": "n8n-nodes-base.wait",
"position": [
1744,
-64
],
"webhookId": "b98d5051-5f08-4709-9c31-e914da10b4ad",
"parameters": {
"unit": "minutes",
"amount": 1
},
"typeVersion": 1.1
},
{
"id": "6e0d258e-1e7e-453b-8780-47a959243ff6",
"name": "レコードを更新",
"type": "n8n-nodes-base.airtable",
"position": [
1968,
-64
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Base_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID",
"cachedResultName": "Dynamic Video Content"
},
"table": {
"__rl": true,
"mode": "list",
"value": "Your_Airtable_Table_ID",
"cachedResultUrl": "https://airtable.com/Your_Airtable_Base_ID/Your_Airtable_Table_ID",
"cachedResultName": "Product Ads"
},
"columns": {
"value": {
"Id": "={{ $('Get a record').item.json.Id }}",
"Status": "Done"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "Id",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image Prompt",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Image Prompt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Image",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Pending",
"value": "Pending"
},
{
"name": "Done",
"value": "Done"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Video",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Video",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update"
},
"credentials": {
"airtableTokenApi": {
"id": "Your_Airtable_Personal_Access_Token_ID",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2.1
},
{
"id": "3ad82fa6-e313-46e3-bfe7-c3505f8ff8f7",
"name": "動画を生成 (Veo 3)",
"type": "n8n-nodes-base.httpRequest",
"position": [
1520,
-64
],
"parameters": {
"url": "https://us-central1-aiplatform.googleapis.com/v1/projects/[Project ID]/locations/[Location]/publishers/google/models/veo-3.0-fast-generate-001:predictLongRunning",
"method": "POST",
"options": {},
"jsonBody": "={{ $json.veoRequestBody }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer Your_Google_GCP_Token"
}
]
},
"nodeCredentialType": "googleOAuth2Api"
},
"credentials": {
"googlePalmApi": {
"id": "Your_Gemini_API_Credentials_ID",
"name": "Gemini Key account"
},
"googleOAuth2Api": {
"id": "Your_Google_OAuth2_Credentials_ID",
"name": "Google account"
}
},
"typeVersion": 4.2
},
{
"id": "ee7a1540-5467-4461-b73c-dc4eaeba8812",
"name": "動画を取得",
"type": "n8n-nodes-base.httpRequest",
"position": [
2192,
-64
],
"parameters": {
"url": "https://us-central1-aiplatform.googleapis.com/v1/projects/[Project ID]/locations/[Location]/publishers/google/models/veo-3.0-generate-001:fetchPredictOperation",
"method": "POST",
"options": {
"response": {
"response": {}
}
},
"sendBody": true,
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "operationName",
"value": "={{ $('Generate Video Veo 3').item.json.name }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer Your_Google_GCP_Token"
}
]
},
"nodeCredentialType": "googleOAuth2Api"
},
"credentials": {
"googleOAuth2Api": {
"id": "Your_Google_OAuth2_Credentials_ID",
"name": "Google account"
}
},
"typeVersion": 4.2
},
{
"id": "42d12f7e-34f5-474b-a136-5a6485763bf6",
"name": "動画をダウンロード可能にする",
"type": "n8n-nodes-base.convertToFile",
"position": [
2416,
-64
],
"parameters": {
"options": {},
"operation": "toBinary",
"sourceProperty": "response.videos[0].bytesBase64Encoded"
},
"typeVersion": 1.1
},
{
"id": "097d5ffc-0481-4261-9d68-355ab2ec9266",
"name": "リクエストを解析",
"type": "n8n-nodes-base.code",
"position": [
1296,
-64
],
"parameters": {
"jsCode": "// Get the generated prompt text from the previous node\nconst promptText = $json.content.parts[0].text;\n\n// Build the complete JSON body for the VEO API\nconst requestBody = {\n \"endpoint\": \"projects/personalised-mail/locations/us-central1/publishers/google/models/veo-3.0-generate-001\",\n \"instances\": [\n {\n \"prompt\": promptText\n }\n ],\n \"parameters\": {\n \"aspectRatio\": \"16:9\",\n \"sampleCount\": 1,\n \"durationSeconds\": \"8\",\n \"personGeneration\": \"allow_all\",\n \"addWatermark\": true,\n \"includeRaiReason\": true,\n \"generateAudio\": true,\n \"resolution\": \"720p\"\n }\n};\n\n// Return the final object inside a wrapper\nreturn [\n {\n json: {\n \"veoRequestBody\": requestBody // <-- Wrapped here\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "f3054ab6-92de-415c-9f72-24feacebb207",
"name": "アイデアを入力",
"type": "n8n-nodes-base.formTrigger",
"position": [
-272,
-64
],
"webhookId": "5778677c-d323-4bb4-91df-d2870e3aced9",
"parameters": {
"options": {},
"formTitle": "Upload Your File",
"formFields": {
"values": [
{
"fieldLabel": "Idea Prompt",
"requiredField": true
}
]
},
"formDescription": "Please give the prompt !"
},
"typeVersion": 2.2
},
{
"id": "2b288e59-f675-4519-8c74-9014e8ce6479",
"name": "画像をアップロード",
"type": "n8n-nodes-base.form",
"position": [
176,
-64
],
"webhookId": "65fd2f3a-d87c-412e-9f57-15f0720aca1f",
"parameters": {
"options": {},
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "Image"
}
]
}
},
"typeVersion": 1
},
{
"id": "89df8bc5-c051-4c14-9ea3-7f214bdbf1d9",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
-336
],
"parameters": {
"color": 5,
"width": 528,
"height": 192,
"content": "## Airtable Configuration\n* **Airtable Credentials**: In the \"Create a record\", \"Get a record\", and \"Update record\" nodes, you must select your own Airtable credentials.\n* **Base and Table IDs**: Update the Base ID and Table ID in all four Airtable-related nodes to match your own setup: \"Create a record\", \"Uploading Image in Airtable\" (in the URL), \"Get a record\", and \"Update record\"."
},
"typeVersion": 1
},
{
"id": "b4c1f237-6548-44d5-b232-247ac05ee4a8",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1728,
-368
],
"parameters": {
"color": 4,
"width": 544,
"height": 240,
"content": "## Google AI Configuration\n* **Gemini Node** (\"Analyze image\"): Select your Google AI (Gemini) API credentials.\n**Veo Nodes (\"Parse Request\" & HTTP Requests):** \n* **Project ID**: In the URLs, replace with your Google Cloud Project ID.\n* **Credentials**: In both HTTP request nodes (\"Generate Video Veo 3\" & \"Get the Video\"), select your Google OAuth2 credentials.\n* **API Info**: For help with endpoints, see the [Google Cloud Vertex AI Studio](https://www.google.com/search?q=https://console.cloud.google.com/vertex-ai/studio/media/generate)"
},
"typeVersion": 1
},
{
"id": "e0741edb-ab0f-445e-a415-aff8e58057f3",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1216,
-352
],
"parameters": {
"color": 6,
"width": 304,
"height": 192,
"content": "## Customization\n**Video Generation Parameters**: In the \"Parse Request\" node, you can modify the JavaScript code to change video settings like *aspectRatio*, *durationSeconds*, and *resolution*."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "88471e4e-1558-4a15-9060-712afdb19c0d",
"connections": {
"e0533567-2b84-414d-b841-97f40163b08d": {
"main": [
[
{
"node": "6e0d258e-1e7e-453b-8780-47a959243ff6",
"type": "main",
"index": 0
}
]
]
},
"3007c7d8-a294-4146-b610-ba10aa344881": {
"main": [
[
{
"node": "04a074e2-dd05-4699-b30f-cf1f004170e5",
"type": "main",
"index": 0
}
]
]
},
"2b288e59-f675-4519-8c74-9014e8ce6479": {
"main": [
[
{
"node": "2cffa033-d677-4c1a-8bbd-92f10814e14d",
"type": "main",
"index": 0
}
]
]
},
"04a074e2-dd05-4699-b30f-cf1f004170e5": {
"main": [
[
{
"node": "097d5ffc-0481-4261-9d68-355ab2ec9266",
"type": "main",
"index": 0
}
]
]
},
"ee7a1540-5467-4461-b73c-dc4eaeba8812": {
"main": [
[
{
"node": "42d12f7e-34f5-474b-a136-5a6485763bf6",
"type": "main",
"index": 0
}
]
]
},
"097d5ffc-0481-4261-9d68-355ab2ec9266": {
"main": [
[
{
"node": "3ad82fa6-e313-46e3-bfe7-c3505f8ff8f7",
"type": "main",
"index": 0
}
]
]
},
"6e0d258e-1e7e-453b-8780-47a959243ff6": {
"main": [
[
{
"node": "ee7a1540-5467-4461-b73c-dc4eaeba8812",
"type": "main",
"index": 0
}
]
]
},
"dc93f801-d671-49a1-80a1-a19f3c3d4e8d": {
"main": [
[
{
"node": "2b288e59-f675-4519-8c74-9014e8ce6479",
"type": "main",
"index": 0
}
]
]
},
"f3054ab6-92de-415c-9f72-24feacebb207": {
"main": [
[
{
"node": "dc93f801-d671-49a1-80a1-a19f3c3d4e8d",
"type": "main",
"index": 0
}
]
]
},
"42d12f7e-34f5-474b-a136-5a6485763bf6": {
"main": [
[]
]
},
"3ad82fa6-e313-46e3-bfe7-c3505f8ff8f7": {
"main": [
[
{
"node": "e0533567-2b84-414d-b841-97f40163b08d",
"type": "main",
"index": 0
}
]
]
},
"22250c9d-136c-43cd-be88-8c3423c1c642": {
"main": [
[
{
"node": "3007c7d8-a294-4146-b610-ba10aa344881",
"type": "main",
"index": 0
}
]
]
},
"2cffa033-d677-4c1a-8bbd-92f10814e14d": {
"main": [
[
{
"node": "22250c9d-136c-43cd-be88-8c3423c1c642",
"type": "main",
"index": 0
}
]
]
}
}
}このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - コンテンツ作成, マルチモーダルAI
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
Intuz
@intuzWorkflow automation can help automate your routine activities and help saves $$$, as well as hours of time. As a boutique tech consulting company, Intuz help businesses with custom AI/ML, AI Workflow Automations, and software development. Automate your business workflow for: Sales Marketing Accounting Finance Operations E-Commerce Customer Support Admin & Backoffice Logistics & Supply Chain
このワークフローを共有