ClaudeCreativeVideoAI score · PendingAI-assisted edit · no obvious prompt-injection riskn8n.io

n8n Weekly Auto-Publish AI Social Videos: Airtable + Claude + Sora + Buffer

Input: Airtable topic pool and history; Processing: scheduled trigger → deduplication → Claude caption → Sora 720×1280 video → Cloudinary hosting → Buffer publish; Output: timed video posts to LinkedIn and Instagram

Some experienceStepsWorkflowPrompt
Who
Social media operators or small teams who maintain multi-platform video content and want to avoid repeating topics
You get
Automatically pick an unused topic from Airtable each week, generate a Dutch caption and vertical AI video, host via Cloudinary, publish to LinkedIn and Instagram through Buffer, and log back to history
You need
n8n · airtable · cloudinary · buffer

Constraints

Prerequisites: n8n instance; Airtable personal access token; Anthropic API key (Claude access); OpenAI API key (Sora access); Cloudinary account; Buffer account with organization and channel IDs. Configure Airtable Topics table (Topic text + Active checkbox) and Reels table (Created time date + Topic + Post long text). Cost: Sora video generation is the slowest and most expensive step; weekly scheduling is recommended over daily.

What they did

Author woutbelmans created an n8n official template workflow triggered weekly by Schedule Trigger, chaining Airtable queries, JavaScript deduplication, Claude HTTP Request caption generation, Sora video generation, Cloudinary upload, Buffer dual-platform publishing, and Airtable write-back to achieve end-to-end automation from topic selection to social publishing.

How it went

Expected behavior per template description: automatically generate non-repeating vertical AI video posts weekly and publish to LinkedIn and Instagram (basis=template; no author-tested performance data provided).

Worth knowing

1. The anti-repeat mechanism depends on the Reels table's Created time field (must be Created time type, not a normal date), or it silently breaks. 2. Sora video generation is the slowest and most expensive step, which is why the template runs weekly rather than daily. 3. The Claude prompt's brand context (Kijkes) and tone rules are author examples and must be replaced with your own business information. 4. With fewer than 15 active topics, an empty pool causes the workflow to safely terminate at the Is Valid Reel? node via the No Operation branch instead of repeating content. 5. This site has not tested the workflow (reproduction=not_tested); after setup, manually trigger with a single topic to validate the full pipeline.

n8n workflow template

Structure checked · Not run-tested

Use “Import from File” in n8n, or copy the JSON and paste it into the editor. Connect your own accounts, then try test data. The template is inactive by default.

Setup and test checklist

Credentials to connect

  • After import, connect your own credentials on auth-required nodes; author secrets are not included.

Configuration to replace

  • Source template is n8n public workflow #17119 (~18 nodes). Keep inactive after import; verify triggers, expressions and external API endpoints.
  • Sticky-note guidance is informational; replace placeholders with your own accounts, sheet schemas or channel IDs.

Test input and expected output

  • Manually run the main path once in a test workspace and confirm credentialed nodes authenticate without errors.
  • Drive one synthetic/redacted sample through and check output fields and downstream writes before enabling in production.

Template changes

  • Author credential bindings, webhookId and execution data are removed; the workflow is inactive. Nodes, connections and original prompts are preserved. Not run-tested in n8n.
  • No business-logic edits; verify keys, quotas and privacy compliance before use.

Template retrieved: 2026-10-24

