This workflow corresponds to n8n.io template #8378 — we link there as the canonical source.
This workflow follows the HTTP Request → OpenAI recipe pattern — see all workflows that pair these two integrations.
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": "XZSeWj4y0SWnp94K",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Generate a talking avatar video and post to TikTok",
"tags": [],
"nodes": [
{
"id": "f0260063-c620-455f-ad89-a288b3deeb24",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-288,
256
],
"parameters": {},
"typeVersion": 1
},
{
"id": "970f94fe-c0f0-46dc-94b5-21b225f031a9",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-976,
272
],
"parameters": {
"width": 560,
"height": 960,
"content": "## Input - Image\n\n\n## Output - Video Result (max 5 sec.)\n## [Donwload the video](https://n3wstorage.b-cdn.net/n3witalia/talking_avatar.mp4)"
},
"typeVersion": 1
},
{
"id": "b4f04df4-a42b-4c17-b4fe-c5e7d3b1964b",
"name": "Wait 60 sec.1",
"type": "n8n-nodes-base.wait",
"position": [
624,
640
],
"parameters": {
"amount": 60
},
"typeVersion": 1.1
},
{
"id": "1e27c532-b751-4e38-8b9d-d9478caa419c",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
352,
576
],
"parameters": {
"width": 180,
"height": 200,
"content": "Set API Key created in Step 2"
},
"typeVersion": 1
},
{
"id": "1f85dad8-9641-4514-abe4-e9e882e91d28",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
848,
976
],
"parameters": {
"width": 180,
"height": 200,
"content": "Set ChannelId Step 3"
},
"typeVersion": 1
},
{
"id": "e9c7afd2-8741-476d-95a0-29045a06175e",
"name": "Wait 60 sec.2",
"type": "n8n-nodes-base.wait",
"position": [
624,
256
],
"parameters": {
"amount": 60
},
"typeVersion": 1.1
},
{
"id": "c64be753-c029-4e74-a6a6-85a5ac7d9d83",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
352,
192
],
"parameters": {
"width": 180,
"height": 200,
"content": "Set API Key created in Step 2"
},
"typeVersion": 1
},
{
"id": "2920c75b-df35-4042-9693-f345bad4e73d",
"name": "Set text input",
"type": "n8n-nodes-base.set",
"position": [
32,
256
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5b4cdec4-d8e0-4adf-9669-c242320bed4a",
"name": "text",
"type": "string",
"value": "=Tomorrow in New York the weather will be clear and partly cloudy with a temperature of 25 degrees"
},
{
"id": "76f947bc-1802-4106-8e4e-54a44364afc5",
"name": "voice",
"type": "string",
"value": "Alice"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f4c56b29-5818-4cbd-8204-859f18c13dfc",
"name": "Get status audio",
"type": "n8n-nodes-base.httpRequest",
"position": [
800,
256
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/elevenlabs/requests/{{ $('Create voice').item.json.request_id }}/status ",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "6da04971-2400-446a-baf1-8e64109b11d2",
"name": "Completed audio?",
"type": "n8n-nodes-base.if",
"position": [
976,
256
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "383d112e-2cc6-4dd4-8985-f09ce0bd1781",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "COMPLETED"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "94141113-277d-49ce-8072-a9a7b56286d8",
"name": "Get Url Audio",
"type": "n8n-nodes-base.httpRequest",
"position": [
-272,
640
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/elevenlabs/requests/{{ $json.request_id }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "f987697a-1436-4a85-9aed-4a1a6ea9882b",
"name": "Set Audio Url",
"type": "n8n-nodes-base.set",
"position": [
-64,
640
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "149fe1da-641e-4949-b695-fd6e3ad673f7",
"name": "audio_url",
"type": "string",
"value": "={{$json.audio.url}}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "193435c0-3b1f-4820-a24d-1645c0d81311",
"name": "Set Video Params",
"type": "n8n-nodes-base.set",
"position": [
176,
640
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "c713d31f-9abd-496a-ac79-e8e2efe60aa0",
"name": "image_url",
"type": "string",
"value": "=https://n3wstorage.b-cdn.net/n3witalia/result2.png"
},
{
"id": "5b4cdec4-d8e0-4adf-9669-c242320bed4a",
"name": "audio_url",
"type": "string",
"value": "={{$json.audio_url}}"
},
{
"id": "66901b83-8687-4e7d-8860-a76e232e6027",
"name": "prompt",
"type": "string",
"value": "=You are a girl who makes weather forecasts and needs to be expressive"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f45bc334-7baa-48f7-be4e-dda094f52c5e",
"name": "Create Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
400,
640
],
"parameters": {
"url": "https://queue.fal.run/fal-ai/infinitalk",
"method": "POST",
"options": {},
"jsonBody": "={\n \"image_url\": \"{{ $json.image_url }}\",\n \"audio_url\": \"{{ $json.audio_url }}\",\n \"prompt\": \"{{ $json.prompt }}\"\n }",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "faf0fb26-d0cc-4c76-9ce9-9dd9fb3c0f78",
"name": "Get status",
"type": "n8n-nodes-base.httpRequest",
"position": [
800,
640
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/infinitalk/requests/{{ $('Create Video').item.json.request_id }}/status ",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "c6c38e72-966e-44de-a65b-b6f5694523a8",
"name": "Completed?",
"type": "n8n-nodes-base.if",
"position": [
976,
640
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "383d112e-2cc6-4dd4-8985-f09ce0bd1781",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "COMPLETED"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "1368b0f4-7d61-4cc3-8b0a-81d13a167fbe",
"name": "Get Url Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
-272,
1024
],
"parameters": {
"url": "=https://queue.fal.run/fal-ai/infinitalk/requests/{{ $json.request_id }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "22c6d754-17d2-4730-b680-81027dfb6ec1",
"name": "Generate title",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
-16,
1024
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Input: {{ $('Set text input').item.json.text }}\n\nPrompt: {{ $('Set Video Params').item.json.prompt }}"
},
{
"role": "system",
"content": "You are a TikTok expert specialized in creating engaging and optimized titles.\n\nYour task is to generate an effective title for a YouTube video based on the user's video description.\n\nGUIDELINES:\n- Maximum 60 characters to avoid truncation\n- Use relevant keywords for SEO\n- Make the title catchy and clickable\n- Avoid excessive or misleading clickbait\n- Consider the target audience of the content\n- Use numbers, questions, or power words when appropriate\n- IMPORTANT: Generate the title in the same language as the input description\n\nOUTPUT FORMAT:\nProvide only the title, without additional explanations.\n\nEXAMPLE:\nInput: \"Tutorial video on how to cook perfect pasta carbonara\"\nOutput: \"PERFECT Carbonara in 10 Minutes - Chef's Secrets\""
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "95db6c0f-1606-4035-b906-4e597844de20",
"name": "Get File Video",
"type": "n8n-nodes-base.httpRequest",
"position": [
352,
1024
],
"parameters": {
"url": "={{ $('Get Url Video').item.json.video.url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "a549c100-6d5a-4098-b270-4230a1f2dab3",
"name": "Upload Video to Postiz",
"type": "n8n-nodes-base.httpRequest",
"position": [
640,
1024
],
"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"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "670d593d-da7a-45ca-b40e-109a2bcbe1f3",
"name": "TikTok",
"type": "n8n-nodes-postiz.postiz",
"position": [
880,
1024
],
"parameters": {
"date": "={{ $now.format('yyyy-LL-dd') }}T{{ $now.format('HH:ii:ss') }}",
"posts": {
"post": [
{
"value": {
"contentItem": [
{
"image": {
"imageItem": [
{
"id": "={{ $json.id }}",
"path": "={{ $json.path }}"
}
]
},
"content": "={{ $('Generate title').item.json.message.content }}"
}
]
},
"integrationId": "XXX"
}
]
},
"shortLink": true
},
"credentials": {
"postizApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "1d42267b-70a4-4b15-ad3f-877a918ceb67",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-976,
-192
],
"parameters": {
"color": 3,
"width": 992,
"height": 224,
"content": "# Generate a talking AI avatar video from one image and post it to TikTok\n\nThis automated workflow generates a **video featuring a talking AI avatar from a single image and automatically publishes it to TikTok** with [Postiz](https://postiz.com/?ref=n3witalia).\n\nThe process involves two main AI services chained together: **Elevenlabs v3** and **Infinitalk**."
},
"typeVersion": 1
},
{
"id": "531b4fa0-ea2b-438c-81b2-c0647cba1393",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-976,
64
],
"parameters": {
"width": 992,
"content": "## SETUP STEPS\n- Set \"Text\" and \"Voice\" name in the node \"Set text input\"\n- Set \"Image url\" and prompt in the node \"Set Video params\"\n- Install Postiz n8n node"
},
"typeVersion": 1
},
{
"id": "3b104696-0805-49a7-8f6b-6657b8e74dfa",
"name": "Create voice",
"type": "n8n-nodes-base.httpRequest",
"position": [
400,
256
],
"parameters": {
"url": "https://queue.fal.run/fal-ai/elevenlabs/tts/eleven-v3",
"method": "POST",
"options": {},
"jsonBody": "={\n \"text\": \"{{ $json.text }}\",\n \"voice\": \"{{ $json.voice }}\"\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "464c3e69-6f5c-445b-9e95-cf7cdde3db78",
"connections": {
"Completed?": {
"main": [
[
{
"node": "Get Url Video",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 60 sec.1",
"type": "main",
"index": 0
}
]
]
},
"Get status": {
"main": [
[
{
"node": "Completed?",
"type": "main",
"index": 0
}
]
]
},
"Create Video": {
"main": [
[
{
"node": "Wait 60 sec.1",
"type": "main",
"index": 0
}
]
]
},
"Create voice": {
"main": [
[
{
"node": "Wait 60 sec.2",
"type": "main",
"index": 0
}
]
]
},
"Get Url Audio": {
"main": [
[
{
"node": "Set Audio Url",
"type": "main",
"index": 0
}
]
]
},
"Get Url Video": {
"main": [
[
{
"node": "Generate title",
"type": "main",
"index": 0
}
]
]
},
"Set Audio Url": {
"main": [
[
{
"node": "Set Video Params",
"type": "main",
"index": 0
}
]
]
},
"Wait 60 sec.1": {
"main": [
[
{
"node": "Get status",
"type": "main",
"index": 0
}
]
]
},
"Wait 60 sec.2": {
"main": [
[
{
"node": "Get status audio",
"type": "main",
"index": 0
}
]
]
},
"Generate title": {
"main": [
[
{
"node": "Get File Video",
"type": "main",
"index": 0
}
]
]
},
"Get File Video": {
"main": [
[
{
"node": "Upload Video to Postiz",
"type": "main",
"index": 0
}
]
]
},
"Set text input": {
"main": [
[
{
"node": "Create voice",
"type": "main",
"index": 0
}
]
]
},
"Completed audio?": {
"main": [
[
{
"node": "Get Url Audio",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 60 sec.2",
"type": "main",
"index": 0
}
]
]
},
"Get status audio": {
"main": [
[
{
"node": "Completed audio?",
"type": "main",
"index": 0
}
]
]
},
"Set Video Params": {
"main": [
[
{
"node": "Create Video",
"type": "main",
"index": 0
}
]
]
},
"Upload Video to Postiz": {
"main": [
[
{
"node": "TikTok",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Set text input",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
httpHeaderAuthopenAiApipostizApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This automated workflow generates a video featuring a talking AI avatar from a single image and automatically publishes it to TikTok with Postiz.
Source: https://n8n.io/workflows/8378/ — 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 contains community nodes that are only compatible with the self-hosted version of n8n.
This automation creates a fully integrated pipeline to generate AI-powered videos, store them, and publish them on TikTok — all automatically. It connects OpenAI Sora 2, and Postiz (for TikTok publish
Ask questions like “How much did I spend on food last month?” and get instant answers from your financial data — directly in Telegram.
The Problem That it Solves
This intelligent email automation workflow helps you maximize engagement through domain-based outreach. It utilizes AI-powered personalization and strategic follow-ups to increase response rates. The