Smart vertical reframe
MediaPipe face tracking centers the speaker on a 1080×1920 frame with smooth 2.5-second moving-average panning. No jerky cuts.
Open-source · MIT · For pastors & faith creators
Paste a YouTube link to your sermon. Your AI editor handles the transcription, picks the 10 strongest moments, reframes them vertically with face tracking, adds your brand subtitles, and balances the audio. You only step in to pick which ones ship.
Works with Claude Code, Cursor, Codex, Cline, Aider, and any AI editor that can run shell scripts.
Real output. 37 seconds, 1080×1920, gold subtitles burned in, audio at -14 LUFS — ready to upload to Reels.
Works with your AI editor
Sermon Cuts ships as a SKILL.md + scripts/ pair. Any AI editor that can read instructions and run a terminal pipeline can drive it.
Not seeing yours? If it can read a SKILL.md and run shell commands, it works.
Install — pick your path
Three ways in. Use the first one if you have a terminal (native on macOS, Linux, and Windows), the second if you live in an AI editor, the third if you'd rather not install host deps.
Recommended. Native on macOS, Linux, and Windows — no WSL.
curl -fsSL https://onetogregorio.github.io/sermon-cuts/install.sh | bash
winget install Python.Python.3.12 Git.Git git clone https://github.com/onetogregorio/sermon-cuts %USERPROFILE%\code\sermon-cuts %USERPROFILE%\code\sermon-cuts\scripts\install.bat
Claude Code, Cursor, Codex, Cline, Aider — anything with shell access.
Install the Sermon Cuts skill (https://github.com/onetogregorio/sermon-cuts) on this machine. Walk me through these steps and stop if anything fails: 1. Detect my OS (macOS, Linux, or Windows). On macOS use Homebrew (install if missing), on Linux use apt/dnf/pacman, on Windows use winget. 2. Install system deps: ffmpeg (with libass), yt-dlp, Python 3.12+, Git. Commands differ per OS — pick the right ones. 3. Clone the repo to ~/code/sermon-cuts on Unix or %USERPROFILE%\code\sermon-cuts on Windows (or ask me where). 4. Run scripts/install.sh on macOS/Linux or scripts\install.bat on Windows — it creates the venv, installs requirements, and wires the skill into ~/.claude/skills/sermon-cuts/. 5. Ask if I want better transcription via Groq Whisper. If yes, open https://console.groq.com/keys, ask me to paste the key, and add GROQ_API_KEY=... to ~/.env (or %USERPROFILE%\.env on Windows). 6. Ask if I want the brand font Outfit Black (https://fonts.google.com/specimen/Outfit). If yes, download and install to my user fonts folder. 7. Run ./scripts/pipeline.sh doctor (Unix) or scripts\pipeline.bat doctor (Windows) to confirm the skill is wired up. 8. Tell me a one-line example of how to cut my first sermon. Report success or the failed step at the end.
Reproducible builds, CI, or anywhere you'd rather not install host deps.
docker run --rm \ -v "$(pwd)/out:/work/memory/messages" \ -e GROQ_API_KEY=$GROQ_API_KEY \ ghcr.io/onetogregorio/sermon-cuts <youtube-url>
Then just say: "cut this sermon: <YouTube URL>"
pipeline.sh doctorhealth check (run first)
pipeline.sh <url>ingest + transcribe + propose
pipeline.sh review <slug>terminal UI to pick & render
pipeline.sh uiweb UI on localhost:7860
On Windows, swap pipeline.sh for pipeline.bat — same flags.
Delivery-grade flags like --quality max --codec hevc --llm-scrub compose on top.
What's in the box
MediaPipe face tracking centers the speaker on a 1080×1920 frame with smooth 2.5-second moving-average panning. No jerky cuts.
3 built-in font presets (Arial Black ships everywhere, Helvetica Bold for macOS, Outfit Black for brand display). 3-4 words per line, sentence case, positioned above the Reels/TikTok UI bar.
Cuts must have a hook, development, and conclusion, 25-60 s. Can't end on "porque…" or "but…". Ranked by narrative arc — you approve before any render starts.
ffmpeg's EBU R128 loudnorm to -14 LUFS with a true-peak limiter at -1.5 dBTP — the Instagram and TikTok standard, no clipping.
./scripts/pipeline.sh <url> handles ingest,
transcription, VAD pause detection, SRT scrub, and renders cleanly
with a live progress bar.
macOS, Linux, and Windows — all native, no WSL. The whole pipeline
is portable Python; pipeline.bat on Windows mirrors
pipeline.sh flag-for-flag.
--quality max --codec hevc emits HEVC 10-bit Main 10
with denoise + sharpen. --llm-scrub catches subtitle
errors heuristics miss. --target shorts tunes for each
platform.
Drop a style.yaml in any sermon's folder or pass
--preset NAME for one-off overrides. Cut for several
ministries or channels without touching globals.
Default provider keeps your audio local (YouTube auto-captions only query the URL). MediaPipe models pre-downloaded at install time — first render works offline.
How it works
YouTube link or a local .mp4. Works on 30 to 60-minute videos.
Word-level transcript (free via YouTube auto-captions or premium via Groq Whisper) + voice-activity boundaries so cuts never split mid-word.
Each with a theme, hook, development, conclusion, and a coherence score. You pick which to render — typically 5 to 8.
1080×1920, face-tracked, branded subtitles burned in, audio at -14 LUFS. Drop into Reels/TikTok/Shorts.
Docs for everyone
Sponsors
Organizations investing in tools that serve the church and faith content creators.
Want to support this project? Become a sponsor →
About
I build tools at the intersection of faith, creativity, and AI. I made Sermon Cuts because I was tired of spending Sunday nights cutting my own preaching into Reels by hand — and I figured other people preaching, teaching, and creating Christian content might be tired of it too.
If this project saves you an evening, I'd love to hear about it.