Steps

  1. Configure Airtable database and credentials

    Create an Airtable Base with two tables: Topics and Reels. Topics fields: Topic (single line text), Active (checkbox). Reels fields: Date (Created time—must not be a normal date field), Topic (single line text), Post (long text). Add an Airtable credential (personal access token) in n8n, then enter the Base ID and table IDs in the Get Reel Ideas and Check History Reels nodes.

  2. Configure Claude, OpenAI, Cloudinary, and Buffer credentials

    Add credentials in n8n for: Anthropic API (Claude caption node), OpenAI API (Sora access for Generate a video node), Cloudinary (video upload node), and Buffer (publish nodes). In both Buffer nodes (Create LinkedIn Video and Create Instagram Reel), select your organization ID and channel ID from the dropdowns.

  3. Set schedule trigger and read topic pool

    The Schedule Trigger Reels node fires weekly on Monday at 17:00 (workflow timezone); adjust day and hour in the node if needed. The Get Reel Ideas node reads all rows where {Active} = TRUE() from the Topics table as the candidate pool.

  4. Deduplicate and randomly pick an unused topic

    The Check History Reels node fetches the last 14 records sorted by Date descending, with Always output data enabled so an empty table does not stop the run. The Filter and Choose Reel Topic node runs JavaScript to compare active topics against the last 14, filters out used topics, randomly selects one, and outputs { topic, isValid }. If all topics are exhausted, isValid=false and the workflow routes to the No Operation dead-end branch.

    Execution prompt · Source text。n8n Code node (Filter and Choose Reel Topic) JS Code field

    // 1. Haal de beschikbare topics op uit de 'Get Ideas' node
    const availableRecords = $('Get Reel Ideas').all();
    const availableTopics = availableRecords.map(item => {
      return item.json.Topic || item.json.topic || (item.json.fields ? item.json.fields.Topic : undefined);
    }).filter(t => t !== undefined);
    
    // 2. Haal de LAATSTE 14 posts op uit de 'Check History Posts' node
    const historyRecords = $('Check History Reels').all();
    const recentTopics = historyRecords.map(item => {
      return item.json.Topic || item.json.topic || (item.json.fields ? item.json.fields.Topic : undefined);
    }).filter(t => t !== undefined);
    
    // 3. Filter: Hou alleen de onderwerpen over die NIET in de afgelopen 14 dagen zijn gepost
    const freshTopics = availableTopics.filter(topic => !recentTopics.includes(topic));
    
    // 4. Als ALLE beschikbare opties in de afgelopen 14 dagen al zijn gebruikt
    if (freshTopics.length === 0) {
      return [{
        json: {
          topic: "Alle beschikbare topics zijn de afgelopen 14 dagen al gepost!",
          isValid: false
        }
      }];
    }
    
    // 5. Kies een willekeurig onderwerp uit de "toegestane" lijst
    const chosenTopic = freshTopics[Math.floor(Math.random() * freshTopics.length)];
    
    return [{
      json: {
        topic: chosenTopic,
        isValid: true
      }
    }];
  5. Claude generates video caption

    After Is Valid Reel? confirms isValid=true, the Claude - Write Post Text1 node calls the Anthropic Messages API via HTTP Request using model claude-sonnet-5 and max_tokens=500. The request body user content includes brand context, task description, and strict rules (60–90 words, max 2 emojis, exactly 5 hashtags, direct hands-on tone, pain point→solution→CTA structure). Replace the brand context with your own business information. The Put Text in Variable1 node extracts plain text from the response and saves it as postText for downstream nodes.

    Execution prompt · Source text。n8n HTTP Request node (Claude - Write Post Text1) JSON Body field

    ={
      "model": "claude-sonnet-5",
      "max_tokens": 500,
      "messages": [
        {
          "role": "user",
          "content": "Je bent een ervaren content schrijver voor 'Kijkes'.\n\nBEDRIJFSCONTEXT:\nKijkes is GEEN traditioneel webdesignbureau. Wij bouwen automatisch, razendsnel en zonder gedoe professionele websites voor Belgische ondernemers (kmo's) die nu nog geen online aanwezigheid hebben.\n\nOPDRACHT:\nSchrijf een super vlot, kort bijschrift (caption) voor een Instagram Reel / LinkedIn Video in het Nederlands. De kijker ziet op de achtergrond een strakke, paarse 3D tech-animatie.\n\nONDERWERP: {{ $json.topic }}\n\nSTRIKTE REGELS:\n- Lengte: Maximaal 60 tot 90 woorden (kort en krachtig voor social video).\n- Emojis: Maximaal 2 subtiele, functionele emoji's (bijv. 📱, 🚀).\n- Hashtags: Gebruik er exact 5 onderaan: #belgischeondernemers #kmo #ondernemen #kijkes #website\n- Toon: Direct, hands-on, herkenbaar voor de hardwerkende zelfstandige.\n- Structuur: Begin meteen met de pijn/haak (bijv. 'Geen website = onzichtbaar...'), bied Kijkes aan als de automatische oplossing vanaf €39/md, en eindig met een call-to-action (bijv. 'Typ WEBSITE in de reacties!').\n\nGeef ALLEEN de tekst van de post terug, zonder inleiding of extra opmerkingen."
        }
      ]
    }
  6. Sora generates 720×1280 vertical video

    The Generate a video node calls OpenAI Sora (model sora-2), size set to 720x1280, resource set to video. The prompt is an English visual description with dynamic 3D objects, lavender-grey minimal background, neon light streams, and constraints banning text, human faces, and photorealism. The {{ $('Is Valid Reel?').item.json.topic }} expression injects the selected topic dynamically. Video generation is the slowest and most expensive step.

    Execution prompt · Source text。n8n OpenAI node (Generate a video) Prompt field

    =A premium 3D motion graphics animation in a modern tech SaaS aesthetic, 720x1280 vertical aspect ratio, perfect for Instagram Reels loop. VISUAL SCENE: Dynamic and stylized 3D objects, clay-textured tech devices, and abstract geometric elements that visually represent and match the topic: '{{ $('Is Valid Reel?').item.json.topic }}'. BACKGROUND & MOVEMENT: A clean, minimalist soft lavender-grey and white infinite digital workspace. Vibrant purple (#6C54F7) neon light streams and glossy abstract shapes pulse, float, and morph smoothly in the center of the screen. The camera does a very subtle, elegant zoom-in. CRITICAL CONSTRAINTS: Absolutely NO text, NO typography, and NO letters anywhere on the screen. Focus purely on clean, high-end 3D symbolic and abstract visuals. No real human faces, no photorealism, high-end clean render style.
  7. Upload video, publish to both platforms via Buffer, and log back to Airtable

    The Upload Reel to Cloudinary node uploads the generated video as type video and returns a public URL. The Create LinkedIn Video and Create Instagram Reel nodes send postText (from Put Text in Variable1) and videoUrl (Cloudinary URL) to Buffer with attachmentType video. Finally, the Log Posted Reel node writes Topic and Post into the Reels table to maintain anti-repeat memory. Keep at least 15 active topics; otherwise the empty pool will cause the workflow to safely terminate at Is Valid Reel?.

Prompt you can copy

Setup guidance · Editorial suggestion。Hand to setup assistant: confirm inputs and permissions before configuring nodes

This block is the prompt. Ads are never placed here.

You are setting up an n8n workflow that automatically selects an unused topic from an Airtable pool each week, generates a Dutch video caption with Claude, creates a 720×1280 vertical video with Sora, hosts it on Cloudinary, and publishes to LinkedIn and Instagram via Buffer. First confirm you have: Airtable personal access token and Base/table IDs; Anthropic API key; OpenAI API key with Sora access; Cloudinary account; Buffer organization and channel IDs. Ensure your Airtable Base has a Topics table (Topic + Active) and a Reels table (Created time Date + Topic + Post) as specified, with at least 15 active topics. Then configure nodes step by step, replacing the brand context in the Claude request body with your own business information, and verify the organization and channel dropdowns in both Buffer nodes.

Replace brand context, confirm Buffer channel IDs, maintain 15+ active topics

Source

Publish weekly AI social videos with Airtable, Claude, Sora, Cloudinary, and Buffer · woutbelmans · n8n.io · 2026-07-14

Comments & feedback

Tried this method? Share results, problems or improvements. Comments appear after moderation. Please avoid sensitive information.

Loading…

    Related