deck3d-from-pptx
Turn an existing .pptx into a styled deck3d 3D presentation: import, reference renders, then nine steps (fidelity … transitions), each authoring 2-4 variants, showing a contact sheet, asking the user, recording the pick, then build + compare. Use on "make a 3D deck from this pptx", "convert my PowerPoint to deck3d", "match the original slides in 3D".
- License 许可
- MIT
- 最近更新
- 2026-11-11
- Stars
- ★ 348
- Forks
- 55
01 前言 Front Matter
- name
- deck3d-from-pptx
- description
- Turn an existing .pptx into a styled deck3d 3D presentation: import, reference renders, then nine steps (fidelity … transitions), each authoring 2-4 variants, showing a contact sheet, asking the user, recording the pick, then build + compare. Use on "make a 3D deck from this pptx", "convert my PowerPoint to deck3d", "match the original slides in 3D".
02 资源文件 2
- 参考文档AGENTS.md747 B
- 参考文档reference/steps.md4.1 KB
03 SKILL.md 正文
deck3d-from-pptx
Take a real .pptx and rebuild it as a deck3d presentation whose slides match the
original when the camera stops and move through 3D space between slides. Every
creative decision is the user's: you generate variants, show them, ask, and record
the answer in style.json. The deck3d rules of the deck3d tune
loop still apply: never edit deck.html, never edit derived IR fields (only
overrides), no randomness, timers or network in local effects, and finish with
deck3d check deck.html --style clean — or every remaining warning explained (a derived
credits slide counts as explained).
Detail per step (what to read, how to author variants, which samples, the question):
reference/steps.md.
0. Import and reference renders (always first)
deck3d pptx import talk.pptx -o talk [--ref exports/]
writes talk/pptx/layout.json (1920-unit slide space, items with stable ids
sNN-iMMM), talk/pptx/media/, a baseline deck.md and deck.json whose
overrides.assets pin the layout and every media file. Unsupported constructs (charts,
SmartArt, tables, EMF/WMF, WordArt, gradient fills…) become visible fallback items —
a crop of the reference render, else an outlined placeholder — each with one warning.
Reference renders come first. Ask the user (ask_user) for a PNG export of the deck
(PowerPoint: File → Export → PNG, all slides; Keynote and Slide1.PNG names work) and
pass the folder as --ref. Skip the question only when LibreOffice (soffice) and
pdftoppm are on PATH. If the user declines, say so once, and from then on every step
reports snapshot review (deck3d snapshot, eyeballing, check) instead of
compare scores — never pretend a score exists.
Then build the baseline: cd talk && deck3d build deck.md -o deck.html (a native deck3d
slide per pptx slide). Re-importing later keeps your tuning: deck3d pptx import talk.pptx -o talk --force matches slides by content, backs up deck.json.bak, and
deck3d variants replay re-applies every recorded pick.
The nine steps (fixed order)
| # | step id | question |
|---|---|---|
| 1 | fidelity |
exact 2D layer · 3D panel · native deck3d |
| 2 | placement |
glass panel · free-floating · frame in space |
| 3 | frame |
master chrome and its transition animation |
| 4 | brand-art |
logos, wordmarks, headline in 3D |
| 5 | icons |
pictograms as 3D objects, optionally on cards |
| 6 | hero |
hero illustrations rebuilt as 3D scenes |
| 7 | worlds |
per-slide background worlds from slide text, plus haze |
| 8 | media |
images replaced by video |
| 9 | transitions |
transition and camera-path variety |
Native path. If the user picks native at fidelity, skip steps 2, 3 and 5
(placement, frame, icons) — no slide-layer, frame-chrome or icon3d effect may appear
in deck.json. Then: brand art goes beside the native title; hero scenes and worlds become
slide backgrounds; media becomes a video screen; transitions are unchanged. The worlds
step gives every slide a non-default background, so a native deck also clears
check --style.
Every step: variants → sheet → ask → record → verify
- Author the step into
style.json(version: 1, orderedsteps[]):id,title,question,slides(sample slide ids that cover the step's affected kinds),round, and 2–4 variants{ name, label, overrides }built from the imported layout and the slide text. A fragment is in theoverridesgrammar and arrays replace, so each fragment must carry forward the effects of earlier steps on the same scope.deck3d validate deck.jsonchecks it. deck3d variants render --step <id>→variants/<id>/r<round>/contact.png(reference column, one labelled column per variant).deck.jsonis not touched.- Open
contact.pngon the canvas and put the live link in the question:deck3d serve deck.mdthenhttp://127.0.0.1:<port>/?variant=<step>:<name>(Vcycles the step's variants; Save/Apply are disabled while a variant is shown). - Ask with
ask_user— a single choice listing the variants by label, free text allowed. Do not pick for the user while the question tool is available. - Variant answer →
deck3d variants pick <step> <name>(add--drop <id>/--replace-step <step>only when the user means to remove an effect; the ownership guard refuses silent drops). Free-text answer →deck3d variants note <step> --note "<their words>", then author a new round from the note and repeat from 1. deck3d build deck.md -o deck.html, thendeck3d compare deck.htmland report the per-slide scores (or the snapshot review when there are no reference renders).
Headless mode is entered only when the run prompt says so explicitly (never
inferred from a missing UI): pick the first variant in array order with
deck3d variants pick <step> <first> --note auto.
Creative assets: scaffold, preview, never invent in core
For hero and worlds, scaffold per-deck local effects (deck3d fx scaffold <name> --for <slideId>) whose content comes from the slide's text and pictures — each variant a
different take on the same content (a literal scene, a metaphor, a minimal motif).
Preview each (deck3d fx preview local:<name>) before offering it. Traced art and icons:
deck3d art trace|icon|cutout; pin the outputs as assets (overrides.assets).
Pitfalls — check after each step
- Floor z-fighting: objects resting on the floor are lifted above it (a
lift/ y offset), never left coplanar with it. - Halos: text halos use normal blending on light themes (additive glows wash out).
- Chrome: master chrome uses the persistent
frame-chromeeffect at deck scope, not per-slide overlays. - Wrap drift: font-metric differences wrap text differently. For every multi-line text
box, compare against the reference and fix with
widen(or afont-<name>asset); a closing line wrapping onto two lines while the reference has one → setwidenfor that item, re-runcompare.comparelistsfont-fallback <name>for every missing font. - Scores: the deck's output tone mapping dims pure white to about 221, so a faithful match scores about 0.9 (default threshold 0.85), not 0.99 — judge by the margin and by eye.
- In-place file replacement: after replacing a file in place that
servemay miss, rebuild manually (deck3d build deck.md -o deck.html). - Verification: verify at the user's actual viewport (
--viewport WxH) and also capture mid-transition frames withcompare --transition.
Delivery
Render the final deliverable with deck3d render deck.json -o deck.html --embed-video
whenever any slide uses a video screen, so the single file plays offline. A file://
deck without embedding cannot play its clips (the browser refuses them as a texture
source) — say so if the user wants to send the file.
Command cheat sheet
| need | command |
|---|---|
| import | deck3d pptx import talk.pptx -o talk [--ref dir] [--force] |
| sheet | deck3d variants render --step <id> [--viewport WxH] [--ref dir] |
| decide | deck3d variants pick <step> <name> [--note t] [--drop id] [--replace-step s] · deck3d variants note <step> --note t |
| re-apply | deck3d variants replay |
| verify | deck3d compare deck.html [--strict] [--transition] [--viewport WxH] |
| art | deck3d art trace <img> --palette #a,#b · art icon <svg> · art cutout <img> --bg #hex --split |
| live | deck3d serve deck.md (?variant=<step>:<name>, V) |
04 同仓库更多 Skills
youtube-srt
Download YouTube subtitles (SRT + timestamped TXT) for a channel, playlist or video via yt-dlp, no media download; optionally mine them into a categorized catalog (e.g. AI models by function, open weights, local runnability, hardware tier). Use on "download the srt of this video", "transcripts of channel X for the last N months", "catalog the models AI Search talked about", "update docs/models".
video-transcription
Transcribe video and audio files to SRT subtitles with speaker diarization using the Soniox (default) or AssemblyAI API. Use when the user wants to transcribe meetings, videos, or audio files. Supports MKV, MP4, MOV, M4A, MP3. Triggers on "/transcribe", "transcribe my meetings", "transcribe videos in ~/Movies", or any request to convert audio/video to text.
speaker-id
Name anonymous diarized SRT speakers from a persistent local voiceprint library and repair speaker drift; local, CPU-only, no API key. Triggers "who is speaker 2", "put names on the transcript", "label the meeting SRT", "the diarization split one person into three", "enroll my voice". Backed by the pi-voiceid CLI.
veo-showreel-production-kit
Turn a video timeline + voiceover into a reproducible, sliceable Veo 3.1 prompt package with a consistency anchor and AI storyboard sketches.
veo-generator
Render a scripted video project into mp4 clips with the Google Veo 3.1 API. Reads a project's shot package (shots/*.md), one clip per camera cut, reusing each shot's prompt and sketch — world anchor only with `--with-reference`, seed unless `--no-seed`. Use on "render the Veo video for <project>", "generate the videos from the shot scripts", "make the clips with Veo".
hyperframes-showreel
Turn real screen and site footage into a rhythmic showreel rendered with HyperFrames: sampling, edit script, redacted clips, a generated composition, Veo only as additive FX, music edit + camera punches, delivery render and export QA. Use on "make a showreel from these recordings", "build the HyperFrames video", "assemble the footage edit", "render and QA the showreel".