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.
需要把演示 / 幻灯片 / PPT / slides 做成单文件 HTML 动态 deck(动效、跨页过渡、键盘翻页、1280×720)时使用。本 skill 非入口:使用前必须先确认 sn-ppt-entry 与 sn-ppt-story 两个前置 skill 可用,依次执行 entry(建 DECKDIR / taskpack.json)→ story(生成…
$ npx skills add OpenSenseNova/SenseNova-Skills --skill sn-ppt-dazzle -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install OpenSenseNova/SenseNova-Skills sn-ppt-dazzle --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/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/sn-ppt-dazzle .claude/skills/sn-ppt-dazzle && 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 "sn-ppt-dazzle" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-ppt-dazzle into .claude/skills/sn-ppt-dazzle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sn-ppt-dazzle", 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/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-ppt-dazzleType 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 OpenSenseNova/SenseNova-Skills --skill sn-ppt-dazzle -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install OpenSenseNova/SenseNova-Skills sn-ppt-dazzle --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/sn-ppt-dazzle .agents/skills/sn-ppt-dazzle && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sn-ppt-dazzle" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-ppt-dazzle into .agents/skills/sn-ppt-dazzle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sn-ppt-dazzle", 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 OpenSenseNova/SenseNova-Skills --skill sn-ppt-dazzle -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install OpenSenseNova/SenseNova-Skills sn-ppt-dazzle --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/sn-ppt-dazzle .cursor/skills/sn-ppt-dazzle && 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 "sn-ppt-dazzle" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-ppt-dazzle into .cursor/skills/sn-ppt-dazzle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sn-ppt-dazzle", 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/OpenSenseNova/SenseNova-Skills.git --path skills/sn-ppt-dazzle--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 OpenSenseNova/SenseNova-Skills --skill sn-ppt-dazzle -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install OpenSenseNova/SenseNova-Skills sn-ppt-dazzle --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/sn-ppt-dazzle .gemini/skills/sn-ppt-dazzle && 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 "sn-ppt-dazzle" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-ppt-dazzle into .gemini/skills/sn-ppt-dazzle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sn-ppt-dazzle", 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 OpenSenseNova/SenseNova-Skills sn-ppt-dazzleInstalls 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 OpenSenseNova/SenseNova-Skills --skill sn-ppt-dazzle -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/sn-ppt-dazzle .github/skills/sn-ppt-dazzle && 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 "sn-ppt-dazzle" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-ppt-dazzle into .github/skills/sn-ppt-dazzle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sn-ppt-dazzle", 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 OpenSenseNova/SenseNova-Skills --skill sn-ppt-dazzle -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install OpenSenseNova/SenseNova-Skills sn-ppt-dazzle --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenSenseNova/SenseNova-Skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/sn-ppt-dazzle .opencode/skills/sn-ppt-dazzle && 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 "sn-ppt-dazzle" agent skill from https://github.com/OpenSenseNova/SenseNova-Skills/tree/main/skills/sn-ppt-dazzle into .opencode/skills/sn-ppt-dazzle/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sn-ppt-dazzle", 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.
sn-ppt-dazzle需要把演示 / 幻灯片 / PPT / slides 做成单文件 HTML 动态 deck(动效、跨页过渡、键盘翻页、1280×720)时使用。本 skill 非入口:使用前必须先确认 sn-ppt-entry 与 sn-ppt-story 两个前置 skill 可用,依次执行 entry(建 DECKDIR / taskpack.json)→ story(生成…
Sn Ppt Dazzle is an agent skill from OpenSenseNova/SenseNova-Skills. 需要把演示 / 幻灯片 / PPT / slides 做成单文件 HTML 动态 deck(动效、跨页过渡、键盘翻页、1280×720)时使用。本 skill 非入口:使用前必须先确认 sn-ppt-entry 与 sn-ppt-story 两个前置 skill 可用,依次执行 entry(建 DECKDIR / taskpack.json)→ story(生成 outline.md)完成后才可开始;前置缺失或未完成时停止并回报,严禁绕过(如改用生图+手写 HTML 等方式)。
Its SKILL.md is about 5.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts and reference files (for example `references/fancy-cookbook.md`, `references/style-families.md` and `scripts/render_deck.py`).
It sits in Documents & Office, covering Slides and decks. The repository describes itself as: Modular SenseNova skills for building AI-powered office assistants and productivity workflows. The licence is MIT.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7838651. 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 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
cdnjs.cloudflare.comFrom 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.
Sn Ppt Dazzle loads about 5.3k tokens when it runs, and up to ~18k if it reads all its reference files. Until then it costs about 64 tokens; SKILL.md has 1,470 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); the scripts in this folder are not scanned.
The full file from OpenSenseNova/SenseNova-Skills at commit 7838651, republished under its MIT licence (© OpenSenseNova). 1,470 words, ~5,297 tokens.
.claude/skills/sn-ppt-dazzle/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.你要交付的不是一份"幻灯片",而是一场在浏览器里上演的动态视觉演出:持续运行的动态背景、每页的入场编排、页间的过渡特效、键盘可交互——同时排版严谨、内容真实、零控制台报错。
本 Skill 不是用户请求入口,不直接接收裸 query 或附件创建新任务。只接受
sn-ppt-entry 传入的绝对 DECK_DIR,并且必须已经存在:
<DECK_DIR>/task_pack.json;<DECK_DIR>/info_pack.json;<DECK_DIR>/outline.md;task_pack.choices.output == "dynamic_html",或旧任务的 ppt_mode == "dazzle"。任一条件不满足时停止并返回 sn-ppt-entry 补齐,不自行新建 deck 目录、不从 query 绕过 sn-ppt-story。
开始和恢复时都 重新读取read_file磁盘上的当前 outline.md,不得使用sn-ppt-story 的 write_file 返回内容或对话上下文中的 outline;outline.md是 Dazzle 的唯一内容输入并固定:
Dazzle 仍按本文后续六阶段决定风格 family、动态背景、版式、素材、动画和实现细节,但不得 合并、拆分、增删或重排 outline 页面,不得改变标题和核心结论的含义,不得恢复用户删除的 内容,也不得自行 Research 或补造事实。事实不足时停止相关页面并返回 Entry / Story。
DECK_DIR 只能取 task_pack.deck_dir 的绝对路径,所有任务产物都写入该目录。当前 Skill
目录只读并记为 SKILL_ROOT;references 和渲染脚本只从 SKILL_ROOT 读取。
<DECK_DIR>/deck.html(如用了生成图则外加 <DECK_DIR>/assets/,图片在 HTML 中仍用相对路径 assets/img_NN.png 引用;没有生成图时 deck.html 就是唯一演示交付物)。<style> / <script>。允许 CDN:Three.js r128、GSAP、ECharts、D3、Google Fonts。禁止外链图片 URL(图片只能来自 assets/ 下的本地文件)。DECK_DIR 内文件:plan.md(你的规划)、deck.html、assets/(可选)、shots/(渲染截图输出)。只在现有阶段边界同步 task_pack.json,不改变后续阶段的执行内容:
current_stage="output.dynamic_html.plan"、status="generating";plan.md
完成后把绝对路径写入 state.artifacts.plan。current_stage="output.dynamic_html.build";阶段 4 每完成并看图确认一页,把
页号追加到 state.artifacts.dynamic_pages_completed。deck.html、shots/、shots/render.json 和可用的
shots/contact_sheet.png 的绝对路径分别写入 state.artifacts.deck_html、shots、
render_manifest、contact_sheet;把 dynamic_html 加入 completed_stages。全部页面通过时
写 current_stage="complete"、status="completed";仍有已如实报告的缺陷时写
status="partial" 和 last_error,保留全部可用产物。必须先渲后看:只读代码不算自检。 渲染统一用 bash 执行 skill 自带脚本:
python "$SKILL_ROOT/scripts/render_deck.py" "$DECK_DIR/deck.html" "$DECK_DIR/shots/" --page N # 渲染第 N 页
python "$SKILL_ROOT/scripts/render_deck.py" "$DECK_DIR/deck.html" "$DECK_DIR/shots/" --all # 全部页 + contact_sheet.png成功时 stdout 每行一个 PNG 路径(告警以 [console]/[static]/[blank]/[nav] 前缀打在路径之前);渲染元数据写 $DECK_DIR/shots/render.json(console_errors / static_pages / blank_pages / 页数 / 导航方式)。截图后用 vision_analyze 查看。
第一步必须是完整读取read_file当前 outline.md,不得先生成 plan.md 或 deck.html。
task_pack.request.query 只补充场景和用户明确风格偏好,不能覆盖
outline 的内容决定:
## 第 N 页,不得再按 8–12 页自行决定。task_pack.params 和task_pack.request.query,不得改变 outline 内容。$SKILL_ROOT/references/style-families.md,选定一个与主题、场景都契合的 family(outline 或 task_pack.request.query 带了风格倾向则在其方向内落到具体 family)。$SKILL_ROOT/references/fancy-cookbook.md,为本 deck 挑 2–3 个技法配方(全局背景选一种、入场编排选一种、过渡/彩蛋按需)。第二步必须是写plan.md,不得先生成 deck.html。 一次 write_file 写出完整规划,包含:
--bg / --ink / --accent / --accent-2 的 hex);display + body 字体(含中文字体兜底);全局背景层方案(CSS/Canvas-2D 程序化纹理 / 粒子流场 / shader 噪声 / 代码搭 3D 场景 / 每页多场景,按招牌视觉选一——别条件反射默认某一种);通用过渡方案。2b. 招牌视觉(必填一行):本 deck 的招牌手法 + 为何契合题材/场景;选了 3D/沉浸/shader 要写明用什么搭。定了就必须真做出来(见 §5 招牌兑现)。
3. 页序表:与 outline.md 的页面逐页一一对应,每页一行 NN | 页型 | 一句话内容 | 本页 fancy 手法 | 版面骨架;NN、顺序、一句话结论必须服从 outline。页型从:封面 / 议程 / 观点 / 数据 / 对比 / 流程 / 案例 / 架构 / 时间线 / 总结 中选,相邻页不重复同一页型;fancy 手法不要超过 2 页雷同。「版面骨架」一栏先想清楚这页怎么分区、主视觉摆哪、余量留给谁(如"左叙事右大图 / 居中单 hero / 四等卡一行 / 满屏场景 / 上标题下两栏对比")——分几区不限,但要让留白是有意的构图、不是排完剩下的边角料(见 §7 布局与留白);并列项预想好怎么等高对齐。布局在 plan 里想透,初稿就少返工。
4. 素材清单(如需):逐页判断"摄影刚需"(§6),需要的写出生图 prompt 草稿与用途。同组并列对象(N 枚卡片 / 一排同类)整组决策:把 N 个成员列全,整组选"全真实图"或"全代码绘制"——选真图就 N 个各列一行,绝不能页序表写 4 枚卡片、清单只列 2 张(见 §6)。
规划自检:页数、页序、标题、核心结论和依据是否逐页对应当前 outline?palette 是不是精确 hex?有没有滑回暖米黄/奶油底?页型有变化吗?内容是否只使用 outline 已支持的真实主体与真实数据、没有占位词或新增事实?
按 §6 的纪律生图:生成 → vision_analyze 核对(内容对不对 / 色调搭不搭 / 有无文字水印)→ 不合格改 prompt 重生,绝不硬用;确切路径记入 plan.md。没有摄影刚需的 deck 跳过本阶段(多数 deck 应该跳过)。
一次 write_file 写出完整可运行但页面为空的 $DECK_DIR/deck.html 骨架(结构契约见 §4):
:root design tokens → 全部基础 CSS(.deck/.slide/.active/导航 UI/通用 keyframes 库/通用过渡)→ #bg-layer 全局动态背景(完整实现并运行,不是占位)→ N 个空 <section class="slide">(仅含 <!-- SLIDE NN: 页型 + 一句话 --> 注释,不写任何真实内容;封面页可先放最小标题文字保证 smoke 有内容可看,其余页一律保持空)→ 导航控制器 JS → 页码 + 进度条。硬性纪律:骨架这一次 write_file 里,除封面外的 section 必须是空的(只有注释)。不要在骨架阶段就把多页内容一次性写满——那会让一整批未经单页验证的页面同时落地,错误跨页累积、后面更难收拾,也丢掉了逐页"渲染即验证"的全部价值。
然后 smoke 验证:render --page 1 + 看图——封面可见、页码/进度条在、背景层在动(看 stdout 的 [static] 与 [console])、零报错。骨架不过关先修骨架,再进入逐页填充。
按页序一页一页来,每页走完一个完整的"填充→渲染→看图"小循环再进入下一页:
edit 把该一页的空 section 替换为完整内容(页内样式可放 section 内 <style> 或按 #sNN 前缀写进全局 style;页内 JS 一律注册到 window.slideInits[N],见 §4)。一次 edit 只填一页,不要一次 edit 灌进多页内容。render --page N → vision_analyze 该页截图,按 §5 清单自检。先渲后看是硬要求——不渲染就接着填下一页是不允许的。为什么坚持逐页:每页在落地的当下就被单独看过、确认无溢出/遮挡/报错,问题在最便宜的时候被发现和修掉;这也是这条技能要教给模型的核心节奏——增量构建 + 即时验证,而非一次写完赌它对。
render --all → 先看 contact_sheet.png 一图扫全局:风格有无漂移、相邻页有无雷同、页码连续性、背景全套统一;再核对 render.json:console_errors 必须为空;static_pages 逐页核对是否"静得有理由"(§5)。发现问题:单页问题 edit 该 section、只看该页大图;跨页/系统性问题才改 :root token 或共享骨架——但 token / 共享 CSS 会波及所有页(含逐页阶段早已通过、不再回看的前面页),改完必须 render --all 复扫全部页确认没把别的页带歪,绝不能只看原问题页。 全局性的版面 token 调整最适合在这一步做(这里本就 render --all)。行有余力,此时可给关键页加页面级专属过渡/彩蛋增强。
收尾前必须已做过阶段⑤全局复审(render --all + 看 contact_sheet),且最后一次 edit 之后必须再渲染验证过——没验证就收尾不允许。然后一段简短文字总结:页数、风格 family、最得意的 1–2 个 fancy 点、如实报告遗留问题(还有哪页有什么没修掉)。谎报"全部通过"而实际有硬伤 = 整条产出作废。 禁止"谢谢聆听/感谢观看"式收尾页套话。
fancy 是执行质量与视觉冲击的拉满,不是风格的出格。 给毕业答辩配赛博朋克霓虹,和给发布会配灰白模板,是同一种失败。阶段 0 先把场景庄重度判清楚:
| 档位 | 典型场景 | 风格候选域 | 动画密度 |
|---|---|---|---|
| 庄重档 | 学术答辩、政企汇报、医疗/金融/法务报告 | 深色商务、编辑杂志、数据仪表盘等沉稳系(禁瑞士极简/国际主义排版) | 演示级:克制深邃的背景微动效 + 精致入场编排 + 数据动画(count-up / draw-in),页面落定后静帧为常态;禁霓虹故障、粒子轰炸、强干扰特效 |
| 自由档 | 产品发布会、创意提案、科技分享、个人作品 | dazzle 簇放开:赛博、沉浸 3D、极繁、孟菲斯…… | 秀场级:跨页过渡特效、粒子 / 3D / shader、戏剧化编排放手做 |
| 题材档 | 文旅、儿童教育、文化艺术、美食 | 跟着题材气质走(文化→东方美学、儿童→明快插画……) | 介于两档之间,动效形式贴合题材隐喻 |
task_pack.request.query 里的场景词("答辩""路演""组会")判断。<body>
<div id="bg-layer"></div> ← 全局动态背景层(canvas/Three.js/CSS 动画)
<div class="stage"> ← 居中容器,position:fixed; inset:0; flex 居中
<div class="deck" id="deck"> ← 固定 1280×720 设计画布,overflow:hidden
<section class="slide active" data-slide="1">…</section>
<section class="slide" data-slide="2">…</section>
…
<div class="hud">页码 + 进度条</div>
</div>
</div>
</body>:root 定义,全文只用 var() 引用,不写散落的裸 hex / 裸数值。--bg/--ink/--accent/--accent-2/--font-display/--font-body。--safe-x/--safe-y(如 64/56px,内容不越此边距,HUD/页码可贴边);成体系的间距档 --gap-s/-m/-l(如 12/24/48,元素间留白只从这组取,别随手写散值,留白才有节奏);最小可读字号 --fs-min(约 20–22px,正文/标注永不缩到它以下来塞内容——宁可拆页/删内容)。巨字用 clamp(min, Nvw, max) 兼顾戏剧性与上界、防出界。这些版面 token 在骨架期就要定准并保持稳定,逐页填充都在其约束内工作;中途若必须改 token,它会牵连所有页(含前面已过的页),须按 §5 修复纪律全局重验。.deck{position:relative;width:1280px;height:720px;overflow:hidden},内容一律按 1280×720 用 px 布局与定字号;JS fitDeck() 按 Math.min(innerWidth/1280, innerHeight/720) 缩放 deck,监听 resize。绝不混用单位(最忌 deck 按 vh 定尺寸、字号按 vw 定——letterbox 屏下字体撑爆画布)。.slide{position:absolute;inset:0;opacity:0;visibility:hidden;pointer-events:none},.slide.active 三项全开。非当前页必须彻底不可见(只切 opacity 不切 visibility 会互相透叠);任一时刻有且仅有一页 active;给单页加自定义样式时绝不要改 position(脱离堆叠会把该页压成 0 高、canvas 黑屏)。window.addEventListener('load', () => window.focus()) 抢焦点(iframe 内键盘可用的前提)。.active 切到目标页(渲染脚本靠 .active 类识别当前页,这是硬契约)、更新页码与进度条、对目标页调用 window.slideInits[N](见第 6 条)、派发 slidechange 事件。new URLSearchParams(location.search).get('slide') → 初始化时直接跳到第 N 页(1-based)。渲染脚本靠它做单页 O(1) 渲染,缺失会显著拖慢自检并在 stderr 告警。#bg-layer{position:fixed;inset:0;z-index:0;pointer-events:none},deck 容器 z-index:1。背景动画骨架期完整实现;复审期只准调参(颜色/密度/速度),不要重写。事件监听挂 window(背景层不可交互),尺寸用 window.innerWidth/Height + resize 监听。5b. 背景-前景易读性(全屏 3D / 重动态背景必守):别靠全局压暗背景救正文——会同时杀死封面/章节页的 3D。改用:
opacity→~.25、减弱 glow),相机别把 3D 主体摆在前景图解同象限。radial-gradient(70% 70% at 50% 50%, rgba(<bg>,.85), rgba(<bg>,.55) 60%, transparent)(用 --bg 同色),中心托住、边缘渐隐、3D 仍从四周透出、不切硬框;密集页用卡片 + backdrop-filter:blur(6px)。绝不裸 <svg><g stroke> 直接挂 .slide(背景会从笔画缝隙透上来吞掉正文;详见 fancy-cookbook「背景-前景分离 scrim」)。stroke-opacity ≥ .5、线宽 ≥ 1.2px;淡色文字/细线只在已有 scrim 处用。window.slideInits = window.slideInits || {}; slideInits[N] = () => {…},由导航控制器在该页激活时调用(已初始化的做幂等保护)。禁止顶层立即执行的代码去摸其他页(或尚未填充的空 section)的 DOM——这是空骨架阶段渲染不报错、逐页填充互不踩踏的关键。<head> 顶部(任何页内 <script> 之前)必须预置一行 window.slideInits = window.slideInits || {};——保证任何页内脚本执行时它必已存在,根治"页内 script 早于主控制器执行 → Cannot set properties of undefined"的时序坑;且 goto()/?slide=N 直跳要在所有 slideInits[N] 注册之后才调用。animation-fill-mode: forwards(或 both),最终态 = 完整内容(渲染脚本在 ~2.6s 截图,截到的就是最终态)。持续型动画(背景粒子、呼吸光效、HUD 滚动)不受 2s 限制。禁止停在 boot/loading/打字机未完成态。.slide.leaving / .slide.active + transition/keyframes),默认给一套有戏剧性的编排(位移 + 透明度 + 模糊/裁切的组合,配 cubic-bezier 缓动)。页面级专属过渡(粒子重构、shader wipe 等)是复审期的可选增强。每页 render --page N + vision_analyze 后对照:
必修——每页都要做到位,口径是"配得上 fancy 第一目标",不是"过线就收手"。下面 1–12 是"读不了 / 看不懂"类硬问题,最先清零:
overflow:hidden 会静默裁切不露白边——别以为没出血就没事,主动核对页脚/页码/正文首末行/图表轴标签有没有被切掉。[console] 行与 render.json;JS 报错常意味着后续动画/翻页全挂。backdrop-filter 卡片、直接浮在 3D / 粒子背景上导致正文或图解看不清,算硬伤。修法见 §4 第 5b 条:给前景加软边径向 scrim 或卡片底板 + 降该页背景密度,不要全局压暗背景。招牌兑现(硬纪律):plan.md 第 2b 条定的招牌视觉必须在 deck 里真正实现。严禁把它降级充数——定了"代码 3D 场景 / immersive_3d / 沉浸",deck 就必须真有 Three.js 3D 场景(几何体 + 光照 + 相机运动),用 2D canvas 粒子假装"沉浸感"是不合格的;要么把它补成真 3D,要么诚实地把 plan 改成你真做出来的模式(不要谎报)。用 3D 当招牌时,自检必须看"3D 主体本身能不能认出是什么"(不是只看 2D 覆盖层)——暗底 + fog 容易把 3D 主体糊成黑块、内容全靠 2D 层硬扛,那是招牌名存实亡;糊了就加轮廓光/提亮/减 fog/换机位。
[static] 是信号不是硬伤:stdout 出现 [static] page N 表示该页在采样窗口内无可见动态。自问:这是有意识的设计(庄重档的数据密集页、节奏上的安静页),还是偷懒?静得有理由 → 忽略并继续;说不出理由 → 按本页的密度档位补恰当的动态(背景微动 / 数据动画),不是无脑堆粒子。
版面卫生(同样必修,别当"软伤"跳过):留白、对齐、层级、字距和上面的出界/遮挡一样要修到位——
只有纯主观的边际优化(某处呼吸再大一点更舒服、某个缓动再顺一点)才是"有余量再打磨"。 把版面卫生当软伤一跳,正是 deck 显得"AI 糙"的主因——它和读不读得清同等重要。
deck 级自评(全局复审时):
修复纪律:每页最多 3 轮 edit→render→看图,每轮只做能消除问题的最小修改;禁止用"删掉动画 / 背景 / 特效"换取过检——修复是修 bug 不是降级,确需移除某特效必须在收尾总结里说明理由;3 轮后仍有残留就保留最好一版并如实记录。同一毛病多页复发(留白 / 对齐 / 字距 / 间距系统性偏),改 :root token 或共享骨架这个根因,别逐页 edit 打地鼠——既改得准、又省返工与上下文。但务必记住共享 token / CSS 的爆炸半径是全局的,会改动所有页(含前面早已通过、不再回看的页):阶段4 逐页填充时优先用 #sNN 页内覆盖做局部修复,不要因为某一页就动共享 token;确属系统性、非动 token 不可时,改完必须 render --all 复验之前通过的页有没有被带歪(别只看当前页就放行)——这类全局改最好攒到阶段5全局复审一并做(那里本就 render --all)。最稳的做法是阶段3 骨架期把版面 token 定准,让逐页填充都在固定约束内工作、根本不需要中途改它。
默认代码绘制。 图表 / 数据可视化 / 抽象概念 / 几何装饰 / 图标 / UI 元素严禁生图——这些用 SVG / Canvas / CSS 画,这是本 skill 的看家本领。生图用于需要真实图片的场景:真实实物、自然风光、食物等等。名家艺术画作、真实人物肖像尤其必须生图,严禁用 SVG/CSS 代码模仿——代码硬画写实人脸 / 名画必然失真崩坏。要不要用、用几张,由内容的写实刚需自行判断(不刻意凑数,也不为省事回避);确需的图在阶段 2 一次性生成。
"<主体描述>, <构图/视角>, <palette 色名词> palette, low saturation, editorial photography, <光线/情绪词>, no text, no watermark"
其中 palette 色名词来自 plan.md 配色(如 "deep navy and muted gold");同一 deck 的所有图复用同一组色彩短语。宽高比按用途选(全页背景 16:9,半幅配图 4:3 / 3:4)。vision_analyze 看内容是否对、色调是否贴 palette、有无文字/水印/多余人物;跑色就改 prompt 重生,救不回再用 CSS 压色罩(duotone / 半透明主色叠层)。filter: saturate(.85) contrast(1.05) 微调 + 用 --bg 的 rgba 做渐变蒙版(文字侧深、画面侧浅)+ 暗角,把图收进 deck 色域;文字区必须保证可读。<img> 平铺——clip-path 异形裁切、mask-image 做 reveal 入场(遵守 ≤2s + forwards)、mix-blend-mode 与背景层融合、作为 Three.js 纹理。让真实图片也成为视觉特效的一部分。<img>、缺图用 <svg> 顶"(组内图文割裂比整组代码更伤)。渲染该组前先确认成员图片都已就位,缺谁补生谁或整组改代码。自检:每组 N 个成员,要么 N 张真图全到、要么 0 张全代码;页序表"N 枚卡片"= 素材清单该组图片行数。(若工具列表里没有 image_generate,跳过本节,一切视觉均代码绘制。)
每一份 deck 都必须有性格、有立场,绝不能是套路化的 AI 设计:
-webkit-text-stroke 描边——英文 display 字体(Bowlby / Bangers)和多数 ZCOOL 装饰体中文字符集不全,套上去大标题会缺字/破碎。1b. 渲染安全(字符/图标):① 数学公式禁用花体 𝒩 与组合 Unicode(ε̂/ε̃),无头渲染成豆腐块——改 <sub>/<sup> 或纯 ASCII;② 核心图标 / 品类符号用 SVG,不用 emoji(emoji 字体常缺失 → 整片空白)。
2. 配色:明确主色 + 尖锐重音、hex 精确、非平均分布;禁紫粉渐变白底 / 通用蓝绿渐变 / 无聊灰阶。
3. 反米黄:除非 outline 或 task_pack.request.query 明确要求,禁止暖米黄 / 奶油 / 宣纸 / 象牙(#FBF7F0 #F5F1EA #ECE3D0 这类 R>G>B 暖白)做主背景,禁止做旧纸张 / 茶渍噪点 / 复古手稿基调。干净的纯深色 / 冷白 / 饱和品牌色都完全 OK。
4. 中文字体覆盖:含中文必须 Google Fonts 引入中文字体(Noto Sans SC / Noto Serif SC / ZCOOL XiaoWei / Smiley Sans / LXGW WenKai 等按风格选)并放进所有显示中文的元素的 font-family 链;禁止只依赖 PingFang SC / Microsoft YaHei。整页语言自然统一,不做中英并行两套文本。
5. 形态贴合:deck 是幻灯片不是网页应用——禁止浏览器式顶栏 / 侧边导航 / 贯穿全场的常驻控制台外壳(LIVE FEED / SESSION / VERSION / 脉冲指示灯这类 app 状态件);元数据只放页脚或封面。
6. 内容真正画出来:图表用 outline“内容与依据”中已有的真实数值直接画出图元;首屏即呈现真实内容;hero / 封面严禁"巨幅纯色块只配一两个字"——要有清晰主标题 + 说明文案 + 视觉焦点。内容要有 outline 已支持的真实主体与真实数据,严禁为填满页面编造数字;证据不足时返回 Entry / Story,不使用占位词冒充完成。
pointer-events:none 且 z-index 低于同区文字。SVG / Canvas 内部没有 z-index,只认绘制顺序——文字必须最后画(在装饰线、光晕、连线、节点之上);若文字不可避免压在图形 / 插画上,给它加 paint-order:stroke + 与底色同色的浅描边,或垫一块半透明圆角底板 / 径向 halo 托住,确保任何角度都读得清(这正是"插画里小字被线条吃掉"的根治法)。--safe-x/-y(§4),这是唯一硬边框;框内分几区随题材定(1 区 hero / 2 栏 / 3–4 卡 / 拼贴 / 满屏场景都行),别套死"几区"模板。--gap-* 档取,节奏统一),要么有意聚成一处做呼吸 / 强调;禁止余量渗漏成单边或单角的意外死白。自检视角:把空白当成一个看不见的块——它该有位置感和理由,说不出理由就是 bug。align-items:stretch 或等高配方,消除"一栏比另一栏矮"造出的锯齿死白;别用 flex-start 放任不齐。margin-top:auto 钉底;满屏 flex 列用 justify-content 摊匀纵向余量);撑破 → 拆页或降到 --fs-min,不是硬塞到溢出。overflow:hidden + 子 min-width:0,或 fit-content / 允许换行,预留 ≥15% 余量;超大 display 标题设 max-width 允许换行、禁 white-space:nowrap 硬撑;line-height<1 的巨字按墨迹盒实算高度、与邻块留 ≥24px。clearRect 或 destination-out,严禁低 alpha fillRect 整屏铺(累积成不透明遮罩盖住正文);自定义光标 z-index 不高于正文且 pointer-events:none。GridHelper——一律不用做背景,这是被严重滥用的 AI 套路,哪怕低透明度单层也不行。需要纵深/质感请用:渐变光晕、shader 噪声、粒子流场、径向暗角。(只禁"当背景平铺的视觉网格";CSS Grid 布局即 display:grid 的版面排布不受影响。)绚哲学——尽可能绚,但绚得其所:在场景档位允许的密度内做满视觉表现力——持续微动的背景、视差 / 磁吸 / 扰动的鼠标响应、形变 / 光晕的 hover、backdrop-filter / mix-blend-mode / mask-image / clip-path、preserve-3d 空间深度、粒子与程序化纹理、staggered reveal、大字号排印张力(字距不得让字形粘连)。该上重型就上、别因难调试回避:3D/shader 灵动背景层(广泛适用,尤其科技/抽象/数据/网络)、代码搭 3D 漫游场景(空间主体题材)、多场景沉浸、极繁拼贴都是加分项;但重型手法要服务题材,不是为炫而炫——2D/CSS 把题材表达透了同样是顶级 fancy。背景默认就该持续微动,纯静态渐变是丢分。绚 ≠ 杂乱:再密集也要层级清晰、配色有立场、贴合场景档位。
if (typeof fn === 'function') 防御——首行 ReferenceError 会杀掉后续全部脚本(翻页/动画全挂)。https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js(UMD 全局最稳);OrbitControls 用 three@0.128.0/examples/js/,不要 r150+ 的路径(已废弃)。ShaderMaterial({vertexColors:true}) 会自动注入 attribute vec3 color,vertexShader 里不要再声明一遍(redefinition → 粒子全黑)。renderer.setPixelRatio(devicePixelRatio);setSize(w, h) 不传第三参数;取尺寸用父元素 getBoundingClientRect()(canvas 自身初始可能为 0)并用 ResizeObserver 监听。:root token 取,禁用 ECharts 默认色板;图表初始化放进 slideInits[N],容器要有确定尺寸。window;load 时 window.focus() 抢焦点(deck 常被嵌 iframe 预览)。slideInits[N] 内做"已初始化"保护(重复激活不重复建 canvas / 不重复绑监听)。fancy-cookbook.md「代码搭建 3D 场景」+「单一 3D 世界相机航点运镜」。骨架期就把场景与相机搭起来跑通,逐页只调机位与该页 HTML。<img> + object-fit 而非 background-image——无头渲染里大图 background-image 常在截图时还没解码出来、整页近黑。references/style-families.md —— 风格家族库:气质 / 适用与禁用场景 / palette 示例 / 字体方向 / 该风格下 fancy 怎么发力。阶段 0 必读。references/fancy-cookbook.md —— 技法配方:入场动画 / 跨页过渡 / 全局背景 / 交互彩蛋,含核心代码模式与参数安全范围。阶段 0 选型时读。© OpenSenseNova, 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 3 other files (scripts, references) in skills/sn-ppt-dazzle of OpenSenseNova/SenseNova-Skills.
Open the folder on GitHubat commit 7838651
Sn Ppt Dazzle 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 |
|---|---|---|---|---|---|---|
| Sn Ppt Dazzle this skillOpenSenseNova/SenseNova-Skills | 5.7k | — | ~5.3k | Automated safety check: Pass | MIT | |
| Image To Editable Pptningzimu/image-to-editable-ppt-skill | 2.9k | — | ~4.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 | |
| Gpt Image2 PptJuneYaooo/gpt-image2-ppt-skills | 1.3k | — | ~8.9k | Automated safety check: Notes | Apache-2.0 |
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.
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.
scunning1975/MixtapeTools
Create and compile beautiful Beamer presentations following the Rhetoric of Decks philosophy.
OpenSenseNova/SenseNova-Skills
Builds HTML stories where one continuous camera journey advances with page progress, using researched structure, AI stills, Seedance video clips and browser QA.
OpenSenseNova/SenseNova-Skills
Fallback scripts for web search, image search and download, and image generation that PPT skills use only when the host agent lacks or fails its own tools.
OpenSenseNova/SenseNova-Skills
Opens the PPT Workbench web editor for an existing SenseNova HTML slide deck so you can preview, inspect and visually edit it without regenerating.
OpenSenseNova/SenseNova-Skills
Turns an approved slide outline into a full-page image for every slide, one 16:9 PNG per page, and optionally packages the set into a PPTX.
OpenSenseNova/SenseNova-Skills
Entry point for SenseNova presentation generation: creates a task folder, picks depth, output format and design richness, and routes to the right PPT skill.
OpenSenseNova/SenseNova-Skills
Researches Chinese market, macro, trade, procurement, listed-company and regulatory information from free official sources that need no sign-up or API key.
Categories
需要把演示 / 幻灯片 / PPT / slides 做成单文件 HTML 动态 deck(动效、跨页过渡、键盘翻页、1280×720)时使用。本 skill 非入口:使用前必须先确认 sn-ppt-entry 与 sn-ppt-story 两个前置 skill 可用,依次执行 entry(建 DECKDIR / taskpack.json)→ story(生成…. Sn Ppt Dazzle is an agent skill from OpenSenseNova/SenseNova-Skills.
Sn Ppt Dazzle fits situations like: tasks that involve Slides and decks.
Run `npx skills add OpenSenseNova/SenseNova-Skills --skill sn-ppt-dazzle -a claude-code`. Or copy the skill folder (skills/sn-ppt-dazzle in OpenSenseNova/SenseNova-Skills) into .claude/skills/sn-ppt-dazzle in your project. Claude Code loads it when a task matches its description.
Run `npx skills add OpenSenseNova/SenseNova-Skills --skill sn-ppt-dazzle -a codex`. Or copy the skill folder (skills/sn-ppt-dazzle in OpenSenseNova/SenseNova-Skills) into .agents/skills/sn-ppt-dazzle 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 OpenSenseNova/SenseNova-Skills --skill sn-ppt-dazzle -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sn-ppt-dazzle, .gemini/skills/sn-ppt-dazzle, .github/skills/sn-ppt-dazzle and .opencode/skills/sn-ppt-dazzle in your project.
Going by SKILL.md and its folder, Sn Ppt Dazzle needs Python for the scripts in its folder and the command-line tools its instructions call (python). Our summary lists: Python 3.
SKILL.md names 1 domain. In commands or code: cdnjs.cloudflare.com; the agent is likely to contact it when it follows the instructions. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Sn Ppt Dazzle is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.3k tokens (SKILL.md is roughly 21k 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 12k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Sn Ppt Dazzle: Image To Editable Ppt (ningzimu/image-to-editable-ppt-skill, 2.9k stars), Slides (fcakyon/claude-codex-settings, 1.2k stars), Ppt Image First (NyxTides/ppt-image-first, 1.2k stars) and Vibe to Agentic Engineering Framework (shanraisshan/claude-code-best-practice, 67k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
OpenSenseNova (a GitHub organization) maintains it in OpenSenseNova/SenseNova-Skills, which has 5,749 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on October 9, 2026.
Source: OpenSenseNova/SenseNova-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.