with one click
slideshow
Present images in linear narrative form
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Present images in linear narrative form
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Portable tokens of capability, identity, and access
The grammar rules that make MOOLLM's file system object-oriented. Plural directory names declare element type; UPPERCASE marker files declare interface exports (COM-style, minus the UUIDs); directories are implementation classes exporting every interface whose marker file sits at their root.
Mother skill for platform-descriptor sister skills. Defines what a BIOME is — a bounded region of an ecosystem (coexisting, exchanging, never isolated) for one platform you operate — and what files, subdirectories, and cross-biome bridges every daughter biome inherits.
A skill is documentation that learned to do things.
GNU Emacs as a stateful Lisp machine for agents — daemon, moo-* protocol, emacs.py router, emacs:// URLs, spoken grammar, play-learn-lift.
Schemapedia — schema plugins, families, gateways, formats.yml, mechanism_relations; self-object kernel; delegates to sibling skills.
| name | slideshow |
| description | Present images in linear narrative form |
| license | MIT |
| tier | 1 |
| allowed-tools | ["read_file","write_file"] |
| related | ["visualizer","image-mining","storytelling-tools","yaml-jazz","room","character"] |
| tags | ["moollm","images","presentation","narrative","gallery"] |
"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.
Images live in directories. Directories accumulate chaos.
A SLIDESHOW.md transforms that chaos into narrative:
Think of it as the museum for your visual mining operation.
"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 |
SLIDESHOW.yml (Source of Truth):
SLIDESHOW.md (Narrative View):
┌─────────────────────────────────────────────────────────────────┐
│ 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 — 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
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...
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.
Generate a SLIDESHOW.md for a directory of images:
CREATE SLIDESHOW for pub/dons-photos-2026-01-19/
What happens:
.png, .jpg, .webp).yml prompt, -mined.yml resources)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
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.
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
---
# 📸 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"*
The SUMMARIZE method transforms raw sidecar data into narrative:
From prompt.yml:
From prompt-mined.yml:
Output: Human-readable narrative that tells the story.
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"
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)
Without encapsulation:
pub/
ROOM.yml
SLIDESHOW.md
guestbook.yml
fireplace.yml
20 image files...
20 prompt files...
20 mining files...
# Chaos. What belongs together?
With encapsulation:
pub/
ROOM.yml
guestbook.yml
fireplace.yml
dons-pub-photos-2026-01-19/
SLIDESHOW.md
all-related-files...
rooftop-telescope-images/
SLIDESHOW.md
all-related-files...
Benefits:
# 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
SLIDESHOW.md targets GitHub rendering:
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.
| 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 |
Future feature — not yet implemented
UPGRADE is super flexible. Start with ANYTHING:
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:
image.png — clean, no timestamp, no index prefiximage.png pattern
What UPGRADE does:
Handles any mix — figures out what each file is:
.png/.jpg → image → mine for prompt.txt/.md with prose → prompt → generate image later.yml with list → prompt list → break apartThen structures everything:
001-descriptive-name/ directoriesimage.png (main), originals as secondaryPHOTO.yml, PHOTO.md skeletonsREADME.md, SLIDESHOW.yml, SLIDESHOW.mdInvoke: UPGRADE path/to/anything (when implemented)
See CARD.yml for full specification.