{
  "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
          }
        ]
      ]
    }
  }
}