This workflow corresponds to n8n.io template #11367 — we link there as the canonical source.
This workflow follows the Agent → Chat 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 →
{
"id": "Tdw6WqOrjK9zGBRe",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "0-template-blog-article-to-video-community-node",
"tags": [
{
"id": "4f5HsQRwHRxYIUuf",
"name": "jsoncut",
"createdAt": "2025-10-12T07:39:06.742Z",
"updatedAt": "2025-10-12T07:39:06.742Z"
}
],
"nodes": [
{
"id": "7fb7a876-3395-4783-af47-02345ab9d812",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
208,
-640
],
"parameters": {
"color": 3,
"width": 704,
"height": 688,
"content": "### Generate Script, Voice & Videos\nAI creates 3-5 video prompts, voiceover script (max 75 words), and social caption. Then parallel generation: Google Gemini Veo produces videos (9:16, 8 sec), OpenAI TTS generates voiceover, and OpenVerse fetches CC-licensed background music"
},
"typeVersion": 1
},
{
"id": "ff62c19f-9448-41d5-9f70-a9c535c1a0e9",
"name": "Get List of background Audio",
"type": "n8n-nodes-base.httpRequest",
"position": [
224,
-128
],
"parameters": {
"url": "https://api.openverse.engineering/v1/audio/",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "q",
"value": "ambiente"
},
{
"name": "license",
"value": "cc0,by,by-sa"
},
{
"name": "format",
"value": "json"
},
{
"name": "extension",
"value": "mp3"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "8c9a51b0-61b8-450c-b049-8b308e5971ab",
"name": "Generate audio",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
704,
-320
],
"parameters": {
"input": "={{ $json.output.full_text }}",
"voice": "onyx",
"options": {
"response_format": "mp3"
},
"resource": "audio"
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "06603cec-6773-4041-be9f-19adb540dd38",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
288,
-1104
],
"parameters": {
"color": 6,
"width": 640,
"height": 432,
"content": "### Crawl Page & Summarize Content\nChat trigger receives URL \u2192 Firecrawl scrapes webpage content \u2192 AI condenses it into a focused 1,000-character summary while preserving key facts"
},
"typeVersion": 1
},
{
"id": "d93817f2-30bc-46f4-ba96-c8ecb4ccc71c",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1600,
-128
],
"parameters": {
"color": 6,
"width": 416,
"height": 272,
"content": "### Publish to Instagram\nFinal video uploads to Instagram via Blotato API as a Reel with AI-generated caption"
},
"typeVersion": 1
},
{
"id": "c1653e72-e448-4657-a473-5fadecadb922",
"name": "Generate a video",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
768,
-512
],
"parameters": {
"prompt": "={{ $json['output.video_prompts'] }}",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/veo-2.0-generate-001",
"cachedResultName": "models/veo-2.0-generate-001"
},
"options": {
"aspectRatio": "9:16",
"durationSeconds": 8
},
"resource": "video"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "b71fa273-e0f0-4e58-a912-44d3f8b5f205",
"name": "Split Video Prompts",
"type": "n8n-nodes-base.splitOut",
"position": [
608,
-512
],
"parameters": {
"options": {},
"fieldToSplitOut": "output.video_prompts"
},
"typeVersion": 1
},
{
"id": "ed4c59d8-df44-425e-8043-60e877cea36b",
"name": "Merge All Files",
"type": "n8n-nodes-base.merge",
"position": [
1312,
-368
],
"parameters": {
"numberInputs": 3
},
"typeVersion": 3.2
},
{
"id": "87d0903e-1cd9-4dd4-b568-873f937dc58e",
"name": "Aggregate Files",
"type": "n8n-nodes-base.aggregate",
"position": [
1440,
-352
],
"parameters": {
"options": {
"includeBinaries": false
},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "cf615c86-5935-4527-92e3-312125611a67",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
944,
-608
],
"parameters": {
"color": 7,
"width": 608,
"height": 656,
"content": "### Upload & Aggregate Files\nAll generated assets (videos, voiceover, background music) are uploaded to JsonCut storage, then merged into a single data structure for composition"
},
"typeVersion": 1
},
{
"id": "590e67f3-43ed-490e-a65e-14b031454f16",
"name": "Scrape a url and get its content",
"type": "@mendable/n8n-nodes-firecrawl.firecrawl",
"position": [
352,
-1008
],
"parameters": {
"url": "={{ $json.chatInput }}",
"operation": "scrape",
"requestOptions": {}
},
"credentials": {
"firecrawlApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "8455cbd6-2292-4a03-afdc-1a7b5060428e",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
128,
-1008
],
"parameters": {
"options": {}
},
"typeVersion": 1.4
},
{
"id": "9597920c-4ab8-43c8-8885-752e9b2bb217",
"name": "Content Summarizer",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
528,
-1008
],
"parameters": {
"text": "=Summarize the following crawled webpage content into a coherent text of no more than 1,000 characters. Use complete sentences and ensure the context remains clear. Preserve all core statements and factual meaning without adding, removing, or altering key information.\nContent:\n```\n{{ $json.data.markdown }}\n```",
"options": {},
"promptType": "define"
},
"typeVersion": 3
},
{
"id": "60f07ced-4fd8-4c40-bf67-ccb415f9ee50",
"name": "OpenRouter Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
528,
-816
],
"parameters": {
"model": "openai/gpt-5-mini",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "e4d632fc-1cb3-4693-b709-e91cdee1f603",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
224,
-512
],
"parameters": {
"text": "=You are a creative director and scriptwriter specializing in short informational video content for platforms like Instagram, TikTok, and YouTube Shorts.\n\nYour task is to produce 3\u20134 short informational videos (each approximately 8 seconds long) based on the following theme:\n\n```\n{{ $json.output }}\n```\n\n---\n\n### GOAL\nCreate a cohesive set of informational micro-videos that share the same visual style, tone, and lighting.\nFor each task, generate:\n\n1. 5 detailed prompts for AI-generated background videos (each ~8 seconds, no need to add duration to video prompt)\n\n2. 1 complete narration text that explains the topic clearly and concisely, matching the visuals\n\n3. 1 short caption for a social media post promoting the informational video set\n\n---\n\n### VIDEO PROMPT GUIDELINES\n- Each video prompt must clearly describe the **scene**, **movement**, **style**, **setting**, **mood**, **lighting**, and **color palette**. \n- All videos must be visually and emotionally consistent. \n- Include specific **camera movements** (e.g., slow pan, dolly forward, static shot with motion elements). \n- Choose a coherent lighting mood (e.g., clean and educational, modern and bright, calm and soft). \n- Example structure: \n *\"A clean informational cinematic video of [subject/scene], [camera movement], [motion in scene], [lighting], [environment details], [educational tone], [color palette], 8 seconds.\"*\n\n---\n\n### NARRATION GUIDELINES\n- The narration should be smooth, educational, and clearly structured. \n- It must match the sequence and style of the visual prompts. \n- Keep the tone informative, concise, and easy to follow when spoken aloud. \n- No text segments are required\u2014only one continuous narration.\n- MAX WORD COUNT: 75\n---\n\n### OUTPUT FORMAT (JSON)\n\nReturn the output **only** as valid JSON:\n\n```json\n{\n \"video_prompts\": [\n \"Prompt 1\",\n \"Prompt 2\",\n \"Prompt 3\"\n ],\n \"full_text\": \"Narration text explaining the topic.\",\n \"caption\": \"Short social media caption.\"\n}\n```",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3
},
{
"id": "dedd4041-1ed3-46ee-b4a2-bf7122d823d4",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
288,
-384
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n \"video_prompts\": [\n \"Prompt 1\",\n \"Prompt 2\",\n \"Prompt 3\"\n ],\n \"full_text\": \"Narration text explaining the topic.\",\n \"caption\": \"Short social media caption.\"\n}"
},
"typeVersion": 1.3
},
{
"id": "7fb93325-4690-444d-9847-d50826ece393",
"name": "OpenRouter Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
224,
-304
],
"parameters": {
"model": "openai/gpt-5-mini",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "2a4184b5-f45a-4261-a2f8-348ad38f7f3c",
"name": "Upload voice",
"type": "n8n-nodes-jsoncut.jsonCut",
"position": [
992,
-320
],
"parameters": {
"category": "audio",
"resource": "file",
"ttlHours": 24
},
"credentials": {
"jsonCutApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "4f23d7c6-642a-460b-b374-2a5555019589",
"name": "Upload video",
"type": "n8n-nodes-jsoncut.jsonCut",
"position": [
992,
-512
],
"parameters": {
"category": "video",
"resource": "file",
"ttlHours": 24
},
"credentials": {
"jsonCutApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "2194e8eb-2cde-4533-80b9-dc46b3fef003",
"name": "Generate media",
"type": "n8n-nodes-jsoncut.jsonCut",
"position": [
1696,
-352
],
"parameters": {
"config": "={\n \"width\": 720,\n \"height\": 1280,\n \"fps\": 25,\n \"format\": \"mp4\",\n \"fast\": false,\n \"autoSubtitles\": true,\n \"autoSubtitlesStyle\": {\n \"animation\": \"letter-by-letter\",\n \"textColor\": \"#ffffff\",\n \"fontSize\": 40,\n \"googleFont\": \"Lora:500\",\n \"position\": {\n \"x\": 0.1,\n \"y\": 0.5,\n \"originX\": \"left\",\n \"originY\": \"top\"\n },\n \"outlineColor\": \"#000000\",\n \"outlineWidth\": 5,\n \"outlineStyle\": \"outline\"\n },\n \"audioTracks\": [\n {\n \"path\": \"{{ $json.data[1].storageUrl }}\",\n \"mixVolume\": 0.8,\n \"start\": 0.5,\n \"cutFrom\": 0\n },\n {\n \"path\": \"{{ $json.data[2].storageUrl }}\",\n \"mixVolume\": 0.2,\n \"start\": 0,\n \"cutFrom\": 0\n }\n ],\n \"defaults\": {\n \"transition\": {\n \"name\": \"randomsquares\",\n \"duration\": 0.5\n }\n },\n \"clips\": [\n {\n \"duration\": 5,\n \"layers\": [\n {\n \"type\": \"video\",\n \"path\": \"{{ $json.data[0].videos[0].storageUrl }}\",\n \"resizeMode\": \"contain-blur\",\n \"cutFrom\": 0\n },\n {\n \"type\": \"image-overlay\",\n \"path\": \"https://img.icons8.com/3d-fluency/94/project.png\",\n \"position\": \"top\",\n \"width\": 0.1,\n \"height\": 0.1,\n \"zoomDirection\": null\n },\n {\n \"type\": \"title\",\n \"text\": \"source: {{ $('When chat message received').item.json.chatInput.replace(/^(https?:\\/\\/[^\\/]+).*/, '$1') }}\",\n \"fontSize\": 18,\n \"textColor\": \"#595959\",\n \"position\": \"bottom-right\",\n \"zoomDirection\": null\n }\n ]\n },\n {\n \"duration\": 5,\n \"layers\": [\n {\n \"type\": \"video\",\n \"path\": \"{{ $json.data[0].videos[1].storageUrl }}\",\n \"resizeMode\": \"contain-blur\",\n \"cutFrom\": 0\n },\n {\n \"type\": \"image-overlay\",\n \"path\": \"https://img.icons8.com/3d-fluency/94/project.png\",\n \"position\": \"top\",\n \"width\": 0.1,\n \"height\": 0.1,\n \"zoomDirection\": null\n }\n ]\n },\n {\n \"duration\": 5,\n \"layers\": [\n {\n \"type\": \"video\",\n \"path\": \"{{ $json.data[0].videos[2].storageUrl }}\",\n \"resizeMode\": \"contain-blur\",\n \"cutFrom\": 0\n },\n {\n \"type\": \"image-overlay\",\n \"path\": \"https://img.icons8.com/3d-fluency/94/project.png\",\n \"position\": \"top\",\n \"width\": 0.1,\n \"height\": 0.1,\n \"zoomDirection\": null\n }\n ]\n },\n {\n \"duration\": 5,\n \"layers\": [\n {\n \"type\": \"video\",\n \"path\": \"{{ $json.data[0].videos[3].storageUrl }}\",\n \"resizeMode\": \"contain-blur\",\n \"cutFrom\": 0\n },\n {\n \"type\": \"image-overlay\",\n \"path\": \"https://img.icons8.com/3d-fluency/94/project.png\",\n \"position\": \"top\",\n \"width\": 0.1,\n \"height\": 0.1,\n \"zoomDirection\": null\n }\n ]\n }\n ]\n}",
"jobType": "video",
"resource": "combined",
"pollingOptions": {}
},
"credentials": {
"jsonCutApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "6310384d-481a-463d-b9aa-113199494047",
"name": "download background audio",
"type": "n8n-nodes-base.httpRequest",
"position": [
448,
-128
],
"parameters": {
"url": "={{ $json.results[Math.floor(Math.random() * $json.results.length)].url }}",
"options": {}
},
"typeVersion": 4.3
},
{
"id": "619b9e6e-f595-4967-bc8a-a79c5aa864c4",
"name": "Upload background audio",
"type": "n8n-nodes-jsoncut.jsonCut",
"position": [
992,
-128
],
"parameters": {
"category": "audio",
"resource": "file",
"ttlHours": 24
},
"credentials": {
"jsonCutApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "15890519-5c09-4e03-8896-3c892386fc5d",
"name": "Aggregate video paths",
"type": "n8n-nodes-base.aggregate",
"position": [
1152,
-512
],
"parameters": {
"include": "specifiedFields",
"options": {
"includeBinaries": false
},
"aggregate": "aggregateAllItemData",
"fieldsToInclude": "storageUrl",
"destinationFieldName": "videos"
},
"typeVersion": 1
},
{
"id": "7fbe4740-f207-40d3-923e-3be2ea53a9e2",
"name": "Upload media",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
1632,
-16
],
"parameters": {
"resource": "media",
"useBinaryData": true
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "88182ebe-f8b6-44c8-833d-154ae96a2795",
"name": "Create Instagram post",
"type": "@blotato/n8n-nodes-blotato.blotato",
"position": [
1808,
-16
],
"parameters": {
"options": {},
"accountId": {
"__rl": true,
"mode": "id",
"value": "1234"
},
"postContentText": "={{ $('AI Agent').item.json.output.caption }}",
"postContentMediaUrls": "={{ $('Upload media').item.json.data[0].url }}"
},
"credentials": {
"blotatoApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "9f624efd-c46d-48f4-be29-05fb4e678295",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-272,
-816
],
"parameters": {
"width": 416,
"height": 896,
"content": "## How it works\n\nThis workflow transforms blog articles into engaging Instagram Reels automatically:\n\n1. **Input**: Provide a URL via chat interface\n2. **Scrape & Summarize**: Extracts webpage content and creates a concise summary\n3. **Generate Assets**: Creates 3-4 video prompts, voiceover script, and social media caption using AI\n4. **Produce Media**: Generates videos (Google Gemini), voiceover (OpenAI TTS), and downloads CC-licensed background music\n5. **Compose**: Merges videos, voiceover, and background audio into a single vertical video with auto-generated subtitles\n6. **Publish**: Uploads to Instagram as a Reel with your caption\n\nThe entire process is automated\u2014from URL to published content.\n\n## Setup steps\n\n**Required credentials:**\n- [Firecrawl API](https://www.firecrawl.dev/) (web scraping)\n- [OpenRouter API](https://openrouter.ai/) (AI text generation)\n- [OpenAI API](https://openai.com/api/) (text-to-speech)\n- [Google Gemini API](https://aistudio.google.com/api-keys) (video generation)\n- [JsonCut API](https://app.jsoncut.com) (video editing/composition)\n- [Blotato API](https://my.blotato.com/login) (Instagram publishing)\n\n**Configure:**\n1. Add all API credentials in n8n\n2. Update Instagram account ID in \"Create Instagram post\" node\n3. Optional: Adjust video style/duration in \"AI Agent\" prompt\n4. Test with a sample blog URL"
},
"typeVersion": 1
},
{
"id": "6fab8e9b-4040-40c5-9687-b19be0dcb14a",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1600,
-576
],
"parameters": {
"width": 448,
"height": 384,
"content": "### Compose Final Video\n\nJsonCut combines all elements:\n- Sequences video clips with transitions\n- Layers voiceover (80% volume) + background music (20%)\n- Adds auto-generated subtitles\n- Includes source attribution and branding overlay\n\nOutput: 720\u00d71280 MP4 (9:16)"
},
"typeVersion": 1
},
{
"id": "61abd578-4b95-4b1d-afcb-2d39d0a389cb",
"name": "OpenRouter GPT Mini",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
368,
-288
],
"parameters": {
"model": "openai/gpt-5-mini",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "54ab9081-5d57-4827-8243-ca88c07fefe0",
"connections": {
"AI Agent": {
"main": [
[
{
"node": "Split Video Prompts",
"type": "main",
"index": 0
},
{
"node": "Generate audio",
"type": "main",
"index": 0
}
]
]
},
"Upload media": {
"main": [
[
{
"node": "Create Instagram post",
"type": "main",
"index": 0
}
]
]
},
"Upload video": {
"main": [
[
{
"node": "Aggregate video paths",
"type": "main",
"index": 0
}
]
]
},
"Upload voice": {
"main": [
[
{
"node": "Merge All Files",
"type": "main",
"index": 1
}
]
]
},
"Generate audio": {
"main": [
[
{
"node": "Upload voice",
"type": "main",
"index": 0
}
]
]
},
"Generate media": {
"main": [
[
{
"node": "Upload media",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Files": {
"main": [
[
{
"node": "Generate media",
"type": "main",
"index": 0
}
]
]
},
"Merge All Files": {
"main": [
[
{
"node": "Aggregate Files",
"type": "main",
"index": 0
}
]
]
},
"Generate a video": {
"main": [
[
{
"node": "Upload video",
"type": "main",
"index": 0
}
]
]
},
"Content Summarizer": {
"main": [
[
{
"node": "Get List of background Audio",
"type": "main",
"index": 0
},
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter GPT Mini": {
"ai_languageModel": [
[
{
"node": "Structured Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Split Video Prompts": {
"main": [
[
{
"node": "Generate a video",
"type": "main",
"index": 0
}
]
]
},
"Aggregate video paths": {
"main": [
[
{
"node": "Merge All Files",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "Content Summarizer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenRouter Chat Model2": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Upload background audio": {
"main": [
[
{
"node": "Merge All Files",
"type": "main",
"index": 2
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"download background audio": {
"main": [
[
{
"node": "Upload background audio",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Scrape a url and get its content",
"type": "main",
"index": 0
}
]
]
},
"Get List of background Audio": {
"main": [
[
{
"node": "download background audio",
"type": "main",
"index": 0
}
]
]
},
"Scrape a url and get its content": {
"main": [
[
{
"node": "Content Summarizer",
"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.
blotatoApifirecrawlApigooglePalmApijsonCutApiopenAiApiopenRouterApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
⚠️ Important: This workflow uses community nodes (JsonCut, Blotato) and requires a self-hosted n8n instance.
Source: https://n8n.io/workflows/11367/ — 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.
Watch the full step-by-step tutorial on YouTube: https://youtu.be/id22R7iBTjo
This comprehensive workflow automates the complete financial document processing pipeline using AI. Upload invoices via chat, drop expense receipts into a folder, or add bank statements - the system a
Who’s it for Creators who want to create faceless videos automatically, while keeping human oversight and quality control.
This workflow is designed for e-commerce, marketing teams, or creators who want to automate the production of high-quality, AI-generated product visuals and ad creatives.
The Best Linkedin Posting System. Uses httpRequest, lmChatOpenAi, agent, chatTrigger. Chat trigger; 49 nodes.