Turn long-form YouTube training videos into short-form vertical reels.
Automated pipeline: Download → Transcript → AI Clip Selection → Trim → Vertical Reformat → Subtitles → Export.
# 1. Clone this repo
git clone <repo-url> reels-workflow
cd reels-workflow
# 2. Run setup (installs everything)
./setup.sh
# 3. Configure API keys
cp config/config.example.yaml config/config.yaml
# Edit config.yaml with your keys
# 4. Test with one video
./scripts/download.sh "https://youtube.com/watch?v=VIDEO_ID"
./scripts/process.sh output/downloads/VIDEO_ID.mp4Input: Long YouTube training video (30-60 min)
Output: 5-10 vertical reels (15-60 sec each)
├── 1080x1920 (9:16)
├── Burned-in subtitles
├── Hook text overlay
└── CTA overlay
- OS: Linux, macOS, or WSL2 on Windows
- Runtime: Python 3.10+, Node.js 18+
- Tools: ffmpeg, yt-dlp (installer handles these)
- API: Composio account (free tier works)
reels-workflow/
├── README.md ← You are here
├── setup.sh ← One-command installer
├── config/
│ ├── config.example.yaml ← Template (copy to config.yaml)
│ └── ffmpeg.conf ← FFmpeg presets
├── scripts/
│ ├── download.sh ← Download YouTube video
│ ├── transcript.py ← Extract transcript via Composio
│ ├── find_clips.py ← AI finds highlight clips
│ ├── trim.py ← Cut clips from source
│ ├── reformat.py ← Convert to vertical 9:16
│ ├── add_text.py ← Add text overlays
│ ├── add_subs.py ← Burn subtitles
│ ├── export_reel.py ← Final export with all processing
│ └── batch.sh ← Run full pipeline on multiple videos
├── templates/
│ ├── hook_overlay.json ← Text overlay template
│ └── subtitle_style.json ← Subtitle styling
├── output/
│ ├── downloads/ ← Raw YouTube downloads
│ ├── transcripts/ ← Extracted transcripts
│ ├── clips/ ← Trimmed clip segments
│ └── reels/ ← Final exported reels
└── WORKFLOW.md ← Detailed agent instructions
If you're an AI agent setting this up, read WORKFLOW.md — it has step-by-step instructions for the full pipeline including Composio MCP setup, video processing, and reel creation.
Copy config/config.example.yaml to config/config.yaml and fill in:
composio:
api_key: "ck_your_key_here" # From composio.dev dashboard
youtube:
channel_id: "UC..." # Your YouTube channel ID
reels:
max_duration: 60 # Max reel length in seconds
min_duration: 15 # Min reel length in seconds
resolution: "1080x1920" # Vertical format
fps: 30
text_hook: "🔥 Watch this!" # Default hook text
text_cta: "Follow for more!" # Default CTA textInternal use — Project Amazon PH
| Layer | Technology |
|---|---|
| Automation | n8n workflow |
| Integration | Reels/social media APIs |
| Scheduling | n8n cron trigger |
| Monitoring | n8n execution logs |
See codegraphs/reels-workflow.md for the full dependency graph.