This workflow corresponds to n8n.io template #6966 — we link there as the canonical source.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "AHslOhQALJsZewoq",
"name": "16. Generate Videos from Images with Wan 2.2 I2V A14B AI Model",
"tags": [],
"nodes": [
{
"id": "62169d10-c3c2-49b8-9050-d793e2c48958",
"name": "On clicking 'execute'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
64,
144
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b42446f1-00b5-4abb-9639-0e97af8ce83e",
"name": "Set API Key",
"type": "n8n-nodes-base.set",
"position": [
288,
144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "64cd57c7-2224-48a6-88df-c37b310f8eb3",
"name": "replicate_api_key",
"type": "string",
"value": "YOUR_REPLICATE_API_KEY"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "7b5d2158-7631-47aa-975c-a6c8ea5b8543",
"name": "Create Prediction",
"type": "n8n-nodes-base.httpRequest",
"position": [
512,
144
],
"parameters": {
"url": "https://api.replicate.com/v1/predictions",
"method": "POST",
"options": {
"timeout": 60000
},
"jsonBody": "{\n \"version\": \"9c49fe41d6b2a0e62199dc96bee4a9dd3565a4c563f9b80998358f14322c34f6\",\n \"input\": {\n \"prompt\": \"prompt value\",\n \"image\": \"https://example.com/input.video\",\n \"seed\": 1,\n \"num_frames\": 81,\n \"sample_shift\": 5,\n \"sample_steps\": 30,\n \"frames_per_second\": 16\n }\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "={{ 'Bearer ' + $('Set API Key').item.json.replicate_api_key }}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "9c376789-4f39-4ee8-bc78-49c42a5aa5f5",
"name": "Extract Prediction ID",
"type": "n8n-nodes-base.code",
"position": [
720,
144
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Extract prediction ID and initial status\\nconst prediction = $input.item.json;\\nconst predictionId = prediction.id;\\nconst initialStatus = prediction.status;\\n\\n// Store the prediction ID for polling\\nreturn {\\n predictionId: predictionId,\\n status: initialStatus,\\n predictionUrl: `https://api.replicate.com/v1/predictions/${predictionId}`\\n};"
},
"typeVersion": 2
},
{
"id": "71fb8671-0d70-47e3-a45f-8cb62bb80ccf",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
944,
144
],
"parameters": {
"unit": "seconds",
"amount": 2
},
"typeVersion": 1
},
{
"id": "8b1ed7ea-db50-4c92-8019-aa43d17e3262",
"name": "Check Prediction Status",
"type": "n8n-nodes-base.httpRequest",
"position": [
1168,
144
],
"parameters": {
"url": "={{ $json.predictionUrl }}",
"options": {},
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "={{ 'Bearer ' + $('Set API Key').item.json.replicate_api_key }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "86833c6c-0a12-4f48-9f57-298b653c67ba",
"name": "Check If Complete",
"type": "n8n-nodes-base.if",
"position": [
1392,
144
],
"parameters": {
"conditions": {
"boolean": [
{
"value1": "={{ $json.status }}",
"value2": "succeeded"
}
]
}
},
"typeVersion": 1
},
{
"id": "72d21cdf-e106-4f85-9409-3389f9a9cd67",
"name": "Process Result",
"type": "n8n-nodes-base.code",
"position": [
1664,
48
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Process the completed prediction\\nconst result = $input.item.json;\\n\\nreturn {\\n status: result.status,\\n output: result.output,\\n metrics: result.metrics,\\n created_at: result.created_at,\\n completed_at: result.completed_at,\\n model: 'wan-video/wan-2.2-i2v-a14b',\\n video_url: result.output\\n};"
},
"typeVersion": 2
},
{
"id": "0163e0e0-c791-4b69-9a38-83f918376276",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
-352
],
"parameters": {
"color": 6,
"width": 438,
"height": 703,
"content": "## \ud83d\udfe2 Section 1: Start & Authentication\n\n\ud83d\udd17 **Nodes:**\n1\ufe0f\u20e3 **On clicking 'execute' (Manual Trigger)**\n\u25b6\ufe0f Starts the workflow manually when you click *Execute Workflow*.\n\n2\ufe0f\u20e3 **Set API Key**\n\ud83d\udd11 Stores your **Replicate API Key** securely inside n8n.\n\n* Value: `YOUR_REPLICATE_API_KEY`\n\n\ud83d\udca1 **Beginner Benefit**:\n\u2705 No need to hardcode API keys in every request\n\u2705 Easy to swap keys for different accounts\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "286e3fa1-79c9-48e8-a533-e6ae80ae9949",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1984,
-736
],
"parameters": {
"color": 4,
"width": 1300,
"height": 320,
"content": "=======================================\n WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n - YouTube: https://www.youtube.com/@YaronBeen/videos\n - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
},
"typeVersion": 1
},
{
"id": "ca94e4d9-06d8-497c-949c-ec6a000621a7",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1984,
-400
],
"parameters": {
"color": 4,
"width": 1289,
"height": 2654,
"content": "# Generate Videos from Images with Wan 2.2 I2V A14B AI Model\n\n### \ud83c\udf0d Overview\n\nThis workflow connects **n8n** with **Replicate\u2019s Wan-Video model** to generate **video content from an image + prompt**.\nIt handles:\n\n* \ud83d\udd11 API authentication\n* \ud83d\udce4 Sending a generation request\n* \u23f3 Polling until completion\n* \ud83d\udce5 Returning a downloadable video link\n\n---\n\n## \ud83d\udfe2 Section 1: Start & Authentication\n\n\ud83d\udd17 **Nodes:**\n1\ufe0f\u20e3 **On clicking 'execute' (Manual Trigger)**\n\u25b6\ufe0f Starts the workflow manually when you click *Execute Workflow*.\n\n2\ufe0f\u20e3 **Set API Key**\n\ud83d\udd11 Stores your **Replicate API Key** securely inside n8n.\n\n* Value: `YOUR_REPLICATE_API_KEY`\n\n\ud83d\udca1 **Beginner Benefit**:\n\u2705 No need to hardcode API keys in every request\n\u2705 Easy to swap keys for different accounts\n\n---\n\n## \ud83d\udd35 Section 2: Send Video Generation Request\n\n\ud83d\udd17 **Nodes:**\n3\ufe0f\u20e3 **Create Prediction (HTTP Request)**\n\ud83d\udce4 Sends a request to Replicate API \u2192 `/v1/predictions`\n\n* Model: `wan-video/wan-2.2-i2v-a14b`\n* Input Parameters:\n\n * \ud83d\udcdd `prompt` \u2192 your text description\n * \ud83d\uddbc\ufe0f `image` \u2192 input video/image URL\n * \ud83c\udfb2 `seed` \u2192 reproducibility\n * \ud83c\udf9e\ufe0f `num_frames` \u2192 81 frames\n * \u23e9 `sample_shift` \u2192 5\n * \u2699\ufe0f `sample_steps` \u2192 30\n * \ud83c\udfac `frames_per_second` \u2192 16\n\n4\ufe0f\u20e3 **Extract Prediction ID (Code)**\n\ud83c\udd94 Pulls out the **prediction ID + status** from Replicate\u2019s response.\nThis ID is needed for polling until the video finishes generating.\n\n\ud83d\udca1 **Beginner Benefit**:\n\u2705 Automates the API call to generate video\n\u2705 Extracts ID \u2192 avoids manual copy-paste\n\n---\n\n## \ud83d\udfe3 Section 3: Polling & Status Check\n\n\ud83d\udd17 **Nodes:**\n5\ufe0f\u20e3 **Wait (2 sec)**\n\u23f3 Adds a short delay before checking progress.\n\n* Prevents API spam\n\n6\ufe0f\u20e3 **Check Prediction Status (HTTP Request)**\n\ud83d\udd04 Calls Replicate API \u2192 `/v1/predictions/{id}`\n\n* Checks whether the video is still processing or finished\n\n7\ufe0f\u20e3 **Check If Complete (IF Node)**\n\u2753 Compares status \u2192 `succeeded` or not\n\n* \u2705 If complete \u2192 goes to **Process Result**\n* \u274c If not \u2192 loops back to **Wait** and tries again\n\n\ud83d\udca1 **Beginner Benefit**:\n\u2705 Automatic re-checking \u2192 you don\u2019t need to refresh manually\n\u2705 Works until result is ready\n\n---\n\n## \ud83d\udfe1 Section 4: Process Final Result\n\n\ud83d\udd17 **Nodes:**\n8\ufe0f\u20e3 **Process Result (Code)**\n\ud83d\udce5 Once complete, extracts:\n\n* \u2705 Status\n* \ud83c\udf9e\ufe0f Output video URL\n* \ud83d\udcca Generation metrics\n* \u23f1\ufe0f Timestamps (created\\_at, completed\\_at)\n* \ud83e\udde9 Model used\n\nFinal output = direct **video URL** you can download/share \ud83c\udfa5\n\n---\n\n## \ud83d\udcca Final Overview\n\n| Section | What Happens | Why It\u2019s Useful |\n| --------- | ------------------------------ | --------------------------------- |\n| \ud83d\udfe2 Auth | Manual Trigger + API Key | Secure, easy start |\n| \ud83d\udd35 Send | Create Prediction + Extract ID | Kicks off video generation |\n| \ud83d\udfe3 Poll | Wait + Check Status + IF | Auto-checks progress until done |\n| \ud83d\udfe1 Result | Process Result | Gives final video link + metadata |\n\n---\n\n## \ud83d\ude80 Why This Workflow Rocks\n\n* \ud83c\udfa5 **Video from Image + Prompt** \u2192 AI-powered video generation in minutes\n* \ud83d\udd04 **Fully automated** \u2192 from request to final video, no manual checks\n* \ud83d\udd11 **Secure** \u2192 API keys handled safely\n* \u2699\ufe0f **Customizable** \u2192 tweak frames, FPS, prompt, seed\n\n---\n\n\u2728 With this workflow, you\u2019ve got a **personal AI video generator** inside n8n \u2014 all you need to do is provide a prompt + input image/video, and you\u2019ll get a fresh AI video link back.\n\n---"
},
"typeVersion": 1
},
{
"id": "82ce2bd7-4222-4eba-9436-329bccce63c7",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
464,
-608
],
"parameters": {
"color": 3,
"width": 406,
"height": 959,
"content": "## \ud83d\udd35 Section 2: Send Video Generation Request\n\n\ud83d\udd17 **Nodes:**\n3\ufe0f\u20e3 **Create Prediction (HTTP Request)**\n\ud83d\udce4 Sends a request to Replicate API \u2192 `/v1/predictions`\n\n* Model: `wan-video/wan-2.2-i2v-a14b`\n* Input Parameters:\n\n * \ud83d\udcdd `prompt` \u2192 your text description\n * \ud83d\uddbc\ufe0f `image` \u2192 input video/image URL\n * \ud83c\udfb2 `seed` \u2192 reproducibility\n * \ud83c\udf9e\ufe0f `num_frames` \u2192 81 frames\n * \u23e9 `sample_shift` \u2192 5\n * \u2699\ufe0f `sample_steps` \u2192 30\n * \ud83c\udfac `frames_per_second` \u2192 16\n\n4\ufe0f\u20e3 **Extract Prediction ID (Code)**\n\ud83c\udd94 Pulls out the **prediction ID + status** from Replicate\u2019s response.\nThis ID is needed for polling until the video finishes generating.\n\n\ud83d\udca1 **Beginner Benefit**:\n\u2705 Automates the API call to generate video\n\u2705 Extracts ID \u2192 avoids manual copy-paste\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "414a8529-fa76-47ea-aa02-d4946c2608e8",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
912,
-448
],
"parameters": {
"color": 5,
"width": 598,
"height": 799,
"content": "## \ud83d\udfe3 Section 3: Polling & Status Check\n\n\ud83d\udd17 **Nodes:**\n5\ufe0f\u20e3 **Wait (2 sec)**\n\u23f3 Adds a short delay before checking progress.\n\n* Prevents API spam\n\n6\ufe0f\u20e3 **Check Prediction Status (HTTP Request)**\n\ud83d\udd04 Calls Replicate API \u2192 `/v1/predictions/{id}`\n\n* Checks whether the video is still processing or finished\n\n7\ufe0f\u20e3 **Check If Complete (IF Node)**\n\u2753 Compares status \u2192 `succeeded` or not\n\n* \u2705 If complete \u2192 goes to **Process Result**\n* \u274c If not \u2192 loops back to **Wait** and tries again\n\n\ud83d\udca1 **Beginner Benefit**:\n\u2705 Automatic re-checking \u2192 you don\u2019t need to refresh manually\n\u2705 Works until result is ready\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "6f55a04b-2fe4-4f44-8991-39ec6732cbe1",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1552,
-432
],
"parameters": {
"color": 4,
"width": 326,
"height": 783,
"content": "## \ud83d\udfe1 Section 4: Process Final Result\n\n\ud83d\udd17 **Nodes:**\n8\ufe0f\u20e3 **Process Result (Code)**\n\ud83d\udce5 Once complete, extracts:\n\n* \u2705 Status\n* \ud83c\udf9e\ufe0f Output video URL\n* \ud83d\udcca Generation metrics\n* \u23f1\ufe0f Timestamps (created\\_at, completed\\_at)\n* \ud83e\udde9 Model used\n\nFinal output = direct **video URL** you can download/share \ud83c\udfa5\n\n---\n\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "27b7b7be-c483-4664-86bb-06eeef4f5511",
"connections": {
"Wait": {
"main": [
[
{
"node": "Check Prediction Status",
"type": "main",
"index": 0
}
]
]
},
"Set API Key": {
"main": [
[
{
"node": "Create Prediction",
"type": "main",
"index": 0
}
]
]
},
"Check If Complete": {
"main": [
[
{
"node": "Process Result",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Create Prediction": {
"main": [
[
{
"node": "Extract Prediction ID",
"type": "main",
"index": 0
}
]
]
},
"Extract Prediction ID": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"On clicking 'execute'": {
"main": [
[
{
"node": "Set API Key",
"type": "main",
"index": 0
}
]
]
},
"Check Prediction Status": {
"main": [
[
{
"node": "Check If Complete",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow connects n8n with Replicate’s Wan-Video model to generate video content from an image + prompt. It handles: 🔑 API authentication 📤 Sending a generation request ⏳ Polling until completion 📥 Returning a downloadable video link
Source: https://n8n.io/workflows/6966/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow allows you to import any workflow from a file or another n8n instance and map the credentials easily. A multi-form setup guides you through the entire process At the beginning you have t
[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.
[](https://youtu.be/c7yCZhmMjtI)
This automation organizes your n8n workflows files into categorizes (Active, Template, Done, Archived) and uploads them directly to a categorized Google Drive folders. It is designed to help users man
Create Animated Stories using GPT-4o-mini, Midjourney, Kling and Creatomate API. Uses httpRequest. Event-driven trigger; 51 nodes.