Step by step instructions
I’ve broken down every step carefully, and following them will absolutely get your YouTube automation system set up.
I know this might seem like a lot at first, but with some time and effort, anyone can make it work.
If you’d prefer a faster start, my team can set it up for you. Just click here to skip the steps and see how we can assist.
If you decide to set it up yourself and run into any challenges, don’t worry. Here’s where you can find support for each tool:
  • OpenAI: For help with ChatGPT or API issues, visit their support page at help.openai.com. You can find FAQs, documentation, or submit a request to their team.
  • n8n: Get assistance through the n8n Community Forum at community.n8n.io, where you can ask questions and get help from other users and the n8n team.
  • JSON2Video: Reach out to their support team via email at support@json2video.com, or check their documentation for troubleshooting tips.
This guide provides a comprehensive walkthrough to set up an AI-powered YouTube automation system using n8n.io​, integrating tools like ChatGPT, Google Sheets, JSON2Video.com, ElevenLabs.io​, and Suno.
You’ll automate the creation of long-form YouTube videos. Generating ideas, scripts, visuals, voiceovers, background music, and publishing them daily or hourly. Without any coding skills. Each step includes detailed instructions, and I’ll describe images and flowcharts to help you visualize the process.
Overview of the Workflow
The automation system consists of three main sections:
  • Input Section: Pulls video ideas from Google Sheets and generates prompts for scripts and visuals.
  • Creation Section: Uses AI tools to produce the video, including voiceovers, images, and music.
  • Output Section: Publishes the video to YouTube and updates the status in Google Sheets.
Flowchart Description: Imagine a flowchart with three columns:
  • Input (Left): A box labeled "Schedule Trigger" connects to "Google Sheets (Get Ideas)" and then to "Basic LLM Chain (Prompts)."
  • Creation (Middle): A box labeled "Google Sheets (Get Music/Intro)" leads to "HTTP Request (Create Video)," followed by "Wait," "HTTP Request (Get Video)," and a "Switch" node branching into "Done," "Running," and "Error."
  • Output (Right): The "Done" branch connects to "Google Sheets (Add Video URL)," "HTTP Request (Get Video File)," "YouTube (Upload)," and "Google Sheets (Mark as Done)."
Step 1: Generate Video Ideas with ChatGPT (Ideas Agent)
  1. Sign Up for ChatGPT:
  • Go to chat.openai.com and create an account if you don’t have one. This tool will generate video ideas for your chosen niche.
  1. Craft a Prompt for Video Ideas:
  • Use a structured prompt to generate ideas. Here’s an example:
Generate 5 video ideas on the topic of [stoicism]. For each idea, provide a table with the following columns: Video Title, Caption, Main Character, Character Style Prompt, Production Status, and Keywords. Set Production Status to 'For Production'. Example: Video Title: "The Stoic Lion", Caption: "A lion teaches stoic lessons", Main Character: "Lion", Character Style Prompt: "A majestic lion in a stormy forest", Production Status: "For Production", Keywords: "stoicism, lion, wisdom".
  • Replace "[stoicism]" with your niche (e.g., "sleep stories," "horror themes," or "children’s stories").
  1. Run the Prompt:
  • Paste the prompt into ChatGPT and press Enter. It will output a table with 5 video ideas. For example:
  • Video Title: "The Stoic Lion", Caption: "A lion teaches stoic lessons", Main Character: "Lion", Character Style Prompt: "A majestic lion in a stormy forest", Production Status: "For Production", Keywords: "stoicism, lion, wisdom".
  • Repeat for other ideas (e.g., using a bear, fox, etc., as main characters).
  1. Set Up a Google Sheet:
  • Create two sheets: "Sheet 1" for video ideas and "Sheet 2" for music/intro data.
  • In Sheet 1, add these column headers: Video Title, Caption, Main Character, Character Style Prompt, Production Status, Keywords.
  • Copy the table from ChatGPT and paste it into Sheet 1. Ensure each row’s "Production Status" is "For Production."
