npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@ztffn/presentation-generator-plugin

v1.6.3

Published

Claude Code plugin for generating graph-based presentations

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)

  1. Go to Releases and download the latest presentation-generator-plugin-vX.X.X.zip
  2. Unzip it anywhere on your machine
  3. Load it in Claude Code:
claude --plugin-dir /path/to/presentation-generator-plugin

To always have it available in a project, register it with Claude Code:

claude plugin install /path/to/presentation-generator-plugin --scope project

This 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 install

The 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 update

Check if an update is available:

npx @ztffn/presentation-generator-plugin check-update

Usage

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.pdf
Build a 15-minute investor deck using docs/business/Huma_Overview_Read_First.pdf
Generate slides for an internal update on the Q2 roadmap scope change

Claude 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 checklist

You 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

  1. Open /present/plan in the app
  2. Click New presentation
  3. Choose Import JSON
  4. 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.0

Pushing 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