AutomationFlowsAI & RAG › AI-Powered Faceless YouTube Shorts Generator

AI-Powered Faceless YouTube Shorts Generator

Original n8n title: Faceless Shorts

Faceless Shorts. Uses lmChatOpenAi, mcpClientTool, outputParserStructured, httpRequest. Event-driven trigger; 17 nodes.

Event trigger★★★★☆ complexityAI-powered17 nodesOpenAI ChatMcp Client ToolOutput Parser StructuredHTTP RequestYouTubeAgentRSS Feed Read
AI & RAG Trigger: Event Nodes: 17 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Agent → HTTP Request 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": "Faceless Shorts",
  "nodes": [
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4o-mini",
          "mode": "list",
          "cachedResultName": "gpt-4o-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        -1000,
        1620
      ],
      "id": "f660ea28-4469-47c9-9a8a-ca8dd480ac09",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sseEndpoint": "http://localhost:3123/mcp/sse",
        "include": "selected",
        "includeTools": [
          "create-short-video"
        ]
      },
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "typeVersion": 1,
      "position": [
        -900,
        1620
      ],
      "id": "b6926158-1343-471d-b1db-397c1281bf65",
      "name": "MCP Client"
    },
    {
      "parameters": {
        "aggregate": "aggregateAllItemData",
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        20,
        1160
      ],
      "id": "c9d544cd-f3c1-439b-a6dc-83a5fc03b4f6",
      "name": "Aggregate"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        -620,
        1380
      ],
      "id": "d63e39e8-b2d9-4e8f-a1d0-6f501d28e88a",
      "name": "Wait"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "6cc1bd80-2bb7-47b6-950e-be3d6a36a965",
              "leftValue": "={{ $json.status }}",
              "rightValue": "ready",
              "operator": {
                "type": "string",
                "operation": "equals",
                "name": "filter.operator.equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -180,
        1380
      ],
      "id": "d0a0b8b2-bd19-4353-9595-24a65ef457f0",
      "name": "If"
    },
    {
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n    \"type\": \"object\",\n    \"properties\": {\n        \"videoId\": {\n            \"type\": \"string\",\n            \"description\": \"the id of the video\"\n        },\n        \"videoTitle\": {\n            \"type\": \"string\",\n            \"description\": \"the title of the video on Youtube\"\n        }\n    },\n    \"required\": [\n        \"videoId\",\n        \"videoTitle\"\n    ]\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.2,
      "position": [
        -800,
        1620
      ],
      "id": "c44d923f-3b89-4752-80cb-034bc5345d55",
      "name": "Structured Output Parser"
    },
    {
      "parameters": {
        "content": "# n8n \u89c6\u9891\u5de5\u5382\n## Create short videos from r/Jokes\n\u672c\u5de5\u4f5c\u6d41\u4ece Agent A-Z \u9002\u914d\uff0c\u4fee\u6b63\u9ed8\u8ba4\u914d\u7f6e\u8dd1\u4e0d\u901a\u7684\u60c5\u51b5\n\n[\u82f1\u6587\u6559\u7a0b](https://youtu.be/jzsQpn-AciM)\n[Discord](https://discord.gg/G7FJVJQ6RE)\n[\u4e2d\u6587\u6559\u7a0b]()",
        "height": 220,
        "width": 1400
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1040,
        900
      ],
      "id": "477c641f-335c-47b8-ae99-3a9bfdfe744a",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "url": "=http://localhost:3123/api/short-video/{{ $('Generate video').item.json.output.videoId }}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        40,
        1360
      ],
      "id": "c281d32a-c97c-4a98-b26e-84ce2d5d8f79",
      "name": "Download the video",
      "alwaysOutputData": false,
      "retryOnFail": false
    },
    {
      "parameters": {
        "resource": "video",
        "operation": "upload",
        "title": "={{ $('Generate video').item.json.output.videoTitle }}",
        "regionCode": "HU",
        "categoryId": "24",
        "options": {}
      },
      "type": "n8n-nodes-base.youTube",
      "typeVersion": 1,
      "position": [
        240,
        1360
      ],
      "id": "f6c73d0d-9f46-4334-9a2e-9f1df530de30",
      "name": "Share on YouTube",
      "disabled": true
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -640,
        1160
      ],
      "id": "0b5e6e27-679e-45fa-9a24-a570b7b1a0f7",
      "name": "When clicking \u2018Test workflow\u2019"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=<Instruction>\nTurn the following joke into a video. Keep everything, but make slight tweaks so it's easy to understand it in a text-to-speech video format with subtitles.\n\nReturn the video ID and the title of the video for the Youtube upload.\n</Instruction>\n\n<Joke>\n{{ $json.data[8].title }}\n{{ $json.data[8].contentSnippet }}\n</Joke>",
        "hasOutputParser": true,
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.8,
      "position": [
        -1000,
        1380
      ],
      "id": "503b2e67-14f2-4ed5-8514-136e27a1924c",
      "name": "Generate video"
    },
    {
      "parameters": {
        "url": "=http://localhost:3123/api/short-video/{{ $('Generate video').item.json.output.videoId }}/status",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -420,
        1380
      ],
      "id": "5debfcf3-2a0d-4afd-9334-be81a63a29ff",
      "name": "Check video status",
      "alwaysOutputData": false,
      "retryOnFail": false
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "220a5d64-eea7-47fb-9557-682ed4ac2670",
              "name": "title",
              "value": "={{ $json.title }}",
              "type": "string"
            },
            {
              "id": "667fc922-3cb8-41cf-b86e-e635cf75bdc2",
              "name": "contentSnippet",
              "value": "={{ $json.contentSnippet.split('submitted')[0].trim() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -200,
        1160
      ],
      "id": "0a45c2de-acd8-4849-95d0-d3b5c0b36dba",
      "name": "Map fields"
    },
    {
      "parameters": {
        "url": "=https://www.reddit.com/r/Jokes/top/.rss?t=week",
        "options": {}
      },
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.1,
      "position": [
        -420,
        1160
      ],
      "id": "d6931bb4-ffda-4fdb-a586-266e7784c734",
      "name": "Get top weekly posts"
    },
    {
      "parameters": {
        "content": "# Create short videos from r/Stories",
        "width": 2760
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -720,
        2820
      ],
      "id": "06683fd3-cca9-4d67-9d08-7efa0e3d2836",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "# Troubleshooting Youtube\n\n1. If you are running n8n locally, set the \n\n```N8N_DEFAULT_BINARY_DATA_MODE=filesystem```\n\nenvironment variable if you are getting 400 HTTP errors\n\n2. Youtube has a daily upload limitations on uploading videos using the API - you can only upload up to 6 videos\n",
        "height": 300,
        "width": 700,
        "color": 2
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2280,
        1020
      ],
      "id": "c486dd94-d119-43d1-b190-b44fb63d3cc9",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "content": "# \u5982\u4f55\u8fd0\u884c MCP Server\n\n## \u5efa\u8bae\n\n### CPU image\n```bash\ndocker run -it --rm --name short-video-maker -p 3123:3123 -e LOG_LEVEL=debug -e PEXELS_API_KEY=563492ad6f91700001000001458XXX gyoridavid/short-video-maker:latest-tiny\n```\n\n### NVIDIA GPUs\n```bash\ndocker run -it --rm --name shorts-video-maker -p 3123:3123 \\\n  -e PEXELS_API_KEY= --gpus=all \\\n  gyoridavid/short-video-maker:latest-cuda\n```\n\n### Using npm (\u4e0d\u5efa\u8bae\uff0c\u6211\u6ca1\u8dd1\u901a)\n\n```bash\nLOG_LEVEL=debug PEXELS_API_KEY= npx short-video-creator\n```\n\n## Resources\n\n- [Github](https://github.com/gyoridavid/short-video-maker)\n- [npm](https://www.npmjs.com/package/short-video-maker)\n- [Docker](https://hub.docker.com/r/gyoridavid/short-video-maker)",
        "height": 880,
        "width": 1140,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        600,
        900
      ],
      "id": "29776b17-8deb-4d45-96c7-9a49d6e1e92c",
      "name": "Sticky Note6"
    }
  ],
  "connections": {
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate video",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "MCP Client": {
      "ai_tool": [
        [
          {
            "node": "Generate video",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Generate video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Check video status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "Download the video",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Generate video",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Download the video": {
      "main": [
        [
          {
            "node": "Share on YouTube",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Test workflow\u2019": {
      "main": [
        [
          {
            "node": "Get top weekly posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate video": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check video status": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map fields": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get top weekly posts": {
      "main": [
        [
          {
            "node": "Map fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "b2bea02b-a176-4da5-8497-2473ac2e6d05",
  "id": "hCoOFTKHSHeiRgkI",
  "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

Faceless Shorts. Uses lmChatOpenAi, mcpClientTool, outputParserStructured, httpRequest. Event-driven trigger; 17 nodes.

Source: https://github.com/hylarucoder/n8n-labs/blob/f3c6cd0211552c71491200c3e8709f74aa03d99e/Faceless_Shorts.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Digital marketers, content creators, social media managers, and businesses who want to use AI marketing automation for YouTube Shorts without spending hours on production. This AI workflow helps anyon

OpenAI, HTTP Request, OpenAI Chat +7
AI & RAG

This is an automated blog post generation system that: Researches topics using AI agents and web search tools Writes complete blog posts with proper SEO structure Generates custom images for each post

Output Parser Structured, Google Gemini Chat, HTTP Request Tool +11
AI & RAG

Hacker News to Video Template - AlexK1919. Uses manualTrigger, hackerNews, splitInBatches, lmChatOpenAi. Event-driven trigger; 48 nodes.

Hacker News, OpenAI Chat, Tool Http Request +11
AI & RAG

This workflow is designed for content creators, marketing teams, and automation builders who want to produce short-form video content at scale without manual editing.

Google Gemini, Telegram Trigger, Google Drive +6
AI & RAG

This workflow is built for: AI storytellers, content creators, YouTubers, and short-form video marketers Anyone looking to transform text prompts into cinematic AI-generated videos fully automatically

Output Parser Structured, OpenAI Chat, HTTP Request +3