Image To Editable Ppt
ningzimu/image-to-editable-ppt-skill
Rebuild slide images, scanned or image-based PPT/PPTX files, and PDF decks into object-level editable PowerPoint (.pptx), preserving speaker notes when supplied.
Build a slide deck whose source is text and whose figures are laid out by TALA — one Markdown file with a d2 fence per figure, compiled to a self-contained HTML deck (keyboard nav, overview grid…
$ npx skills add mizchi/explainer --skill d2-slides -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mizchi/explainer d2-slides --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mizchi/explainer.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/d2-slides .claude/skills/d2-slides && rm -rf skills-srcUse ~/.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/
Install the "d2-slides" agent skill from https://github.com/mizchi/explainer/tree/main/skills/d2-slides into .claude/skills/d2-slides/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "d2-slides", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mizchi/explainer/tree/main/skills/d2-slidesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mizchi/explainer --skill d2-slides -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mizchi/explainer d2-slides --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mizchi/explainer.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/d2-slides .agents/skills/d2-slides && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "d2-slides" agent skill from https://github.com/mizchi/explainer/tree/main/skills/d2-slides into .agents/skills/d2-slides/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "d2-slides", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mizchi/explainer --skill d2-slides -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mizchi/explainer d2-slides --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mizchi/explainer.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/d2-slides .cursor/skills/d2-slides && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "d2-slides" agent skill from https://github.com/mizchi/explainer/tree/main/skills/d2-slides into .cursor/skills/d2-slides/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "d2-slides", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mizchi/explainer.git --path skills/d2-slides--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mizchi/explainer --skill d2-slides -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mizchi/explainer d2-slides --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mizchi/explainer.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/d2-slides .gemini/skills/d2-slides && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "d2-slides" agent skill from https://github.com/mizchi/explainer/tree/main/skills/d2-slides into .gemini/skills/d2-slides/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "d2-slides", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mizchi/explainer d2-slidesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mizchi/explainer --skill d2-slides -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mizchi/explainer.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/d2-slides .github/skills/d2-slides && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "d2-slides" agent skill from https://github.com/mizchi/explainer/tree/main/skills/d2-slides into .github/skills/d2-slides/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "d2-slides", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mizchi/explainer --skill d2-slides -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mizchi/explainer d2-slides --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mizchi/explainer.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/d2-slides .opencode/skills/d2-slides && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "d2-slides" agent skill from https://github.com/mizchi/explainer/tree/main/skills/d2-slides into .opencode/skills/d2-slides/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "d2-slides", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
d2-slidesBuild a slide deck whose source is text and whose figures are laid out by TALA — one Markdown file with a d2 fence per figure, compiled to a self-contained HTML deck (keyboard nav, overview grid…
D2 Slides is an agent skill from mizchi/explainer. Build a slide deck whose source is text and whose figures are laid out by TALA — one Markdown file with a d2 fence per figure, compiled to a self-contained HTML deck (keyboard nav, overview grid, print-to-PDF), each figure as its own SVG, and a copy manifest. The deck is a page, so vlmkit's own gates read it: check integrity for a slide that breaks or clips, check copy --manifest for text the frame cut off, check a11y contrast for a projector. Loop: write deck.md → build → gates → fix. Use when asked for slides…
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including assets.
It sits in Documents & Office, covering Slides and decks. The licence is MIT.
Read from SKILL.md and the folder at commit 578defb. It shows what the files ask for, not the result of running them.
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.
Ships script files (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodegonpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
D2 Slides loads about 4.2k tokens when it runs. Until then it costs about 186 tokens; SKILL.md has 1,314 words of instructions outside code blocks.
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.
The automated check found no risky patterns in SKILL.md.
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); files beside SKILL.md are not scanned.
The full file from mizchi/explainer at commit 578defb, republished under its MIT licence (© mizchi). 1,314 words, ~4,182 tokens.
.claude/skills/d2-slides/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Paths below: <skill> is this skill's directory and <skills> the directory the skills are
installed in (skills/ in mizchi/explainer, .claude/skills/ in a project that installed them).
A deck is text: the prose is Markdown, every figure is a ```d2 fence, and the build is a pure function of the file. Nothing is dragged, so a slide can be reviewed in a diff, regenerated after a rename, and — because the output is an HTML page — checked. That last part is the point: a slide deck normally has no failing state, so nobody notices the bullet the frame cut in half.
node <skill>/assets/build-deck.mjs deck.md --out built
# ✓ built/index.html: 8 slides, 5 figure(s) laid out by tala, 26 copy lines → built/copy.txt
# the deck: built/index.html → vlmkit check integrity
# all slides: built/print.html → vlmkit check copy --manifest, check a11y contrast, print to PDFRequires d2 with TALA (d2 layout must list tala (bundled) — see
d2-diagram for installing it) and nothing else: the builder has no
dependencies and the deck loads no network resource.
---
title: Nothing tells you the picture is wrong
subtitle: two rounds, measured
date: 2026-09-14
---
# Nothing tells you the picture is wrong ← a lone `#` heading is the title slide
---
## A D2 diagram is a drawing ← `##` is a slide heading
- `d2 validate` reads **syntax** ← bullets; `code`, **bold**, *italic* work
- there is no `--expect`
```d2 ← the figure, laid out by TALA
direction: right
write -> check -> facts
```
<!-- notes: what to say out loud --> ← speaker notes: printed, never on screen---; a --- inside a fence is not
a separator.> line is a pull quote, and a
fence in any other language stays a code block.1. write deck.md prose in Markdown, every figure a ```d2 fence
2. node …/build-deck.mjs deck.md --out built fails on the first figure that does not compile,
naming the slide; warns when a slide's prose
overflows its frame's character budget
3. vlmkit check integrity built/index.html a slide that breaks, clips, collides or paints nothing
4. vlmkit check integrity built/print.html --viewports 1280
every slide at once — this is what catches the
bullet the frame cut off
5. vlmkit check copy built/print.html --manifest built/copy.txt --allow-invisible unknown
every line of the deck's own text still on a slide
(add --forbid stale.txt when you are editing a deck:
the claim you removed must really be gone)
6. vlmkit check a11y contrast built/print.html readable from the back of the room
7. node …/d2-facts.mjs --from-svg built/slide-NN.svg --expect slide-NN.facts.json
what each figure DRAWS, for every figure that has
facts it must not get wrong — steps 3-6 are blind to it
8. node …/deck-review.mjs built --out review shoot each slide, hand the PNGs to a reader
node …/deck-review.mjs built --answers a.json score what it read back: fidelity, order, SPLITs
9. read built/index.html in a browser, or the PNG of a slide; fix the Markdown; go to 2Step 7 is not optional decoration, and the four page gates do not cover it.
They read the page: a figure that compiles and draws the wrong thing passes all
four. The checker takes the slide SVGs the build already writes and needs no
d2 (it reads the render), so this costs one command per figure:
node <skills>/d2-diagram/assets/d2-facts.mjs --from-svg built/slide-04.svg \
--expect slide-04.facts.json # exits 1 and names the box or edge that is wrongThe same trick pins two figures to each other, which nothing else does: when
slides 2 and 3 both claim ledger is the writer, hold both SVGs to one sheet
({"boxes": ["checkout","ledger"], "deps": ["checkout->ledger"], "forbidden": ["checkout->orders"]}).
Update one figure and forget the other and that sheet fails on the one you
missed. The fact-sheet schema is d2-diagram's; exhaustive: true is what makes
an extra box an error rather than a shrug.
Steps 3-7 are the page and the figures' geometry. None of them reads the slide the way a viewer does, and that gap is not theoretical: in the v1/v2 rounds two defects reached a delivered deck — a sentence rendered as two blocks, and a fragment sitting above its own bullet — with all four gates green, because every fragment was visible text and nothing overflowed.
node <skill>/assets/deck-review.mjs built --out review
# → review/slide-NN.png, one per slide, plus review-brief.md
# hand that directory to a vision model or an agent; it answers JSON
node <skill>/assets/deck-review.mjs built --answers review/answers.json
# read 19/21, invented 6, fidelity 0.70, order 1.00
# ⚠ SPLIT: "…it calls ledger, which is now the only writer to orders."
# every word is on the slide, the sentence is not — read back as 2 blocksThe scoring is deterministic, against the slides.json the build writes: each
slide's text in reading order (which copy.txt is not — the manifest is a
set, and it lists bullets before paragraphs while the page renders paragraphs
first) plus the words its figures draw.
Two numbers and one line to read:
--sheet <other-build>/slides.json scores one render against another build's
sheet, which is how a before/after pair is compared against one ground truth.
Honest limits. A reader that transcribes none of the figures' labels is not
evidence they are illegible, only that it read prose — the figures: k of n
line is a hint, not a verdict. A reading is a measurement and exits 0; what to
do about a 0.7 is the author's call. And a reader will occasionally report a
mechanism that is not the real one, so read the slide it names before believing
the reason it gives.
check integrity reports no failures on index.html (all three
viewports) and on print.html at 1280. A warn is not a failure and the
command still exits 0 — see the figure-internals note below before you spend
a round chasing one.check copy --manifest reports nothing missing (and nothing forbidden, if
you are editing an existing deck).check a11y contrast reports no failure, over a count that means every
slide was read. The count is content-dependent — a terse deck runs about 7
elements a slide, a dense one about 17 — so the number is not the test. Run
it against index.html too: that shows one slide at a time, so it comes back
in single digits. Print view ≫ deck view is the check.d2-facts --expect.deck-review — fidelity near 1.00 and no SPLIT. This is the
only step that sees a sentence broken into two blocks.This repo runs its own worked example through that loop on every change to the skill, the example or the three gates it uses, so the claim above is measured rather than asserted. Two halves, because they need different machines:
tests/d2/d2-slides.test.mjs (in the ordinary suite, no d2, no browser) — the
builder's decisions before a figure is drawn: where a slide ends (--- inside a
fence is not a separator), which layout a slide gets, the manifest as the rendered
text, the overflow warning naming the slide, a figure that does not compile failing
the build, and examples/d2-slides/built/ still matching its deck.md. D2 points
at a stub that echoes a fixed SVG — the builder already reads that variable..github/workflows/d2-slides.yml (real d2 pinned at v0.9.0, real Chromium) —
the four gate runs above on a fresh build, plus a byte comparison against the
committed build, plus two negative controls: a manifest line the deck does not say
must be reported copy-missing, and a frame shortened to 260px must be reported
clipped-content. A suite that only ever sees passes cannot tell a working gate from
a gate that always passes.Regenerate the committed example with npm run deck:example after editing its deck.md —
the byte comparison is what keeps a committed build from drifting into a lie.
Everything below was a real defect in the template or the example, caught by a gate, fixed, and re-measured. It is why the loop above is in that order.
check integrity at 375px: "the DOM holds 4 text
blocks but almost nothing painted (ink ratio 0.05%)". Centring a 1280px stage
as an over-sized grid item leaves the middle off-screen; the stage is centred
by transform now.clipped-content on slides whose text was well inside
the frame.align-items: center on the
split layout, prose taller than the frame overflows both ways and the copy
gate reads those lines as copy a user cannot see. Overflow goes downward now,
where it is measurable, and the builder warns above ~430 characters of prose
beside a figure.```d2 strips to something the page never says.copy.txt is generated from the Markdown prose only — each slide's
heading, bullets, pull quotes and paragraphs, as the page renders them
(markers gone, entities decoded). Three things are therefore not in it:
<!-- notes: … --> is printed and never on screen, and it
is not in the manifest either.For a reader, the build also writes slides.json: per slide, its heading,
its text in reading order, its figures and the words those figures draw. That
is the sheet deck-review scores against, and the reason it is a separate file
from copy.txt is that a manifest cannot express order.
A bullet, quote or paragraph wrapped over several lines is rejoined into one line, as Markdown does, so wrapping at 80 columns is safe and one sentence is one manifest line. A blank line ends the block: an indented line after one is a paragraph of its own.
✗ slide 6-1: the d2 figure does not compile with
reserved keywords are prohibited in edges → an id collided with a D2
keyword. width, height, label, style, shape, icon, near, top,
left, direction, class, link, constraint, layers, steps and
scenarios are the ones that bite; rename the box (cols, verdict) and
keep the words in its label.copy-invisible (reason: unknown) on a line that is plainly on the slide
→ a vlmkit gate limitation, not your deck: a manifest line whose rendered text
is assembled from several inline children can read as invisible. Reproduced
minimally in examples/d2-slides/README.md; three bullets carrying <code>
and <strong> fail, the same three lines without markup pass. Run with
--allow-invisible unknown (every accepted line is listed, so the suppression
stays auditable) and check the missing count, which is the part that matters.check a11y contrast inspected only four elements → you pointed it at
index.html. One slide is on screen at a time; print.html is the stacked
view. Do not read the absolute count as a threshold: it tracks how many text
nodes the deck has, so a terse deck legitimately sits near 7 a slide. The
comparison between the two views is the signal.near-misalignment (a warn) on a base64-looking selector like
g.KGdhdGV3YXkgLSZndDsgY2hlY2tvdXQpWzBd → that is inside a figure's SVG:
the gate has found two of TALA's own edge-label groups sitting 5.5px apart,
which is the layout engine's business and not the deck's. It is a warn, so
the verdict reads NO DEFECTS, n WARN and the command exits 0 — that is
done, leave it. There is no stable way to exempt it either: --allow matches
the finding's own selector by substring, and d2 derives that class from the
edge's text, so the string changes with the label. If a run has to be silent,
--rule near-misalignment=off is the only lever, and it gives up the rule for
the slide chrome too. Whether it fires at all depends on the layout, not on
having labelled edges: the same deck's figures can be CLEAN after an edit.page-overflow-x on print.html at 768 or 375 → expected: the print view
is a column of 1280px frames. Check it at --viewports 1280.d2-diagram, where the width levers, the fact check and the
terminal render live. A slide figure has about 700×560 to live in.d2-diagram do not apply here.built/index.html, opened in a browser. Arrows and space move, o
is the overview grid, p prints, f is fullscreen, and the URL carries
#/4, so one slide can be linked.print.html and print it, or index.html and press p. Speaker
notes appear in print and never on screen.deck.md and the figures' .svg; the HTML is a build
output. examples/d2-slides/ is the worked example — its deck, its build, and
the gate runs above.built/slide-NN.svg.© mizchi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (assets) in skills/d2-slides of mizchi/explainer.
Open the folder on GitHubat commit 578defb
D2 Slides 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| D2 Slides this skillmizchi/explainer | 421 | — | ~4.2k | Automated safety check: Pass | MIT | |
| Image To Editable Pptningzimu/image-to-editable-ppt-skill | 2.8k | — | ~4.3k | Automated safety check: Pass | MIT | |
| Codex Slidesnexu-io/codex-slides | 924 | 1 repos | ~3k | Automated safety check: Pass | MIT | |
| Slidesfcakyon/claude-codex-settings | 1.2k | 1 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Ppt Image FirstNyxTides/ppt-image-first | 1.2k | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Vibe to Agentic Engineering Frameworkshanraisshan/claude-code-best-practice | 67k | — | ~3.3k | Automated safety check: Pass | MIT |
ningzimu/image-to-editable-ppt-skill
Rebuild slide images, scanned or image-based PPT/PPTX files, and PDF decks into object-level editable PowerPoint (.pptx), preserving speaker notes when supplied.
nexu-io/codex-slides
Create, research, revise, restyle, present, inspect, and export Codex Slides slide decks from Codex, including scenario workflows, project Design Files, and always-on brand design systems.
fcakyon/claude-codex-settings
Create and edit presentation slide decks (.pptx) with PptxGenJS, bundled layout helpers, and render/validation utilities.
NyxTides/ppt-image-first
Build presentation plans for PPT / slides / decks through a conversation-first workflow, then propose multiple visual directions with preview images before writing deck specs.
shanraisshan/claude-code-best-practice
Explains the conceptual model behind a presentation on moving from unstructured vibe coding to fully configured agentic engineering, including its 4-level scoring system and slide conventions.
JuneYaooo/gpt-image2-ppt-skills
Generate visually striking PPT slides via OpenAI's gpt-image-2 -- use any style in styles/<collection/STYLEID.md or mimic a user-supplied .pptx template; outputs high-res slide PNGs and a 16:9 .pptx.
mizchi/explainer
特定の読み手に向けて、概念・PR・設計を「冗長にならない水準」の速習資料として説明し、図と主張を道具で検証する。読み手のペルソナ(既に知っていること・知らないこと・読み方)を質問と公開情報から作り、その差分だけを書く。図は Mermaid / D2 で描いて事実シートに照らし、本文に引用するコード・出力は再実行して照合し、HTML は vlmkit のゲートに通す。Use when the…
mizchi/explainer
1 本の速習資料では収まらない、章立ての学習資料(<topic-book/01-quickstart.md, 02-….md …)を、読み手のペルソナに合わせて設計・執筆・検証する。章ごとの学習目標と理解度チェックの対応、概念を導入より前に使わない順序、章の読了時間の予算、「未完成なら落ち、答えなら通る」演習、book.json から生成する章の依存図を、verify-book.mjs…
mizchi/explainer
Beta readers for any draft, run by simulating how a real reader experiences it, moment by moment.
Categories
Build a slide deck whose source is text and whose figures are laid out by TALA — one Markdown file with a d2 fence per figure, compiled to a self-contained HTML deck (keyboard nav, overview grid…. D2 Slides is an agent skill from mizchi/explainer. Build a slide deck whose source is text and whose figures are laid out by TALA — one Markdown file with a d2 fence per figure, compiled to a self-contained HTML deck (keyboard nav, overview grid, print-to-PDF), each figure as its own SVG, and a copy manifest.
D2 Slides fits situations like: asked for slides; A review walkthrough; A figure-heavy explainer that has to be presented rather than read.
Run `npx skills add mizchi/explainer --skill d2-slides -a claude-code`. Or copy the skill folder (skills/d2-slides in mizchi/explainer) into .claude/skills/d2-slides in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mizchi/explainer --skill d2-slides -a codex`. Or copy the skill folder (skills/d2-slides in mizchi/explainer) into .agents/skills/d2-slides in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mizchi/explainer --skill d2-slides -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/d2-slides, .gemini/skills/d2-slides, .github/skills/d2-slides and .opencode/skills/d2-slides in your project.
Going by SKILL.md and its folder, D2 Slides needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node, go and npm). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
D2 Slides is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with D2 Slides: Image To Editable Ppt (ningzimu/image-to-editable-ppt-skill, 2.8k stars), Codex Slides (nexu-io/codex-slides, 924 stars), Slides (fcakyon/claude-codex-settings, 1.2k stars) and Ppt Image First (NyxTides/ppt-image-first, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mizchi (a GitHub user) maintains it in mizchi/explainer, which has 421 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 6, 2026.
Source: mizchi/explainer on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.