@ztffn/presentation-generator-plugin
v1.6.3
Published
Claude Code plugin for generating graph-based presentations
Maintainers
Readme
Presentation Generator Plugin
Generates complete graph-based presentations from a natural language brief and optional project documents. Uses a two-agent + script pipeline: content extraction → narrative design → deterministic graph generation → visual styling.
What it produces
A presentations/{slug}/{slug}.json file you import directly into the graph editor at /present/plan via New presentation → Import JSON. The result is a fully navigable presentation with correct edge wiring, positioned nodes, and visual treatments applied.
Install
Requires Claude Code 1.0.33 or later.
Option A — download zip (no technical setup)
- Go to Releases and download the latest
presentation-generator-plugin-vX.X.X.zip - Unzip it anywhere on your machine
- Load it in Claude Code:
claude --plugin-dir /path/to/presentation-generator-pluginTo always have it available in a project, register it with Claude Code:
claude plugin install /path/to/presentation-generator-plugin --scope projectThis writes the correct entry to .claude/settings.json. Commit that file to share the plugin with your team.
To update: download the new zip from Releases, replace the old folder.
Option B — install via npx (requires Node.js 18+ and GitHub auth)
Install the plugin:
npx @ztffn/presentation-generator-plugin installThe installer clones the plugin to ~/.claude/plugins/presentation-generator/ and offers to configure your project's .claude/settings.json automatically.
Update to the latest version:
npx @ztffn/presentation-generator-plugin updateCheck if an update is available:
npx @ztffn/presentation-generator-plugin check-updateUsage
Once the plugin is loaded, trigger the skill by asking Claude to create a presentation:
Create a pitch presentation for Calora targeting VP Operations, drawing from docs/business/Calora_Overview.pdfBuild a 15-minute investor deck using docs/business/Huma_Overview_Read_First.pdfGenerate slides for an internal update on the Q2 roadmap scope changeClaude will automatically detect the intent and run the pipeline. No slash command needed — the skill is model-invoked.
Pipeline
User Brief + Documents
↓
[1] Content Extraction → _temp/presentation-content-brief.json
↓
[2] Narrative Design → _temp/presentation-outline.md
↓
[3] User Approval → confirm or revise structure
↓
[4] Graph Generation → presentations/{slug}/{slug}.json (script)
↓
[5] Visual Styling → styled JSON (agent)
↓
[6] Delivery → import instructions + media checklistYou review and approve the structure before any JSON is generated. If the structure needs changes, describe them and Claude revises before proceeding.
Agents and scripts
| Component | Type | Role |
|---|---|---|
| presentation-content | agent | Reads source documents, extracts a structured content brief |
| presentation-narrative | agent | Selects a narrative framework, designs spine and drill-downs, writes slide content |
| outline_to_graph.py | script | Deterministic converter: parses outline markdown, emits valid ReactFlow graph JSON |
| presentation-style | agent | Applies visual treatments (layout, backgrounds, charts, branding) to the valid JSON |
Content and narrative agents never see layout decisions; the styling agent never reads source documents. The script handles all structural correctness (node wrappers, edge wiring, positions) mechanically.
Output files
| File | Created by | Purpose |
|---|---|---|
| _temp/presentation-content-brief.json | Content agent | Structured brief passed to narrative agent |
| _temp/presentation-outline.md | Narrative agent | Human-readable structure for user approval |
| _temp/presentation-plan.md | Orchestrator | Folder-tree view shown during approval step |
| presentations/{slug}/{slug}.json | Script + styling agent | Final graph JSON for import |
After import
- Open
/present/planin the app - Click New presentation
- Choose Import JSON
- Select
presentations/{slug}/{slug}.json
If any slides require video backgrounds, Claude lists them in the delivery summary with upload instructions.
Releasing a new version
When skill files are updated, bump the version in package.json and push a tag. The GitHub Actions workflow publishes to GitHub Packages automatically.
# Edit package.json version, then:
git add -A
git commit -m "Update narrative/frameworks.md: ..."
git tag v1.1.0
git push origin main && git push origin v1.1.0Pushing the tag triggers the publish workflow. Team members get the update with npx @ztffn/presentation-generator-plugin update.
Plugin structure
presentation-generator-plugin/
├── .claude-plugin/
│ └── plugin.json
├── package.json
├── bin/
│ └── index.js
├── agents/
│ ├── presentation-content.md
│ ├── presentation-narrative.md
│ └── presentation-style.md
├── skills/
│ ├── presentation-generator/
│ │ ├── SKILL.md # Orchestrator skill
│ │ └── presentation-guide.md
│ ├── content-signals/SKILL.md # Content extraction patterns
│ ├── frameworks/SKILL.md # Narrative frameworks
│ ├── slide-content/SKILL.md # Slide writing quality
│ ├── graph-topology/SKILL.md # Spine/drill-down structure
│ ├── graph-json-spec/SKILL.md # Node schema, edge wiring, positioning grid
│ └── slide-recipes/SKILL.md # Design decisions, visual intent, slide recipes
├── scripts/
│ ├── outline_to_graph.py # Deterministic outline-to-graph converter
│ └── validate_draft.py # Validates generated JSON against renderer types
└── hooks/
├── hooks.json
├── enforce-style-schema.sh # PreToolUse: injects schema rules into styling agent
├── pre-validate-presentation-json.sh # PreToolUse: blocks invalid JSON writes
└── validate-presentation-json.sh # PostToolUse: validates after Write/Edit