Back to list
Eddale

reels-builder

by Eddale

0🍴 0📅 Jan 25, 2026

SKILL.md


Reels Builder

Converts carousel-style content into Instagram Reels by generating:

  1. Audio - Per-slide voiceover with voice dynamics (whispers, excited, etc.)
  2. Captions - Word-by-word animated subtitles (TikTok style)
  3. Video - Final assembled MP4 ready for Instagram

The Pipeline

PhaseWhat HappensOutput
1. ScriptParse markdown with slide scripts + Instagram captionStructured data
2. ImagesGenerate 9:16 images via Nano Banana ProPNG files
3. AudioGenerate audio per-slide via ElevenLabs v3MP3 + timing JSON
4. CaptionsGenerate ASS subtitle files with word timingASS files
5. AssemblyFFmpeg combines everythingFinal MP4
6. ArchiveSave script + caption to Zettelkasten, link in daily noteMD file
7. DeliverReport location, duration, file sizeReady 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

  1. Read the markdown file
  2. Extract frontmatter (title, voice, etc.)
  3. Extract the ## INSTAGRAM CAPTION section (for posting and archiving)
  4. 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.

  1. Create the note at:

    ~/Documents/COPYobsidian/MAGI/Zettelkasten/Reel Script - [Title] - YYYY-MM-DD.md
    
  2. 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]/
    
  3. 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]]
      

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 generation
  • GOOGLE_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.

Score

Total Score

50/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon