Home / All Skills / Design & Motion / deck-presenter-mode
Design & Motion · nexu-io/html-anything

deck-presenter-mode

tokyo-night default theme, 'T' toggles 5 themes, 'S' opens teleprompter popup

L3 Networked · Declare domain & key scopeV1 Commit-PinnedNetwork AccessDual-pass Audit
Author nexu-ioGitHub nexu-io/html-anything ↗Stars 8827License Apache-2.0(工作副本根目录 LICENSE 文件 = Apache License Version 2.0;GitHub API spdx_id=Apache-2.0。注意:skill 目录本身不含独立 LICENSE,许可来自仓库根;第三方来源模板在 README 另有署名说明)Commit 553ed98c28
Control levels describe skill capabilities and suggested control measures; they do not represent quality or safety certifications, nor do they dictate usability. Usage decisions rest entirely with users and administrators. Different agent hosts apply varying constraints; do not assume hosts provide automatic protection. Third-party skill copyrights belong to their original authors. Use at your own risk.

1How It Works & Mechanism

This skill is a "template package" for html-anything: frontmatter supplies metadata to the selector, and the SKILL.md body (after frontmatter) is read as-is by loader to serve as model instructions.

next/src/lib/templates/loader.ts
const { fm, body } = parseFrontmatter(raw);
This template body has 21 lines / 687 bytes (focused on speaker-side interactions); frontmatter is parsed via parseFrontmatter into fm and body, with no scripts in the directory.

The actual prompt sent to the model = shared design guidelines + this template body + [Input Format] + [User Content]; the shared guidelines also include an override rule stating that slide counts/layout numbers in the template are not upper limits.

