YouTube AI Story · The pipeline
Idea to video.
Each stage in order, with its honest status. Built means the code exists and is wired into the pipeline. It does not mean tested.
Stages
Seven stages, three states.
Status is stated in the label, not by colour alone.
1. Research
Optional. Queries the YouTube Data API and a Google Trends provider (SerpApi) when you supply a key. There is no public Google Trends API, so this depends on a third party.
2. Idea
Asks the local Ollama model for ideas in a chosen niche. Falls back to template ideas if the model call fails.
3. Script
Turns an idea into a script with emotion markers and cleans the text for speech. Falls back to a template script on failure.
4. Voice
Generates the voiceover with XTTS v2, on the GPU if possible and then the CPU, using saved character settings. A cloud text-to-speech fallback exists and is blocked by default.
5. Render
Builds scenes and captions with MoviePy and encodes with FFmpeg, using a hardware encoder when a GPU is detected.
6. Check
Runs similarity and content-policy checks, then writes the manifest. See below for exactly what this covers.
7. Upload
Not implemented. A setting exists and is off by default.
Originality checks
What the checker does and does not do.
It reduces the chance of accidental copying. It cannot guarantee originality or copyright compliance.
How it works
- Script: fuzzy text similarity and a longest-shared-passage check against saved reference scripts, with a block threshold of 85%.
- Video: perceptual hashes of sampled frames compared with saved reference videos, with a 70% threshold.
- Audio: an averaged MFCC (a spectral summary) compared by cosine similarity, with a 75% threshold.
- Content policy: a list of keyword patterns, such as violence, adult and scam terms.
What it cannot do
- It only compares against references I have added. With an empty reference store, the similarity checks do nothing.
- It cannot see the wider internet, other people's videos, or music, images and text it was never given.
- Paraphrased or restructured copying will pass the script check.
- The audio check is coarse and the thresholds are untuned. I have no measured error rates.
- The keyword policy is crude: it can block innocent text and miss harmful text.
- Passing means no match was found. It does not mean the work is original, licensed or lawful.
Design choices
Local, recorded and honest.
Models load only when a job starts, so the app stays light when idle. Everything runs on my own machine by default. Each finished project has a manifest, so I can show how and when it was made and check that files have not changed.
A clean report from the pipeline is not evidence that a result is original.