AutomationFlowsSlack & Telegram › Generate AI Videos from Text or Images with Sora 2

Generate AI Videos from Text or Images with Sora 2

Original n8n title: Generate Videos From Text or Images with Sora 2 AI - No Watermark

ByBilel Aroua @bilsimaging on n8n.io

Generate cinematic AI videos for social media, marketing campaigns, product demos, or creative projects. The workflow handles both text-to-video and image-to-video generation with automatic status polling until your video is ready.

Event trigger★★★★☆ complexity22 nodesForm TriggerHTTP RequestTelegram
Slack & Telegram Trigger: Event Nodes: 22 Complexity: ★★★★☆ Added:
Generate AI Videos from Text or Images with Sora 2 — n8n workflow card showing Form Trigger, HTTP Request, Telegram integration

This workflow corresponds to n8n.io template #9810 — we link there as the canonical source.

This workflow follows the Form Trigger → HTTP Request 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 →

Download .json
{
  "id": "NckSQlGF2y46Ir9x",
  "name": "Sora 2 Video Generator - No Watermark (Minimal Setup) Added Sticky",
  "tags": [],
  "nodes": [
    {
      "id": "b9d07b90-8a2a-4694-9840-5f2eec29622f",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "notes": "Form trigger: Users submit video requests via web form",
      "position": [
        1760,
        720
      ],
      "parameters": {
        "options": {
          "appendAttribution": false
        },
        "formTitle": "\ud83c\udfac AI Video Generator - Sora 2",
        "formFields": {
          "values": [
            {
              "fieldType": "textarea",
              "fieldLabel": "Video Description (Prompt)",
              "placeholder": "Example: A serene mountain landscape at sunset with clouds moving slowly across the sky, golden hour lighting, cinematic camera movement, 4K quality, professional color grading",
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Aspect Ratio",
              "fieldOptions": {
                "values": [
                  {
                    "option": "landscape"
                  },
                  {
                    "option": "portrait"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Video Quality",
              "fieldOptions": {
                "values": [
                  {
                    "option": "standard"
                  },
                  {
                    "option": "hd"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldType": "file",
              "fieldLabel": "Upload Starting Image (Optional)",
              "multipleFiles": false,
              "acceptFileTypes": ".jpg, .jpeg, .png, .webp"
            }
          ]
        },
        "formDescription": "Create stunning AI-generated videos from text descriptions or animate your images with AI. Powered by OpenAI's Sora 2 - No watermarks, professional quality output. Generate videos in landscape or portrait, standard or HD quality."
      },
      "typeVersion": 2.3
    },
    {
      "id": "934a8f9b-7453-4330-a1b3-767740796e50",
      "name": "Check: Has Image?",
      "type": "n8n-nodes-base.switch",
      "notes": "Routes workflow based on whether user uploaded an image",
      "position": [
        2352,
        720
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "No Image - Text to Video",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "3225407b-e55a-4d2b-b37c-320cb3bfcb8b",
                    "operator": {
                      "type": "object",
                      "operation": "notExists",
                      "singleValue": true
                    },
                    "leftValue": "={{ $binary.Upload_Starting_Image__Optional_ }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Has Image - Upload First",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "0adfd49c-0e9f-4afc-ae0c-98186957bc56",
                    "operator": {
                      "type": "object",
                      "operation": "exists",
                      "singleValue": true
                    },
                    "leftValue": "={{ $binary.Upload_Starting_Image__Optional_ }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "16d896e9-8a31-4a37-93f3-473abffe1cce",
      "name": "Upload to ImgBB",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Uploads user image to ImgBB for hosting (required for Sora API)",
      "position": [
        2592,
        1280
      ],
      "parameters": {
        "url": "https://api.imgbb.com/1/upload",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "sendQuery": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "image",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "Upload_Starting_Image__Optional_"
            }
          ]
        },
        "queryParameters": {
          "parameters": [
            {
              "name": "key",
              "value": "YOUR_ImgBB_API_KEY"
            },
            {
              "name": "expiration",
              "value": "0"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6f28634f-ab74-4672-98b9-1fc1a9fb79a4",
      "name": "Download Video (Text)",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Downloads the generated video from text-to-video path",
      "position": [
        3840,
        240
      ],
      "parameters": {
        "url": "={{ JSON.parse($json.data.resultJson).resultUrls[0] }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "d95cdf5b-169b-4639-8d3e-87d14a80c7b9",
      "name": "Download Video (Image)",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Downloads the generated video from image-to-video path",
      "position": [
        3856,
        1264
      ],
      "parameters": {
        "url": "={{ JSON.parse($json.data.resultJson).resultUrls[0] }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "b9280f6d-b5ad-4abc-8fee-3c9c12914a29",
      "name": "Check Status (Text)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3312,
        256
      ],
      "parameters": {
        "url": "=https://api.kie.ai/api/v1/jobs/recordInfo?taskId={{ $json.data.taskId }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "17299f12-9888-4ca7-9951-0f2de1d44a1f",
      "name": "Wait (Text)",
      "type": "n8n-nodes-base.wait",
      "notes": "Wait 30 seconds for video generation to complete",
      "position": [
        3088,
        256
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "6c24bb65-9d0b-4d3b-824a-77f8f2836ca9",
      "name": "Is Ready? (Text)",
      "type": "n8n-nodes-base.if",
      "notes": "Checks if video generation is complete, loops back to wait if not ready",
      "position": [
        3520,
        256
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0bcf8858-f1a8-45fe-a858-cbbe6c81385d",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.state }}",
              "rightValue": "success"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ea9b3e2e-2d80-4468-bcc2-a823b5242a15",
      "name": "TEXT TO VIDEO",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Sends text prompt to Sora 2 API for video generation",
      "position": [
        2672,
        256
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/jobs/createTask",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"sora-2-text-to-video\",\n  \"input\": {\n    \"prompt\": \"{{ $json['Video Description (Prompt)'] }}\",\n    \"aspect_ratio\": \"{{ $json['Aspect Ratio'] }}\",\n    \"quality\": \"{{ $json['Video Quality'] }}\"\n  }\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4052e25f-b77d-4fd2-badd-10b032fc7688",
      "name": "Check Status (Image)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3376,
        1280
      ],
      "parameters": {
        "url": "=https://api.kie.ai/api/v1/jobs/recordInfo?taskId={{ $json.data.taskId }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b5da9b07-0eb6-469e-9a9b-a40a476ee563",
      "name": "Wait (Image)",
      "type": "n8n-nodes-base.wait",
      "notes": "Wait 30 seconds for image-to-video generation to complete",
      "position": [
        3152,
        1280
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "7967ee62-47b9-48ab-8172-582fad8d55a0",
      "name": "Is Ready? (Image)",
      "type": "n8n-nodes-base.if",
      "notes": "Checks if image-to-video is complete, loops back to wait if not ready",
      "position": [
        3584,
        1280
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0bcf8858-f1a8-45fe-a858-cbbe6c81385d",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.state }}",
              "rightValue": "success"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "6e9e77ad-02cb-486d-9428-b6522731cf78",
      "name": "IMAGE TO VIDEO",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Sends image URL + prompt to Sora 2 API for image-to-video generation",
      "position": [
        2880,
        1280
      ],
      "parameters": {
        "url": "https://api.kie.ai/api/v1/jobs/createTask",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"sora-2-image-to-video\",\n  \"input\": {\n    \"prompt\": \"{{ $('Check: Has Image?').item.json['Video Description (Prompt)'] }}\",\n    \"image_urls\": [\n      \"{{ $json.data.url }}\"\n    ],\n    \"aspect_ratio\": \"{{ $('Check: Has Image?').item.json['Aspect Ratio'] }}\",\n    \"quality\": \"{{ $('Check: Has Image?').item.json['Video Quality'] }}\"\n  }\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "406e2a92-58d7-4672-a320-82637952211e",
      "name": "\ud83d\udcd6 Setup Instructions",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        112
      ],
      "parameters": {
        "color": 4,
        "width": 484,
        "height": 1368,
        "content": "# \ud83c\udfac Sora 2 Video Generator - Setup Instructions\n\n***Generate professional AI videos without watermarks in minutes!***\n\n### \ud83c\udfaf What You Can Do:\n\u2728 **Text-to-Video** - Type a description, get a video\n\u2728 **Image-to-Video** - Upload an image, bring it to life\n\u2728 **No Watermarks** - Clean, professional output\n\u2728 **HD Quality** - Standard or high-definition options\n\n### \ud83d\udcd6 How to Use This Template:\n\n**Step 1:** Read the **Setup Instructions** \n**Step 2:** Configure your API credentials (takes 5 minutes)\n**Step 3:** Fill the form and watch the magic happen!\n\n### \ud83d\udccb Setup Required:\n\n**1\ufe0f\u20e3 Get Kie.AI API Key (Required)**\n   - Sign up at: https://kie.ai\n   - Navigate to Dashboard \u2192 API Keys\n   - Copy your API key\n\n**2\ufe0f\u20e3 Configure n8n Credentials**\n   - Go to: Credentials \u2192 New Credential\n   - Select: HTTP Header Auth\n   - Name: `Kie Ai(Veo and more)`\n   - Header Name: `Authorization`\n   - Header Value: `Bearer YOUR_TOKEN_HERE`\n   - Save the credential\n\n**3\ufe0f\u20e3 ImgBB API Setup (For Image-to-Video)**\n   - Get free key: https://api.imgbb.com/\n   - Open \"Upload to ImgBB\" node\n   - Replace the API key parameter (YOUR_ImgBB_API_KEY)\n   - Note: Free tier has rate limits\n\n**4\ufe0f\u20e3 Telegram Bot (Optional - for notifications)**\n   - Create bot with @BotFather\n   - Get your Chat ID from @get_id_bot\n   - Update chat ID in Telegram nodes (YOUR_CHAT_ID)\n   - Or remove Telegram nodes if not needed\n\n### \ud83d\ude80 Quick Start:\n1. Complete steps 1-3 above\n2. Activate the workflow\n3. Click \"Test URL\" in Form Trigger node\n4. Fill the form and submit\n5. Wait 30-60 seconds for video generation\n\n### \ud83d\udca1 Tips:\n- HD quality takes longer than standard\n- Use detailed prompts for better results\n- Landscape works best for most content\n\n---\n\n**Created by:** bilsimaging.com\n***Need Help or Advanced Setup:** contact@bilsimaging.com"
      },
      "typeVersion": 1
    },
    {
      "id": "73aee6d6-ce0d-4adb-b0a3-9db9696f7b32",
      "name": "\ud83d\udcac Text-to-Video Path",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1872,
        128
      ],
      "parameters": {
        "color": 5,
        "width": 444,
        "height": 600,
        "content": "## \ufffd\ud83d\udcdd TEXT-TO-VIDEO PATH\n\n**This section handles video generation from text descriptions only.**\n\n### \ud83d\udd04 Flow:\n1\ufe0f\u20e3 **TEXT TO VIDEO** node sends your prompt to Sora 2 API\n2\ufe0f\u20e3 **Wait (Text)** pauses for 30 seconds\n3\ufe0f\u20e3 **Check Status (Text)** queries if video is ready\n4\ufe0f\u20e3 **Is Ready? (Text)** checks the response:\n   - \u2705 If ready \u2192 Goes to Download\n   - \u23f3 If not ready \u2192 Loops back to Wait\n5\ufe0f\u20e3 **Download Video (Text)** fetches the final video\n6\ufe0f\u20e3 **Send Text to Video** delivers via Telegram (optional)\n\n### \ud83d\udca1 Key Points:\n- Generation takes 30-120 seconds depending on quality\n- Polling happens automatically every 30 seconds\n- No image upload needed for this path\n- Output is watermark-free MP4 file\n\n### \ud83d\udcdd Example Prompts:\n*\"A majestic eagle soaring over mountains at sunset, cinematic 4K\"*\n*\"Time-lapse of flowers blooming, close-up, vibrant colors\"*"
      },
      "typeVersion": 1
    },
    {
      "id": "7891cc94-231a-48f8-a4c3-ffe4b7e00b05",
      "name": "\ud83c\udfa8 Image-to-Video Path",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1888,
        880
      ],
      "parameters": {
        "color": 6,
        "width": 428,
        "height": 624,
        "content": "## \ud83d\uddbc\ufe0f IMAGE-TO-VIDEO PATH\n\n**This section handles animating uploaded images.**\n\n### \ud83d\udd04 Flow:\n1\ufe0f\u20e3 **Upload to ImgBB** hosts the image and gets a URL\n2\ufe0f\u20e3 **IMAGE TO VIDEO** sends image URL + prompt to Sora 2\n3\ufe0f\u20e3 **Wait (Image)** pauses for 30 seconds\n4\ufe0f\u20e3 **Check Status (Image)** queries if video is ready\n5\ufe0f\u20e3 **Is Ready? (Image)** checks the response:\n   - \u2705 If ready \u2192 Goes to Download\n   - \u23f3 If not ready \u2192 Loops back to Wait\n6\ufe0f\u20e3 **Download Video (Image)** fetches the final video\n7\ufe0f\u20e3 **Send Image to Video** delivers via Telegram (optional)\n\n### \u26a0\ufe0f Important:\n- ImgBB API key must be configured (replace YOUR_ImgBB_API_KEY)\n- Accepts JPG, PNG, WebP formats\n- Image influences the video generation\n- Same watermark-free output\n\n### \ud83d\udca1 Tips:\n- Use high-quality images for best results\n- Describe the motion you want in your prompt\n- Portrait photos work great for this feature"
      },
      "typeVersion": 1
    },
    {
      "id": "0fb99a43-113e-4a41-9e90-9c82e6ea36d6",
      "name": "\ud83d\udea6 Router Logic",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2592,
        480
      ],
      "parameters": {
        "color": 3,
        "width": 380,
        "height": 772,
        "content": "## \ud83d\udd04 WORKFLOW ROUTER\n\n**This Switch node determines which path to take**\n\n### \ud83d\udea6 Decision Logic:\nChecks if user uploaded an image:\n- **NO IMAGE** \u2192 Routes to TEXT TO VIDEO (upper path)\n- **HAS IMAGE** \u2192 Routes to Upload to ImgBB (lower path)\n\nThe workflow automatically detects binary data from the form's file upload field.\n\n### \ud83c\udfaf How It Works:\nThe Switch node checks for the presence of binary data named `Upload_Starting_Image__Optional_`\n\n**If binary exists** = User uploaded a file \u2192 Take lower path\n**If binary doesn't exist** = Text-only request \u2192 Take upper path\n\n\ud83d\udca1 *Think of this as a traffic controller directing your request to the right generation method.*"
      },
      "typeVersion": 1
    },
    {
      "id": "803cd5aa-ec81-4c60-b74f-22517131ce32",
      "name": "\ud83d\udcec Delivery Options",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3840,
        480
      ],
      "parameters": {
        "color": 7,
        "width": 532,
        "height": 768,
        "content": "## \ud83d\udce4 OUTPUT & DELIVERY\n\n**Final step: Get your video**\n\n### \ud83d\udcf1 Telegram Delivery (Optional):\n**Setup:**\n1. Replace `YOUR_CHAT_ID` with your actual Telegram Chat ID\n2. Get it from @get_id_bot on Telegram\n3. Create Telegram credential in n8n\n4. Videos are sent as file attachments\n5. Caption indicates which path was used (text or image)\n\n### \ud83d\udd27 Alternative Delivery Options:\n\n**\ud83d\udce7 Email Delivery**\n**\u2601\ufe0f Cloud Storage**\n**\ud83d\udd17 Webhook Response**\n\n\n**\ud83d\uddd1\ufe0f Don't Need Telegram?**\n- Simply delete both Telegram nodes\n- Connect Download nodes to your preferred output\n\nFor Advanced Setup: contact@bilsimaging.com\n*Customize delivery based on your needs!*"
      },
      "typeVersion": 1
    },
    {
      "id": "e76db2ef-b37c-43d1-9058-58da2ff8bd6f",
      "name": "\u23f1\ufe0f Polling Explained",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3072,
        480
      ],
      "parameters": {
        "color": 4,
        "width": 608,
        "height": 768,
        "content": "## \u2699\ufe0f POLLING MECHANISM\n\n**Why the Wait \u2192 Check \u2192 Loop pattern?**\n\nSora 2 video generation isn't instant:\n- \u23f1\ufe0f Standard quality: 30-60 seconds\n- \ud83c\udfac HD quality: 60-120 seconds\n\n### \ud83d\udd04 How it works:\n\n1\ufe0f\u20e3 **Wait Node** (30 seconds)\n   - Prevents immediate re-checking\n   - Avoids API spam and rate limits\n   - Gives video time to generate\n\n2\ufe0f\u20e3 **Check Status Node**\n   - Calls Kie.AI API\n   - Fetches current job status\n   - Returns state information\n\n3\ufe0f\u20e3 **Is Ready? Node** (If condition)\n   - Examines the `state` field from response\n   - If `state == \"success\"` \u2192 Video is ready!\n   - If `state == anything else` \u2192 Loop back to Wait\n\n### \u2705 Benefits:\n- \u2728 Automatic retry until completion\n- \ud83e\udd16 No manual intervention needed\n- \ud83d\udea6 API-friendly (respects rate limits)\n- \ud83d\udce6 Reliable delivery\n- \u23f0 Handles varying generation times\n\n\n*This polling continues until your video is successfully generated!*"
      },
      "typeVersion": 1
    },
    {
      "id": "8bcd406e-7e7c-441c-b75d-7be38cc4e36c",
      "name": "\ud83d\udca1 Best Practices",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4432,
        144
      ],
      "parameters": {
        "color": 5,
        "width": 636,
        "height": 1296,
        "content": "# \ud83d\udca1 BEST PRACTICES & TIPS\n\n### \ud83d\udcdd Writing Great Prompts:\n\n**Be Specific:**\n\u274c Bad: \"A cat\"\n\u2705 Good: \"A fluffy orange cat playing with yarn, slow motion, warm lighting\"\n\n**Include Details:**\n- Camera movement (pan, zoom, tilt)\n- Lighting (golden hour, studio, natural)\n- Style (cinematic, documentary, artistic)\n- Technical specs (4K, professional grading)\n\n**Example Prompts:**\n\ud83c\udfac *\"Aerial drone shot of ocean waves crashing on beach at sunset, cinematic 4K\"*\n\ud83c\udfa8 *\"Time-lapse of paint mixing on canvas, vibrant colors, macro close-up\"*\n\ud83c\udf1f *\"Northern lights dancing over snowy mountains, long exposure, wide shot\"*\n\n### \ud83c\udfaf Quality Optimization:\n\n**Standard Quality:**\n- \u26a1 Faster generation (30-60s)\n- \ud83d\udcb0 Lower cost\n- \u2705 Good for testing prompts\n- \u2705 Perfect for social media\n\n**HD Quality:**\n- \ud83c\udfac Better output (60-120s)\n- \ud83d\udc8e Higher cost\n- \u2705 Professional use\n- \u2705 Best for final deliverables\n\n### \ud83d\uddbc\ufe0f Image-to-Video Tips:\n\n**Best Images:**\n- High resolution (min 1080p)\n- Clear subject focus\n- Good lighting\n- Interesting composition\n\n**Describe Motion:**\n- \"Camera slowly zooms in\"\n- \"Subject turns to face camera\"\n- \"Wind gently moving hair\"\n- \"Background slightly blurred\"\n\n# \u26a1 Advanced Prompt for Sora 2 :\n\n**Transforms briefs into ad scripts for TikTok/Reels/Shorts:**\n- Check our Unique ChatGPT \nhttps://chatgpt.com/g/g-68ee8b5b87f8819191126b5543bd9bd1-prompt-generator-ugc"
      },
      "typeVersion": 1
    },
    {
      "id": "2d5af1c1-d784-4a06-97a8-34548f365164",
      "name": "Send  Text to Video",
      "type": "n8n-nodes-base.telegram",
      "position": [
        4176,
        240
      ],
      "parameters": {
        "chatId": "=YOUR_CHAT_ID",
        "operation": "sendVideo",
        "binaryData": true,
        "additionalFields": {
          "caption": "Here's your text to video ",
          "parse_mode": "MarkdownV2"
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "52608b31-843b-441b-9402-c5e45b4e8c07",
      "name": "Send Image to Video",
      "type": "n8n-nodes-base.telegram",
      "position": [
        4192,
        1264
      ],
      "parameters": {
        "chatId": "=YOUR_CHAT_ID",
        "operation": "sendVideo",
        "binaryData": true,
        "additionalFields": {
          "caption": "Here's your image to video ",
          "parse_mode": "MarkdownV2"
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7d1288b3-8f27-441e-aa2e-804bfff60ff0",
  "connections": {
    "Wait (Text)": {
      "main": [
        [
          {
            "node": "Check Status (Text)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait (Image)": {
      "main": [
        [
          {
            "node": "Check Status (Image)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "TEXT TO VIDEO": {
      "main": [
        [
          {
            "node": "Wait (Text)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IMAGE TO VIDEO": {
      "main": [
        [
          {
            "node": "Wait (Image)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to ImgBB": {
      "main": [
        [
          {
            "node": "IMAGE TO VIDEO",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Ready? (Text)": {
      "main": [
        [
          {
            "node": "Download Video (Text)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait (Text)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check: Has Image?": {
      "main": [
        [
          {
            "node": "TEXT TO VIDEO",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Upload to ImgBB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Ready? (Image)": {
      "main": [
        [
          {
            "node": "Download Video (Image)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait (Image)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Check: Has Image?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Status (Text)": {
      "main": [
        [
          {
            "node": "Is Ready? (Text)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Status (Image)": {
      "main": [
        [
          {
            "node": "Is Ready? (Image)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Video (Text)": {
      "main": [
        [
          {
            "node": "Send  Text to Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Video (Image)": {
      "main": [
        [
          {
            "node": "Send Image to Video",
            "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.

Pro

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

About this workflow

Generate cinematic AI videos for social media, marketing campaigns, product demos, or creative projects. The workflow handles both text-to-video and image-to-video generation with automatic status polling until your video is ready.

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

More Slack & Telegram workflows → · Browse all categories →

Related workflows

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

Slack & Telegram

Automatically transform any website URL into a complete portfolio entry with professional screenshots and AI-generated Upwork project descriptions. Freelancers building their Upwork/portfolio from pas

HTTP Request, Google Drive, Google Sheets +2
Slack & Telegram

This n8n workflow enables a Virtual Try-On experience where users upload a dress image and the system: Combines it with a fashion model image Generates a realistic try-on image* Generates a fashion wa

Form Trigger, Telegram, Discord +3
Slack & Telegram

Who’s it for? 👥

Form Trigger, Google Drive, HTTP Request +1
Slack & Telegram

An automated n8n workflow that scrapes financial data from Yahoo Finance using Bright Data, processes market cap information, generates visual charts, and sends comprehensive financial insights direct

Form Trigger, HTTP Request, Google Sheets +1
Slack & Telegram

Telegram Hunter. Uses formTrigger, stickyNote, noOp, httpRequest. Event-driven trigger; 12 nodes.

Form Trigger, HTTP Request, Hunter +1