科研效率
未发现用户侧风险
演示文稿
创建、管理、验证、预览和导出 HTML 演示文稿幻灯片(1920x1080)。当需要构建幻灯片、导出为 PDF/PPTX 或在浏览器中预览时加载此技能。
文件预览
9 个文件
scripts
SKILL.md
3.6 KB · 可预览
---
name: presentations
description: "Create, manage, validate, preview, and export HTML presentation slides (1920x1080). Load this skill when you need to build a slide deck, export to PDF/PPTX, or preview slides in a browser."
---
# Presentations
1920x1080 HTML slide decks. Inter font, D3.js, and Chart.js pre-loaded.
```
SCRIPT=~/.opencode/skills/GENERAL-KNOWLEDGE-WORKER/presentations/presentation.ts
```
## Commands
```bash
# Create a slide (content = HTML body only, no html/head/body tags)
bun run "$SCRIPT" create_slide '{"presentation_name":"my-deck","slide_number":1,"slide_title":"Intro","content":"<div style=\"...\">...</div>","presentation_title":"My Deck"}'
# List slides
bun run "$SCRIPT" list_slides '{"presentation_name":"my-deck"}'
# Delete a slide
bun run "$SCRIPT" delete_slide '{"presentation_name":"my-deck","slide_number":2}'
# List all presentations
bun run "$SCRIPT" list_presentations
# Delete a presentation
bun run "$SCRIPT" delete_presentation '{"presentation_name":"my-deck"}'
# Validate dimensions (Playwright)
bun run "$SCRIPT" validate_slide '{"presentation_name":"my-deck","slide_number":1}'
# Export to PDF
bun run "$SCRIPT" export_pdf '{"presentation_name":"my-deck"}'
# Export to PPTX
bun run "$SCRIPT" export_pptx '{"presentation_name":"my-deck"}'
# Generate viewer HTML (no server)
bun run "$SCRIPT" preview '{"presentation_name":"my-deck"}'
# Start on-demand viewer server (port 3210 by default)
bun run "$SCRIPT" serve '{"port":3210}'
```
## Viewer Server
The viewer is **not** a persistent background service. Start it on-demand with the `serve` action when you need to preview slides:
```bash
bun run "$SCRIPT" serve '{"port":3210}'
```
This starts a Bun server on port 3210 that serves all presentations under the `presentations/` directory. When you need it to keep running, launch the same command in `pty_spawn`.
URL scheme:
- `http://localhost:3210/` — index listing all presentations
- `http://localhost:3210/presentations/<name>/` — viewer for that deck
- `http://localhost:3210/presentations/<name>/slide_01.html` — raw slide file
After starting the server, show the URL to the user via `show`:
```
show(action="show", type="url", url="http://localhost:3210/presentations/<name>/", title="Slide Preview")
```
## Slide HTML Rules
- `content` is the `<body>` content only — wrapper injected automatically
- Canvas: 1920×1080px, `box-sizing: border-box`, max 40px padding
- Inter pre-loaded. D3.js v7 + Chart.js 3.9.1 loaded async
- Wrap Chart.js init in `window.addEventListener('load', () => { ... })`
- Images → `presentations/images/` → reference as `../images/filename`
## Layout Patterns
**Title slide:**
```html
<div style="width:1920px;height:1080px;background:linear-gradient(135deg,#1e1b4b,#312e81);
color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;
box-sizing:border-box;padding:100px;text-align:center;">
<div style="font-size:24px;color:#a5b4fc;letter-spacing:4px;text-transform:uppercase;margin-bottom:32px;">SUBTITLE</div>
<h1 style="font-size:80px;font-weight:800;margin:0;line-height:1.1;">Title</h1>
</div>
```
**Two column:**
```html
<div style="width:1920px;height:1080px;background:#0f172a;color:#f8fafc;
display:grid;grid-template-columns:1fr 1fr;gap:80px;
box-sizing:border-box;padding:80px;align-items:center;">
<div><!-- left --></div><div><!-- right --></div>
</div>
```
**Typography:** Title 64–80px/700+, Subtitle 36–48px, Body 28–36px, min 18px
## Workflow
```
create_slide × N → validate_slide → serve → show viewer URL → export_pdf / export_pptx
```
SKILL.md
元数据
| name | presentations |
|---|---|
| description | 创建、管理、验证、预览和导出 HTML 演示文稿幻灯片(1920x1080)。当需要构建幻灯片、导出为 PDF/PPTX 或在浏览器中预览时加载此技能。 |
演示文稿
1920x1080 HTML 幻灯片。预加载 Inter 字体、D3.js 和 Chart.js。
text
SCRIPT=~/.opencode/skills/GENERAL-KNOWLEDGE-WORKER/presentations/presentation.ts命令
bash
# Create a slide (content = HTML body only, no html/head/body tags)
bun run "$SCRIPT" create_slide '{"presentation_name":"my-deck","slide_number":1,"slide_title":"Intro","content":"<div style=\"...\">...</div>","presentation_title":"My Deck"}'
# List slides
bun run "$SCRIPT" list_slides '{"presentation_name":"my-deck"}'
# Delete a slide
bun run "$SCRIPT" delete_slide '{"presentation_name":"my-deck","slide_number":2}'
# List all presentations
bun run "$SCRIPT" list_presentations
# Delete a presentation
bun run "$SCRIPT" delete_presentation '{"presentation_name":"my-deck"}'
# Validate dimensions (Playwright)
bun run "$SCRIPT" validate_slide '{"presentation_name":"my-deck","slide_number":1}'
# Export to PDF
bun run "$SCRIPT" export_pdf '{"presentation_name":"my-deck"}'
# Export to PPTX
bun run "$SCRIPT" export_pptx '{"presentation_name":"my-deck"}'
# Generate viewer HTML (no server)
bun run "$SCRIPT" preview '{"presentation_name":"my-deck"}'
# Start on-demand viewer server (port 3210 by default)
bun run "$SCRIPT" serve '{"port":3210}'查看器服务器
查看器不是持久后台服务。按需使用 serve 操作启动:
bash
bun run "$SCRIPT" serve '{"port":3210}'这将启动一个监听 3210 端口的 Bun 服务器,服务 presentations/ 目录下的所有演示文稿。如需保持运行,请在 pty_spawn 中启动相同命令。
URL 方案:
http://localhost:3210/— 列出所有演示文稿的索引页http://localhost:3210/presentations/<name>/— 该演示文稿的查看器http://localhost:3210/presentations/<name>/slide_01.html— 原始幻灯片文件
启动服务器后,通过 show 向用户显示 URL:
text
show(action="show", type="url", url="http://localhost:3210/presentations/<name>/", title="幻灯片预览")幻灯片 HTML 规则
content仅为<body>内容 — 包装会自动注入- 画布:1920×1080px,
box-sizing: border-box, 最大内边距 40px - 已预加载 Inter 字体。D3.js v7 与 Chart.js 3.9.1 异步加载
- 将 Chart.js 初始化包裹在
window.addEventListener('load', () => { ... })中 - 图片 →
presentations/images/→ 引用为../images/filename
布局模式
标题幻灯片:
html
<div style="width:1920px;height:1080px;background:linear-gradient(135deg,#1e1b4b,#312e81);
color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;
box-sizing:border-box;padding:100px;text-align:center;">
<div style="font-size:24px;color:#a5b4fc;letter-spacing:4px;text-transform:uppercase;margin-bottom:32px;">SUBTITLE</div>
<h1 style="font-size:80px;font-weight:800;margin:0;line-height:1.1;">Title</h1>
</div>两栏:
html
<div style="width:1920px;height:1080px;background:#0f172a;color:#f8fafc;
display:grid;grid-template-columns:1fr 1fr;gap:80px;
box-sizing:border-box;padding:80px;align-items:center;">
<div><!-- left --></div><div><!-- right --></div>
</div>排版: 标题 64–80px/700+, 副标题 36–48px, 正文 28–36px, 最小 18px
工作流
text
create_slide × N → validate_slide → serve → 显示查看器 URL → export_pdf / export_pptx