AutomationFlowsWeb Scraping › Viral Cat Video Creator

Viral Cat Video Creator

viral-cat-video-creator. Uses formTrigger, chainLlm, lmChatMistralCloud, outputParserStructured. Event-driven trigger; 22 nodes.

Event trigger★★★★☆ complexityAI-powered22 nodesForm TriggerChain LlmLm Chat Mistral CloudOutput Parser StructuredHTTP RequestGoogle Drive@Apify/N8N Nodes Apify
Web Scraping Trigger: Event Nodes: 22 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Chainllm → Form Trigger 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
{
  "name": "viral-cat-video-creator",
  "nodes": [
    {
      "parameters": {
        "formTitle": "\u0130nput Form",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Karekter Tiplemesi",
              "requiredField": true
            },
            {
              "fieldLabel": "Hikaye"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.3,
      "position": [
        1664,
        1344
      ],
      "id": "0de5a9ab-15b2-4f0f-ac13-3c3f81b4ddfa",
      "name": "On form submission"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Sen \u00fcst seviye bir prompt engineer, animasyon film senaristi ve yarat\u0131c\u0131 y\u00f6netmensin.\n\nG\u00f6revin:\n\nSana verilen k\u0131sa karakter tan\u0131m\u0131n\u0131 sinematik, ilgi \u00e7ekici ve g\u00f6rsel a\u00e7\u0131dan zengin bir karakter betimlemesine d\u00f6n\u00fc\u015ft\u00fcrmek\nSana verilen k\u0131sa hikayeyi 8 par\u00e7al\u0131k, \u00e7izgi film tad\u0131nda, ak\u0131ll\u0131ca kurgulanm\u0131\u015f bir intikam hikayesine d\u00f6n\u00fc\u015ft\u00fcrmek\nGENEL KURALLAR:\nGer\u00e7ek\u00e7ilikten \u00e7ok yarat\u0131c\u0131l\u0131k ve ilgi \u00e7ekicilik \u00f6nceliklidir\nTon: e\u011flenceli, zekice, hafif alayc\u0131 ama tatmin edici\nHikaye \u201cac\u0131 \u2192 ders \u2192 g\u00fc\u00e7lenme \u2192 zekice intikam \u2192 mutlu son\u201d ark\u0131n\u0131 izlemelidir\nKarakter ya\u015fad\u0131klar\u0131ndan ders \u00e7\u0131karm\u0131\u015f olmal\u0131 ve sonunda ba\u015far\u0131y\u0131 hafif nispet eder gibi g\u00f6stermelidir\nAnlat\u0131m g\u00f6rsel olarak g\u00fc\u00e7l\u00fc olmal\u0131 (renk, ortam, aksiyon, tempo)\nMetinler TTS (text-to-speech) i\u00e7in uygun olmal\u0131d\u0131r\n\u00d6NEML\u0130 FORMAT KURALLARI (KR\u0130T\u0130K)\nKesinlikle ** gibi y\u0131ld\u0131zl\u0131 vurgular kullanma\nKarakter isimlerini d\u00fcz metin olarak yaz (\u00f6rnek: Max, Luka)\n\"Sahne 1\", \"Sahne 2\" gibi ifadeler kullanma\nHer sahne bir ba\u015fl\u0131k olmadan, do\u011fal bir hikaye par\u00e7as\u0131 gibi yaz\u0131lmal\u0131\nAnlat\u0131m sanki biri hikaye anlat\u0131yormu\u015f gibi ak\u0131c\u0131 olmal\u0131\nHer sahne tek bir string olacak \u015fekilde yaz\u0131lmal\u0131\nJSON i\u00e7inde sadece d\u00fcz string metinler olmal\u0131\nGereksiz \u00f6zel karakter, emoji veya bi\u00e7imlendirme kullanma\nSAHNE YAPISI (G\u00dcNCELLEND\u0130)\nToplam 8 sahne \u00fcret\nHer sahne 5 ila 8 c\u00fcmle aras\u0131nda olmal\u0131\nC\u00fcmleler k\u0131sa, ak\u0131c\u0131 ve TTS dostu olmal\u0131\nHer sahne g\u00f6rsel olarak hayal edilebilir olmal\u0131\nSahneler birbirine akmal\u0131 ama tek tek de anlaml\u0131 olmal\u0131\n1\ufe0f\u20e3 KARAKTER OLU\u015eTURMA\n\nSana verilecek olan:\n{{ $('On form submission').item.json['Karekter Tiplemesi'] }}\n\nBunu:\n\nFiziksel g\u00f6r\u00fcn\u00fcm\nDavran\u0131\u015f bi\u00e7imi\nKarakter kusurlar\u0131\nGizli g\u00fcc\u00fc\n\u00c7izgi film esteti\u011fine uygun detaylar\n\nile detayl\u0131 ve sinematik \u015fekilde betimle.\n\n2\ufe0f\u20e3 H\u0130KAYE D\u00d6N\u00dc\u015e\u00dcM\u00dc\n\nSana verilecek olan hikaye:\n{{ $('On form submission').item.json.Hikaye }}\n\nBunu:\n\n8 par\u00e7aya b\u00f6l\nHer par\u00e7a hikayenin bir an\u0131n\u0131 anlats\u0131n\nPar\u00e7alar aras\u0131nda ak\u0131\u015f hissi olsun\nHer par\u00e7a ba\u011f\u0131ms\u0131z okunabilir ama birlikte b\u00fct\u00fcn bir hikaye olu\u015fturmal\u0131\nHikaye ak\u0131\u015f\u0131 mutlaka \u015fu s\u0131ray\u0131 takip etmeli:\nBa\u015flang\u0131\u00e7 ve karakter tan\u0131t\u0131m\u0131\n\u0130lk hedef veya istek\nSorunun ortaya \u00e7\u0131k\u0131\u015f\u0131\nK\u00fc\u00e7\u00fck ba\u015far\u0131s\u0131zl\u0131k\nB\u00fcy\u00fck d\u00fc\u015f\u00fc\u015f veya utan\u00e7\nDers \u00e7\u0131karma\nG\u00fc\u00e7lenme ve haz\u0131rl\u0131k\nPlan kurma\nZekice intikam veya ters k\u00f6\u015fe\nTatmin edici ve mutlu son\n3\ufe0f\u20e3 \u00c7IKTI FORMATI (KES\u0130NL\u0130KLE BU FORMAT)\n\nSadece a\u015fa\u011f\u0131daki JSON \u00e7\u0131kt\u0131s\u0131n\u0131 ver:\n\n{\n\"karekter\": \"detayl\u0131 karakter betimlemesi\",\n\"Sahneler\": [\n\"par\u00e7a 1 anlat\u0131m\u0131\",\n\"par\u00e7a 2 anlat\u0131m\u0131\",\n\"par\u00e7a 3 anlat\u0131m\u0131\",\n\"par\u00e7a 4 anlat\u0131m\u0131\",\n\"par\u00e7a 5 anlat\u0131m\u0131\",\n\"par\u00e7a 6 anlat\u0131m\u0131\",\n\"par\u00e7a 7 anlat\u0131m\u0131\",\n\"par\u00e7a 8 anlat\u0131m\u0131 ve son\"\n]\n}",
        "hasOutputParser": true,
        "batching": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.7,
      "position": [
        2096,
        1344
      ],
      "id": "4edac2a5-0d8c-40c6-98b5-39bd5c9326f1",
      "name": "Basic LLM Chain"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatMistralCloud",
      "typeVersion": 1,
      "position": [
        2480,
        1648
      ],
      "id": "806ad5e2-01c8-4871-98e6-504408126022",
      "name": "Mistral Cloud Chat Model",
      "credentials": {
        "mistralCloudApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n\t\"karekter\": \"karekter\",\n\t\"Sahneler\": [\"Sahne1\", \"Sahne2\", \"Sahne3\",\"Sahne4\", \"Sahne5\"]\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.3,
      "position": [
        2688,
        1648
      ],
      "id": "de155a80-024b-4456-a3fb-707f18bb560a",
      "name": "Structured Output Parser"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        1696,
        2256
      ],
      "id": "544aee1b-a8b3-4305-9eea-121ec41ee30d",
      "name": "Loop Over Items"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-goog-api-key",
              "value": "api_key"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "{\n  \"contents\": [\n    {\n      \"parts\": [\n        {\n          \"text\": \"{{ $json.output.karekter }}, cinematic cartoon character, stylized 3D illustration, pixar-meets style, dramatic cinematic lighting,high contrast, medium close-up, storytelling character design, clean outlines, smooth shading, highly detailed, social media friendly, tiktok shorts aesthetic, eye-catching, modern animation look, solo character only, no props, no objects, empty hands, no items in hands, nothing on feet, no accessories, no weapons, no tools, no background elements interacting with the character\"\n        }\n      ]\n    }\n  ]\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        1680,
        1776
      ],
      "id": "c86d37cb-3af1-4fe6-9ccd-05bba901909d",
      "name": "HTTP Request2"
    },
    {
      "parameters": {
        "jsCode": "return [{\n  binary: {\n    data: {\n      data: $input.first().json.candidates[0]?.content?.parts?.[0]?.inlineData?.data \n|| $input.first().json.candidates[0]?.content?.parts?.[1]?.inlineData?.data,\n      mimeType: 'image/jpeg',\n      fileName: 'x.jpg'\n    }\n  }\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1888,
        1776
      ],
      "id": "b363255e-fd6c-413f-a59a-b1761cc5ec2c",
      "name": "Code in JavaScript"
    },
    {
      "parameters": {
        "authentication": "serviceAccount",
        "name": "={{ $('Edit Fields1').item.json.file_name }}.jpg",
        "driveId": {
          "__rl": true,
          "value": "My Drive",
          "mode": "list",
          "cachedResultName": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive"
        },
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "root",
          "cachedResultName": "/ (Root folder)"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        2096,
        1776
      ],
      "id": "92a18884-436b-453d-977e-173e35ee18d8",
      "name": "Upload file",
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "3cb2199a-5abb-4812-8e5b-14e71cd239e8",
              "name": "file_name",
              "value": "={{ $now.toString(36) + Math.random().toString(36).substr(2, 5) }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1872,
        1344
      ],
      "id": "6e43256d-8833-452d-90f3-2be054892240",
      "name": "Edit Fields1"
    },
    {
      "parameters": {
        "jsCode": "// Basic LLM Chain node'undan gelen listeyi al\u0131yoruz\nconst sahneler = $node[\"Basic LLM Chain\"].json[\"output\"][\"Sahneler\"];\n\n// E\u011fer sahneler bir string ise ve virg\u00fclle ayr\u0131lm\u0131\u015fsa, \u00f6nce diziye \u00e7evir\nlet sahneArray = [];\nif (typeof sahneler === \"string\") {\n    // Virg\u00fclle ayr\u0131lm\u0131\u015fsa\n    sahneArray = sahneler.split(\",\").map(s => s.trim());\n} else if (Array.isArray(sahneler)) {\n    sahneArray = sahneler;\n}\n\n// Her bir sahneyi ayr\u0131 item yap\u0131yoruz\nreturn sahneArray.map(sahne => {\n    return {\n        json: {\n            sahne: sahne\n        }\n    };\n});"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2304,
        1776
      ],
      "id": "2934cfa2-5be7-46fb-a336-6b842cf42778",
      "name": "Code in JavaScript1"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-flash-image-preview:generateContent",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-goog-api-key",
              "value": "api_key"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"contents\": [\n    {\n      \"parts\": [\n        {\n          \"text\": \"bu senaryoya g\u00f6re vermi\u015f oldu\u011fum resmi yeniden olu\u015ftur o anki senaryoya uygun olmas\u0131 gerekiyor bir hikayenin resim par\u00e7as\u0131 gibi tam o an\u0131 anlatan \u015fekilde olu\u015fturman gerek resmin boyutu 16-9 olmal\u0131d\u0131r. senaryo: {{ $json.sahne }}\"\n        },\n        {\n          \"inline_data\": {\n            \"mime_type\": \"image/jpeg\",\n            \"data\": \"{{ $('HTTP Request2').item.json.candidates[0]?.content?.parts?.[0]?.inlineData?.data || $('HTTP Request2').item.json.candidates[0]?.content?.parts?.[1]?.inlineData?.data }}\"\n          }\n        }\n      ]\n    }\n  ]\n} ",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        1872,
        2464
      ],
      "id": "5c031d2d-09ef-4579-be05-ca168eab99bc",
      "name": "HTTP Request1"
    },
    {
      "parameters": {
        "jsCode": "return [{\n  binary: {\n    data: {\n      data:$input.first().json.candidates[0]?.content?.parts?.[0]?.inlineData?.data \n|| $input.first().json.candidates[0]?.content?.parts?.[1]?.inlineData?.data,\n      mimeType: 'image/jpeg',\n      fileName: 'x.jpg'\n    }\n  }\n}];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2096,
        2464
      ],
      "id": "5b83f29f-91ea-46b8-af37-ffbcbbc0d776",
      "name": "Code in JavaScript2"
    },
    {
      "parameters": {
        "operation": "Run actor and get dataset",
        "actorId": {
          "__rl": true,
          "value": "tsBJEczbAlKo9nIg4",
          "mode": "list",
          "cachedResultName": "Text to Speech Generator (moving_beacon-owner1/my-actor-30)",
          "cachedResultUrl": "https://console.apify.com/actors/tsBJEczbAlKo9nIg4/input"
        },
        "customBody": "={\n    \"lang\": \"tr\",\n    \"texts\": \"{{ $('Loop Over Items').item.json.sahne }}\"\n}"
      },
      "type": "@apify/n8n-nodes-apify.apify",
      "typeVersion": 1,
      "position": [
        2464,
        2464
      ],
      "id": "86f66507-7f93-4c7e-b9c0-798156cfc2e6",
      "name": "Run an Actor and get dataset",
      "credentials": {
        "apifyApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "name": "={{ $now.format('yyyy-MM-dd-hh-mm-ss') }}.jpg",
        "driveId": {
          "__rl": true,
          "value": "My Drive",
          "mode": "list",
          "cachedResultName": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive"
        },
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "root",
          "cachedResultName": "/ (Root folder)"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [
        2272,
        2464
      ],
      "id": "4dd8519f-5f5e-4ecd-84f6-80d39d4fb39c",
      "name": "Upload file1",
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.rendi.dev/v1/run-ffmpeg-command",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-KEY",
              "value": "api_key"
            }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "application/json; charset=utf-8",
        "body": "={\n  \"input_files\": {\n    \"in_1\": \"{{ $node['Upload file1'].json.thumbnailLink.slice(0, -5) }}\",\n    \"in_2\": \"{{ $json.downloadUrl.split('?')[0] }}\"\n  },\n  \"output_files\": {\n    \"out_1\": \"video.mp4\"\n  },\n  \"ffmpeg_command\": \"-loop 1 -i \\\\{\\\\{in_1\\\\}\\\\} -i \\\\{\\\\{in_2\\\\}\\\\} -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest -vf \\\"scale=trunc(iw/2)*2:trunc(ih/2)*2\\\" \\\\{\\\\{out_1\\\\}\\\\}\"\n}",
        "options": {
          "redirect": {
            "redirect": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        2640,
        2464
      ],
      "id": "279754d0-8f47-4f80-a3db-ede342fa965f",
      "name": "HTTP Request"
    },
    {
      "parameters": {
        "url": "=https://api.rendi.dev/v1/commands/{{ $json.command_id }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-KEY",
              "value": "api_key"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        3056,
        2464
      ],
      "id": "7cf06ca1-4f29-436b-b769-39727688c31c",
      "name": "HTTP Request3"
    },
    {
      "parameters": {
        "amount": 40
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2848,
        2464
      ],
      "id": "ad38ea37-4d3b-488e-a7a8-1e8ed8be8340",
      "name": "Wait"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.rendi.dev/v1/run-ffmpeg-command",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-KEY",
              "value": "api_key"
            }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "application/json; charset=utf-8",
        "body": "={\n  \"input_files\": {\n    \"in_1\": \"{{ $json.data[0].output_files.out_1.storage_url }}\",\n    \"in_2\": \"{{ $json.data[1].output_files.out_1.storage_url }}\",\n    \"in_3\": \"{{ $json.data[2].output_files.out_1.storage_url }}\",\n    \"in_4\": \"{{ $json.data[3].output_files.out_1.storage_url }}\",\n    \"in_5\": \"{{ $json.data[4].output_files.out_1.storage_url }}\",\n    \"in_6\": \"{{ $json.data[5].output_files.out_1.storage_url }}\",\n    \"in_7\": \"{{ $json.data[6].output_files.out_1.storage_url }}\",\n    \"in_8\": \"{{ $json.data[7].output_files.out_1.storage_url }}\"\n  },\n  \"output_files\": {\n    \"out_1\": \"merged_video.mp4\"\n  },\n  \"ffmpeg_command\": \"-i \\\\{\\\\{in_1\\\\}\\\\} -i \\\\{\\\\{in_2\\\\}\\\\} -i \\\\{\\\\{in_3\\\\}\\\\} -i \\\\{\\\\{in_4\\\\}\\\\} -i \\\\{\\\\{in_5\\\\}\\\\} -filter_complex \\\"[0:v]setpts=PTS/1.2[v0];[1:v]setpts=PTS/1.2[v1];[2:v]setpts=PTS/1.2[v2];[3:v]setpts=PTS/1.2[v3];[4:v]setpts=PTS/1.2[v4];[v0][0:a] [v1][1:a] [v2][2:a] [v3][3:a] [v4][4:a] concat=n=5:v=1:a=1 [v][a];[a]atempo=1.2[a]\\\" -map \\\"[v]\\\" -map \\\"[a]\\\" -c:v libx264 -pix_fmt yuv420p \\\\{\\\\{out_1\\\\}\\\\}\"\n}",
        "options": {
          "redirect": {
            "redirect": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        2272,
        2128
      ],
      "id": "80455a5c-23e1-4fc1-983c-c323c2350c67",
      "name": "HTTP Request4"
    },
    {
      "parameters": {
        "url": "=https://api.rendi.dev/v1/commands/{{ $json.command_id }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-KEY",
              "value": "api_key"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        2672,
        2128
      ],
      "id": "0274879f-276a-4354-b36f-8b2cf98ae9c5",
      "name": "HTTP Request5"
    },
    {
      "parameters": {
        "url": "={{ $json.output_files.out_1.storage_url }}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        2864,
        2128
      ],
      "id": "b94893e3-4d27-4670-b5c5-ca4d1a876849",
      "name": "HTTP Request6"
    },
    {
      "parameters": {
        "aggregate": "aggregateAllItemData",
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        2016,
        2144
      ],
      "id": "575d35ed-b10d-4783-81cd-170a63cbc763",
      "name": "Aggregate"
    },
    {
      "parameters": {
        "amount": 60
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2480,
        2128
      ],
      "id": "94cc878f-60ed-4d21-8360-28b2601f5254",
      "name": "Wait1"
    }
  ],
  "connections": {
    "On form submission": {
      "main": [
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "HTTP Request2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mistral Cloud Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "HTTP Request1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request2": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Upload file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload file": {
      "main": [
        [
          {
            "node": "Code in JavaScript1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript1": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request1": {
      "main": [
        [
          {
            "node": "Code in JavaScript2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript2": {
      "main": [
        [
          {
            "node": "Upload file1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run an Actor and get dataset": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload file1": {
      "main": [
        [
          {
            "node": "Run an Actor and get dataset",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request3": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "HTTP Request3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request4": {
      "main": [
        [
          {
            "node": "Wait1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request5": {
      "main": [
        [
          {
            "node": "HTTP Request6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "HTTP Request4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait1": {
      "main": [
        [
          {
            "node": "HTTP Request5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request6": {
      "main": [
        []
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "versionId": "0c3fec13-f077-41a4-954d-4c7656b255f2",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "s61U40pABtiUg96G",
  "tags": []
}

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

viral-cat-video-creator. Uses formTrigger, chainLlm, lmChatMistralCloud, outputParserStructured. Event-driven trigger; 22 nodes.

Source: https://gist.github.com/omergocmen/e805b9c4f7751236d02eca72454aaa33 — 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

The Recap AI - Nano Banana Static Ad Spinner. Uses formTrigger, @mendable/n8n-nodes-firecrawl, chainLlm, lmChatGoogleGemini. Event-driven trigger; 31 nodes.

Form Trigger, @Mendable/N8N Nodes Firecrawl, Chain Llm +5
Web Scraping

[VICTOR] Google Maps Extractor. Uses formTrigger, outputParserStructured, lmChatOpenAi, httpRequest. Event-driven trigger; 21 nodes.

Form Trigger, Output Parser Structured, OpenAI Chat +5
Web Scraping

Community nodes are used in this workflow. B2B Sales Teams & SDRs Recruitment Agencies & Tech Recruiters Startup Founders Growth Marketing Teams Scrape Hiring Signals: The workflow starts by using an

Google Sheets, Google Gemini Chat, Output Parser Structured +3
Web Scraping

📚 Learners and educators who want a fast overview of a creator’s entire catalog. 🧩 Research, SEO, and content ops teams building an intelligence layer on top of YouTube channels.

HTTP Request, Agent, Output Parser Autofixing +6
Web Scraping

Travel agencies, freelance travel planners, or anyone who wants to automate personalized trip planning by combining real-time hotel and flight data with AI-generated recommendations. Collects travel d

Form Trigger, @Apify/N8N Nodes Apify, HTTP Request +4