Build a Daily Content Machine: n8n Workflows for Automated Video Production
A daily content machine produces one or more finished videos every day without manual intervention. You set it up once, and it generates, renders, captions, and publishes content on a schedule. This isn't theory — agencies and solo creators are running these pipelines right now, publishing 30-100+ videos per month across platforms.
This guide gives you five production-ready n8n workflows that you can deploy today. Each one is a standalone content pipeline. Stack them together and you have a multi-channel publishing operation.
The 4-Layer Architecture
Every automated content pipeline follows the same structure:
┌─────────────────────────────────────────┐
│ Layer 1: CONTENT SOURCE │
│ RSS feeds, APIs, databases, webhooks │
├─────────────────────────────────────────┤
│ Layer 2: GENERATION │
│ AI scripts, templates, data transform │
├─────────────────────────────────────────┤
│ Layer 3: PRODUCTION │
│ Video render, captions, QA check │
├─────────────────────────────────────────┤
│ Layer 4: DISTRIBUTION │
│ Social posting, email, CMS upload │
└─────────────────────────────────────────┘
Layer 1 (Content Source) is where the raw material comes from. It could be an RSS feed of industry news, a product database, a quote API, user-generated reviews, or a simple spreadsheet of content ideas.
Layer 2 (Generation) transforms raw data into video-ready content. An AI model writes the script. A template engine maps data to visual positions. A TTS API generates the voiceover.
Layer 3 (Production) renders the actual video. The JSON-to-Video API takes a template with text, images, audio, and animations, then outputs an MP4. AutoCaptions adds burned-in subtitles. An optional QA step checks video duration and file size.
Layer 4 (Distribution) pushes the finished video to its destination: Instagram, TikTok, YouTube, LinkedIn, email newsletter, your CMS, or all of the above.
Each layer is a set of n8n nodes. The layers connect via data passing — Layer 1's output feeds Layer 2's input, and so on. If you're new to n8n, the setup guide covers installation and basic workflow creation.
Workflow 1: Daily Quote Video
Output: One branded quote video per day, posted to Instagram, TikTok, and YouTube Shorts. Setup time: 30 minutes. Running cost: ~$0.08/day.
This is the simplest pipeline and the best starting point.
Source Layer
Fetch a quote from a public API (ZenQuotes, Quotable, or your own Airtable/Notion database):
{
"name": "Fetch Daily Quote",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://zenquotes.io/api/today",
"method": "GET"
}
}
The API returns a quote and author. That's all the raw material you need.
Generation Layer
Map the quote data to a video template. No AI generation needed here — the content is the quote itself.
{
"name": "Build Video Payload",
"type": "n8n-nodes-base.set",
"parameters": {
"values": {
"string": [
{
"name": "videoJson",
"value": "={{ JSON.stringify({ resolution: '1080x1920', fps: 30, scenes: [{ duration: 6, layers: [{ type: 'video', src: 'https://assets.example.com/backgrounds/gradient-loop.mp4', fit: 'cover' }, { type: 'text', text: '\"' + $json[0].q + '\"', x: 'center', y: '40%', fontSize: 38, fontWeight: 'bold', color: '#ffffff', maxWidth: '85%', textAlign: 'center', animations: [{ type: 'typewriter', speed: 30 }] }, { type: 'text', text: '— ' + $json[0].a, x: 'center', y: '62%', fontSize: 26, color: 'rgba(255,255,255,0.7)' }, { type: 'image', src: 'https://assets.example.com/logo-white.png', x: 'center', y: '90%', width: 120 }] }] }) }}"
}
]
}
}
}
Production Layer
Send the JSON template to the render API:
{
"name": "Render Video",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.jsonvideo.com/v1/render",
"method": "POST",
"headers": {
"Authorization": "Bearer {{ $credentials.jsonVideoApi.apiKey }}",
"Content-Type": "application/json"
},
"body": "={{ $json.videoJson }}"
}
}
The render takes 15-30 seconds. Poll the status endpoint until complete.
Distribution Layer
Post to Instagram via the Meta Graph API, TikTok via their Content Publishing API, and YouTube Shorts via the YouTube Data API v3. Each platform is a separate n8n HTTP Request node running in parallel after the render completes.
{
"name": "Post to Instagram",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://graph.facebook.com/v19.0/{{igUserId}}/media",
"method": "POST",
"body": {
"video_url": "={{ $json.outputUrl }}",
"caption": "={{ $json.quote }} #motivation #dailyquote",
"media_type": "REELS"
}
}
}
Total pipeline time: Under 2 minutes from trigger to published.
Workflow 2: News Digest Video
Output: One 3-5 minute news summary video per day, posted to YouTube and LinkedIn. Setup time: 1-2 hours. Running cost: ~$1.50-3.00/day.
Source Layer
Pull top stories from 3-5 RSS feeds in your niche using n8n's RSS Read node:
{
"name": "Fetch Tech News",
"type": "n8n-nodes-base.rssFeedRead",
"parameters": {
"url": "https://techcrunch.com/feed/"
}
}
Run multiple RSS nodes in parallel for different sources. Merge the results and sort by publication date.
Generation Layer
Send the top 3 stories to Claude for script generation:
{
"prompt": "Write a 90-second news script covering these 3 stories. Format: casual anchor style, short sentences, one transition phrase between stories. Stories: {{stories_json}}"
}
Then generate voiceover via ElevenLabs:
{
"name": "Generate Voiceover",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.elevenlabs.io/v1/text-to-speech/VOICE_ID",
"method": "POST",
"body": {
"text": "={{ $json.script }}",
"model_id": "eleven_turbo_v2_5",
"voice_settings": { "stability": 0.65, "similarity_boost": 0.8 }
},
"responseFormat": "file"
}
}
Production Layer
Build a multi-scene video template. Each story gets its own scene with a title card, relevant stock image (pulled from Unsplash API based on the story keywords), and the voiceover audio:
{
"resolution": "1920x1080",
"fps": 30,
"scenes": [
{
"duration": 5,
"comment": "Intro",
"layers": [
{ "type": "video", "src": "{{branded_intro_clip}}", "fit": "cover" },
{ "type": "text", "text": "Tech News — {{date}}", "x": "center", "y": "45%", "fontSize": 52, "fontWeight": "bold", "color": "#ffffff" }
]
},
{
"duration": 30,
"comment": "Story 1",
"layers": [
{ "type": "image", "src": "{{story1_image}}", "fit": "cover", "animations": [{ "type": "kenBurns", "zoom": 1.1 }] },
{ "type": "audio", "src": "{{voiceover_url}}", "startFrom": 0, "duration": 30 },
{ "type": "text", "text": "{{story1_headline}}", "x": "5%", "y": "8%", "fontSize": 32, "fontWeight": "bold", "color": "#ffffff", "backgroundColor": "rgba(0,0,0,0.6)", "padding": 12 }
]
},
{
"duration": 30,
"comment": "Story 2",
"layers": [
{ "type": "image", "src": "{{story2_image}}", "fit": "cover", "animations": [{ "type": "kenBurns", "zoom": 1.1 }] },
{ "type": "audio", "src": "{{voiceover_url}}", "startFrom": 30, "duration": 30 },
{ "type": "text", "text": "{{story2_headline}}", "x": "5%", "y": "8%", "fontSize": 32, "fontWeight": "bold", "color": "#ffffff", "backgroundColor": "rgba(0,0,0,0.6)", "padding": 12 }
]
},
{
"duration": 30,
"comment": "Story 3",
"layers": [
{ "type": "image", "src": "{{story3_image}}", "fit": "cover", "animations": [{ "type": "kenBurns", "zoom": 1.1 }] },
{ "type": "audio", "src": "{{voiceover_url}}", "startFrom": 60, "duration": 30 },
{ "type": "text", "text": "{{story3_headline}}", "x": "5%", "y": "8%", "fontSize": 32, "fontWeight": "bold", "color": "#ffffff", "backgroundColor": "rgba(0,0,0,0.6)", "padding": 12 }
]
}
]
}
After rendering, run the video through AutoCaptions to add burned-in subtitles. News content benefits enormously from captions because viewers often skim the text while listening at 1.5x speed.
Distribution Layer
Upload to YouTube with SEO-optimized title, description, and tags. Post a 60-second clip version to LinkedIn. Send the YouTube link to your email newsletter via Mailchimp's API.
Workflow 3: E-Commerce Daily Deals
Output: One product showcase video per day featuring today's best deals, posted to Instagram and emailed to subscribers. Setup time: 1 hour. Running cost: ~$0.15/day.
This workflow pulls today's sale products from WooCommerce or Shopify, generates a slideshow-style video with prices and product images, and distributes it.
Source Layer
// WooCommerce: Fetch products on sale
GET /wp-json/wc/v3/products?on_sale=true&per_page=5&orderby=popularity
// Shopify equivalent:
GET /admin/api/2024-01/products.json?collection_id=SALE_COLLECTION
Generation Layer
No AI needed. Map product data directly to a template. Each product gets a 4-second scene:
{
"resolution": "1080x1920",
"scenes": [
{
"duration": 3,
"layers": [
{ "type": "shape", "fill": "#FF3B30", "width": "100%", "height": "100%" },
{ "type": "text", "text": "🔥 TODAY'S DEALS", "x": "center", "y": "45%", "fontSize": 56, "fontWeight": "bold", "color": "#ffffff" }
]
}
]
}
Then programmatically append a scene for each product using n8n's Function node:
const products = $input.all();
const scenes = [introScene];
for (const product of products) {
scenes.push({
duration: 4,
layers: [
{ type: "image", src: product.json.images[0].src, fit: "cover" },
{ type: "shape", shape: "rectangle", x: 0, y: "70%", width: "100%", height: "30%", fill: "rgba(0,0,0,0.8)" },
{ type: "text", text: product.json.name, x: "5%", y: "74%", fontSize: 34, fontWeight: "bold", color: "#ffffff", maxWidth: "90%" },
{ type: "text", text: `Was $${product.json.regular_price}`, x: "5%", y: "86%", fontSize: 24, color: "rgba(255,255,255,0.5)", textDecoration: "line-through" },
{ type: "text", text: `Now $${product.json.sale_price}`, x: "40%", y: "86%", fontSize: 28, fontWeight: "bold", color: "#FFD700" }
]
});
}
return [{ json: { template: { resolution: "1080x1920", fps: 30, scenes } } }];
Render, post to Instagram Reels, and include product links in the caption. Browse the templates marketplace for pre-built e-commerce video templates.
Workflow 4: User-Generated Content Compilation
Output: Weekly testimonial/review compilation video. Setup time: 1.5 hours. Running cost: ~$0.20/week.
Source Layer
Monitor review platforms and social mentions: - Google Business reviews via the Google Business Profile API - Trustpilot reviews via their API - Social mentions via a Brand24 or Mention webhook - App store reviews via AppFollow
Generation Layer
Filter for 4-5 star reviews. Select the top 5 most compelling quotes. Generate a video where each review appears as a testimonial card:
{
"duration": 6,
"layers": [
{ "type": "shape", "fill": "#1a1a2e", "width": "100%", "height": "100%" },
{ "type": "text", "text": "★★★★★", "x": "center", "y": "25%", "fontSize": 42, "color": "#FFD700" },
{ "type": "text", "text": "\"{{review.text}}\"", "x": "center", "y": "45%", "fontSize": 30, "color": "#ffffff", "maxWidth": "80%", "textAlign": "center", "fontStyle": "italic" },
{ "type": "text", "text": "— {{review.author}}", "x": "center", "y": "68%", "fontSize": 22, "color": "rgba(255,255,255,0.6)" }
]
}
Distribution Layer
Post to Instagram (social proof drives conversions), add to your website's testimonial page, and include in the weekly email newsletter.
Workflow 5: Daily Horoscope / Niche Content
Output: 12 daily horoscope videos (one per zodiac sign) or similar niche daily content. Setup time: 2 hours. Running cost: ~$1.00/day for 12 videos.
This workflow demonstrates how to scale from 1 video/day to 12+ videos/day using the same pipeline with parameterized templates.
Source Layer
Use Claude to generate daily horoscope content for all 12 signs in a single API call:
{
"prompt": "Generate today's horoscope for all 12 zodiac signs. For each sign, write exactly 2 sentences (casual, specific, not vague). Return as JSON array with fields: sign, emoji, horoscope, luckyNumber, color."
}
Generation Layer
Use n8n's SplitInBatches node to create 12 separate video payloads — one per zodiac sign. Each video uses the same template but with different text and color scheme:
{
"resolution": "1080x1920",
"fps": 30,
"scenes": [
{
"duration": 3,
"layers": [
{ "type": "shape", "fill": "{{sign.color}}", "width": "100%", "height": "100%" },
{ "type": "text", "text": "{{sign.emoji}}", "x": "center", "y": "30%", "fontSize": 80 },
{ "type": "text", "text": "{{sign.name}}", "x": "center", "y": "48%", "fontSize": 48, "fontWeight": "bold", "color": "#ffffff" },
{ "type": "text", "text": "Daily Horoscope", "x": "center", "y": "58%", "fontSize": 24, "color": "rgba(255,255,255,0.7)" }
]
},
{
"duration": 7,
"layers": [
{ "type": "shape", "fill": "#1a1a2e", "width": "100%", "height": "100%" },
{ "type": "text", "text": "{{sign.horoscope}}", "x": "center", "y": "40%", "fontSize": 32, "color": "#ffffff", "maxWidth": "85%", "textAlign": "center", "lineHeight": 1.6 },
{ "type": "text", "text": "Lucky number: {{sign.luckyNumber}}", "x": "center", "y": "72%", "fontSize": 22, "color": "{{sign.color}}" }
]
}
]
}
Production Layer
Fire all 12 render requests in parallel. The JSON-to-Video API handles concurrent renders. Total render time for all 12: about 30-45 seconds.
Distribution Layer
Post each sign to its own Instagram account or as individual posts on one account. Use scheduled posting to spread them across the day (one every 2 hours). TikTok, YouTube Shorts, and Pinterest are also viable distribution channels for horoscope content.
Monitoring and Alerting
Production workflows fail. APIs go down, rate limits get hit, credentials expire. Build monitoring into every pipeline:
Slack Notifications
Add a Slack node after every critical step. At minimum, send alerts on:
- Render failures (API returned error or timeout)
- Distribution failures (platform rejected the upload)
- Daily summary (how many videos produced, total cost, any errors)
{
"name": "Alert on Failure",
"type": "n8n-nodes-base.slack",
"parameters": {
"channel": "#content-pipeline",
"text": "⚠️ Video render failed for {{ $json.workflowName }}: {{ $json.errorMessage }}"
}
}
Daily Summary Email
Use n8n's built-in email node or SendGrid to email yourself a daily report:
Daily Content Machine Report — March 10, 2026
Videos produced: 14
Videos published: 14
Platforms: Instagram (14), TikTok (14), YouTube Shorts (12)
Total render cost: $1.82
Errors: 0
Pipeline uptime: 100%
Cost Tracking
Track API spending by adding a Google Sheets or Airtable node that logs every render's cost. At the end of each month, you'll know exactly what each workflow costs.
| Workflow | Daily Cost | Monthly Cost | Videos/Month |
|---|---|---|---|
| Quote video | $0.08 | $2.40 | 30 |
| News digest | $2.50 | $75.00 | 30 |
| Daily deals | $0.15 | $4.50 | 30 |
| UGC compilation | $0.20 | $0.80 | 4 |
| Horoscope (12 signs) | $1.00 | $30.00 | 360 |
| Total | $3.93 | $112.70 | 454 |
454 videos per month for $112.70. That's $0.25 per finished, captioned, published video.
Scaling: From 1 to 100 Videos Per Day
1-5 Videos/Day
A single n8n instance on a $5/month VPS handles this easily. Sequential rendering is fine. No special infrastructure needed.
5-20 Videos/Day
Start parallelizing renders. Use n8n's SplitInBatches with a batch size of 5. The JSON-to-Video API supports concurrent requests on paid plans. A Pro subscription handles this volume comfortably.
20-50 Videos/Day
You'll hit n8n's default execution limits. Increase EXECUTIONS_TIMEOUT and EXECUTIONS_DATA_MAX_AGE in your n8n config. Consider splitting workflows into sub-workflows that n8n calls via the Execute Workflow node — this prevents a single long-running execution from blocking others.
50-100+ Videos/Day
At this scale, you need: - n8n running on a dedicated server (4 CPU, 8GB RAM minimum) - Redis as the queue backend for n8n - A dedicated render queue that batches API calls efficiently - An Enterprise or custom API plan for render volume pricing - Monitoring via Grafana or Datadog, not just Slack alerts
Most individual creators never need this scale. Agencies managing 10+ brand accounts typically hit 50-100 videos/day across all clients.
Quality Assurance Checks
Automation without QA produces garbage at scale. Add these checks between the Production and Distribution layers:
Duration check: Verify the rendered video is within expected duration (e.g., 8-12 seconds for a quote video). A 0-second video means the render failed silently.
// n8n IF node
if ($json.duration < 5 || $json.duration > 120) {
// Route to error handler
}
File size check: A 1080x1920 10-second video should be 2-8MB. Under 500KB usually means a blank render. Over 50MB means something went wrong with compression.
Caption verification: After AutoCaptions processing, check that the captioned video's duration matches the original. A mismatch indicates a captioning error.
Content moderation: For AI-generated scripts (news digest, horoscope), run the text through a moderation API before rendering. Catches hallucinations and inappropriate content before they go live.
Getting Started
Pick one workflow and deploy it today. The quote video workflow (Workflow 1) is the easiest starting point — it takes 30 minutes to set up and costs $0.08/day. Once it's running reliably for a week, add a second workflow.
The key resources: - n8n Setup Guide — Installation and initial configuration - JSON-to-Video API — Video rendering from JSON templates - AutoCaptions — Automated subtitle generation - Template Marketplace — Pre-built video templates - Subscription Plans — Volume pricing for high-output pipelines
A content machine isn't about producing the most videos. It's about producing consistent, quality videos without your daily involvement. Start with one workflow, validate it works, then stack the next one on top. Within a month, you'll have a pipeline producing more content than a small production team — running on autopilot while you focus on strategy.
Related Articles
n8n + WooCommerce: Auto-Generate Product Videos from Your Store
Connect WooCommerce to n8n and auto-generate product videos for every listing. Complete workflow wi…
Read more →How to Automate Video Captions with an API and n8n Workflows
Automate video captions at scale with API and n8n. Burn-in subtitles, translate captions, customize…
Read more →WhatsApp Video Automation: Slideshows, Status Updates & Business Messages
Automate WhatsApp video messages, slideshows, and status updates with n8n workflows and video APIs.…
Read more →