name: open-show description: 将 Markdown、Word (.docx)、PDF、Text (.txt)、本地 HTML 或任意网址转换为单个可全屏播放的 HTML 幻灯片。触发词:「幻灯片」「转幻灯片」「生成演示稿」「做 deck」「文档转 html 播放」。
OpenShow 技能
触发条件
用户提及以下任意关键词时激活:
- 「幻灯片」「转幻灯片」「生成演示稿」「做 deck」
- 「把这个文档转成可播放的 html」
- 「把这篇文章做成 PPT 一样的网页」
- 「这个网页能不能全屏播放」
支持的输入
| 类型 | 识别方式 | 处理方式 | 依赖 |
|---|---|---|---|
| Markdown | .md / .markdown 后缀 | markdown 库解析 | markdown |
| Word | .docx 后缀 | python-docx 提取标题/段落 | python-docx |
| 本地 HTML | .html / .htm 后缀 | BeautifulSoup 解析 DOM | beautifulsoup4 |
| 网址 | http:// / https:// 前缀 | requests 抓取 + 正文提取 | requests, beautifulsoup4 |
.pdf 后缀 | PyMuPDF 逐页转图片嵌入 | pymupdf | |
| Text | .txt 后缀 | 按空行/标题分块解析 | 无 |
执行流程(严格按顺序)
第一步:依赖检查
首次使用或不确定时,检查依赖:
python3 -c "import markdown, docx, requests, bs4, fitz; print('ok')"
若失败,安装:
python3 -m pip install markdown python-docx requests beautifulsoup4 pymupdf
第二步:判断输入并调用脚本
基础用法:
python3 ~/.hermes/skills/open-show/scripts/openshow.py -i "<输入>" -o ~/openshow_outputs
生成后自动用系统默认浏览器打开:
python3 ~/.hermes/skills/open-show/scripts/openshow.py -i "<输入>" -o ~/openshow_outputs --open
生成后用 openclaw browser 打开:
python3 ~/.hermes/skills/open-show/scripts/openshow.py -i "<输入>" -o ~/openshow_outputs --openclaw
- 输入可以是文件绝对路径或 URL
- 输出目录固定为
~/openshow_outputs(不存在则自动创建) - 生成文件命名规则:
openshow_<标题>_<时间戳>.html
第三步:返回结果并告知交互方式
已生成可播放 HTML:
{path}操作方式:
←/→翻页空格/PageDown下一页F键切换全屏T键显示/隐藏计时器- 手机支持左右滑动翻页
- 点击屏幕右侧 2/3 下一页,左侧 1/3 上一页
- 左上角计时器点击可暂停/继续
适配场景:手机、电脑、大屏幕投影全屏播放
核心机制(内部实现要点)
内容解析
- 所有输入统一转换为
Block列表(heading, paragraph, image, list, code, quote) - HTML/URL 输入会启发式提取正文容器(最大文本密度的
article/main/div/section) - 自动清理导航栏、广告、脚本、样式表
- 本地/远程图片自动内联为
data URI,确保单文件离线可用
分页算法
- 以
h1/h2/h3为天然章节边界分Section - 单节内按容量拆页:文字 > 300 字、图片 > 3 张、块数 > 6 时自动拆分
- 超长段落(>300 字)先按句子拆分为多个 block,避免一页文字爆炸
- 自动避免标题独占一页:若某页只有 heading,从下一页借一个 block
布局模板
根据内容自动匹配:
cover:H1 大标题页,居中text:纯文字内容页,左对齐list:bullet points 页,字体放大split:左图右文(1 张图)或上图下文(多张图)image:单图全屏居中closing:最后一页,居中总结风格
幻灯片引擎
- 零外部 CDN,CSS + JS 全部内联
- 每页
100vw × 100vh绝对定位 - 翻页动画:
transform: translateX()+cubic-bezier(0.22, 1, 0.36, 1),0.5s - 性能优化:
will-change+backface-visibility: hidden+touch-action: none - 响应式:
clamp()字体 +@media适配手机
计时器
- 页面加载 1 秒后自动开始
- 左上角显示
MM:SS - 点击暂停/继续,暂停时变橙色
T键切换显示/隐藏
品牌水印
- 每页右下角内置 OpenShow logo(极简几何线条风格)
- 低透明度(
rgba(255,255,255,0.04~0.07)),不影响阅读 - 切换到活动页时透明度微增,高端大气
常见错误与限制
- ❌ 不支持
.pptx输入 - ❌ 不支持
.doc(老版本 Word),必须先转换为.docx - ⚠️ PDF 转换为图片嵌入,文件较大时可能产生较大的 HTML
- ⚠️ 某些复杂网页的 DOM 结构可能提取不完全,可建议用户先保存为本地 HTML 再转换
- ⚠️ 远程图片下载失败时会保留原 URL,离线播放可能缺失
文件位置
- Skill 配置:
~/.hermes/skills/open-show/SKILL.md - 核心脚本:
~/.hermes/skills/open-show/scripts/openshow.py - Logo 资源:
~/.hermes/skills/open-show/assets/logo.svg - 输出目录:
~/openshow_outputs/