A self-hosted web app for prepping YouTube videos: cuts silence and exports an EDL for your editor (DaVinci, Kdenlive, etc.), and transcribes audio with Whisper for subtitles or chapter notes.
Originally a Tkinter desktop tool by RavinMaddHatter; this fork is a containerized Streamlit web app you can run on a home server (TrueNAS, Proxmox, any Docker host) and access from a browser.
- Silence cutter — Analyzes audio levels per channel, removes silent gaps, and exports a
.edlyou can drop straight into your NLE timeline. - Whisper transcriber — Transcribes audio with faster-whisper (CTranslate2 backend, runs on CPU). Supports
tiny,base,small,medium,large-v3. - Audio preprocessing — Optional ffmpeg pipeline (highpass + loudnorm, optional aggressive denoise) for rough source recordings.
- Combined folder transcripts — Stitch all transcripts in a folder into one file with optional chapter headers per source clip.
- Server-side file access — Point it at a mounted
/datadirectory; no need to upload multi-GB files through the browser. - Browser uploads — Up to 4 GB per file for smaller clips.
Pull and run from GitHub Container Registry:
docker run -d --name yptools --restart unless-stopped \
-p 8501:8501 \
-v /path/to/your/videos:/data \
ghcr.io/rivasmario/youtubepreptools:latestThen open http://localhost:8501. Your videos will appear at /data/... inside the app.
- Apps → Discover → Custom App
- Image:
ghcr.io/rivasmario/youtubepreptools:latest - Port mapping: container
8501→ host8501 - Storage: host path of your video dataset → container path
/data - Save and start, then browse to
http://<truenas-ip>:8501
Run inside an LXC or VM with Docker installed:
docker run -d --name yptools --restart unless-stopped \
-p 8501:8501 -v /path/to/videos:/data \
ghcr.io/rivasmario/youtubepreptools:latestOn a Linux Docker host (e.g. via Tailscale to your NAS):
sudo mount -t cifs //192.168.0.203/winset /mnt/winset -o username=nasuser
docker run -d --name yptools -p 8501:8501 -v /mnt/winset:/data \
ghcr.io/rivasmario/youtubepreptools:latest- Audio Thresholds (dB) — enable channels and set the silent-cutoff level per channel.
- Timing Rules — lead-in, lead-out, minimum clip length, minimum silent duration.
- Whisper Model — pick model size.
large-v3is best quality but slowest. - Audio Preprocessing
- Normalize + clean audio — safe for almost everything; fixes loudness and rumble.
- Aggressive denoise — only for muffled/noisy recordings; can hurt clean audio.
- Folder Transcription
- Combine into one file — stitches all clip transcripts into a single file at the folder level.
- Add chapter headers — inserts
## filenamemarkers between sections.
- Set your audio thresholds and timing rules in the sidebar.
- Video Cutter tab: enter a server path (e.g.
/data/my-project/) or upload files. - Click Cut Single Clip (EDL) or Cut Folder (Merge to EDL) → download the
.edl. - Import the EDL into DaVinci Resolve, Kdenlive, or any NLE that reads CMX3600.
- Audio Transcriber section: pick a model and transcribe a single file or a whole folder.
git clone https://github.com/RivasMario/YoutubePrepTools.git
cd YoutubePrepTools
docker build -t youtubepreptools:latest .
docker run -d -p 8501:8501 -v /path/to/videos:/data youtubepreptools:latestRequires Python 3.11+ and ffmpeg on the host.
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
streamlit run app.py| File | Purpose |
|---|---|
app.py |
Streamlit web UI |
cutter.py |
Silence-detection and EDL generation |
openai_translator.py |
Whisper transcription wrapper (faster-whisper) |
access_ffprobe.py |
ffprobe metadata parser |
aws_translator.py |
AWS Translate helper (optional) |
youtubePrep.py |
Legacy Tkinter desktop entrypoint (kept for reference) |
Dockerfile |
Container image definition |
init.sh |
Container entrypoint (starts Streamlit) |
requirements.txt |
Python dependencies |
youtubeDescription.json |
Saved settings + boilerplate description text |
Original project: RavinMaddHatter/YoutubePrepTools