Step 2: Sign Up for n8n.io and Create a Workflow
  1. Sign Up for n8n.io​:
  • Visit n8n.io​ and sign up for a free trial. n8n.io​ is a no-code automation tool that connects various apps, similar to Zapier or Make.com, but more flexible for AI integrations.
  1. Create a New Workflow:
  • On the n8n dashboard, click the "Create Workflow" button in the top right corner.
  • You’ll see a blank canvas with a default node labeled "Start."
  1. Rename the Workflow:
  • Click the workflow name (top left) and rename it to "YouTube Creator Agent" so you can easily find it later.
  1. Understand the Node Structure:
  • Each node in n8n has three sections: Input (data from previous nodes), Configuration (settings for the node), and Output (data passed to the next node).
Step 3: Set Up the Input Section (Ideas and Prompts)
  1. Add a Schedule Trigger:
  • Delete the default "Start" node by selecting it and pressing Delete.
  • Click the "+" icon, search for "Schedule Trigger," and add it.
  • In the Configuration panel, set the frequency to "Once a day" (you can change it to hourly later). This trigger determines how often the automation runs.
  1. Connect Google Sheets to Pull Video Ideas:
  • Click the "+" icon on the Schedule Trigger node, search for "Google Sheets," and add it.
  • Rename the node to "Get Ideas" by double-clicking its name.
  • Choose the "Get Rows in Sheet" action.
  • Set up credentials:
  • In the "Credentials" field, click "Create New Credential."
  • Select "Google Sheets API," sign in with your Google account, and authorize n8n to access your Sheets.
  • Configure the node:
  • Document: Select the Google Sheet you created in Step 1.
  • Sheet: Choose "Sheet 1."
  • Filter: Add a filter where "Column" is "Production Status" and "Value" is "For Production."
  • Options: Toggle "Return Only First Matching Row" to process one idea at a time.
  • Test the step by clicking "Test Step." It should return the first row with "Production Status" as "For Production" (e.g., "The Stoic Lion").
  1. Generate Prompts with Basic LLM Chain:
  • Click the "+" icon on the "Get Ideas" node, search for "Basic LLM Chain," and add it.
  • Rename the node to "Prompts."
  • Configure the prompt to generate 10 scenes with voice text and image prompts:
  • In the "Prompt" field, paste this example (or use the one from the video’s community resources):
Generate 10 scenes for a video titled {{node["Get Ideas"].first().json["Video Title"]}} with caption {{node["Get Ideas"].first().json["Caption"]}}. For each scene, provide a voice_text (what the voiceover says) and an image_prompt (description for generating an image). Output in JSON format: { "scenes": [{ "voice_text": "", "image_prompt": "" }] }.
  • Add a system prompt to define the model’s role:
You are a creative scriptwriter for YouTube videos. Your task is to generate 10 scenes for a video on {{node["Get Ideas"].first().json["Keywords"]}}. Use {{node["Get Ideas"].first().json["Main Character"]}} described as {{node["Get Ideas"].first().json["Character Style Prompt"]}} as the main character. For each scene, provide a voice_text (50-100 words for voiceover) and an image_prompt (a detailed description for generating an image). Return the output in JSON format with 10 scenes.
  • Set up the model:
  • Under "Model," select "OpenAI."
  • Add your OpenAI API key: Go to platform.openai.com, create a new secret key, and paste it into the "Create New Credential" field.
  • Choose "GPT-4o" as the model for better results.
  • Add a structured output parser:
  • Under "Output Parser," select "Structured Output Parser."
  • Paste this JSON format:
json
{ "scenes": [ { "voice_text": "The lion stands tall amidst the storm, unwavering.", "image_prompt": "A majestic lion on a cliff, storm clouds swirling, lightning in the distance." } ] }
  • This ensures the output is a JSON with 10 scenes, each having a "voice_text" and "image_prompt."
  • Test the step to confirm it generates 10 scenes (e.g., voice_text: "The lion stands tall amidst the storm, unwavering," image_prompt: "A majestic lion on a cliff, storm clouds swirling, lightning in the distance").
