AutomationFlowsWeb Scraping › Generate Animated Human Videos From Images & Audio with Bytedance Omni Human

Generate Animated Human Videos From Images & Audio with Bytedance Omni Human

ByYaron Been @yaron-nofluff on n8n.io

Built with n8n + Replicate

Event trigger★★★★☆ complexity14 nodesHTTP Request
Web Scraping Trigger: Event Nodes: 14 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #6876 — 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 →

Download .json
{
  "id": "5iMZpJzOLpOrtWH1",
  "name": "8. Generate Animated Human Videos from Images & Audio with Bytedance Omni Human",
  "tags": [],
  "nodes": [
    {
      "id": "a27d21be-85f6-4861-b171-02f5813a86ec",
      "name": "On clicking 'execute'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        720,
        320
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5aacea0f-f368-4560-ab02-dbf67bb5279a",
      "name": "Set API Key",
      "type": "n8n-nodes-base.set",
      "position": [
        944,
        320
      ],
      "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": "a76aff79-65d8-4006-9fb0-957cc16e5add",
      "name": "Create Prediction",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1168,
        320
      ],
      "parameters": {
        "url": "https://api.replicate.com/v1/predictions",
        "method": "POST",
        "options": {
          "timeout": 60000
        },
        "jsonBody": "{\n  \"version\": \"7ec44f5140c7338b3496cbf99ee8ea391a4bc18ff5d1677a146dfc936a91f65b\",\n  \"input\": {\n    \"image\": \"https://example.com/input.video\",\n    \"audio\": \"https://example.com/input.video\"\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": "cceb0e47-075b-4496-a1ab-50f7d8b53c6a",
      "name": "Extract Prediction ID",
      "type": "n8n-nodes-base.code",
      "position": [
        1376,
        320
      ],
      "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": "ac9a728c-bb4f-4ea4-b904-cc4e652e73e4",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        1600,
        320
      ],
      "parameters": {
        "unit": "seconds",
        "amount": 2
      },
      "typeVersion": 1
    },
    {
      "id": "cb46c49f-01f7-4e22-87f0-1c2714c0a1a1",
      "name": "Check Prediction Status",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1824,
        320
      ],
      "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": "58563eb1-ebfe-4841-ac43-a463590cc9db",
      "name": "Check If Complete",
      "type": "n8n-nodes-base.if",
      "position": [
        2048,
        320
      ],
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.status }}",
              "value2": "succeeded"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b31379db-429e-4f48-83f0-3e2b3f3fd6f3",
      "name": "Process Result",
      "type": "n8n-nodes-base.code",
      "position": [
        2288,
        224
      ],
      "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: 'bytedance/omni-human',\\n  video_url: result.output\\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "864755cc-f19f-4a35-8097-2ab11790e2e2",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        656,
        16
      ],
      "parameters": {
        "color": 3,
        "width": 438,
        "height": 511,
        "content": "## \u26a1 Section 1: Start & Authenticate\n\n* **\u25b6\ufe0f On clicking \u2018execute\u2019** \u2192 Manual trigger to start the workflow.\n* **\ud83d\udd11 Set API Key** \u2192 Stores your Replicate API key so future requests are authorized.\n\n**Benefit:** Secures your API credentials in one place for easy re-use.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2ff9a17f-1ce7-4932-9dad-db46413afe58",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        -224
      ],
      "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": "751e2e91-cc96-42fc-bfff-db65ffc2184b",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        112
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 1822,
        "content": "# Generate Animated Human Videos from Images & Audio with Bytedance Omni Human\n\nBuilt with **n8n + Replicate**\n\nThis workflow takes an **image** + **audio**, sends them to Bytedance\u2019s **omni-human model**, waits for processing, and returns a generated video.\n\n---\n\n## \u26a1 Section 1: Start & Authenticate\n\n* **\u25b6\ufe0f On clicking \u2018execute\u2019** \u2192 Manual trigger to start the workflow.\n* **\ud83d\udd11 Set API Key** \u2192 Stores your Replicate API key so future requests are authorized.\n\n**Benefit:** Secures your API credentials in one place for easy re-use.\n\n---\n\n## \ud83d\udee0\ufe0f Section 2: Send Video Generation Request\n\n* **\ud83d\udce1 Create Prediction** \u2192 Makes a POST request to Replicate with:\n\n  * `image`: input image URL\n  * `audio`: input audio URL\n  * Model version: `7ec44f5140c7338b3496cbf99ee8ea391a4bc18ff5d1677a146dfc936a91f65b`\n\n**Benefit:** Combines visual and audio inputs to start AI-powered video generation.\n\n---\n\n## \ud83d\udd0d Section 3: Track the Prediction\n\n* **\ud83d\udce6 Extract Prediction ID** \u2192 Saves `predictionId`, `status`, and `predictionUrl` for polling.\n* **\u23f3 Wait** \u2192 Pauses 2 seconds between status checks (to avoid spamming the API).\n* **\ud83d\udd01 Check Prediction Status** \u2192 Queries Replicate using the stored prediction URL.\n* **\u2705 Check If Complete** \u2192 Branches:\n\n  * If status = `succeeded` \u2192 move forward.\n  * Else \u2192 loop back to **Wait** until completion.\n\n**Benefit:** Ensures workflow patiently waits for the video instead of timing out.\n\n---\n\n## \ud83d\udcfd\ufe0f Section 4: Process & Return Results\n\n* **\ud83d\udce6 Process Result** \u2192 Cleans the API response, returning:\n\n  * `status`\n  * `video_url` (generated video)\n  * `metrics`\n  * `created_at` & `completed_at`\n  * `model: bytedance/omni-human`\n\n**Benefit:** Gives you a neat, structured output with the generated video link ready to use.\n\n---\n\n## \ud83d\udcca Workflow Overview\n\n| Section             | Purpose                     | Key Nodes                                     | Benefit                          |\n| ------------------- | --------------------------- | --------------------------------------------- | -------------------------------- |\n| \u26a1 Start & Auth      | Initialize & secure API key | Manual Trigger, Set API Key                   | Keeps credentials safe           |\n| \ud83d\udee0\ufe0f Send Request    | Start video generation      | Create Prediction                             | Submits image+audio to Replicate |\n| \ud83d\udd0d Track Prediction | Poll status until done      | Extract Prediction ID, Wait, Check Status, If | Reliable async handling          |\n| \ud83d\udcfd\ufe0f Process Result  | Format output               | Process Result                                | Easy access to final video link  |\n\n---\n\n## \u2705 Final Benefits\n\n* \ud83c\udfac Turns static **image + audio** into full **AI-generated video**.\n* \ud83d\udd11 API key stored securely in workflow.\n* \ud83d\udd04 Handles async generation with auto-polling.\n* \ud83d\udce4 Outputs clean JSON with direct video link.\n* \ud83e\udde9 Modular \u2014 you can connect results to Slack, Gmail, or Google Drive for auto-sharing.\n\n---"
      },
      "typeVersion": 1
    },
    {
      "id": "db376164-d0e6-49e0-a64b-e97ce592989a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        -224
      ],
      "parameters": {
        "color": 6,
        "width": 246,
        "height": 751,
        "content": "## \ud83d\udee0\ufe0f Section 2: Send Video Generation Request\n\n* **\ud83d\udce1 Create Prediction** \u2192 Makes a POST request to Replicate with:\n\n  * `image`: input image URL\n  * `audio`: input audio URL\n  * Model version: `7ec44f5140c7338b3496cbf99ee8ea391a4bc18ff5d1677a146dfc936a91f65b`\n\n**Benefit:** Combines visual and audio inputs to start AI-powered video generation.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "6e8ca2ba-693d-4a69-ad9e-dbf910b10ea4",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1360,
        -48
      ],
      "parameters": {
        "color": 7,
        "width": 806,
        "height": 575,
        "content": "## \ud83d\udd0d Section 3: Track the Prediction\n\n* **\ud83d\udce6 Extract Prediction ID** \u2192 Saves `predictionId`, `status`, and `predictionUrl` for polling.\n* **\u23f3 Wait** \u2192 Pauses 2 seconds between status checks (to avoid spamming the API).\n* **\ud83d\udd01 Check Prediction Status** \u2192 Queries Replicate using the stored prediction URL.\n* **\u2705 Check If Complete** \u2192 Branches:\n\n  * If status = `succeeded` \u2192 move forward.\n  * Else \u2192 loop back to **Wait** until completion.\n\n**Benefit:** Ensures workflow patiently waits for the video instead of timing out.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ea5059e5-2169-4a57-a95e-f4793a385ddb",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2192,
        -176
      ],
      "parameters": {
        "color": 5,
        "width": 310,
        "height": 703,
        "content": "## \ud83d\udcfd\ufe0f Section 4: Process & Return Results\n\n* **\ud83d\udce6 Process Result** \u2192 Cleans the API response, returning:\n\n  * `status`\n  * `video_url` (generated video)\n  * `metrics`\n  * `created_at` & `completed_at`\n  * `model: bytedance/omni-human`\n\n**Benefit:** Gives you a neat, structured output with the generated video link ready to use.\n\n---\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "17456515-9caa-4ab9-9d9d-ce3db919218d",
  "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
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Built with n8n + Replicate

Source: https://n8n.io/workflows/6876/ — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Web Scraping

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

Execute Command, Read Write File, HTTP Request +3
Web Scraping

[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.

HTTP Request, GitHub, Stop And Error +1
Web Scraping

[](https://youtu.be/c7yCZhmMjtI)

HTTP Request, GitHub, Stop And Error +1
Web Scraping

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

Google Drive, HTTP Request, Time Saved
Web Scraping

Create Animated Stories using GPT-4o-mini, Midjourney, Kling and Creatomate API. Uses httpRequest. Event-driven trigger; 51 nodes.

HTTP Request