open-show

v0.1.3

将 Markdown、Word (.docx)、PDF、Text (.txt)、本地 HTML 或任意网址转换为单个可全屏播放的 HTML 幻灯片。触发词:「幻灯片」「转幻灯片」「生成演示稿」「做 deck」「文档转 html 播放」。

0· 89· 3 versions· 0 current· 0 all-time· Updated 22h ago· MIT-0
byJonny Looma@lumacoder

Install

openclaw skills install open-show

OpenShow 技能

触发条件

用户提及以下任意关键词时激活:

  • 「幻灯片」「转幻灯片」「生成演示稿」「做 deck」
  • 「把这个文档转成可播放的 html」
  • 「把这篇文章做成 PPT 一样的网页」
  • 「这个网页能不能全屏播放」

支持的输入

类型识别方式处理方式依赖
Markdown.md / .markdown 后缀markdown 库解析markdown
Word.docx 后缀python-docx 提取标题/段落python-docx
本地 HTML.html / .htm 后缀BeautifulSoup 解析 DOMbeautifulsoup4
网址http:// / https:// 前缀requests 抓取 + 正文提取requests, beautifulsoup4
PDF.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,确保单文件离线可用

分页算法

  1. h1/h2/h3 为天然章节边界分 Section
  2. 单节内按容量拆页:文字 > 300 字、图片 > 3 张、块数 > 6 时自动拆分
  3. 超长段落(>300 字)先按句子拆分为多个 block,避免一页文字爆炸
  4. 自动避免标题独占一页:若某页只有 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/

Version tags

latestvk97bs0xxy0kgt9swc6z2s1gy5s84y9yb