slides-animejs
A meta-skill that turns raw input (free text, a topic + audience + length brief, an outline, or a .pptx) into a self-contained, browser-served, 16:9, full-screen slide deck animated with anime.js v4. The output is a ./presentation/ folder the user runs with python3 run.py and views in any browser. An overlay layer provides prev/next, fullscreen, a grid view, slide counter, progress bar, and speaker notes.
What this skill does
It orchestrates other skills across an interactive, eleven-phase workflow:
- Bootstrap — fetch the latest anime.js v4 reference (Context7 +
anime.js-best-practices), initialize CLAUDE.md and AGENTS.md in the user's project.
- Intake — detect input (text,
.pptx, outline, folder of materials) and capture audience / length / tone / academic flag / palette preference / meme allowance.
- Content brainstorm — use
scientific-brainstorming (and, for academic decks, scientific-slides for structural guidance only) to draft slide-by-slide content into presentation_plan.md.
- Content Q&A — loop with the user on each slide until content is locked.
- Design brainstorm — call
ui-ux-pro-max to pick palette, typography, and style; commit tokens to the plan and memory.
- Visual assets — audit
./visuals/, generate/fetch SVGs, optionally produce sparse memes via meme-factory, and pause to let the user drop in their own assets.
- Static draft via slides-grab — synchronize with
slides-grab-plan (style approval), then run slides-grab-design to author slide-XX.html files at the 720×405 px final-viewport canvas (slidegrab is the review/authoring stage; the viewport is the source of truth).
- Draft feedback — collect feedback, iterate on plan + slide HTML.
- Animation build — run
scripts/build.py to produce the ./presentation/ bundle (vendored anime.esm.min.js, design-token CSS, slide manifest, overlay, server).
- QA preview — print the run command; optional
playwright-cli screenshot pass for layout regressions.
- Handoff — auto-run
slides-grab-export to produce a PDF backup, print final instructions.
The workflow is interactive with explicit checkpoints. The skill never builds the final animated bundle without explicit user go-ahead. A skill re-invocation reads CLAUDE.md and offers to resume from the recorded phase.
Locked decisions (binding)
These are user-confirmed and must not be relitigated:
- Skill name:
slides-animejs.
- Output bundle path:
./presentation/ in the user's project, sibling of presentation_plan.md and ./visuals/.
- Memory files: write both
CLAUDE.md and AGENTS.md in the user's project (mirrored content) for cross-agent compatibility.
- anime.js: always vendor locally as
assets/anime.esm.min.js. No CDN mode. Bundle is fully offline.
- PDF backup:
slides-grab-export runs automatically at phase 10 (handoff) and writes ./presentation/backup.pdf.
- PPTX back-conversion is not supported — HTML + anime.js is the only output format.
File layout produced in the user's project
The bundle lives in ./presentation/ (sibling of presentation_plan.md, CLAUDE.md/AGENTS.md, and ./visuals/). The user runs cd presentation && python3 run.py and the browser opens at http://localhost:8000. Full tree, asset templates, and script inventory: see references/skill-internals.md.
How to operate this skill
When invoked, the orchestrator:
- Reads any pre-existing
CLAUDE.md in the working directory. If a ## Current phase block exists, summarize state in two lines and ask: "Continue from phase X, or jump to phase Y?".
- Otherwise, enters phase 0 (Bootstrap) and follows
references/workflow.md step-by-step.
Each phase has explicit enter / do / ask / write / exit rules — see references/workflow.md for the verbatim operational playbook.
Hard rules
- 16:9 full viewport; the browser window IS the slide. No "card on a page" layout. Letterbox/pillarbox when the window aspect deviates.
- Animate only
transform and opacity. Respect prefers-reduced-motion.
- Vendor anime.js locally; the bundle must run offline.
- Memes appear sparingly (max ~1 per 6 slides) and never on academic decks unless the user explicitly opts in.
- Pause at phase 5 to instruct the user to drop assets into
./visuals/. Do not auto-fill silently.
- Never run phase 9 (final animation build) without explicit user go-ahead.
- Keep
CLAUDE.md and AGENTS.md in sync (rewrite atomically on every phase transition).
- Run the phase-0 dependency preflight (
references/workflow.md) first: block if a hard-required sub-skill or Context7 MCP is missing; warn-and-degrade for missing optional skills.
Sub-skills orchestrated
Content: scientific-brainstorming, scientific-slides (academic only). Design: ui-ux-pro-max. Static authoring: slides-grab-plan, slides-grab-design, slides-grab-export. Animation: anime.js-best-practices (+ Context7). Intake: pptx. Extras: meme-factory (sparse), playwright-cli (optional QA).
Per-skill purpose + gotchas: references/skill-internals.md. Exact call contracts: references/subskill-integration.md. Verified spec deviations: references/compatibility-notes.md. Required-vs-optional preflight: references/workflow.md phase 0.
References (load on demand)
| File |
When to read |
references/workflow.md |
Always — the operational playbook for phases 0–10. |
references/animejs-condensed.md |
Phase 0; refreshed via Context7. Cite during animation authoring. |
references/animejs-patterns.md |
Phases 6–9 when picking entrance / exit / transition recipes. |
references/slide-design-rules.md |
Phases 6–9 for 16:9 rules, type scale, contrast, reduced-motion handling. |
references/presentation-plan-schema.md |
Any time presentation_plan.md is created or edited. |
references/subskill-integration.md |
When orchestrating a specific sub-skill call. |
references/compatibility-notes.md |
Whenever a sub-skill's actual behavior diverges from the spec. |
references/skill-internals.md |
Bundle tree, asset templates, and scripts/ inventory — when building/validating the bundle. |
Quick-reference invariants
- Slide canvas: 720 px × 405 px — the final 16:9 viewport, and the source of truth.
overlay.js scales .slide-frame to the window via min(innerW/720, innerH/405) (uniform scale + letterbox). slides-grab authors at this same canvas only to ease the review step; if the two ever diverge, the viewport wins.
- Animations: WAAPI-first;
prefers-reduced-motion short-circuits both the auto-animator and per-slide custom timelines.
- Per-slide custom timelines:
window.__slideTL[n] = (root) => ({ cancel }) (namespaced; cancel runs on slide exit to stop intervals/timelines and reset DOM).
- Server: stdlib
http.server on port 8000 (override with SLIDES_PORT).
- Bundle is idempotent — re-running
scripts/build.py overwrites the bundle without touching plan or drafts.
Runtime model (full detail in references/workflow.md + references/slide-design-rules.md)
- iframe isolation — each slide loads in its own
<iframe srcdoc> with <base href="/">, so slide HTML may use html/body/:root/bare-element selectors freely without polluting other slides. The parent animates the iframe element (transform + opacity) for transitions and calls __slideEntered(i) / __slideExited() on the iframe window.
- Step protocol — a slide may set
window.__slideSteps = K + window.__slideStep = (n, dir) => void for PowerPoint-style click-advance (parent steps 0..K within the slide before navigating).
- Footer safe-zone — a 26 px footer band sits at the bottom; every slide reserves ≥ 38 px bottom padding (or pads inner columns).
- Idle animations — every slide gets a subtle baseline idle; make 2–3 slides per deck "signature" with a topic-anchored idle that becomes a memory anchor.
- SVG gotcha — never apply CSS
transform: scale() to a <g transform="translate()"> (it replaces the attribute and collapses the group); animate inner shape coords (cx/cy/x/y) or use transform-box: fill-box.
End-of-skill checklist before declaring success
1---2name: slides-animejs3description: Build a PowerPoint-style, 16:9 full-screen, browser-served slide presentation animated with anime.js v4. Orchestrates content brainstorming (scientific-brainstorming), academic structuring (scientific-slides), UI/UX design (ui-ux-pro-max), static authoring (slides-grab), animation patterns (anime.js-best-practices + Context7), PPTX intake (pptx), and sparse comic relief (meme-factory). Outputs a self-contained bundle the user runs with `python3 run.py`. Trigger when the user asks to make an animated web slideshow, browser-served presentation, or convert a pptx to an interactive HTML deck with animations.4---56# slides-animejs78A meta-skill that turns raw input (free text, a topic + audience + length brief, an outline, or a `.pptx`) into a self-contained, browser-served, 16:9, full-screen slide deck animated with [anime.js v4](https://animejs.com/). The output is a `./presentation/` folder the user runs with `python3 run.py` and views in any browser. An overlay layer provides prev/next, fullscreen, a grid view, slide counter, progress bar, and speaker notes.910## What this skill does1112It orchestrates other skills across an interactive, eleven-phase workflow:13141. **Bootstrap** — fetch the latest anime.js v4 reference (Context7 + `anime.js-best-practices`), initialize `CLAUDE.md` and `AGENTS.md` in the user's project.152. **Intake** — detect input (text, `.pptx`, outline, folder of materials) and capture audience / length / tone / academic flag / palette preference / meme allowance.163. **Content brainstorm** — use `scientific-brainstorming` (and, for academic decks, `scientific-slides` for structural guidance only) to draft slide-by-slide content into `presentation_plan.md`.174. **Content Q&A** — loop with the user on each slide until content is locked.185. **Design brainstorm** — call `ui-ux-pro-max` to pick palette, typography, and style; commit tokens to the plan and memory.196. **Visual assets** — audit `./visuals/`, generate/fetch SVGs, optionally produce sparse memes via `meme-factory`, and pause to let the user drop in their own assets.207. **Static draft via slides-grab** — synchronize with `slides-grab-plan` (style approval), then run `slides-grab-design` to author `slide-XX.html` files at the 720×405 px final-viewport canvas (slidegrab is the review/authoring stage; the viewport is the source of truth).218. **Draft feedback** — collect feedback, iterate on plan + slide HTML.229. **Animation build** — run `scripts/build.py` to produce the `./presentation/` bundle (vendored `anime.esm.min.js`, design-token CSS, slide manifest, overlay, server).2310. **QA preview** — print the run command; optional `playwright-cli` screenshot pass for layout regressions.2411. **Handoff** — auto-run `slides-grab-export` to produce a PDF backup, print final instructions.2526The workflow is interactive with explicit checkpoints. The skill never builds the final animated bundle without explicit user go-ahead. A skill re-invocation reads `CLAUDE.md` and offers to resume from the recorded phase.2728## Locked decisions (binding)2930These are user-confirmed and must not be relitigated:31321. Skill name: **`slides-animejs`**.332. Output bundle path: **`./presentation/`** in the user's project, sibling of `presentation_plan.md` and `./visuals/`.343. Memory files: write **both `CLAUDE.md` and `AGENTS.md`** in the user's project (mirrored content) for cross-agent compatibility.354. anime.js: **always vendor locally** as `assets/anime.esm.min.js`. No CDN mode. Bundle is fully offline.365. PDF backup: `slides-grab-export` runs **automatically** at phase 10 (handoff) and writes `./presentation/backup.pdf`.376. PPTX back-conversion is **not supported** — HTML + anime.js is the only output format.3839## File layout produced in the user's project4041The bundle lives in `./presentation/` (sibling of `presentation_plan.md`, `CLAUDE.md`/`AGENTS.md`, and `./visuals/`). The user runs `cd presentation && python3 run.py` and the browser opens at `http://localhost:8000`. Full tree, asset templates, and script inventory: see `references/skill-internals.md`.4243## How to operate this skill4445When invoked, the orchestrator:46471. Reads any pre-existing `CLAUDE.md` in the working directory. If a `## Current phase` block exists, summarize state in two lines and ask: "Continue from phase X, or jump to phase Y?".482. Otherwise, enters **phase 0 (Bootstrap)** and follows `references/workflow.md` step-by-step.4950Each phase has explicit **enter / do / ask / write / exit** rules — see `references/workflow.md` for the verbatim operational playbook.5152### Hard rules5354- 16:9 full viewport; the browser window IS the slide. No "card on a page" layout. Letterbox/pillarbox when the window aspect deviates.55- Animate only `transform` and `opacity`. Respect `prefers-reduced-motion`.56- Vendor anime.js locally; the bundle must run offline.57- Memes appear sparingly (max ~1 per 6 slides) and never on academic decks unless the user explicitly opts in.58- Pause at phase 5 to instruct the user to drop assets into `./visuals/`. Do not auto-fill silently.59- Never run phase 9 (final animation build) without explicit user go-ahead.60- Keep `CLAUDE.md` and `AGENTS.md` in sync (rewrite atomically on every phase transition).61- Run the phase-0 dependency preflight (`references/workflow.md`) first: block if a hard-required sub-skill or Context7 MCP is missing; warn-and-degrade for missing optional skills.6263## Sub-skills orchestrated6465Content: `scientific-brainstorming`, `scientific-slides` (academic only). Design: `ui-ux-pro-max`. Static authoring: `slides-grab-plan`, `slides-grab-design`, `slides-grab-export`. Animation: `anime.js-best-practices` (+ Context7). Intake: `pptx`. Extras: `meme-factory` (sparse), `playwright-cli` (optional QA).6667Per-skill purpose + gotchas: `references/skill-internals.md`. Exact call contracts: `references/subskill-integration.md`. Verified spec deviations: `references/compatibility-notes.md`. Required-vs-optional preflight: `references/workflow.md` phase 0.6869## References (load on demand)7071| File | When to read |72|---|---|73| `references/workflow.md` | Always — the operational playbook for phases 0–10. |74| `references/animejs-condensed.md` | Phase 0; refreshed via Context7. Cite during animation authoring. |75| `references/animejs-patterns.md` | Phases 6–9 when picking entrance / exit / transition recipes. |76| `references/slide-design-rules.md` | Phases 6–9 for 16:9 rules, type scale, contrast, reduced-motion handling. |77| `references/presentation-plan-schema.md` | Any time `presentation_plan.md` is created or edited. |78| `references/subskill-integration.md` | When orchestrating a specific sub-skill call. |79| `references/compatibility-notes.md` | Whenever a sub-skill's actual behavior diverges from the spec. |80| `references/skill-internals.md` | Bundle tree, asset templates, and `scripts/` inventory — when building/validating the bundle. |8182## Quick-reference invariants8384- Slide canvas: **720 px × 405 px — the final 16:9 viewport, and the source of truth.** `overlay.js` scales `.slide-frame` to the window via `min(innerW/720, innerH/405)` (uniform scale + letterbox). slides-grab authors at this same canvas only to ease the review step; if the two ever diverge, the viewport wins.85- Animations: WAAPI-first; `prefers-reduced-motion` short-circuits both the auto-animator and per-slide custom timelines.86- Per-slide custom timelines: `window.__slideTL[n] = (root) => ({ cancel })` (namespaced; `cancel` runs on slide exit to stop intervals/timelines and reset DOM).87- Server: stdlib `http.server` on port 8000 (override with `SLIDES_PORT`).88- Bundle is idempotent — re-running `scripts/build.py` overwrites the bundle without touching plan or drafts.8990### Runtime model (full detail in `references/workflow.md` + `references/slide-design-rules.md`)9192- **iframe isolation** — each slide loads in its own `<iframe srcdoc>` with `<base href="/">`, so slide HTML may use `html`/`body`/`:root`/bare-element selectors freely without polluting other slides. The parent animates the iframe element (transform + opacity) for transitions and calls `__slideEntered(i)` / `__slideExited()` on the iframe window.93- **Step protocol** — a slide may set `window.__slideSteps = K` + `window.__slideStep = (n, dir) => void` for PowerPoint-style click-advance (parent steps 0..K within the slide before navigating).94- **Footer safe-zone** — a 26 px footer band sits at the bottom; every slide reserves ≥ 38 px bottom padding (or pads inner columns).95- **Idle animations** — every slide gets a subtle baseline idle; make 2–3 slides per deck "signature" with a topic-anchored idle that becomes a memory anchor.96- **SVG gotcha** — never apply CSS `transform: scale()` to a `<g transform="translate()">` (it replaces the attribute and collapses the group); animate inner shape coords (`cx`/`cy`/`x`/`y`) or use `transform-box: fill-box`.9798## End-of-skill checklist before declaring success99100- [ ] `presentation_plan.md` exists with the canonical schema.101- [ ] `CLAUDE.md` and `AGENTS.md` are in sync and reflect the current phase.102- [ ] `./visuals/` exists; every slide that references an asset resolves to a file.103- [ ] `./presentation/` builds, validates, and opens in the browser with all overlay features functional.104- [ ] `./presentation/backup.pdf` exists.105- [ ] Reduced-motion fallback verified by toggling the OS setting (or `prefers-reduced-motion: reduce` in DevTools).106- [ ] User has been handed the run command and the bundle path.