Step 4: Set Up Background Music and Intro Video
  1. Prepare Sheet 2 in Google Sheets:
  • In your Google Sheet, create "Sheet 2" with these column headers: To Use, Intro Video, Randomize Audio.
  • Add one row with "To Use" set to "Final." Leave "Intro Video" and "Randomize Audio" empty for now.
  1. Generate Background Music with Suno:
  • Go to suno.com and sign up for a free account.
  • Generate a music prompt using ChatGPT: Go back to ChatGPT and ask, "Create a music prompt for Suno for a calming instrumental for a stoicism video." You might get: "A serene instrumental with soft piano and strings, evoking calmness and resilience."
  • In Suno, paste the prompt, select "Instrumental," and click "Create."
  • Once generated, download the MP3 file via the ellipsis menu ("Download MP3 Audio").
  • Image Description: A screenshot of Suno’s interface with a prompt entered ("A serene instrumental with soft piano and strings, evoking calmness and resilience"), the "Instrumental" checkbox ticked, and the "Create" button highlighted.
  1. Upload Music to JSON2Video:
  • Sign up for JSON2Video at json2.video and get your free API key via "Get Your Free API Key."
  • Go to "Movie Templates," click "Add New Template," and name it "Uploader Template."
  • Add an element: Click "Scene," then "Add Element," and select "Audio."
  • Click the pencil icon next to "Audio," go to the "Uploads" tab, and upload the MP3 file from Suno.
  • Save the template, then click the pencil icon again to copy the source URL of the uploaded audio.
  • In your Google Sheet (Sheet 2), paste the URL into the "Randomize Audio" column. If you want to randomize between multiple songs, generate more in Suno, upload them, and add their URLs in additional rows. Use a formula like =INDEX(C2:C5, RANDBETWEEN(1, COUNTA(C2:C5))) to randomize.
  1. Get an Intro Video:
  • In the same JSON2Video template, add another element: Click "Add Element," select "Video."
  • Click the pencil icon next to "Video," go to the "Pexels" tab, and browse free stock videos (e.g., a serene landscape for stoicism).
  • Select a video, save the template, and copy the source URL.
  • Alternatively, upload your own intro video and copy its URL.
  • Paste the URL into the "Intro Video" column in Sheet 2.
  1. Connect to n8n:
  • In n8n, add another "Google Sheets" node, rename it "Get Music," and connect it to the "Prompts" node.
  • Select "Sheet 2," filter for "To Use" equals "Final," and test to retrieve the intro video and randomized audio URLs.
Step 5: Create the Video with JSON2Video
  1. Set Up HTTP Request for Video Creation:
  • Add an "HTTP Request" node, rename it "Create Video," and connect it to "Get Music."
  • Set the method to "POST."
  • Configure authentication:
  • Select "Generic Credential Type," then "Header."
  • Click "Create New Credential," set the name to "X-API-Key," and paste your JSON2Video API key (found in your JSON2Video dashboard under "API Keys" or in your email).
  • Rename the credential to "JSON2Video" and save.
  • Toggle "Send Body" on, set the body type to "JSON," and paste the JSON payload (from the community resources). Here’s an example:
json
{ "template_id": "your-template-id", "variables": { "voice_provider": "elevenlabs", "voice_id": "Nathaniel-voice-id", "image_model": "flux-pro", "background_music": "{{node['Get Music'].first().json['Randomize Audio']}}", "intro_video": "{{node['Get Music'].first().json['Intro Video']}}", "title": "{{node['Get Ideas'].first().json['Video Title']}}", "clips": "{{node['Prompts'].json['scenes']}}" } }
  • Replace "your-template-id" with the default template ID provided in the community resources.
  • The payload uses ElevenLabs for voiceovers (Nathaniel voice), Flux Pro for images, and pulls music, intro video, title, and scenes from previous nodes.
  • Test the step. If "success": true, the video is being created. Check the status in JSON2Video under "Render Logs."
  1. Handle Costs and Free Models:
  • If you run out of credits, use JSON2Video’s free models: Azure for voiceovers and Flux Snell for images (IDs provided in the community resources).
  • Replace with premium models (ElevenLabs, Flux Pro) once you’re ready.
