Automated content pipeline for creating short-form vertical videos from Reddit stories with Minecraft gameplay backgrounds and TTS narration.
No Reddit API key required - uses YARS for API-free scraping.
- Scrapes Reddit - Fetches top stories from r/AITA, r/tifu, r/relationships, etc. (no API key needed)
- Downloads gameplay - Grabs royalty-free Minecraft videos from YouTube
- Simplifies stories - Uses local LLM (Ollama) to make text TTS-friendly
- Generates voiceover - Creates natural speech with edge-tts
- Adds captions - Word-level timestamps via Whisper for karaoke-style text
- Assembles video - Combines everything into vertical 9:16 format (TikTok/Reels/Shorts)
# macOS
brew install ffmpeg
# Install Ollama (local LLM)
brew install ollama
ollama serve # Start in background
ollama pull llama3.2:3b # Download modelgit clone https://github.com/j8ckfi/sloppenhimer.git
cd sloppenhimer
# Create virtual environment
python -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -e .
# Optional: copy and customize config
cp .env.example .envEdit .env (optional - defaults work out of the box):
# Ollama
OLLAMA_MODEL=llama3.2:3b
# TTS Voice
EDGE_TTS_VOICE=en-US-ChristopherNeural
# Video output
OUTPUT_RESOLUTION_WIDTH=1080
OUTPUT_RESOLUTION_HEIGHT=1920# 1. Scrape some stories (no API key needed!)
sloppenhimer scrape
# 2. Download background videos
sloppenhimer fetch-videos
# 3. Process a story into a video
sloppenhimer list-stories # Find a story ID
sloppenhimer process <story_id>| Command | Description |
|---|---|
sloppenhimer scrape |
Scrape stories from configured subreddits |
sloppenhimer fetch-videos |
Download Minecraft gameplay from YouTube |
sloppenhimer list-stories |
List all scraped stories |
sloppenhimer list-videos |
List downloaded background videos |
sloppenhimer process <id> |
Run full pipeline on a story |
sloppenhimer process <id> --quick |
Fast render (simpler captions) |
sloppenhimer check |
Verify system dependencies |
sloppenhimer voices |
List available TTS voices |
# Specific subreddits
sloppenhimer scrape -s AITA -s tifu -s confession
# More posts
sloppenhimer scrape --limit 50
# Different time range
sloppenhimer scrape --time month # hour/day/week/month/year/all# Download more videos
sloppenhimer fetch-videos --count 10
# Custom search
sloppenhimer fetch-videos --query "minecraft speedrun gameplay"Videos are saved to data/output/ as MP4 files:
- Format: 1080x1920 (9:16 vertical)
- Codec: H.264 video, AAC audio
- Captions: Burned-in, karaoke-style word highlighting
sloppenhimer/
├── config/
│ ├── settings.py # Pydantic configuration
│ └── prompts/
│ └── simplify_story.txt # LLM prompt template
├── src/
│ ├── cli/main.py # Typer CLI
│ ├── scrapers/
│ │ ├── reddit.py # YARS Reddit scraper (no API)
│ │ └── youtube.py # yt-dlp downloader
│ ├── processors/
│ │ ├── llm.py # Ollama integration
│ │ ├── tts.py # edge-tts engine
│ │ └── transcription.py # Whisper timestamps
│ ├── video/
│ │ ├── editor.py # MoviePy editing
│ │ ├── captions.py # Karaoke captions
│ │ └── assembler.py # Final assembly
│ └── models/ # Pydantic data models
├── data/
│ ├── stories/ # Scraped Reddit stories (JSON)
│ ├── videos/ # Downloaded gameplay
│ ├── audio/ # Generated TTS audio
│ └── output/ # Final videos
└── assets/
├── fonts/ # Custom fonts
└── voices/ # Piper voice models
- YARS - API-free Reddit scraping
- yt-dlp - YouTube downloading
- Ollama - Local LLM inference
- edge-tts - Microsoft TTS
- OpenAI Whisper - Speech transcription
- MoviePy - Video editing
- Typer - CLI framework
List available voices:
sloppenhimer voicesPopular options:
en-US-ChristopherNeural- Male US (default)en-US-JennyNeural- Female USen-GB-RyanNeural- Male UKen-GB-SoniaNeural- Female UKen-AU-WilliamNeural- Male Australian
Change in .env:
EDGE_TTS_VOICE=en-US-JennyNeural# Start Ollama service
ollama serve
# In another terminal, pull a model
ollama pull llama3.2:3bsloppenhimer fetch-videos --count 5Use quick mode for faster (but simpler) captions:
sloppenhimer process <id> --quickMIT