Use when the user explicitly requests a slide deck by command, flag, or natural language. Generates a self-contained HTML deck in the diagrams directory with embedded CSS, JavaScript, keyboard navigation, and a progress indicator. Not for PowerPoint files; use pptx.
Scanned 9/1/2026
Install to Claude Code
npx -y skills add OutlineDriven/odin-claude-plugin --skill visual-slides --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Visual Slides?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/outlinedriven-visual-slides)More formats (shields.io, HTML) on the badges page.
---
name: visual-slides
description: 'Use when the user explicitly requests a slide deck by command, flag, or natural language. Generates a self-contained HTML deck in the diagrams directory with embedded CSS, JavaScript, keyboard navigation, and a progress indicator. Not for PowerPoint files; use pptx.'
---
# Visual slides
## Contract
| Field | Bound contract |
|---|---|
| Trigger | Explicit slide-deck request via command, flag, or natural language; never auto-selected |
| Authority | Reversible local: write only the named HTML file to the diagrams directory; delete the file to roll back |
| Side effect | Writes one self-contained HTML slide deck to the diagrams directory |
| Done | Every source item mapped to a slide; the deck fits within a 16:9 short-landscape viewport without horizontal scroll under prefers-reduced-motion; no external resource dependencies at runtime |
## Inputs
Required:
- **Source items**: the content to present, one item per slide. Each item is a title, body text, or diagram source.
Optional:
- **Style direction**: color palette, font, or layout hint from the user.
## Procedure
1. **Parse source items and map to slides.** Enumerate the source items before writing any file. Each item becomes one slide. Done when: slide count is confirmed from the source items, or the step has stopped with `empty-source-items`.
2. **Resolve the output filename.** Derive from the topic or title of the first slide: lowercase, spaces to hyphens, `.html` suffix. Resolve the diagrams directory: use the session diagrams directory if known, otherwise derive from context or create `diagrams/` under the project root. Create the directory if absent. Done when: filename is derived and the diagrams directory exists and is writable, or the step has stopped with `directory-not-writable`.
3. **Generate self-contained HTML with embedded assets.** One slide section per source item. Inline all CSS in a `<style>` block. Inline all JavaScript in a `<script>` block. No external CDN scripts, no `<script src>`, no `eval`, no `data:` URLs, no external fonts (use system font stack). Keyboard arrows and a visible progress indicator for navigation. Done when: the HTML deck contains one slide per source item with all assets inline.
4. **Validate short-landscape viewport budget.** Each slide must fit within a 16:9 landscape viewport without horizontal scroll under `prefers-reduced-motion`. Done when: every slide passes the viewport budget check.
5. **Write to the diagrams directory.** Write the HTML file under the derived filename. Done when: the file exists in the diagrams directory, or the step has stopped with `write-failure`.
## Failure and recovery
| Failure class | Rule |
|---|---|
| `empty-source-items` | Source items empty or unreadable. Stop, return error. |
| `directory-not-writable` | Diagrams directory cannot be created or is not writable. Stop, do not write. |
| `write-failure` | File write returns non-zero. Stop, do not report success. |
Partial-result rule: if the HTML file is not written and validated, discard all output. Rollback: delete the written HTML file. The tool does not delete pre-existing files.
## Output
A self-contained HTML slide deck in the diagrams directory, with the path reported.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!