Step 6: Wait and Retrieve the Video
  1. Add a Wait Node:
  • Add a "Wait" node after "Create Video" and set it to 150 seconds to allow JSON2Video time to render the video.
  1. Retrieve the Video:
  • Copy the "Create Video" HTTP Request node, paste it, and rename it "Get Video."
  • Change the method to "GET," keep the same URL and credentials.
  • Add a query parameter: "project" with the value {{node["Create Video"].json["project"]}}.
  • Test the step to retrieve the video URL (e.g., a URL ending in .mp4). Open the URL in your browser to preview the video, which includes voiceovers, images, subtitles, and animations.
Step 7: Handle Errors (Optional but Recommended)
  1. Add a Switch Node:
  • Add a "Switch" node after "Get Video."
  • Set three routing rules based on the "status" attribute from "Get Video":
  • Rule 1: Status = "done" (rename output as "Done").
  • Rule 2: Status = "running" (rename output as "Running").
  • Rule 3: Status = "error" (rename output as "Error").
  • Image Description: A screenshot of n8n.io showing the "Switch" node with three branches labeled "Done," "Running," and "Error," each with a condition (e.g., "status = done").
  1. Handle "Running" Status:
  • For the "Running" branch, add a "Wait" node (20 seconds), then connect it back to the "Get Video" node to create a loop until the status is "done."
  1. Handle "Error" Status:
  • For the "Error" branch, add a "Google Sheets" node, rename it "Error Log," and set the operation to "Update Row."
  • Map the row ID from the "Get Ideas" node and update "Production Status" to "Error."
  • Test to ensure errors are logged in your Google Sheet.
Step 8: Output and Publish to YouTube
  1. Update Google Sheet with Video URL:
  • In the "Done" branch, add a "Google Sheets" node, rename it "Add Video URL," and set the operation to "Update Row."
  • Update the row with the video URL from "Get Video" ({{node["Get Video"].json["movie_url"]}}).
  1. Download the Video File:
  • Add an "HTTP Request" node, rename it "Get Video File," and use the video URL from the previous step.
  • Test to confirm it returns binary data (a preview of your video).
  1. Upload to YouTube:
  • Add a "YouTube" node, select "Upload a Video," and set up credentials:
  • Click "Create New Credential," select "YouTube API," and follow the steps to get a client ID and client secret from YouTube’s API console (you’ll need a Google Cloud project).
  • Map the title and description from "Get Ideas" ({{node["Get Ideas"].first().json["Video Title"]}} and {{node["Get Ideas"].first().json["Caption"]}}).
  • Set "Input Binary Field" to "data" (from "Get Video File").
  • Set "Privacy Status" to "Unlisted" for manual review.
  • Test to upload the video to YouTube.
  • Image Description: A screenshot of n8n.io showing the "YouTube" node, with the Configuration panel open, displaying the title and description fields mapped, and "Privacy Status" set to "Unlisted."
  1. Mark as Done:
  • Add another "Google Sheets" node, rename it "Mark as Done," and update "Production Status" to "Done" for the row.
  • Test to ensure the status updates in your Google Sheet.
Step 9: Customize the Video Template (Optional)
  1. Edit the JSON2Video Template:
  • In JSON2Video, go to "Movie Templates," add a new template, and edit its JSON (copy the script from the community resources).
  • Adjust settings:
  • Intro Text: Change font size or position (e.g., fontSize: 50, position: "center").
  • Clips: Adjust saturation (e.g., saturation: 1 for full color) or subtitle font (e.g., subtitleFont: "Arial").
  • Use JSON2Video’s documentation or chatbot for help.
  • Preview by clicking "Render Movie," then copy the new template ID.
  • Update the "Create Video" node in n8n with the new template ID.
Step 10: Activate and Test the Workflow
  1. Set the Schedule: Adjust the Schedule Trigger to run daily or hourly.
  1. Toggle Active: Toggle the workflow to "Active" in n8n to start automation.
  1. Monitor and Review: Check the uploaded videos on YouTube (unlisted), review them, and make them public if they meet your standards.
I hope this guide has been helpful. If you run into any issues while implementing these steps, the support contacts for each tool are listed on top of this page.
Alternatively, if you’d like my team to take care of everything for you, click here to see how we can assist and check out some sample videos we have generated with this system.