How I made a 9 minute YouTube video for $0 in tools. Voice, 55 images, 61 cuts, captions, music, sound effects and mastering.
This is the full setup, in the order I actually run it. Two of the eight tools need no code at all. Five run from a command line. I've marked each one, and I've been honest about where each breaks.
What you'll end up with
| A finished video | 9:18, 1920x1080, 30fps |
| Narration | One voice, sounds human, no recording |
| Pictures | 55 AI images, each tied to a sentence |
| Editing | Motion on every image, captions on the word |
| Sound | Music bed, whooshes on cuts, mastered to −14.3 LUFS |
| Tool cost | $0 |
The one thing I pay for: Claude Pro, $20 a month. It writes the code and glues the tools together. So the honest maths is $80.98 of subscriptions replaced for $20, a net saving of $60.98, not a free lunch.
1. edge-tts — the voiceover
Needs code. Replaces ElevenLabs Creator, $22/mo.
Microsoft's neural voices, called from one command.
pip install edge-tts
edge-tts --list-voices | grep en-US
edge-tts --voice en-US-AndrewMultilingualNeural --rate=-4% --pitch=-10Hz \
--file script.txt --write-media voice.mp3
- Pick the voice before you write. Voices differ in pace: mine runs about 174 words a minute, so 1,600 words comes out at roughly 9 minutes.
--rateand--pitchshape character. A small slow-down and a lower pitch made the voice sound older and calmer.- Caveat: edge-tts is an unofficial tool that uses the voices behind Microsoft Edge's read-aloud. The terms for commercial use aren't clear. Check them before you monetise.
2. Cloudflare Workers AI — the images
Needs code. Replaces Midjourney Basic, $10/mo.
A free daily allowance of 10,000 "neurons" runs real image models. I got 46 images in one day from it.
- Create a free Cloudflare account.
- AI → Workers AI → Use REST API. Copy your Account ID and create an API token.
- Call the model, one prompt at a time:
curl -s https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai/run/@cf/leonardo/lucid-origin \
-H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \
-d '{"prompt":"your prompt here","width":1344,"height":768}' > out.json
- Model matters more than the prompt. I tested three on the same prompt: only Lucid Origin respected "subject on the right third", which the captions depend on.
- Write one style suffix and append it to every prompt, unchanged. That's what makes 55 images look like one film.
- When the quota runs out, the API returns an error mentioning the daily allocation. Save every image as you go, so the next day's run continues instead of restarting.
3. Gemini app — the shots the API gets wrong
No code. Free with a Google account.
Google's free API allows zero image generations, which surprised me mid-build. The Gemini app is free and made the 11 shots the other model kept failing: a treadmill, a lamp with real light.
- Paste the prompt with your style suffix, save the result, and name it to match your sequence.
- Lesson worth more than the tool: never build a pipeline on a single free model. Keep a second route ready.
4. faster-whisper — timing and captions
Needs code. Replaces Descript's transcription, $16/mo.
pip install faster-whisper
Transcribe your own voiceover with word-level timestamps, then map your script onto those timings. The transcript is not the script: speech-to-text normalises things like "nineteen hundred" into "1900", which silently shifts everything after it. Match your script words onto the audio instead, and keep that file as the single source of timing.
In my build, 98.3% of 1,618 words anchored to real audio; the rest were interpolated from their neighbours. Captions and picture cuts both read from that one file, so they can never drift apart.
5. Remotion — editing, in code
Needs code. Replaces Premiere Pro, $22.99/mo. Free licence for individuals and teams up to three people.
Remotion builds video with React. Every design decision becomes a value you can change once and apply everywhere:
- Motion on every image, pushing toward the subject rather than the centre.
- Captions highlighting the spoken word, using the timing file from step 4.
- Big "punch words" on key lines.
- Chapter cards.
Why it beats a timeline for this kind of video: restyling all 61 cuts is one edit, not a day of dragging clips.
Watch out for: rendering is the slow part. 9 minutes at 1080p took hours on an 8 GB laptop. Render a single still first and look at it before starting a long run.
6. FFmpeg — finishing
Needs code. Replaces the export and mastering step.
One pass does the colour grade, the subscribe-button overlay and the audio mux:
ffmpeg -i picture.mp4 -i audio.m4a -filter_complex "<your grade>" \
-c:v libx264 -crf 18 -preset veryfast -pix_fmt yuv420p -c:a copy out.mp4
- Grade in FFmpeg, not in the render. You can retune the look in seconds instead of re-rendering for hours.
- Master to −14 LUFS, YouTube's target, using the two-pass
loudnormfilter. Measure first, then apply the measured values.
7. Python and NumPy — music and sound effects
Needs code. Replaces Epidemic Sound, $9.99/mo.
Generated sound has no licence to track and can't trigger a copyright claim. For this video I generated a music bed, 60 whooshes and 17 low hits. A hit is just a sine wave falling in pitch with a short noise transient, written to a WAV file.
Mix the effects in before the loudness master, so mastering measures everything together. Adding them afterwards pushes your peaks past where you set them.
8. yt-dlp — deciding what to make
Needs code. Replaces guessing.
Before writing anything, I scanned 27 channels in the niche and found 36 videos that beat their own channel's average. The topic, the title shape and the thumbnail direction came from that, not from a hunch.
yt-dlp --flat-playlist --playlist-end 40 --print "%(id)s|%(duration)s|%(view_count)s|%(title)s" \
"https://www.youtube.com/@CHANNEL/videos"
- Compare each video against its own channel's median, not against other channels. That removes channel size from the picture.
- Caveat: automated access is against YouTube's terms of service. Use it knowingly.
The order that matters
- Research first (8), so the topic is chosen by evidence.
- Script, written for the ear.
- Voice (1), because everything downstream is timed to it.
- Timing (4).
- Images (2 and 3), one per idea, cut on the sentence.
- Edit (5).
- Sound (7), then finish and master (6).
Three honest warnings
- Five of the eight need a command line. If that's not you, the no-code path is Gemini for images plus a normal editor. The savings shrink, but the workflow still works.
- Free quotas run out mid-job. Build every script so it can stop and resume the next day.
- Rendering takes hours on a modest laptop. Plan it overnight and check a single frame first.