Build a self-contained 3D presentation from a Markdown outline — parse, tune via overrides, render to one offline deck.html.

MITAuto-check passedDocuments & Office

Install Deck3d

skills CLI
$ npx skills add BlackBeltTechnology/pi-agent-dashboard --skill deck3d -a claude-code

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

GitHub CLI
$ gh skill install BlackBeltTechnology/pi-agent-dashboard deck3d --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/BlackBeltTechnology/pi-agent-dashboard.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/deck3d/.pi/skills/deck3d .claude/skills/deck3d && 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
deck3d
GitHub stars
315
Token cost
~3k tokens
SKILL.md length
1,443 words
Files
12
Skills in repo
66
Repo updated
First seen
Licence
MIT

At a glance

Build a self-contained 3D presentation from a Markdown outline — parse, tune via overrides, render to one offline deck.html.

  • Works in 7 steps: deck3d parse talk.md → talk.json… → deck3d validate talk.json → schema +… → deck3d build talk.md -o talk.html →… → …
  • Tasks that involve Slides and decks
  • SKILL.md covers When to use, Markdown grammar, The tune loop and Styling with effects, plus 4 more sections
  • Calls npm and npx

What it does

Deck3d is an agent skill from BlackBeltTechnology/pi-agent-dashboard. Build a self-contained 3D presentation from a Markdown outline — parse, tune via overrides, render to one offline deck.html. Use on "make a 3D deck from this outline", "build a presentation from these notes", "deck3d this markdown", "turn this talk into a 3D deck".

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files (for example `AGENTS.md`, `examples/AGENTS.md` and `examples/deck.json`).

It sits in Documents & Office, covering Slides and decks and Markdown. The repository describes itself as: Real-time web dashboard for pi coding-agent sessions. Multi-session view, live chat mirroring, integrated terminal, diff viewer, pi-flows execution, and mobile-first remote… The licence is MIT.

When your agent uses it

  • Tasks that involve Slides and decks
  • Tasks that involve Markdown

Example prompts

  • “make a 3D deck from this outline”
  • “build a presentation from these notes”
  • “deck3d this markdown”
  • “/deck3d”

Requirements

  • Python 3
  • Node.js

