
reels-builder
by Eddale
SKILL.md
name: reels-builder description: Converts carousel content into Instagram Reels with per-slide voiceover, word-by-word captions, and video assembly. Use when "create a reel", "build a reel", "turn this into a reel", "make a video from carousel". allowed-tools: Read, Write, Edit, Glob, Grep, Bash
Reels Builder
Converts carousel-style content into Instagram Reels by generating:
- Audio - Per-slide voiceover with voice dynamics (whispers, excited, etc.)
- Captions - Word-by-word animated subtitles (TikTok style)
- Video - Final assembled MP4 ready for Instagram
The Pipeline
| Phase | What Happens | Output |
|---|---|---|
| 1. Script | Parse markdown with slide scripts + Instagram caption | Structured data |
| 2. Images | Generate 9:16 images via Nano Banana Pro | PNG files |
| 3. Audio | Generate audio per-slide via ElevenLabs v3 | MP3 + timing JSON |
| 4. Captions | Generate ASS subtitle files with word timing | ASS files |
| 5. Assembly | FFmpeg combines everything | Final MP4 |
| 6. Archive | Save script + caption to Zettelkasten, link in daily note | MD file |
| 7. Deliver | Report location, duration, file size | Ready to post |
Input Format
The skill expects a markdown file with this structure:
---
type: reel
title: [Title]
date: YYYY-MM-DD
source: [article/topic]
voice: AI Ed Dale
duration_target: 30-60s
---
## INSTAGRAM CAPTION
[The caption for the Instagram post - hook, context, CTA, hashtags]
Example:
This reel is the worst it will ever be.
I built an AI engine to create these automatically - images, voiceover, captions, assembly. This is the very first one off the line.
Which means it only gets better from here.
Follow along to see how this evolves.
#aicontent #reels #contentcreation #buildinpublic
---
## SLIDE 1 (Hook)
**Script:** [whispers] Here's something most coaches won't tell you...
**Caption:** Here's something most coaches won't tell you
**Prompt:** [image prompt - main subject in upper 2/3 of frame]
**Pacing:** slow
## SLIDE 2 (Turn)
**Script:** [normal] The real leverage isn't in the tactic.
**Caption:** The real leverage isn't in the tactic
**Prompt:** [image prompt]
**Pacing:** medium
Script Writing Guidelines
When creating a reel script from source content (article, carousel, topic):
Write for the Ear, Not the Eye
Carousel copy is punchy and abrupt - perfect for reading. Reel scripts are spoken aloud.
| Carousel Style (DON'T) | Reel Style (DO) |
|---|---|
| Morning review: 20 minutes. | I ran my morning review in twenty minutes. |
| Delegation: 100%. | I didn't do any of it myself. |
| Decisions: All mine. | But I made every single decision. |
Slide-to-Slide Flow
Each slide should connect naturally to the next. The viewer hears one continuous thought, not eight disconnected statements.
Test: Read the full script aloud. If you naturally pause awkwardly between slides, rewrite the transitions.
Conversational Markers
- Use complete sentences
- Vary sentence length for rhythm
- Include natural connectors ("But here's the thing...", "And that's when...", "So what changed?")
- Contractions are good ("I'm", "didn't", "that's")
- Avoid lists, colons, and bullet-point structure
The Hook Still Hooks
Slide 1 still needs to stop the scroll. But it should be a spoken hook, not a headline.
Carousel hook: "The AI secret nobody's talking about" Reel hook: "Here's something most coaches won't tell you..."
Instagram Caption Guidelines
The Instagram caption goes in the ## INSTAGRAM CAPTION section. It's separate from the video captions (subtitles).
Structure:
[Hook - echoes the reel's opening or teases the payoff]
[1-2 sentences of context - what they just watched]
[CTA - follow, link in bio, save for later]
[Optional P.S. - tease tomorrow's content or add personality]
#hashtag1 #hashtag2 #hashtag3
Tips:
- Caption can be longer than carousels - the video is the hook
- Restate the core message - not everyone watches with sound
- 3-5 relevant hashtags at the end
- P.S. lines work great for building anticipation
Instructions
Phase 1: Parse the Script
- Read the markdown file
- Extract frontmatter (title, voice, etc.)
- Extract the
## INSTAGRAM CAPTIONsection (for posting and archiving) - Parse each slide section:
- Script - The text with audio tags for voiceover
- Caption - Clean text for subtitles (no audio tags)
- Prompt - Image generation prompt
- Pacing - slow/medium/fast
Phase 2: Generate Images
For each slide, generate a 9:16 image using the Prompt field.
Caption-aware composition rule: Main subject/action must be in the upper 2/3 of frame. Bottom area is reserved for caption overlay.
Use the instagram-carousel image generation workflow with:
- Aspect ratio: 9:16 (vertical)
- Size: 1080x1920px
Save images as slide01.png, slide02.png, etc.
Phase 3: Generate Voiceover Audio
Run the voiceover generation tool:
python3 skills/reels-builder/tools/generate_voiceover.py \
--input slides.json \
--output ~/Downloads/reel_[title]/ \
--voice "AI Ed Dale"
This generates per-slide:
slide01.mp3,slide02.mp3, etc.slide01_timing.json,slide02_timing.json, etc.
Audio tags supported (ElevenLabs v3):
[whispers]- Soft, intimate delivery[excited]- Energetic, enthusiastic[sigh]- Natural sighs/pauses[sarcastically]- Tonal shift...- Natural pauses
Phase 4: Generate Captions
Run the caption generation tool:
python3 skills/reels-builder/tools/generate_captions.py \
--input ~/Downloads/reel_[title]/ \
--style burnt-orange
This reads the timing JSON files and generates ASS subtitle files:
slide01.ass,slide02.ass, etc.
Ed's brand styling:
- Font: Oswald Bold
- Color: Burnt Orange (#E85D04) with black outline
- Position: Center-bottom
- Case: ALL CAPS
- Animation: Word-by-word reveal (karaoke style)
Phase 5: Assemble Video
Run the assembly tool:
python3 skills/reels-builder/tools/assemble_video.py \
--input ~/Downloads/reel_[title]/ \
--output ~/Downloads/reel_[title]/final.mp4
This combines:
- Image displayed for duration of audio
- ASS captions burned in
- Segments concatenated into final video
Phase 6: Archive to Zettelkasten
Save the reel script and Instagram caption as a permanent note.
-
Create the note at:
~/Documents/COPYobsidian/MAGI/Zettelkasten/Reel Script - [Title] - YYYY-MM-DD.md -
Note format:
--- type: reel-script title: [Title] date: YYYY-MM-DD source: [article/topic] status: published instagram_url: [URL if posted, or "pending"] --- # [Title] ## Instagram Caption [The full Instagram caption including hashtags] --- ## Script [Full slide-by-slide script from the reel] --- ## Production Notes - Duration: Xs - Output folder: ~/Downloads/reels-builder-[name]/ -
Link in daily note:
- Find today's daily note:
~/Documents/COPYobsidian/MAGI/DailyNotes/YYYY-MM-DD.md - Add to the Captures section:
- Created [[Reel Script - [Title] - YYYY-MM-DD]]
- Find today's daily note:
Phase 7: Deliver
Tell Ed:
- Location of final MP4
- Total duration
- File size (should be under 1GB for Instagram)
- Zettelkasten note created and linked
- Remind to preview on mobile before uploading
Environment Requirements
Required environment variables:
ELEVENLABS_API_KEY- For voiceover generationGOOGLE_API_KEY- For image generation
Required system tools:
- FFmpeg (for video assembly)
- Oswald font (for captions)
Python dependencies:
pip install elevenlabs ffmpeg-python
Voice Dynamics Reference
See resources/voice-dynamics.md for the full list of audio tags and usage examples.
Caption Styling Reference
See resources/caption-styles.md for ASS format details and customization options.
Image Composition Reference
See resources/composition-guide.md for caption-aware framing rules.
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です