Convert Deckset-format markdown slides with speaker notes to presentation video with TTS narration...
Convert markdown slides to presentation video with AI-generated visuals and TTS audio narration.
Activate this skill when the user:
^ prefix{input_filename}.mp4cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/generate_audio.py "{slides_filename}" --output-dir "audio"
Delta update: Only regenerates audio for slides with changed speaker notes.
--force to regenerate all audio filesOutput:
audio/slide_0.mp3, slide_1.mp3, ... (0-indexed)audio/.audio_cache.jsoncd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/create_slides_gemini.py "{slides_filename}" \
--output-dir "slides-gemini" \
--style "technical-diagram" \
--auto-approve
Delta update: Only regenerates images for slides with changed content.
--force to regenerate all slide imagesStyle Options:
| Style | Description | Best For |
|---|---|---|
technical-diagram |
Clean lines, infographic icons, muted blue/gray | Technical, education |
professional |
Minimalist, geometric shapes | Corporate, formal |
vibrant-cartoon |
Bright gradients, flat design | Marketing, startups |
watercolor |
Soft pastels, organic shapes | Creative, personal |
Other Parameters:
--model: Gemini model (default: gemini-3-pro-image-preview)--aspect-ratio: 16:9 (default), 1:1, 9:16, 4:3, 3:4--start-from N: Resume from slide N--dry-run: Preview prompts without generatingOutput:
slides-gemini/1.jpeg, 2.jpeg, ... (1-indexed)slides-gemini/.slides_cache.jsoncd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/slides_to_video.py \
--slides-dir "slides-gemini" \
--audio-dir "audio" \
--output "{output_filename}.mp4"
Both audio and image generation support delta updates - only regenerating what changed.
.audio_cache.json / .slides_cache.jsonā
Found 20 slides
20 slides with speaker notes
⨠Delta update: 17 slides unchanged, 3 to regenerate
šµ Generating 3 audio files...
Progress |āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā| 3/3 (100.0%)
ā
Audio generation complete!
Generated: 3/3 files
Unchanged: 17 files (skipped)
To ignore cache and regenerate everything:
# Force regenerate all audio
python generate_audio.py "slides.md" --output-dir "audio" --force
# Force regenerate all images
python create_slides_gemini.py "slides.md" --output-dir "slides-gemini" --force
cd "{slides_directory}"
# Step 1: Generate audio
python /Users/lifidea/.claude/skills/markdown-video/generate_audio.py "slides.md" --output-dir "audio"
# Step 2: Generate slide images
python /Users/lifidea/.claude/skills/markdown-video/create_slides_gemini.py "slides.md" \
--output-dir "slides-gemini" \
--style "technical-diagram" \
--auto-approve
# Step 3: Create video
python /Users/lifidea/.claude/skills/markdown-video/slides_to_video.py \
--slides-dir "slides-gemini" \
--audio-dir "audio" \
--output "presentation.mp4"
Same commands - delta updates are automatic:
# Only regenerates changed slides
python generate_audio.py "slides.md" --output-dir "audio"
python create_slides_gemini.py "slides.md" --output-dir "slides-gemini" --auto-approve
python slides_to_video.py --slides-dir "slides-gemini" --audio-dir "audio" --output "presentation.mp4"
brew install ffmpegpip install Pillow requests google-genai
export OPENAI_API_KEY="sk-..."
export GEMINI_API_KEY="..."
| Component | Cost | Example (20 slides) |
|---|---|---|
| Gemini images | ~$0.04/slide | ~$0.80 |
| OpenAI TTS | ~$0.015/1K chars | ~$0.50 |
| Total | ~$1.30 |
With delta updates, subsequent runs only cost for changed slides.
^ prefixed speaker notes for narration^ This is the speaker note for this slide.--dry-run firstBefore marking complete:
^ prefixTwo approaches for generating visuals:
| Mode | Script | Best For |
|---|---|---|
| Slide-by-Slide | create_slides_gemini.py |
Standard presentations, precise control |
| Section-based | generate_section_images.py |
Long presentations, infographic style |
For presentations with many slides, generate one infographic image per section instead of per slide.
| Aspect | Slide-by-Slide | Section-Based |
|---|---|---|
| Images | 1 per slide | 1 per section |
| Audio | Per slide | Per slide ā merged by section |
| Review | Direct in markdown | Video script document |
| Best for | Short presentations | Long presentations (20+ slides) |
Same as standard workflow:
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/generate_audio.py "{slides_filename}" --output-dir "audio"
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/generate_section_images.py "{slides_filename}" \
--output-dir "slides-section" \
--style "infographic"
Style Options:
| Style | Description |
|---|---|
infographic |
Clean professional with icons (default) |
professional |
Minimalist corporate design |
vibrant |
Bright gradients for marketing |
technical |
Flowcharts and technical diagrams |
Other Parameters:
--start-from N: Resume from section N--force: Regenerate all images--dry-run: Preview sections without generating--delay N: Seconds between API calls (default: 2.0)Generate a markdown document for reviewing narration:
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/create_video_script.py "{slides_filename}" \
--output "video_script.md" \
--image-dir "slides-section"
The script document shows:
video_script.mdpython generate_audio.py "slides.md" --output-dir "audio"
cd "{slides_directory}"
python /Users/lifidea/.claude/skills/markdown-video/create_section_video.py \
--slides "{slides_filename}" \
--audio-dir "audio" \
--image-dir "slides-section" \
--output "presentation.mp4"
With config file (for custom section mappings):
python create_section_video.py \
--config "sections.json" \
--audio-dir "audio" \
--image-dir "slides-section" \
--output "presentation.mp4"
Config file format:
{
"sections": [
{"id": 0, "name": "title", "audio_slides": [0]},
{"id": 1, "name": "introduction", "audio_slides": [1, 2, 3]},
{"id": 2, "name": "main_content", "audio_slides": [4, 5, 6, 7]}
]
}
cd "{slides_directory}"
# Step 1: Generate audio
python /Users/lifidea/.claude/skills/markdown-video/generate_audio.py "slides.md" --output-dir "audio"
# Step 2: Generate section images
python /Users/lifidea/.claude/skills/markdown-video/generate_section_images.py "slides.md" \
--output-dir "slides-section" \
--style "infographic"
# Step 3 (optional): Create review document
python /Users/lifidea/.claude/skills/markdown-video/create_video_script.py "slides.md" \
--output "video_script.md" \
--image-dir "slides-section"
# Step 4: Create final video
python /Users/lifidea/.claude/skills/markdown-video/create_section_video.py \
--slides "slides.md" \
--audio-dir "audio" \
--image-dir "slides-section" \
--output "presentation.mp4"