next/src/lib/templates/shared.ts
return `${SHARED_DESIGN_DIRECTIVES} ${opts.body.trim()}
The override rule directly following in the same file verbatim states: the template only defines "available layouts / style / palette / fonts / component library", and **does not define** the count of slides / frames / cards / sections.

Output discipline is strictly enforced by shared guidelines: the agent is forbidden from using any filesystem tools; HTML must be streamed via stdout text and saved to disk by the frontend.

next/src/lib/templates/shared.ts
- **禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。不要把 HTML 写到任何
The template itself does not declare disk-saving methods, relying entirely on this shared constraint.

Speaker support is implemented via per-slide 'aside.notes': the body requires 150-300 words of verbatim script per slide; on the application side, deck.ts extracts aside.notes into a notes panel and strips them from the slide body.

next/src/lib/deck.ts
notes = stripTags(inner);
Meaning: script is invisible to the audience but visible to the speaker—this is the mechanism enabling slides "with verbatim scripts", governed by application-side parsing conventions.

The teleprompter popup is driven by keyboard shortcuts: 'T' toggles themes, 'S' opens the popup, which contains four cards: CURRENT / NEXT / SCRIPT / TIMER.

next/src/lib/templates/skills/deck-presenter-mode/SKILL.md
- 右下小 toolbar: T 切主题 / S 打开 popup
Another line in the same section reads: "- Popup: CURRENT / NEXT / SCRIPT / TIMER four snap cards"—breaking down the teleprompter into current slide, next slide, script, and timer blocks.

The theme mechanism provides "1 default + 5 switchable": default is tokyo-night, cycled with the 'T' key (including one light theme).

next/src/lib/templates/skills/deck-presenter-mode/SKILL.md
- 默认 tokyo-night; 共 5 套主题 (含 light)
Unlike deck-replit's "choose 1 without mixing": here runtime switching is the feature itself.

Slide containers adhere to repository-wide deck conventions: example.html sections contain a class with slide and feature 8 aside.notes blocks, parsed slide-by-slide by deck.ts to extract scripts.

next/src/lib/deck.ts
const SLIDE_RE =
The application side also supports PNG zip and multi-page PPTX exports (host capabilities).

2Core Capabilities

01Embeds 150-300 words of verbatim script per slide (<aside class="notes">) for notes panel and teleprompter
02Bottom-right toolbar shortcut interactions: 'T' toggles themes / 'S' opens popup
03Teleprompter popup with 4 snap cards: CURRENT / NEXT / SCRIPT / TIMER
04Runtime switching across 5 themes (default: tokyo-night, includes a light theme)
05Categorized on site side as engineering scenario (scenario: engineering), 16:9 landscape
06CLI keyword routing: presenter / 演讲者 / 演讲模式 → deck-presenter-mode
07Application-side companion: aside.notes extraction (deck.ts) → notes panel + per-slide PNG/PPTX export

3External Dependencies

KindDependency / Endpoint
cli宿主本机 agent CLI(由应用侧 spawn;非本 skill 指令)
networkGoogle Fonts(产物示例引用,非 skill 正文要求)
network产物样例正文里的第三方出处文本(非调用)

4Recommended Governance & Evidence

Suggested Controls for Safe Operation
For Agent Runtime
Declare allowed domains and key scope
For Administrators
Least privilege keys, retain request logs
Evidence & Triggers (File Paths & Excerpts)
  • 网络端点: Declared external network access: example.html contains multiple Google Fonts @import statements (fonts.googleapis.com); fetched by the browser during artifact rendering.
Audit Notes: Evaluation target = skill directory (SKILL.md + example.html): no scripts, no credential access, no disk-writing commands; SKILL.md body contains zero URLs and zero CDN/API requirements, consisting entirely of text specifications for layout and interactions ('T' toggles themes / 'S' opens popup / aside.notes verbatim scripts). The only endpoints appearing in the directory are Google Fonts @import in example.html and a GitHub link text (artifact sample). html-anything templates in this repo are uniformly rated 🟢 Green under batch 4 standards: evaluation target = skill's own directory; host shell (loader.ts/assemblePrompt/local agent CLI/preview iframe) and font/CDN references in example.html are artifact-phase behaviors (fetched by the browser, not sent during skill execution), documented solely in reason/risks without affecting the rating.

5Second-Pass Verification

  • [ok] 文件清单(2 个文件,无脚本) — SKILL.md(687B) + example.html(37604B)。
  • [ok] 正文零端点复核 — SKILL.md 内 http/CDN/fetch/script 零命中。
  • [ok] 目录内端点自证 — example.html: 多条 fonts.googleapis.com @import + 一处 github.com/lewislulu/html-ppt-skill 文本;无远程 script、无 fetch/XHR。
  • [ok] 无凭证读取 — key/secret/token/.env 零命中。
  • [ok] 无写盘指令 — SKILL.md 无 write/save 类指令;shared.ts 明令禁文件工具。
  • [ok] 交互约定逐字可复核 — T 切主题 / S 打开 popup / CURRENT·NEXT·SCRIPT·TIMER 四卡 / 默认 tokyo-night 5 套主题均在正文。
  • [ok] aside.notes 机制在宿主侧有真实实现 — deck.ts 的 `notes = stripTags(inner);` 与 class 含 notes 的 aside 匹配正则,说明「含逐字稿」不是空头承诺。
  • [ok] 样例产物与机制一致 — example.html: 6 个 <section>、8 处 class 含 slide、8 处 aside.notes → 稿件可被逐页抽出。

6Verdict & Scenarios

  • Targets neglected presenter-side needs: verbatim scripts + teleprompter + timer, rather than just another visual layout.
  • Script and slide separation backed by host-side implementation: aside.notes is extracted and removed from audience view.
  • Theme switching baked into interaction (5 themes via 'T' key), allowing on-site switching to light mode for bright venues.
  • Concise spec with minimal context overhead (687 bytes), ideal for combining with long speech drafts in a single generation.
  • Best for: Ideal for live presentations, lectures, and internal talks where presenters worry about forgetting lines: provides slides along with verbatim scripts and a teleprompter. Also suited for end-to-end pipelines generating speech scripts and slides together (script placed directly into aside.notes).
    Not for: Not suitable for silent reading materials (scripts are for presenters and hidden from readers); not suitable for occasions demanding strict corporate branding (5 themes lean toward code-editor aesthetics, non-branded); not suitable for deliveries requiring deterministic designs (interaction details are left to model discretion).
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload deck-presenter-mode.tar.gz
    sha256: 1b8a4ed4e3c3279c…
    Option B · Copy Guide for Agent
    install.json
    Agents automatically download and verify mirrors from this JSON guide.
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 553ed98c28.