Workflow steps

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

  1. deck3d parse talk.md → talk.json (derived IR + empty overrides).
  2. deck3d validate talk.json → schema + derived-edit + orphan/prop warnings.
  3. deck3d build talk.md -o talk.html → talk.json + talk.html; runs check
  4. Style — mandatory, and the step that decides whether the deck looks
  5. Read the check findings. Fix only the suggested key (e.g.
  6. deck3d snapshot talk.html --slide 5 -o s5.png to eyeball one slide.
  7. Repeat until check is clean and the style line accounts for every slide

What it can do on your machine

Read from SKILL.md and the folder at commit e23e533. 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

    Shell commands in SKILL.md call:

    • npm
    • npx

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

  • Network

    No URLs in SKILL.md. Its commands use npm and npx, which can reach the network depending on how they are called.

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

  • Credentials

    Names no API keys, tokens, secrets or passwords.

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

Context cost

Deck3d loads about 3k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 1,443 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~69
When it runs · the whole SKILL.md, loaded when a task matches
~3k

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 passed

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.

SKILL.md

The full file from BlackBeltTechnology/pi-agent-dashboard at commit e23e533, republished under its MIT licence (© BlackBeltTechnology). 1,443 words, ~2,962 tokens.

Download SKILL.mdSave it as .claude/skills/deck3d/SKILL.md (or your agent's skills folder). This skill also uses 11 other files; get the full folder from GitHub.
name
deck3d
description
Build a self-contained 3D presentation from a Markdown outline — parse, tune via `overrides`, render to one offline deck.html. Use on "make a 3D deck from this outline", "build a presentation from these notes", "deck3d this markdown", "turn this talk into a 3D deck".

deck3d

Turn a Markdown outline into one self-contained, offline deck.html: extruded 3D titles, harvested mermaid diagrams built as 3D objects, animated backgrounds, and an optional glTF prop. The converter code is deterministic; you tune the result by writing overrides in deck.json, never by editing the HTML.

When to use

  • The user has a Markdown outline (headings + bullets + ```mermaid blocks) and wants a presentation they can open offline in a browser.
  • You need to tune placement, legibility, mode, effects or props of an existing deck.json.

Markdown grammar

  • --- front-matter: deck defaults (mode, palette, material, quality, transition, …).
  • # Title starts a slide. Zero headings ⇒ one slide id slide.
  • The first paragraph after the heading (before bullets) is the subtitle.
  • - bullet lines are body bullets.
  • A fenced ```mermaid flowchart / sequenceDiagram block becomes the slide's diagram (harvested in headless chromium). Any other diagram type ⇒ warn + no diagram.
  • <!-- deck3d: {...} --> inline overrides win over deck.json and warn on clobber.
  • Pin a slide id with # Final {#outro} so renames never orphan tuning.

The tune loop

Interactive authoring path: deck3d serve talk.md [--check]. Watches sources, rebuilds on change, reloads in place, re-pins local fx hashes, and lets the configurator save or apply overrides directly.

Manual headless / agent / CI path:

  1. deck3d parse talk.md → talk.json (derived IR + empty overrides).
  2. deck3d validate talk.json → schema + derived-edit + orphan/prop warnings.
  3. deck3d build talk.md -o talk.html → talk.json + talk.html; runs check and prints style: <n>/<N> slides styled.
  4. Style — mandatory, and the step that decides whether the deck looks designed. deck3d check talk.html --style warns style-defaults for every slide still running only what parse chose. For each one:
    • pick a corpus effect (deck3d fx list --topic geo, --kind background; the stylistic set — clipped-solids, extruded-shapes, volume-cloud, curve-flow, … — is never auto-picked, so it is always an explicit choice) or write a per-deck one with deck3d fx scaffold <name> --for <slideId>;
    • give a content slide without a mermaid block a built topology (overrides.slides["<id>"].diagram.kind + data);
    • illustrate the section: deck3d props search <kw> --role hero, --role illustration, and props search --role ambient for low-triangle background instances;
    • if extruded titles read as a solid block, set titleEdge: "contrast" (deck default, or per slide) — it outlines every character in the palette text colour;
    • for a deck that wants a horizon, set overrides.deck.floor: "water" (one global surface; per-slide is not a thing);
    • the floor reflects the backgrounds too; overrides.deck.reflectBackdrop: false limits the reflection to slide content (one less backdrop pass per frame), and overrides.deck.floorMatte (0-1) roughens it — 0 is a perfect mirror, ~0.35 reads as polished concrete, ~0.85 as scattered stone (the ⚙ panel drags it on a slider), while overrides.deck.floorReflectivity (0-1, default 1) sets how STRONG the reflection is; all deck-scope only;
    • grade the frame with a post card (deck3d fx list --kind post): add { "id": "outline", "params": { "parts": "diagram" } } (or selective-bloom, god-rays, depth-of-field, pixelate, ascii, …) to the slide's effects[]. One or two per slide; they stack in a fixed order, and check flags declared conflicts.
  5. Read the check findings. Fix only the suggested key (e.g. overrides.slides["arch"].diagram.scale), then re-run step 3.
  6. deck3d snapshot talk.html --slide 5 -o s5.png to eyeball one slide.
  7. Repeat until check is clean and the style line accounts for every slide you meant to design.

Tune by writing deck.json's overrides only:

overrides: {
  deck:    { ...defaults knobs... },
  effects: [{ id, params? }],
  props:   [{ source, id, licence, author, sha256, slide, role, size?, count?, restyle?, anim? }],
  slides:  { "<slideId>": { mode?, palette?, material?, scene?, quality?,
             diagram: { scale?, offset? }, camera: { distance? }, labels: { size? },
             check: { ignore? }, effects? } },
  nodes:   { "<slideId>/<nodeId>": { shape?, label?, position?, size?, material? } },
  edges:   { "<slideId>/<edgeId>": { kind?, material? } }
}

Objects deep-merge; arrays replace (an effects/props list is the whole list); diagram.data replaces as a whole object so labels and values never mix provenance. Full field list: reference/ir-fields.md.

The deck's ⚙ configurator (C key, or the gear) tries knobs live. Its Effects block ticks composed effects off and adds any corpus or local: card from the add effect… picker; both rebuild the slide immediately. Under deck3d serve, Apply to deck.json merges straight into talk.json and rebuilds; Save overrides.json writes overrides.json beside the deck. In unserved decks or headless workflows, Export writes an overrides.json in exactly this grammar. Merge it manually with:

deck3d overrides apply talk.json overrides.json

It deep-merges, re-validates, and refuses to write on a validation error. Note that markdown inline overrides win over anything in that file, and an exported effects list pins that scope's whole list.

Styling with effects

deck3d fx list [--kind k] [--tag t] [--json] prints the catalogue; reference/effects.md has params and licences.

  • parse assigns deterministic defaults (title→swarm, flowchart→tokens, sequence→rings, security→glyph-rain, data→data-columns), then routes the rest by topic (deck3d fx list --topic <t>; ai agents geo trust security compute data money work timeline sales process). autoStyle: false restores the plain v1 fallback.
  • Replace them with overrides.slides["<id>"].effects = [{ id, params? }].
Video on a slide

video-screen puts a looping clip on a framed screen standing in the scene:

json
{ "id": "video-screen", "params": { "src": "video/demo.mp4", "width": 7.5, "x": 5, "y": 1, "tilt": -0.25 } }

The clip MUST be same-origin, or the browser taints the canvas and the frame never renders. Two ways to satisfy that:

  • deck3d serve serves media sitting beside the deck (video/demo.mp4), which is the authoring path.
  • deck3d render deck.json -o deck.html --embed-video inlines clips as data: URLs for ONE portable file. Opt-in, because base64 costs ~33% on top of the clip's own size.

A bare file://deck.html next to a video/ folder does NOT work — that clip is cross-origin. Playback freezes during transitions and runs only while the slide is settled, so check and snapshot stay deterministic.

Show full SKILL.md (601 more words)Show less
Per-deck (local) effects

When no corpus effect fits the topic, write one beside deck.md:

deck3d fx scaffold neural-mesh --for ai   # writes fx/neural-mesh.{js,meta.json}
deck3d fx preview local:neural-mesh --palette ember -o p.png
deck3d fx hash neural-mesh                # re-pin after every edit

Paste the printed { id: "local:<name>", sha256 } entry into the slide's effects. render embeds the source and refuses a stale hash, so the deck stays byte-deterministic and offline.

Inside a local module the deck shadows the non-deterministic and I/O globals: Math.random is the deck's seeded per-slide generator, and window, document, fetch, setTimeout, Date, Promise, eval and friends are all undefined. No import, one default export, 64 KiB cap. A throw disables that effect only and shows up as local-fx-error in check; any network the deck attempts shows up as local-fx-network. Promote a good one with deck3d fx promote <name> --source <url> --licence <spdx>.

  • Conflicts fail render; mode-incompatible effects are skipped with a warning; the summed cost warns over the quality budget (low 6 / medium 12 / high 20).

Props (content illustrations)

deck3d props search <keywords> → candidate table (vendored first, then Poly Pizza). You pick by relevance then style — code never picks. Then:

  1. Prefer one pack per deck and restyle: "palette".
  2. deck3d props fetch <source> <id> → prints the overrides.props[] entry (with the sha256) and caches it in .deck3d/props/.
  3. Add the entry to overrides.props (roles: hero, illustration, ambient, node:<id>), then build/snapshot.
  4. deck3d props search <kw> --role ambient filters to models cheap enough to instance in the background and prints a ready ambient entry.
  5. No model fits? deck3d props generate --prompt "<text>" --name <n> (or --from-image). Optional python path; network at authoring time only.

Licences: CC0 needs no credits; CC-BY (and any non-CC0, non-generated) produces a last credits slide at render. Never fetch a model whose licence you cannot name.

Forbidden edits

  • Never edit deck.html — it is regenerated; tune deck.json overrides.
  • Never edit derived fields (slides[] and below) — validate warns edited outside overrides; the next parse loses the change.
  • If you need a knob that does not exist, propose a schema field — do not hack the HTML.

Pitfalls

  • parse of a deck with mermaid needs chromium; missing ⇒ npx playwright install chromium. render/validate never need a browser.
  • Every three.js typeface.json has corrupt ő ű Ő Ű glyphs; deck3d uses a real Poppins TTF through opentype.js — do not swap in a typeface.json.
  • Extruded small text blooms and is unreadable; diagram labels are flat canvas planes with a background-colour outline. Tune labels.size, not the material.
  • Placement: defaults.rail (line orbit tunnel helix grid) strings the slides in space, defaults.spacing sets the gap, layout (split split-reverse) composes one slide, cardOffset nudges the card. Every rail frames a slide identically, so a rail switch never needs a per-slide re-tune.
  • The mermaid engine is pinned exactly; a bump is a deliberate change and the harvest fixtures will fail if the rendered id scheme moves.
  • Headless/background tabs stall requestAnimationFrame; the loop falls back to setTimeout so snapshots capture a finished frame.
  • A check: clean deck can still be bare. check measures fit and legibility, not ambition — read the style: <n>/<N> slides styled line and run check --style before calling a deck done.

Contributing an effect

Development-time procedure on the package (distinct from the deck tune loop):

  1. Search a source; check its licence against the allow-list: MIT, Zlib, BSD-2/3-Clause, CC0-1.0, Apache-2.0, OFL-1.1. LYGIA (Prosperity) and Shadertoy content (default CC BY-NC-SA) are inspiration only — never port them verbatim.
  2. Port to the module interface: create(ctx, params) → { object?, pass?, material?, tick?, dispose() }.
  3. Write the card src/fx/<id>.meta.json (kind, tags, cost, modes, params schema, conflicts, source URL, licence).
  4. deck3d fx preview <id> → check the PNG is not black.
  5. npm run gen:effects → regenerate reference/effects.md.
  6. npm test → the corpus test validates every card and the catalogue hash.

© BlackBeltTechnology, 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 11 other files in packages/deck3d/.pi/skills/deck3d of BlackBeltTechnology/pi-agent-dashboard.

  • SKILL.md
  • AGENTS.md
  • examples/AGENTS.md
  • examples/deck.json
  • examples/fixture.md
  • examples/snapshot-after.png
  • examples/snapshot-before.png
  • reference/AGENTS.md
  • reference/effects.agent.md
  • reference/effects.md
  • reference/ir-fields.agent.md
  • reference/ir-fields.md

Open the folder on GitHubat commit e23e533

Compare with similar skills

Deck3d 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.

Deck3d compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Deck3d this skillBlackBeltTechnology/pi-agent-dashboard315—~3kAutomated safety check: PassMIT
Human Reviewpetergyang/human-review1.4k—~2.1kAutomated safety check: PassMIT
Suikonwiizo/suiko114—~1.8kAutomated safety check: PassMIT
Ky Markdown RebuilderKyrieCheungYep/ky-markdown-rebuilder117—~5.7kAutomated safety check: PassNone
Smalldocs Authorespressoplease/smalldocs209—~1.1kAutomated safety check: PassCustom licence
PPTX To Mdsammcj/agentic-coding162—~1.8kAutomated safety check: PassApache-2.0

Similar skills

  • Human Review

    petergyang/human-review

    Open an HTML file, Markdown file, or localhost page in the browser so the user can edit text directly and leave comments on specific parts, then send all edits and comments back to you.

    1.4k GitHub stars~2.1k tokensUpdated 21 days ago
    Documents & OfficeAuto-check passed
  • Suiko

    nwiizo/suiko

    日本語文書のAI由来の均一さ、翻訳調、不自然さ、論旨、読解負荷を、決定的なRust CLIと目視で診断し、依頼に応じて書く・直す。日本語の学術論文・研究報告では、中心命題、用語、論証、DOCX/PDF納品を監査契約で確認する。Use when the user explicitly mentions suiko, asks whether Japanese text looks…

    114 GitHub stars~1.8k tokensUpdated today
    Documents & OfficeAuto-check passed
  • 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 2 mo ago
    Documents & OfficeAuto-check passed
  • Smalldocs Author

    espressoplease/smalldocs

    Create finished SmallDocs Markdown for an application using the SmallDocs renderer.

    209 GitHub stars~1.1k tokensUpdated today
    Documents & OfficeAuto-check passed
  • PPTX To Md

    sammcj/agentic-coding

    Convert a PPTX slide deck into per-slide markdown that preserves both the verbatim text and the meaning of embedded screenshots, diagrams and charts in their original layout positions.

    162 GitHub stars~1.8k tokensUpdated today
    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

More from BlackBeltTechnology/pi-agent-dashboard

All 66 skills in this repo
  • Browser

    BlackBeltTechnology/pi-agent-dashboard

    Browser automation via the agent-browser CLI. An agent skill from BlackBeltTechnology/pi-agent-dashboard.

    315 GitHub starsUsed in 1 repo~2k tokens
    Auto-check passed
  • Pi Dashboard

    BlackBeltTechnology/pi-agent-dashboard

    Monitor and control the pi-dashboard server. An agent skill from BlackBeltTechnology/pi-agent-dashboard.

    315 GitHub starsUsed in 1 repo~2.2k tokens
    Auto-check passed
  • CI Troubleshoot

    BlackBeltTechnology/pi-agent-dashboard

    Diagnose failed GitHub Actions runs for pi-agent-dashboard: the 11-file workflow taxonomy, affected-test selection, the release pipeline, known failure modes, and how to read gh run logs and…

    315 GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Debug Dashboard

    BlackBeltTechnology/pi-agent-dashboard

    Diagnose problems in the running pi-agent-dashboard system: server.log, /api/health, bridge WebSocket connectivity, vitest triage, known-issue FAQ entries.

    315 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Implement

    BlackBeltTechnology/pi-agent-dashboard

    Disciplined implementation in pi-agent-dashboard: the rebuild matrix (extension→reload, server→restart, client→build+restart, openspec-apply→full rebuild) plus the project's code discipline rules.

    315 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Session To Guideline

    BlackBeltTechnology/pi-agent-dashboard

    Turn a pi session into a Markdown "how-we-did-it" collaboration guideline: reads the session's JSONL transcript and synthesizes a reusable playbook of which prompts worked, what had to be steered…

    315 GitHub stars~3.2k tokensUpdated today
    Auto-check passed

Questions about Deck3d

What does Deck3d do?

Build a self-contained 3D presentation from a Markdown outline — parse, tune via overrides, render to one offline deck.html. Deck3d is an agent skill from BlackBeltTechnology/pi-agent-dashboard.html.

When should I use Deck3d?

Deck3d fits situations like: tasks that involve Slides and decks; tasks that involve Markdown.

How do I install Deck3d in Claude Code?

Run `npx skills add BlackBeltTechnology/pi-agent-dashboard --skill deck3d -a claude-code`. Or copy the skill folder (packages/deck3d/.pi/skills/deck3d in BlackBeltTechnology/pi-agent-dashboard) into .claude/skills/deck3d in your project. Claude Code loads it when a task matches its description.

How do I install Deck3d in Codex?

Run `npx skills add BlackBeltTechnology/pi-agent-dashboard --skill deck3d -a codex`. Or copy the skill folder (packages/deck3d/.pi/skills/deck3d in BlackBeltTechnology/pi-agent-dashboard) into .agents/skills/deck3d in your project. Codex loads it when a task matches its description.

Can I use Deck3d 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 BlackBeltTechnology/pi-agent-dashboard --skill deck3d -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/deck3d, .gemini/skills/deck3d, .github/skills/deck3d and .opencode/skills/deck3d in your project.

What does Deck3d need to run?

Going by SKILL.md and its folder, Deck3d needs the command-line tools its instructions call (npm and npx). Our summary lists: Python 3; Node.js.

Does Deck3d access the network?

SKILL.md contains no URLs. Its commands use npm and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Deck3d safe to install?

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.

What licence does Deck3d use?

Deck3d 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 Deck3d use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Deck3d?

Skills that share tags, products or a category with Deck3d: Human Review (petergyang/human-review, 1.4k stars), Suiko (nwiizo/suiko, 114 stars), Ky Markdown Rebuilder (KyrieCheungYep/ky-markdown-rebuilder, 117 stars) and Smalldocs Author (espressoplease/smalldocs, 209 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Deck3d?

BlackBeltTechnology (a GitHub organization) maintains it in BlackBeltTechnology/pi-agent-dashboard, which has 315 GitHub stars. The repository holds 66 skills in this directory. The repository was last updated on October 8, 2026.

Source: BlackBeltTechnology/pi-agent-dashboard on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.