Skip to content

Instantly share code, notes, and snippets.

@dhanushreddy291
Last active September 1, 2025 05:47
Show Gist options
  • Select an option

  • Save dhanushreddy291/ccd40f033355e74e04b8cf0a3058047b to your computer and use it in GitHub Desktop.

Select an option

Save dhanushreddy291/ccd40f033355e74e04b8cf0a3058047b to your computer and use it in GitHub Desktop.
n8n Worflow for generating video summary of Reddit RSS feeds
{
"name": "The Daily Gist: Never miss the best of Reddit again",
"nodes": [
{
"parameters": {
"resource": "webScrapper",
"operation": "monitorProgressSnapshot",
"snapshot_id": "={{ $json.snapshot_id }}",
"requestOptions": {}
},
"id": "479e0be0-059b-47e6-86fb-29ea9eb81eb4",
"name": "Check the status of a batch extraction",
"type": "@brightdata/n8n-nodes-brightdata.brightData",
"position": [
992,
-224
],
"typeVersion": 1,
"credentials": {
"brightdataApi": {
"id": "U6Rizl8BpEcVB5Dl",
"name": "BrightData account"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f5deab49-ea1c-456b-b61a-5458adf991a5",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "ready"
}
]
},
"options": {}
},
"id": "4f6e3573-c378-4a05-a2dd-ecf61c543132",
"name": "Check if Batch Ready",
"type": "n8n-nodes-base.if",
"position": [
1216,
-224
],
"typeVersion": 2.2
},
{
"parameters": {},
"id": "f2a27ebb-96c7-4f29-a1a0-0510df1d3c1c",
"name": "Wait 5 seconds",
"type": "n8n-nodes-base.wait",
"position": [
1440,
-80
],
"webhookId": "426f7e8b-9365-4ad0-8e08-1e4895c3d95a",
"typeVersion": 1.1
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "e30d65f3-a6be-4df2-8672-2f69633f9296",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "cc932518-35b3-42cc-9ed7-76b695c5607a",
"name": "description",
"type": "string",
"value": "={{ $json.description }}"
},
{
"id": "3cd26612-27f6-4d31-bfe0-7075d2c05a44",
"name": "comments",
"type": "array",
"value": "={{ $json.comments }}"
},
{
"id": "54b22b70-0c4c-4e68-975b-77fbf2112ede",
"name": "post_id",
"type": "string",
"value": "={{ $json.post_id }}"
},
{
"id": "189999eb-6f59-4810-be8f-dfd1f7f01ef5",
"name": "url",
"type": "string",
"value": "={{ $json.url }}"
},
{
"id": "332a53a2-4182-4490-adc3-1a87426c0ba1",
"name": "num_upvotes",
"type": "number",
"value": "={{ $json.num_upvotes }}"
},
{
"id": "2754e3a3-ee58-4c75-ae8c-296f4c1249a0",
"name": "num_comments",
"type": "number",
"value": "={{ $json.num_comments }}"
}
]
},
"options": {}
},
"id": "336b53e9-8abd-406e-af2b-26928157f037",
"name": "Extract Essential Data",
"type": "n8n-nodes-base.set",
"position": [
1888,
-320
],
"typeVersion": 3.4
},
{
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-352,
-152
],
"id": "092a9d11-705a-4dce-8499-f805cbc14ec6",
"name": "Schedule Trigger"
},
{
"parameters": {
"url": "https://www.reddit.com/r/ArtificialInteligence.rss",
"options": {}
},
"type": "n8n-nodes-base.rssFeedRead",
"typeVersion": 1.2,
"position": [
-128,
-152
],
"id": "8beddfa3-33f8-4a61-b973-ed99863c2986",
"name": "Get subreddit RSS feed"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "11be4491-e850-4cec-8401-45592419e30f",
"name": "url",
"type": "string",
"value": "={{ $json.link }}"
}
]
},
"options": {}
},
"id": "e670d1de-109e-42b3-98a5-76a946c44672",
"name": "Extract Post Links",
"type": "n8n-nodes-base.set",
"position": [
96,
-152
],
"typeVersion": 3.4
},
{
"parameters": {
"aggregate": "aggregateAllItemData",
"options": {}
},
"id": "d65d39bb-19c6-4978-bf90-6137490ab4da",
"name": "Map to a single Array",
"type": "n8n-nodes-base.aggregate",
"position": [
320,
-152
],
"typeVersion": 1
},
{
"parameters": {
"resource": "webScrapper",
"operation": "triggerCollectionByUrl",
"dataset_id": {
"__rl": true,
"mode": "list",
"value": "gd_lvz8ah06191smkebj4",
"cachedResultName": "Reddit- Posts"
},
"urls": "={{ $json.data.toJsonString() }}",
"endpoint": "https://reddit-recap.free.beeceptor.com",
"notify": "https://reddit-recap.free.beeceptor.com",
"requestOptions": {}
},
"id": "2f8a5b4b-5b94-48e0-9941-88a925108968",
"name": "Start Batch Run",
"type": "@brightdata/n8n-nodes-brightdata.brightData",
"position": [
544,
-152
],
"typeVersion": 1,
"credentials": {
"brightdataApi": {
"id": "U6Rizl8BpEcVB5Dl",
"name": "BrightData account"
}
}
},
{
"parameters": {
"options": {
"reset": true
}
},
"id": "24c2fdbb-64b8-4d4c-bfe2-71326832dc3b",
"name": "Keep on looping until batch is processing",
"type": "n8n-nodes-base.splitInBatches",
"position": [
768,
-152
],
"typeVersion": 3
},
{
"parameters": {
"unit": "minutes"
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
1440,
-320
],
"id": "f6c98f6e-ad66-46dd-8d09-09e33fb29276",
"name": "Wait 5 minutes for Brightdata to prepare JSON",
"webhookId": "92c10232-23f4-4dd5-8222-807e792cbd2f"
},
{
"parameters": {
"resource": "webScrapper",
"operation": "downloadSnapshot",
"snapshot_id": "={{ $json.snapshot_id }}",
"requestOptions": {}
},
"id": "20370c98-1986-4c97-b53e-ed737525ff59",
"name": "Retrieve the batch Response",
"type": "@brightdata/n8n-nodes-brightdata.brightData",
"position": [
1664,
-320
],
"typeVersion": 1,
"credentials": {
"brightdataApi": {
"id": "U6Rizl8BpEcVB5Dl",
"name": "BrightData account"
}
}
},
{
"parameters": {
"jsCode": "function formatPost(post) {\n let output = `Subreddit: r/ArtificialInteligence\\nTitle of the Post: ${post.title}\\n`;\n output += `Content of the post: ${post.description || 'No description'} (Upvotes: ${post.num_upvotes}, Comments: ${post.num_comments})\\n\\n`;\n\n if (post.comments && post.comments.length > 0) {\n output += 'Comments:\\n';\n post.comments.forEach((comment, index) => {\n output += `${index + 1}. Comment: ${comment.comment}\\n`;\n if (comment.replies && comment.replies.length > 0) {\n output += ' Replies:\\n';\n comment.replies.forEach((reply, rIndex) => {\n output += ` ${rIndex + 1}. Reply: ${reply.reply}\\n`;\n });\n }\n output += '\\n';\n });\n } else {\n output += 'No comments.\\n';\n }\n\n return output;\n}\n\nconst allItems = [];\n\nfor (const item of $input.all()) {\n item.json.formattedText = formatPost(item.json);\n allItems.push(item.json)\n}\n\nreturn [...allItems]\n .sort((a, b) => b.num_upvotes - a.num_upvotes || b.num_comments - a.num_comments)\n .slice(0, 15);"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2112,
-320
],
"id": "e1189cc6-23a7-4f12-9339-e15844084454",
"name": "Format and Slice the top 15 posts"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
2336,
-320
],
"id": "b274e730-09b5-473b-aa9b-7f55a4eaf975",
"name": "Generate Audio and Image for each post"
},
{
"parameters": {
"jsCode": "return [{\n \"model\": \"google/gemini-2.5-flash-image-preview:free\",\n \"messages\": [{\n \"role\": \"user\",\n \"content\": [{\n \"type\": \"text\",\n \"text\": `You are a specialized AI image generator acting as an expert information synthesizer. Your primary mission is to create a compelling thumbnail for a Reddit post by analyzing an unstructured block of text scraped from the post. For every image use colored on white background image. Try to include as many details as possible in the image. Here is the first post:\\n${JSON.stringify($input.first().json.formattedText)}`\n }]\n }]\n}]"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2560,
-272
],
"id": "7424fe34-d332-48a4-a6d1-75ea229a9554",
"name": "Prepare request payload required by Nano Banana"
},
{
"parameters": {
"method": "POST",
"url": "https://openrouter.ai/api/v1/chat/completions",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "openRouterApi",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ $json }}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
2784,
-272
],
"id": "7fe3a2ae-ffc1-4d2a-80fc-8e16194c1504",
"name": "Send request to Nano Banana to generate an image",
"retryOnFail": true,
"waitBetweenTries": 5000,
"credentials": {
"openRouterApi": {
"id": "DT3smopgckoYBKH0",
"name": "OpenRouter account"
}
},
"onError": "continueRegularOutput"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={\"image_url\":\"{{ $json.choices[0].message.images[0].image_url.url.split(\"data:image/png;base64,\")[1] }}\"}",
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
3008,
-272
],
"id": "59bb7f5d-e99f-4cae-aa73-c0123c8f8652",
"name": "Parse the image as base64",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "toBinary",
"sourceProperty": "image_url",
"binaryPropertyName": "image",
"options": {
"mimeType": "image/png"
}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
3232,
-272
],
"id": "d6596107-b5b0-4e92-9bde-b10cfc6a57b4",
"name": "Save the base64 image to file",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "write",
"fileName": "=/output/image_{{$runIndex}}.png",
"dataPropertyName": "image",
"options": {}
},
"type": "n8n-nodes-base.readWriteFile",
"typeVersion": 1,
"position": [
3456,
-272
],
"id": "91918cae-bd73-40ed-8334-4c2c432ef5c2",
"name": "Write file to disk",
"onError": "continueRegularOutput"
},
{
"parameters": {
"modelId": {
"__rl": true,
"value": "models/gemini-2.5-flash",
"mode": "list",
"cachedResultName": "models/gemini-2.5-flash"
},
"messages": {
"values": [
{
"content": "=Convert the following Post into a quick summary for a news item.\n---\n{{ $('Generate Audio and Image for each post').item.json.formattedText }}\n---\nAdd intro to the news like \"We have a post on the singularity subreddit ...\" etc or any other such sentence, but no need to introduce yourself etc, just get straight to news after saying something at start"
}
]
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"typeVersion": 1,
"position": [
3680,
-272
],
"id": "03a06e36-3f10-404c-bc2e-71bc7507b4f0",
"name": "Prepare the post commentary for audio using Gemini",
"retryOnFail": false,
"waitBetweenTries": 5000,
"credentials": {
"googlePalmApi": {
"id": "WlkW2L2g2ASomc28",
"name": "Gemini Account"
}
},
"onError": "continueRegularOutput"
},
{
"parameters": {
"jsCode": "return [{\n \"contents\": [\n {\n \"parts\": [\n {\n \"text\": `Say as a newsreporter style: ${$input.first().json.content.parts[0].text}`\n }\n ]\n }\n ],\n \"generationConfig\": {\n \"responseModalities\": [\n \"AUDIO\"\n ],\n \"speechConfig\": {\n \"voiceConfig\": {\n \"prebuiltVoiceConfig\": {\n \"voiceName\": \"Sulafat\"\n }\n }\n }\n },\n \"model\": \"gemini-2.5-flash-preview-tts\"\n}]"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
4032,
-272
],
"id": "712c3954-2c71-45ce-bbce-02ba15fad2c5",
"name": "Prepare the request payload needed by Gemini flash TTS",
"onError": "continueRegularOutput"
},
{
"parameters": {
"method": "POST",
"url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googlePalmApi",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ $json }}",
"options": {
"redirect": {
"redirect": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
4256,
-272
],
"id": "0e2287a0-0d2c-4e12-9e00-8ce2e8e0e32d",
"name": "Generate audio using Gemini flash TTS",
"retryOnFail": false,
"waitBetweenTries": 5000,
"credentials": {
"googlePalmApi": {
"id": "WlkW2L2g2ASomc28",
"name": "Gemini Account"
}
},
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "toBinary",
"sourceProperty": "candidates[0].content.parts[0].inlineData.data",
"binaryPropertyName": "rawresponse",
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
4480,
-272
],
"id": "d1ac9e5d-b48c-433c-9ca2-fdf6d9f23f40",
"name": "Convert base64 audio to binary in-memory file",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "write",
"fileName": "=/output/audio_{{ $runIndex }}.pcm",
"dataPropertyName": "rawresponse",
"options": {}
},
"type": "n8n-nodes-base.readWriteFile",
"typeVersion": 1,
"position": [
4704,
-272
],
"id": "ff06f06c-e1c9-46a1-8717-1dd2ab5c1725",
"name": "Save the audio file to disk",
"onError": "continueRegularOutput"
},
{
"parameters": {
"amount": 120
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
4928,
-272
],
"id": "4ac5a2e4-b6bc-4a73-91da-fa7ca23b9d38",
"name": "(optional) Pause for 120 seconds to please Gemini with rate limits",
"webhookId": "bd3ef7ee-40bd-483d-bb86-990336744d48"
},
{
"parameters": {
"command": "=ffmpeg -y -f s16le -ar 24000 -ac 1 -i /output/audio_{{ $runIndex }}.pcm /output/audio_{{$runIndex}}.wav"
},
"type": "n8n-nodes-base.executeCommand",
"typeVersion": 1,
"position": [
5152,
-272
],
"id": "d17dc697-36d5-4d20-995b-52aee129cdb7",
"name": "Convert pcm audio to wav format",
"onError": "continueRegularOutput"
},
{
"parameters": {
"jsCode": "return [{\"audioFile\": $('Save the audio file to disk').first().json.fileName.replace(\".pcm\", \".wav\"), \"imageFile\": $('Write file to disk').first().json.fileName}]"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
5376,
-224
],
"id": "d479e726-ebf0-4821-b5b4-0e5849ca45a6",
"name": "Return audio and image paths",
"onError": "continueRegularOutput"
},
{
"parameters": {
"jsCode": "// Get all items from the previous node\nconst allItems = $input.all();\n\n// Step 1: Filter items to only include those that have an 'audioFile'\nconst itemsWithAudio = allItems.filter(item => item.json && item.json.audioFile);\n\n// If no items have an audioFile, stop the workflow by returning an empty array.\nif (itemsWithAudio.length === 0) {\n console.log(\"No items with an audioFile found. Stopping execution.\");\n return [];\n}\n\n// Step 2: Generate all the 'ffmpeg create clip' commands for the filtered items\n// We add '2>/dev/null' to each command to suppress FFmpeg's verbose output\n// and prevent the 'maxBuffer length exceeded' error in n8n.\nconst createClipsCmds = itemsWithAudio.map((item, index) =>\n `ffmpeg -y -loop 1 -i '${item.json.imageFile}' -i '${item.json.audioFile}' -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest /output/clip_${index}.mp4 2>/dev/null`\n).join(' && ');\n\n// Step 3: Generate the content for the file list\nconst fileListContent = itemsWithAudio.map((item, index) =>\n `file '/output/clip_${index}.mp4'`\n).join('\\\\n');\n\n// Step 4: Assemble the final, complete shell script\n// The final concatenation command also gets '2>/dev/null' for the same reason.\nconst finalCommand = `\n${createClipsCmds} && \\\\\nprintf \"${fileListContent}\\\\n\" > /output/concat_list.txt && \\\\\nffmpeg -y -f concat -safe 0 -i /output/concat_list.txt -c copy /output/final_video.mp4 2>/dev/null && \\\\\nrm /output/clip_*.mp4 /output/concat_list.txt\n`;\n\n// Return the final command for the next node to execute\nreturn [{\n json: {\n command: finalCommand.trim()\n }\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2560,
-464
],
"id": "219bec98-e767-431a-a183-98e354f9f21a",
"name": "Prepare the ffmpeg command by filtering the loops which thrown an error"
},
{
"parameters": {
"command": "={{$json.command}}"
},
"type": "n8n-nodes-base.executeCommand",
"typeVersion": 1,
"position": [
2784,
-464
],
"id": "beed0dcc-4d8d-470b-935e-2c0eba5a7e6e",
"name": "Run the ffmpeg command"
},
{
"parameters": {
"command": "ffmpeg -y -i /output/final_video.mp4 -filter:v \"setpts=PTS/1.25\" -filter:a \"atempo=1.25\" -c:v libx264 -pix_fmt yuv420p -c:a aac -movflags +faststart /output/final_video_fast.mp4 && rm /output/final_video.mp4"
},
"type": "n8n-nodes-base.executeCommand",
"typeVersion": 1,
"position": [
3008,
-464
],
"id": "4d6c9ca8-5c2e-48a3-90dd-aed46cbc3a62",
"name": "Final video encode using libx264 for all devices compatibility"
},
{
"parameters": {
"content": "## Note\nRequires `ffmpeg` installed on your self-hosted instance.\n\nCheckout my n8n image if interested: https://github.com/dhanushreddy291/n8n-with-ffmpeg\n\nDockerhub: https://hub.docker.com/repositories/dhanushreddy29\n",
"height": 176,
"width": 624,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"position": [
-352,
-384
],
"typeVersion": 1,
"id": "ccea8682-5f97-4a77-8d21-c006683b9795",
"name": "Sticky Note"
}
],
"connections": {
"Wait 5 seconds": {
"main": [
[
{
"node": "Keep on looping until batch is processing",
"type": "main",
"index": 0
}
]
]
},
"Check if Batch Ready": {
"main": [
[
{
"node": "Wait 5 minutes for Brightdata to prepare JSON",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 5 seconds",
"type": "main",
"index": 0
}
]
]
},
"Extract Essential Data": {
"main": [
[
{
"node": "Format and Slice the top 15 posts",
"type": "main",
"index": 0
}
]
]
},
"Check the status of a batch extraction": {
"main": [
[
{
"node": "Check if Batch Ready",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get subreddit RSS feed",
"type": "main",
"index": 0
}
]
]
},
"Get subreddit RSS feed": {
"main": [
[
{
"node": "Extract Post Links",
"type": "main",
"index": 0
}
]
]
},
"Extract Post Links": {
"main": [
[
{
"node": "Map to a single Array",
"type": "main",
"index": 0
}
]
]
},
"Map to a single Array": {
"main": [
[
{
"node": "Start Batch Run",
"type": "main",
"index": 0
}
]
]
},
"Start Batch Run": {
"main": [
[
{
"node": "Keep on looping until batch is processing",
"type": "main",
"index": 0
}
]
]
},
"Keep on looping until batch is processing": {
"main": [
[],
[
{
"node": "Check the status of a batch extraction",
"type": "main",
"index": 0
}
]
]
},
"Wait 5 minutes for Brightdata to prepare JSON": {
"main": [
[
{
"node": "Retrieve the batch Response",
"type": "main",
"index": 0
}
]
]
},
"Retrieve the batch Response": {
"main": [
[
{
"node": "Extract Essential Data",
"type": "main",
"index": 0
}
]
]
},
"Format and Slice the top 15 posts": {
"main": [
[
{
"node": "Generate Audio and Image for each post",
"type": "main",
"index": 0
}
]
]
},
"Generate Audio and Image for each post": {
"main": [
[
{
"node": "Prepare the ffmpeg command by filtering the loops which thrown an error",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare request payload required by Nano Banana",
"type": "main",
"index": 0
}
]
]
},
"Prepare request payload required by Nano Banana": {
"main": [
[
{
"node": "Send request to Nano Banana to generate an image",
"type": "main",
"index": 0
}
]
]
},
"Send request to Nano Banana to generate an image": {
"main": [
[
{
"node": "Parse the image as base64",
"type": "main",
"index": 0
}
]
]
},
"Parse the image as base64": {
"main": [
[
{
"node": "Save the base64 image to file",
"type": "main",
"index": 0
}
]
]
},
"Save the base64 image to file": {
"main": [
[
{
"node": "Write file to disk",
"type": "main",
"index": 0
}
]
]
},
"Write file to disk": {
"main": [
[
{
"node": "Prepare the post commentary for audio using Gemini",
"type": "main",
"index": 0
}
]
]
},
"Prepare the post commentary for audio using Gemini": {
"main": [
[
{
"node": "Prepare the request payload needed by Gemini flash TTS",
"type": "main",
"index": 0
}
]
]
},
"Prepare the request payload needed by Gemini flash TTS": {
"main": [
[
{
"node": "Generate audio using Gemini flash TTS",
"type": "main",
"index": 0
}
]
]
},
"Generate audio using Gemini flash TTS": {
"main": [
[
{
"node": "Convert base64 audio to binary in-memory file",
"type": "main",
"index": 0
}
]
]
},
"Convert base64 audio to binary in-memory file": {
"main": [
[
{
"node": "Save the audio file to disk",
"type": "main",
"index": 0
}
]
]
},
"Save the audio file to disk": {
"main": [
[
{
"node": "(optional) Pause for 120 seconds to please Gemini with rate limits",
"type": "main",
"index": 0
}
]
]
},
"(optional) Pause for 120 seconds to please Gemini with rate limits": {
"main": [
[
{
"node": "Convert pcm audio to wav format",
"type": "main",
"index": 0
}
]
]
},
"Convert pcm audio to wav format": {
"main": [
[
{
"node": "Return audio and image paths",
"type": "main",
"index": 0
}
]
]
},
"Return audio and image paths": {
"main": [
[
{
"node": "Generate Audio and Image for each post",
"type": "main",
"index": 0
}
]
]
},
"Prepare the ffmpeg command by filtering the loops which thrown an error": {
"main": [
[
{
"node": "Run the ffmpeg command",
"type": "main",
"index": 0
}
]
]
},
"Run the ffmpeg command": {
"main": [
[
{
"node": "Final video encode using libx264 for all devices compatibility",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "9991baf5-28b4-4d44-b0fa-b0138227ad8c",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "dccecc47d02da65a8a73573965c5931a9ebff530b42c3036326e2ac6d58cb704"
},
"id": "jrutxo5LX5QHM5Ag",
"tags": []
}
@dhanushreddy291

dhanushreddy291 commented Aug 31, 2025 •

Copy link
Copy Markdown
Author

Note

Requires ffmpeg installed on your self-hosted instance.

Checkout my n8n image if interested: https://github.com/dhanushreddy291/n8n-with-ffmpeg

Dockerhub: https://hub.docker.com/r/dhanushreddy29/n8n-ffmpeg

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment