slideshow
npx skills add https://github.com/simhacker/moollm --skill slideshow
Agent 安装分布
Skill 文档
Slideshow
“The camera is the pickaxe. The slideshow is the museum.”
“Every image tells a story. The slideshow tells THE story.”
The Slideshow skill presents generated images as linear visual narratives. While the Visualizer creates images, the Slideshow presents them â synthesizing metadata from prompts and mining sidecars into scrollable stories.
Philosophy
Images live in directories. Directories accumulate chaos.
A SLIDESHOW.md transforms that chaos into narrative:
- Time-ordered entries create journeys
- Metadata synthesis extracts meaning
- Death-scrollable layout works everywhere
- Encapsulation keeps related files together
Think of it as the museum for your visual mining operation.
Stereo Slideshows: YML + MD
“The left eye sees truth. The right eye sees story. Together: depth perception.”
A stereo slideshow maintains two complementary files:
| File | Role | Purpose |
|---|---|---|
SLIDESHOW.yml |
Left Eye | Machine-readable source of truth |
SLIDESHOW.md |
Right Eye | Human-readable narrative for GitHub |
Why Two Files?
SLIDESHOW.yml (Source of Truth):
- Structured data the compiler can read
- Photo metadata, locations, room references
- No prose, just semantic facts
- Stable structure for tooling
SLIDESHOW.md (Narrative View):
- Rich markdown for GitHub display
- Images inline, captions, stories
- Death-scrollable presentation
- Generated FROM the YML
The SYNC Protocol
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â STEREO SLIDESHOW SYNC â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â â
â SLIDESHOW.yml (left eye) SLIDESHOW.md (right eye) â
â âââââââââââââââââââââââ âââââââââââââââââââââââââââ â
â â id: slideshow/pub â â # ð¸ Pub Photo Gallery â â
â â name: Pub Gallery â ââââ¶ â > *"Opening quote..."* â â
â â location: room/pub â SYNC â â â
â â contents: â â ## Shot 1: The Bar â â
â â - dir: bar-shot â â  â â
â â subject: ... â â **Location:** The Bar â â
â âââââââââââââââââââââââ âââââââââââââââââââââââââââ â
â â
â EDIT the YML â SYNC generates MD â
â The YML is the single source of truth â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
SLIDESHOW.yml Format
# SLIDESHOW.yml â Machine-readable slideshow definition
id: slideshow/pub/photos
name: "Pub Photo Gallery"
type: slideshow
location: room/pub # Links to compiled room
tagline: "Memories from the Gezelligheid Grotto"
# Photo metadata
contents:
- dir: bar-shot-2026-01-19
subject: "Marieke at the bar"
mood: warm
role: ESTABLISHING
image: bar-marieke.png
- dir: palm-cats-2026-01-19
subject: "Palm with the cats"
mood: cozy
role: DETAIL
image: palm-cats.png
# Optional: narrative hints for MD generation
narrative:
opening_quote: "The best nights are the ones you almost remember..."
style_notes: "First-person phone camera, golden hour lighting"
# Compiler uses this to link slideshow to room
compiled:
room_ref: room/pub
photo_count: 2
Photo Directory Structure (Stereo)
Each photo can also be stereo:
photo-directory/
PHOTO.yml # Left eye: metadata, generation settings
PHOTO.md # Right eye: narrative description
main-image.png # The actual image
MINING-*.yml # Mining layer files
PHOTO.yml (metadata):
subject:
primary: "Marieke serving drinks"
secondary: ["Palm", "cats"]
mood: warm
camera:
type: "iPhone 15 Pro"
settings: { aperture: 1.8, iso: 800 }
generation:
provider: dalle3
prompt: "..."
PHOTO.md (narrative):
# Marieke at the Bar
The warm glow of Edison bulbs catches the brass
fixtures as Marieke pours a perfect pint...
Commands
SYNC SLIDESHOW [directory]
Regenerates SLIDESHOW.md from SLIDESHOW.yml.
CREATE STEREO SLIDESHOW FOR [directory]
Creates both YML (from scanning directory) and MD (from YML).
UPDATE SLIDESHOW YML [directory]
Scans for new photos and updates the YML source of truth.
The CREATE Method
Generate a SLIDESHOW.md for a directory of images:
CREATE SLIDESHOW for pub/dons-photos-2026-01-19/
What happens:
- Discover images in directory (
.png,.jpg,.webp) - Find sidecars for each image (
.ymlprompt,-mined.ymlresources) - Order by timestamp in filename or file creation time
- Synthesize narrative descriptions from metadata
- Write SLIDESHOW.md with gallery structure
The LANDING Method
Create a README.md landing page for GitHub display:
LANDING for pub/dons-pub-photos-2026-01-19/
Why README.md?
GitHub renders README.md automatically when you browse a directory, but not SLIDESHOW.md. The landing page is the front door â motivating visitors to read the story.
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â README.md (Landing Page) SLIDESHOW.md (Story) â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â â Shown on GitHub automatically â Must click to view â
â â Metadata table Pure narrative flow â
â â Character links No links â just story â
â â Location links No context jumps â
â â Story summary (fresh!) Full detailed story â
â â "View the slideshow" The actual experience â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
What goes in README.md:
| Section | Content |
|---|---|
| Title + Tagline | Hook the reader |
| Gallery Info | Slide count, date, style, location |
| Featuring | Characters with links to their directories |
| Locations | Rooms with links to their directories |
| Story Summary | Fresh synthesis â “why should I look at these?” |
| Preview | Optional image grid |
| Technical | Mining layers, generator |
Key insight: The story summary is freshly synthesized, not copy-pasted from SLIDESHOW.md. It answers: “What will I experience if I click through?”
Workflow:
1. CREATE SLIDESHOW # Generate the story
2. ORGANIZE INTO dirname # Encapsulate files
3. LANDING # Create GitHub front door
The ORGANIZE Method
Encapsulate a SLIDESHOW.md and its images into a named subdirectory:
ORGANIZE pub/SLIDESHOW.md INTO dons-pub-photos-2026-01-19
Before:
pub/
SLIDESHOW.md
dons-photos-2026-01-19-16-30-00-bar-marieke-palm-cats.png
dons-photos-2026-01-19-16-30-00-bar-marieke-palm-cats.yml
dons-photos-2026-01-19-16-30-00-bar-marieke-palm-cats-mined.yml
...20 more files...
After:
pub/
dons-pub-photos-2026-01-19/
SLIDESHOW.md # Inherits from slideshow skill
bar-marieke-palm-cats.png
bar-marieke-palm-cats.yml
bar-marieke-palm-cats-mined.yml
...all files moved and renamed...
Naming convention: lowercase-dashes, descriptive, date-suffixed if temporal.
SLIDESHOW.md Format
Every SLIDESHOW.md should declare inheritance:
---
inherits: slideshow
title: "Don's Pub Photos â January 19, 2026"
created: 2026-01-19
images: 8
style: first-person-phone-camera
---
Structure
# ð¸ Title
> *"Opening quote capturing the vibe"*
Brief description of what this gallery contains.
---
## ð Shot 1: Location (Time)
### *"Caption quote"*

