Want to access all premium content?
Become a paying subscriber to get access to all courses, guides like this, prompts and skills library, and $500+ worth of AI tools.

Claude Code can take your notes, write a script, generate a voiceover through ElevenLabs, and assemble a vertical video with ffmpeg. It also creates captions from the voiceover’s timing data, so you don’t have to line up each word yourself.
We’ll set up a folder for your channel and make one Short from start to finish, without opening a video editor. You’ll have a script to review, a voiceover to listen to, and a finished video to upload yourself. To follow along, you’ll need Claude Code, an ElevenLabs account with API access, ffmpeg, and a Mac.
Step 1: Set up the channel. Install the tools and save your channel’s writing and design rules.
Step 2: Connect ElevenLabs. Add an API key and choose your narrator.
Step 3: Write the script. Turn your notes into a story with clear beats.
Step 4: Make the voice. Generate the narration and timed captions.
Step 5: Build the Short. Assemble the video, check the frames, and watch the final edit.

Step 1: Set up the channel
Open Terminal and check whether Claude Code is installed:
claude --versionIf you see “command not found,” install it:
curl -fsSL https://claude.ai/install.sh | bashOpen a new Terminal window after installation. The first time you run claude, follow the sign-in prompts.
Next, check for ffmpeg. This is the tool that combines the cards, audio, and captions into a video:
ffmpeg -versionIf it’s missing, install it with Homebrew:
brew install ffmpegInstall Homebrew from brew.sh if Terminal doesn’t recognize brew, then run the command again.
Create a project folder with separate places for your research and finished files:
mkdir -p ~/faceless-short/sources ~/faceless-short/outputMove into it:
cd ~/faceless-shortStart Claude Code:
claudeNow give Claude the instructions it should follow for every video:
Help me set up this folder for a faceless YouTube Shorts channel.
Ask me in one message about:
- The channel topic and intended audience
- The tone of the narration
- Words and phrases I avoid
- Two colors as hex codes and a font for the on-screen cards
After I answer, write CLAUDE.md with a section for each answer.
Include these rules:
- Use only facts from files in sources/.
- Identify the source for every factual claim.
- Flag anything the sources don't support.
- Never upload or publish anything.
Mark missing preferences NOT PROVIDED instead of guessing.
Answer the questions, then open CLAUDE.md. Check the colors, tone, and source rules before continuing.
This file saves you from repeating the same instructions each time. If you want short sentences, no emojis, or a particular heading style, put that here.
Step 2: Connect ElevenLabs
Create an API key in your ElevenLabs account and give it a recognizable name, such as faceless-short.
Limit it to the permissions this project needs and set a credit quota. Text-to-speech access covers generation; listing voices may require an additional voice-read permission.

Keep the key out of the chat. Exit Claude with /exit, then run:
read -s ELEVENLABS_API_KEYPaste the key and press Enter. It won’t appear while you type.
Then run:
export ELEVENLABS_API_KEYStart Claude again:
claudeAsk it to show your available voices:
List up to ten voices available on my ElevenLabs account.
Read the API key from ELEVENLABS_API_KEY. Never print it or write it to a file.
Show each voice's name, ID, and any available description. If the key can't list voices, explain which permission is missing.
After I choose a voice, save its name and ID in CLAUDE.md.
Listen to samples in ElevenLabs and choose a voice that fits the channel. Keeping the same narrator gives your videos a consistent sound.
If the request fails, check both the key and its permissions. A 401 can indicate an invalid or missing key; don’t assume restarting Terminal alone will fix it.
The variable is set for this Terminal session. If you close the window, repeat the two commands before starting Claude again.
Step 3: Write the script
Start with one subject you can explain well in under a minute.
Save your research in sources/notes.md. Five to eight facts with a link for each should give Claude enough material to choose from. Include useful context, such as dates, units, and what a number measures.

