Agent skill

Deck AI

by assafkip in assafkip/kipi-system

Turns a markdown file into a themed, image-rich slide deck exported as PDF, using Slidev for layouts and Unsplash for photos, all run locally.

MITAuto-check: notesDocuments & Office

Install Deck AI

skills CLI
$ npx skills add assafkip/kipi-system --skill deck-ai -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install assafkip/kipi-system deck-ai --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/assafkip/kipi-system.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/kipi-core/skills/deck-ai .claude/skills/deck-ai && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
deck-ai
GitHub stars
112
Token cost
~1.5k tokens
SKILL.md length
549 words
Files
5 (incl. scripts, references)
Skills in repo
14
Repo updated
First seen
Licence
MIT

At a glance

Turns a markdown file into a themed, image-rich slide deck exported as PDF, using Slidev for layouts and Unsplash for photos, all run locally.

  • Works in 4 steps: Reads source markdown (slides separated… → Picks a layout + image keyword per… → Fetches images from Unsplash by keyword. → …
  • Turning a markdown outline into a PDF presentation
  • SKILL.md covers What this skill does, When to invoke, Required setup (first run) and Workflow (per deck), plus 7 more sections
  • Runs Python and Shell scripts from its folder; calls bash, python3 and npm; needs UNSPLASH_ACCESS_KEY

What it does

Markdown goes in and a PDF deck comes out. The skill reads a file whose slides are separated by ---, picks a layout and an image keyword for every slide, fetches matching pictures from Unsplash and renders the whole deck through Slidev. In its preferred mode the agent writes a decisions.json file itself, one object per slide in source order; a rules mode with deterministic regex picks is the fallback for harnesses without an LLM.

A generate script validates decisions.json and exits with an error on any violation. The allowed layouts are cover, center, statement, two-cols, image-right, image-left, quote, end and default, and the first slide has to be a cover. The first run needs Node 18 or newer, pnpm, an Unsplash access key kept in a .env file that is never committed, and a one-time setup script that builds a Slidev workspace in a minute or two. It is not meant for editing existing slide text or for requests that specifically want a PPTX file.

When your agent uses it

  • Turning a markdown outline into a PDF presentation
  • Building a slide deck with photos from lesson or pitch notes
  • Making a Gamma-style deck without a subscription

Example prompts

  • “Make a deck from notes/quarterly-update.md and export it as a PDF.”
  • “Turn this markdown into slides with a cover, a quote slide and image layouts.”
  • “Build slides from ./lesson-plan.md with photos that match each slide's topic.”

Requirements

  • Node 18 or newer and pnpm
  • An Unsplash access key in a .env file
  • A Slidev workspace created by the bundled setup script

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Reads source markdown (slides separated by ---).
  2. Picks a layout + image keyword per slide. Two modes
  3. Fetches images from Unsplash by keyword.
  4. Renders the whole thing to PDF via Slidev.

What it can do on your machine

Read from SKILL.md and the folder at commit 16d4724. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 3 files in scripts/ (Python and Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • bash
    • python3
    • npm
    • brew
    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • unsplash.com
    • sli.dev

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • UNSPLASH_ACCESS_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Deck AI loads about 1.5k tokens when it runs, and up to ~1.9k if it reads all its reference files. Until then it costs about 67 tokens; SKILL.md has 549 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~67
When it runs · the whole SKILL.md, loaded when a task matches
~1.5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~1.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:40
    - Key lives in `.env` at the calling instance root:
  • NoteMentions a .env fileSKILL.md:42
    ho 'UNSPLASH_ACCESS_KEY=<your-key>' >> ./.env
  • NoteMentions a .env fileSKILL.md:44
    - Never commit `.env`. Never paste the key into any file in this skill.
  • NoteMentions a .env fileSKILL.md:164
    `UNSPLASH_ACCESS_KEY not set` | Add to `.env` at calling dir |

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from assafkip/kipi-system at commit 16d4724, republished under its MIT licence (© assafkip). 549 words, ~1,480 tokens.

Download SKILL.mdSave it as .claude/skills/deck-ai/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
deck-ai
description
Generate modern presentation decks (PDF) from markdown content. Local open-source alternative to Gamma — uses Slidev for layouts and Unsplash for imagery. Invoke when the user asks to "make a deck", "build slides from this", or "turn this into a presentation".
user-invocable
false

deck-ai

Turn plain markdown into a themed, image-rich slide deck exported as PDF. Closest open-source equivalent to Gamma. Runs locally. No subscription.

What this skill does

  1. Reads source markdown (slides separated by ---).
  2. Picks a layout + image keyword per slide. Two modes:
    • LLM mode (preferred): Claude writes decisions.json directly using the Write tool. No extra API call.
    • Rules mode (fallback): deterministic regex picks. Used when the skill is invoked from a non-LLM harness.
  3. Fetches images from Unsplash by keyword.
  4. Renders the whole thing to PDF via Slidev.

When to invoke

Triggers: "make a deck", "turn this into slides", "slide version of X", "build a presentation from this", "gamma-style deck".

Do NOT invoke for plain editing / rewriting of existing slide content. Do NOT invoke if the user wants a PPTX specifically (use python-pptx instead).

Required setup (first run)

Prerequisites
  • Node 18+ and pnpm on the user's machine. If missing:
    brew install node
    npm install -g pnpm
API key
  • Unsplash (required): https://unsplash.com/oauth/applications — only the Access Key.
  • Key lives in .env at the calling instance root:
    echo 'UNSPLASH_ACCESS_KEY=<your-key>' >> ./.env
  • Never commit .env. Never paste the key into any file in this skill.
  • No separate Anthropic key needed — when this skill runs inside Claude Code, Claude itself writes decisions.json.
Install workspace (one-time per instance)
bash <skill>/scripts/setup.sh ./deck-workspace

This creates a local Slidev workspace with themes installed. Takes ~1-2 minutes first run. Subsequent runs reuse it.

Workflow (per deck)

# 1. Preflight: key + deps must be present
bash <skill>/scripts/check_env.sh ./deck-workspace

# 2. (LLM mode) Claude reads <input.md>, decides layout + image keyword
#    per slide, and WRITES ./deck-workspace/decisions.json with the Write
#    tool (schema below). Skip this step when running outside Claude.

# 3. Generate Slidev markdown from source
#    LLM mode:
python3 <skill>/scripts/generate.py <input.md> ./deck-workspace/slides.raw.md \
    --theme seriph --decisions ./deck-workspace/decisions.json
#    Rules mode (no decisions file):
python3 <skill>/scripts/generate.py <input.md> ./deck-workspace/slides.raw.md --theme seriph

# 4. Fill image placeholders from Unsplash
python3 <skill>/scripts/fetch_images.py ./deck-workspace/slides.raw.md

# 5. Export PDF
bash <skill>/scripts/render.sh ./deck-workspace ./deck-workspace/slides.raw.md ./deck.pdf
decisions.json schema (step 2)

One object per slide, in source order. generate.py validates this file and exits non-zero on any violation.

json
[
  {"layout": "cover",       "image_keyword": "sunrise mountains"},
  {"layout": "image-right", "image_keyword": "student classroom"},
  {"layout": "center",      "image_keyword": null},
  {"layout": "end",         "image_keyword": null}
]

Rules Claude must follow when writing decisions.json:

  • layout is one of: cover, center, statement, two-cols, image-right, image-left, quote, end, default.
  • Slide 1 must be cover.
  • If a slide has <!-- layout: X --> in the source, use that layout.
  • image_keyword is 1-3 concrete nouns suitable for stock photo search. Required for cover, image-right, image-left. null for every other layout.
  • No brand names, no anime character names, no abstract concepts. Use the underlying physical scene instead.

Good keywords: library books, koi fish, child drawing, mountain sunrise. Bad keywords: Naruto, loneliness, theme of courage, The Ordinary World.

Show full SKILL.md (217 more words)Show less

Source markdown format

Slides separated by a line containing only ---. First slide is the cover.

Example:

# Deck Title

Subtitle line.

---

# Second slide

Body content here.

<!-- layout: image-right -->

Anime anchor: Naruto.

---

# Homework

Optional closing text.

Layouts

See references/layout-catalog.md for the full enum and pick rules. Force a layout by adding <!-- layout: <name> --> in a slide body.

Image keywords

Use concrete nouns in {{IMG:keyword}} placeholders. 1-3 words. Good: mountain sunrise, library books, child drawing. Bad: feeling of wonder, theme of courage (abstract concepts return weak results).

Themes

Default: @slidev/theme-seriph (clean serif, modern). Fallback: @slidev/theme-default (sans-serif, minimal).

Install more themes in the workspace:

cd ./deck-workspace && pnpm add @slidev/theme-<name>

Browse: https://sli.dev/resources/theme-gallery

Limitations

  • Slidev renders via Playwright Chromium on first export (adds ~30s).
  • Unsplash free tier: 50 requests/hour. Reuse keywords if hitting the limit.
  • PDF export does not preserve interactive elements (embeds, live code).
  • Slide source must be standard markdown. HTML-heavy content may break layout.

Troubleshooting

SymptomFix
pnpm: command not foundnpm install -g pnpm
UNSPLASH_ACCESS_KEY not setAdd to .env at calling dir
Images all say "no image found"Keywords too abstract. Use concrete nouns.
PDF export hangsFirst run downloads Chromium. Let it finish.
Layout looks wrongCheck <!-- layout: X --> hint or let rules pick

What this skill does NOT do (v2)

  • AI-generated images (Unsplash stock only; could add Flux/Ideogram later)
  • Brand theme editor (use provided themes or install more via pnpm)
  • Per-slide image retries (one Unsplash result per keyword; no ranking)

© assafkip, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (scripts, references) in plugins/kipi-core/skills/deck-ai of assafkip/kipi-system.

  • SKILL.md
  • references/layout-catalog.md
  • scripts/check_env.sh
  • scripts/fetch_images.py
  • scripts/render_pptx.py

Open the folder on GitHubat commit 16d4724

Compare with similar skills

Deck AI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Deck AI compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Deck AI this skillassafkip/kipi-system112—~1.5kAutomated safety check: NotesMIT
Ky Markdown RebuilderKyrieCheungYep/ky-markdown-rebuilder117—~5.7kAutomated safety check: PassNone
Slidev CLI Skilldskilld-dev/vue-ecosystem-skills181—~1.1kAutomated safety check: PassMIT
Slide Deck Image GeneratorSpaceZephyr/design-buddy175—~6.5kAutomated safety check: PassNone
Youtube Notetakersickn33/agentic-awesome-skills47k1 repos~2.3kAutomated safety check: PassMIT
Multimodal Extractionswyxio/skills175—~922Automated safety check: PassMIT

Similar skills

  • Ky Markdown Rebuilder

    KyrieCheungYep/ky-markdown-rebuilder

    Rebuild visual documents into reliable Markdown by combining text extraction with page or screenshot alignment.

    117 GitHub stars~5.7k tokensUpdated 3 mo ago
    Documents & OfficeAuto-check passed
  • Slidev CLI Skilld

    skilld-dev/vue-ecosystem-skills

    Build, present, and ship Slidev decks with @slidev/cli. An agent skill from skilld-dev/vue-ecosystem-skills.

    181 GitHub stars~1.1k tokensUpdated 16 days ago
    Documents & OfficeAuto-check passed
  • Slide Deck Image Generator

    SpaceZephyr/design-buddy

    Turns written content into designed slide images from an outline, merges them into PPTX or PDF, and can borrow styles from a registry of brand design systems.

    175 GitHub stars~6.5k tokensUpdated 3 mo ago
    Documents & OfficeAuto-check passed
  • Youtube Notetaker

    sickn33/agentic-awesome-skills

    Turn YouTube talks into local study notes with slides, transcripts, editable annotations, and a markdown-backed viewer.

    47k GitHub starsUsed in 1 repo~2.3k tokens
    Documents & OfficeAuto-check passed
  • Given a local video or video URL, downloads the media if needed, extracts slide frames and key moments, transcribes the audio, and writes a Markdown timeline that interleaves screenshots with the…

    175 GitHub stars~922 tokensUpdated 4 days ago
    Documents & OfficeAuto-check passed
  • Instagram Post Downloader

    mohitagw15856/pm-claude-skills

    Download and save Instagram posts as high-resolution files. An agent skill from mohitagw15856/pm-claude-skills.

    1.4k GitHub stars~6.1k tokensUpdated today
    Documents & OfficeAuto-check passed

More from assafkip/kipi-system

All 14 skills in this repo
  • Unified Design Router

    assafkip/kipi-system

    Routes visual design requests to built-in logo, corporate identity, slide, banner, social photo and icon workflows, backed by style data and AI image generation.

    112 GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed
  • Improve Idea Critique

    assafkip/kipi-system

    Judges a pasted tip, post or video summary against what the kipi system already has, and returns adopt, skip or already-built with the files that back the verdict.

    112 GitHub stars~729 tokensUpdated yesterday
    Auto-check passed
  • Fable Discipline

    assafkip/kipi-system

    Teaches staged, verifiable coding habits for multi-file tasks and ships a hook that blocks tests from touching live data.

    112 GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed
  • Root-Cause Analysis Writer

    assafkip/kipi-system

    Writes a structured, blameless root-cause analysis for a defect that escaped a test or gate, separating surface from structural causes and linting the result.

    112 GitHub stars~796 tokensUpdated yesterday
    Auto-check passed
  • Architecture Review

    assafkip/kipi-system

    Surfaces architectural friction in real code — shallow modules, tight coupling, untested seams — and proposes deepening refactors using Ousterhout's deep-module principle (small interface hiding a…

    112 GitHub stars~817 tokensUpdated yesterday
    Auto-check passed
  • Audhd Executive Function

    assafkip/kipi-system

    AUDHD executive function accommodations. An agent skill from assafkip/kipi-system.

    112 GitHub stars~3.3k tokensUpdated yesterday
    Auto-check passed

Questions about Deck AI

What does Deck AI do?

Turns a markdown file into a themed, image-rich slide deck exported as PDF, using Slidev for layouts and Unsplash for photos, all run locally. Markdown goes in and a PDF deck comes out. The skill reads a file whose slides are separated by ---, picks a layout and an image keyword for every slide, fetches matching pictures from Unsplash and renders the whole deck through Slidev.

When should I use Deck AI?

Deck AI fits situations like: turning a markdown outline into a PDF presentation; building a slide deck with photos from lesson or pitch notes; making a Gamma-style deck without a subscription.

How do I install Deck AI in Claude Code?

Run `npx skills add assafkip/kipi-system --skill deck-ai -a claude-code`. Or copy the skill folder (plugins/kipi-core/skills/deck-ai in assafkip/kipi-system) into .claude/skills/deck-ai in your project. Claude Code loads it when a task matches its description.

How do I install Deck AI in Codex?

Run `npx skills add assafkip/kipi-system --skill deck-ai -a codex`. Or copy the skill folder (plugins/kipi-core/skills/deck-ai in assafkip/kipi-system) into .agents/skills/deck-ai in your project. Codex loads it when a task matches its description.

Can I use Deck AI in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add assafkip/kipi-system --skill deck-ai -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/deck-ai, .gemini/skills/deck-ai, .github/skills/deck-ai and .opencode/skills/deck-ai in your project.

What does Deck AI need to run?

Going by SKILL.md and its folder, Deck AI needs Python and a shell for the scripts in its folder, the command-line tools its instructions call (bash, python3, npm, brew and pnpm) and credentials named UNSPLASH_ACCESS_KEY. Our summary lists: Node 18 or newer and pnpm; An Unsplash access key in a .env file; A Slidev workspace created by the bundled setup script.

Does Deck AI access the network?

SKILL.md names 2 domains. As links in the text: unsplash.com and sli.dev. This is read from the text; nothing was executed.

Is Deck AI safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Deck AI use?

Deck AI is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Deck AI use?

About 1.5k tokens (SKILL.md is roughly 5.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 444 tokens, read only when the agent opens those files.

What are the alternatives to Deck AI?

Skills that share tags, products or a category with Deck AI: Ky Markdown Rebuilder (KyrieCheungYep/ky-markdown-rebuilder, 117 stars), Slidev CLI Skilld (skilld-dev/vue-ecosystem-skills, 181 stars), Slide Deck Image Generator (SpaceZephyr/design-buddy, 175 stars) and Youtube Notetaker (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Deck AI?

assafkip (a GitHub user) maintains it in assafkip/kipi-system, which has 112 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 7, 2026.

Source: assafkip/kipi-system on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.