**Location:** Where this was taken
**Who's Here:**
- ð©ð· Character 1 doing something
- ðð´ Character 2 doing something else
ð **Files:** [Prompt](image-file.yml) | [Resources](image-file-mined.yml)
---
## ð Shot 2: Next Location (Time)
...
---
## ð Stats Table
| Time | Location | Highlights |
|------|----------|------------|
| 4:30 PM | Bar | Marieke, Palm, cats |
| ... | ... | ... |
---
## ð¨ Style Notes
Notes on artistic direction, visual consistency, mood.
---
*"Closing quote"*
Metadata Synthesis
The SUMMARIZE method transforms raw sidecar data into narrative:
From prompt.yml:
- Scene description â Location
- Characters present â Who’s Here
- Time of day â Shot timing
- Artistic style â Style notes
From prompt-mined.yml:
- Dominant colors â Visual palette
- Mood/atmosphere â Emotional tone
- Implied sounds/smells â Sensory details
- Symbolism â Deeper meaning
Output: Human-readable narrative that tells the story.
Integration with Visualizer
The Visualizer creates. The Slideshow presents.
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â VISUAL PIPELINE â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â â
â Context YAML â Visualizer â Image + Sidecars â
â (rooms, chars) (generate) (.png, .yml) â
â â
â Image + Sidecars â Image Miner â Resources â
â (extract) (-mined.yml) â
â â
â All Files â Slideshow â SLIDESHOW.md â
â (present) (narrative) â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Visualizer advertises to Slideshow:
# In visualizer/CARD.yml
advertisements:
SLIDESHOW:
delegates_to: slideshow
score: 85
condition: "After generating images, create/update gallery"
Gallery Discovery
Slideshows can be discovered and linked:
# Find all slideshows in adventure-4
find examples/adventure-4 -name "SLIDESHOW.md"
Cross-slideshow navigation:
**Related Galleries:**
- [Palm's Study](../stage/palm-nook/study/palm-study-images/SLIDESHOW.md)
- [Attic Adventures](../attic/dusty-attic-images/SLIDESHOW.md)
Why Encapsulate?
Without encapsulation:
pub/
ROOM.yml
SLIDESHOW.md
guest-book.yml
fireplace.yml
20 image files...
20 prompt files...
20 mining files...
# Chaos. What belongs together?
With encapsulation:
pub/
ROOM.yml
guest-book.yml
fireplace.yml
dons-pub-photos-2026-01-19/
SLIDESHOW.md
all-related-files...
rooftop-telescope-images/
SLIDESHOW.md
all-related-files...
Benefits:
- Files that belong together STAY together
- Directory name is descriptive
- Easy to move, share, archive
- No pollution of parent directory
- SLIDESHOW.md becomes the index
Example Workflow
# 1. Generate images with visualizer
visualize.py character.yml room.yml -p openai
# 2. Mine resources from images
mine.py *.png --depth full
# 3. Create slideshow gallery
CREATE SLIDESHOW for current directory
# 4. Organize into encapsulated directory
ORGANIZE SLIDESHOW.md INTO palm-portrait-session-2026-01-19
# 5. Result: clean, self-contained gallery
Death-Scrollable Design
SLIDESHOW.md targets GitHub rendering:
- Mobile-first: Images scale, text wraps
- Death-scrollable: Just keep scrolling
- Inline images: No external links needed
- Collapsible sections: For detailed metadata
- Emoji headers: Visual navigation
- Tables: Stats and comparisons
James Burke Connections
Every good slideshow tells a story through connections:
How do these images connect?
- Shot 1 introduces the setting
- Shot 3 shows the characters in that setting
- Shot 5 captures the climax
- Shot 8 is the aftermath, full circle
The metadata enables this synthesis â prompts describe intent, mining reveals what emerged.
Commands Reference
| Method | Purpose |
|---|---|
| CREATE | Generate SLIDESHOW.md for directory |
| UPDATE | Add new images to existing gallery |
| SUMMARIZE | Synthesize metadata into narrative |
| ORGANIZE | Encapsulate into subdirectory |
| COMPARE | Cross-image comparison section |
ð§ UPGRADE: Legacy Slideshow Migration
Future feature â not yet implemented
UPGRADE is super flexible. Start with ANYTHING:
- Single file with list of prompts (YML or MD)
- Dir full of loose images (reverse-engineer prompts via mining)
- Just prompts (generate images later!)
- Mixed chaos
- Even empty dirs with just ideas
Input option A â Single prompt list file:
my-ideas.yml (or my-ideas.md)
â Breaks into individual prompts, removes original, creates full structure
Input option B â Dir of images:
messy-folder/
âââ 2026-01-19-dusk-scene-v3.png
âââ morning-light-final.png
âââ random-sketch.jpg
â Mines images for prompts (mine prompt mode), structures everything
Input option C â Mixed chaos (images + prompts + whatever):
messy-folder/
âââ 2026-01-19-dusk-scene-v3.png # Image â mine for prompt
âââ morning-light-final.png # Image â mine for prompt
âââ cool-idea.txt # Prompt â generate image later
âââ more-prompts.yml # Prompt list â break apart
âââ frame-03-arrival.png # Image
âââ random-sketch.jpg # Image
âââ notes.md # Prompts inline â extract
â UPGRADE figures it out: images get mined, prompts get structured, everything organized
Output (full structure from any input):
slideshow/
âââ README.md # Front cover / title page
âââ SLIDESHOW.yml # Machine-readable skeleton
âââ SLIDESHOW.md # Formatted narrative view
âââ 001-dusk-scene/
â âââ PHOTO.yml
â âââ PHOTO.md
â âââ image.png # Main â NO timestamp, NO index
â âââ original.png # Secondary (preserved original name)
â âââ PROMPT.yml # Generation prompt (or mined from image)
âââ 002-morning-light/
â âââ image.png # Main
â âââ PROMPT.yml # Mined via image mining if no prompt existed
â âââ ...
âââ 003-future-idea/
â âââ PHOTO.yml # Metadata ready
â âââ PROMPT.yml # Prompt waiting
â âââ (no image.png yet) # Generate later!
Naming rules:
- Main image:
image.pngâ clean, no timestamp, no index prefix - Secondary images: anything NOT matching
image.pngpattern- Brought along, not shown by default
- Original filenames preserved as secondary
- All paths: repo-root relative in compiled output
What UPGRADE does:
Handles any mix â figures out what each file is:
.png/.jpgâ image â mine for prompt.txt/.mdwith prose â prompt â generate image later.ymlwith list â prompt list â break apart- Unknown â bring along as secondary
Then structures everything:
- Cluster related files by name similarity
- Create
001-descriptive-name/directories - Images â
image.png(main), originals as secondary - Mine images for prompts OR use existing prompts
- Generate
PHOTO.yml,PHOTO.mdskeletons - Remove consumed prompt list files
- Generate
README.md,SLIDESHOW.yml,SLIDESHOW.md
Invoke: UPGRADE path/to/anything (when implemented)
Dovetails With
- Visualizer â Creates the images
- Image Mining â Extracts resources
- Storytelling Tools â Narrative structure
- YAML Jazz â Metadata as fuel
- Room â Spatial context
- Character â Who appears
See CARD.yml for full specification.