A simple structure looks like this:
Part | Approximate time | What it does |
|---|---|---|
Hook | 0-5 seconds | Opens with a surprising fact or a clear question |
Setup | 5-15 seconds | Gives the viewer enough context to follow |
Main beats | 15-50 seconds | Explains three or four connected points |
Payoff | Final seconds | Resolves the opening or delivers the takeaway |
Paste:
Write a YouTube Short script from sources/notes.md.
Target 45-60 seconds when spoken. Start around 130 words, then adjust after timing it.
Open with the strongest supported fact. Use short sentences and split the script into beats of one or two sentences, with a new beat roughly every eight seconds.
Give each beat an on-screen title of 3-6 words.
Use only facts from my notes. Keep source references separate from the spoken lines, and identify the source for each claim.
Save the result as script.md.
Read it aloud with a timer. The word count is a starting point; pauses, names, and numbers all affect the length.
If it runs long, cut the least useful beat rather than asking the narrator to race through it. Move the interesting fact forward if the opening takes too long to reach the point.
Check every claim against your notes before making the voiceover. A source link beside a sentence makes that easier, but you still need to open it and read.
Step 4: Make the voice
Once you’re happy with the script, ask Claude to generate the narration:
Generate a voiceover from script.md using ElevenLabs' text-to-speech with-timestamps endpoint.
Use the voice saved in CLAUDE.md and the API key in ELEVENLABS_API_KEY. Never print the key.
Read only the spoken lines. Exclude beat titles, directions, and source references.
Save:
- output/voice.mp3
- output/timing.json
Then create output/captions.srt from the character timings. Aim for 2-4 words per caption, keeping natural phrases together where possible.
Report the audio duration.
Play voice.mp3 from beginning to end. Listen for names it mispronounces, pauses in odd places, and lines that looked fine on the page but sound awkward aloud.
For pronunciation fixes, ask Claude to change the text sent to ElevenLabs while preserving the correct spelling in the captions. The narrator may need “A I”, for example, while the screen should still show “AI.”
Each take uses credits. The cost depends on the model, character count, and plan, so check the estimate before generating several versions. Finish the wording first, then spend time choosing the delivery.
Step 5: Build the Short
Now combine the cards, narration, and captions:
Build a 1080x1920 vertical video with ffmpeg.
Create one text card per beat from script.md, using the colors and font in CLAUDE.md.
Time the card changes to the narration using output/timing.json. Add output/voice.mp3 and burn in output/captions.srt.
Keep important text away from the bottom and right edges, where YouTube's interface may cover it.
Save the video as output/short.mp4.
Export three PNG check frames:
- At one second
- Halfway through
- Two seconds before the end
Show the frames together for review.Claude may need to run ffmpeg more than once to assemble the video. Check that its commands use the project’s source files and write the results to output/.

Use the stills to catch layout problems, then play the video to check timing:
Check | What to look for |
|---|---|
Titles | Each one fits comfortably and is readable on a phone |
Captions | Words are correct and don’t sit behind interface controls |
Card changes | The visual changes with the right spoken beat |
Audio | Narration is clear throughout |
Ending | The final card stays long enough to read and ends cleanly |
If ffmpeg can’t find the subtitles filter, ask Claude to check whether drawtext is available and use it for captions instead. With both missing, have it explain the required installation change.

Watch the finished Short on your phone. Check that you can follow it without pausing, then upload it yourself in YouTube Studio.
Save the workflow once you’ve tested it:
Save this process as a project skill called faceless-short at:
.claude/skills/faceless-short/SKILL.md
Include the source check, script review, voice generation, caption timing, rendering, and frame checks.
Ask me to approve the script before paid voice generation. Never upload or publish anything.For the next video, add a new source file and ask:
Run faceless-short using sources/[NEW FILE].Use cases
Once the first Short works, try these four jobs.
Use case #1: Repurpose a newsletter
Take one useful point from something you’ve already written.
Turn this newsletter story into a 45-second Short script.
Focus on one main idea. Preserve the meaning of any numbers you use and add no new factual claims.
Save the source and script, then show me the script before generating audio.
[STORY]Check that the shorter version hasn’t removed context the viewer needs.

Use case #2: Batch a week of scripts
Write and review several scripts before generating their voiceovers.
Write five Short scripts from sources/, each covering a different idea.
Follow CLAUDE.md and include source references. Save them as script-1.md through script-5.md.
Don't generate audio yet.Read the openings together. Each video should introduce its own point rather than repeat the same setup with a few words changed.

Use case #3: Write titles and thumbnail text
Make the title specific to what the video explains.
Give me five titles under 60 characters and three optional thumbnail lines of four words or fewer for script.md.
Base each option on something the script actually covers. Add no new claims.Compare each option with the finished video. Keep the ones that make the subject interesting without promising a different story.

Use case #4: Use your own images
Replace the plain cards with photos, illustrations, or screenshots you’re allowed to use.
Use the images in sources/images/ as backgrounds for the beats, in filename order.
Keep the beat titles and captions readable. Crop for vertical without cutting off important subjects.
Rebuild output/short.mp4 and export the same three check frames.Review the image order, crops, and text contrast. A background that looks good alone may need darkening or a text panel once captions appear.

Confirmed limitations
ElevenLabs uses credits for voice generation, including replacement takes. Check your current plan’s commercial-use terms before using the audio in monetized videos.

A reusable template helps with production, but it doesn’t guarantee YouTube monetization. Give each Short its own research, explanation, or perspective, and check the platform’s current rules on repetitive and mass-produced content.
This guide targets 45-60-second vertical videos. It builds narrated cards or image-based sequences; footage selection and more elaborate animation need additional instructions.
Claude can misread notes, introduce a wording error, or mistime a caption. Review the script against its sources, listen to the audio, and watch the exported video.
The API key can spend your ElevenLabs credits. Keep its permissions and quota limited to the project, and replace it if it appears in a shared file or screenshot.
The original guide was checked on October 27, 2026. Plans, API details, and YouTube policies may change.
Closing
Start with one Short on a subject you know well. Review the script before generating audio, listen to the narration, and check the three frames before watching the full export on your phone.
After publishing, look at where viewers stayed and where they left. Use those observations to improve the next script or edit, then save useful changes in CLAUDE.md. Keep the production process consistent while giving each video something new to say.
See you in the next one :)
