一键导入
blog-narrator
把博客 Markdown 导出为逐行披露演示 HTML,支持轻量预览和 Edge TTS 分段配音合并。当用户需要把博客转成演讲演示或配音 HTML 时使用
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
把博客 Markdown 导出为逐行披露演示 HTML,支持轻量预览和 Edge TTS 分段配音合并。当用户需要把博客转成演讲演示或配音 HTML 时使用
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
使用全局 ~/.tmux.services 管理多个项目的常驻服务。支持注册、启动、精确重启、停止、查看状态与日志
启动 mock-ollama,将 OpenAI Chat Completions、Anthropic Messages、OpenAI Responses 三种协议代理到真实 LLM,并为 Claude Code、Codex/GPT-5.6 与 Cursor 提供本地接入和协议桥接。触发词:mock-ollama、启动 ollama mock、Claude 接第三方模型、Codex 接第三方模型、GPT-5.6 代理、Cursor BYOK、监控 LLM 请求
将回复生成 MP3 语音并通过 QQ 发送。用户要求语音回复、音频回复、朗读、“语音回复”、“发语音”、“读给我听”,或希望答案以语音形式交付时使用
用 Playwright 将网页或本地 HTML 渲染为高清 PNG 截图,支持全页、视口、分辨率和加载等待控制。用户提到 html-cut、cut-html、网页截图、HTML 截图、网页转 PNG、全页长截图时使用。
创建、定制并运行零依赖的临时局域网聊天室,支持浏览器聊天、文件传输、粘贴图片与桌面/移动端响应式布局。用户需要局域网聊天页、临时 Wi-Fi 文件共享,或修改内置聊天 UI 时使用。
把 Markdown 文件渲染成手机友好的 HTML,再调用 html-cut 截图为高清 PNG。用户提到 md-to-png、md 转 png、md 截图、把 md 发到手机看时使用。
| name | blog-narrator |
| description | 把博客 Markdown 导出为逐行披露演示 HTML,支持轻量预览和 Edge TTS 分段配音合并。当用户需要把博客转成演讲演示或配音 HTML 时使用 |
| version | 1.1.0 |
| dependencies | ["python3","ffmpeg","edge-tts","esflow"] |
| repository | https://github.com/gitByEOS/open-part-skills |
Markdown → parse_md → { 预览 HTML | split → gen → (match) → merge → 配音 HTML }
把博客 Markdown 导出成适合演讲的逐行披露 HTML
## 标题 时清空上一节,只保留标题与当前节Shift 静音、Ctrl 重读当前行如果用户没有明确说明要「预览」还是「TTS」,必须使用 Ask 工具询问后再生成。
Python 包:
pip install esflow edge-tts
系统二进制(解码音频):
brew install ffmpeg # macOS
sudo apt install ffmpeg # Debian/Ubuntu
gen:edge-ttsmatch(备选对齐):onnxruntime、numpy,模型首次下载到 scripts/models/图片:(/pics/...) 相对 cwd;可用 BLOG_NARRATOR_IMAGE_BASE 覆盖。
# 轻量预览(无预录音,体积小,验证排版)
python3 scripts/run.py preview input.md output.html [--rate 1.15] [--open]
# TTS 分段配音(一次跑完 split→gen→(match)→merge)
python3 scripts/run.py tts input.md work_dir [--voice xiaoxiao|xiaoyi] [--rate 1.175] [--open]
默认行为:预览写 output.html;TTS 写 work_dir/{stem}_voice.html,--open 自动打开浏览器。
| 模式 | 音频来源 | 体积 | 适用 |
|---|---|---|---|
| 预览 HTML | 浏览器 SpeechSynthesis 朗读(无预录音),含 voice 面板可点击播放 | 小 | 快速验证排版、现场讲解 fallback |
| TTS HTML | edge-tts 预录音 base64 内嵌,work_dir/audio/N.mp3 为分段源 | 大 | 离线演讲、音色稳定 |
两种产物都是自包含单文件,均带 voice 面板(Shift 静音、Ctrl 重读当前行)。差异只在音频来源:预览靠浏览器合成零依赖,TTS 内嵌预录音。
work_dir/
src.md # 原始 Markdown 副本
srt.md # 分段清单(## [N] 标记)
audio/ # 1.mp3, 2.mp3, …
{stem}_voice.html # 合成产物
.esflow-jobs/ # esflow 运行状态(--from 续跑用)
esflow DAG 编排(scripts/flow.py 声明,scripts/nodes/ 各节点):
parse_md ──→ export_preview (mode=preview)
└──→ split → gen → match → merge (mode=tts)
单 flow 双路径,由子命令决定 mode,节点 accept 据此跳过:
| 节点 | 职责 |
|---|---|
parse_md | strip frontmatter/分割线 → HTML + 抽标题/段文本 |
export_preview | 仅 mode=preview,生成轻量 HTML |
split | 仅 mode=tts,写 work_dir/src.md + srt.md + audio/ |
gen | Edge TTS 分段合成 audio/N.mp3 |
match | 条件:audio/ 有非 N.mp3 命名文件时 ASR 对齐重命名 |
merge | 合成内嵌 base64 音频的 HTML |
match 跳过时 merge 照跑——merge 直读 split.audio_dir,不依赖 match 产物。无 TO_AGENT 断点,一次跑完。
调试单节点:在 skill 根目录 esflow run scripts/ --node <节点 id>(上游从 job 产物复用)。
标准 TTS 流程 gen 总是产出 N.mp3,match 自动跳过。若要手动替换/补充音频(如流程图、代码片段用自定义音色):
# 1. 先正常跑一次,拿到 job 目录
python3 scripts/run.py tts input.md work_dir
# 2. 手动改 audio/:替换某些 N.mp3,或按 srt.md 段号放入网页 TTS 下载的音频(可非 N.mp3 命名)
# 3. 从 match 续跑(上游 split/gen 从 job 目录加载,不重跑)
python3 scripts/run.py tts input.md work_dir --from match --job-dir work_dir/.esflow-jobs/blog-narrator/<job时间戳>
match 用 ASR 识别非命名音频并重命名为 N.mp3,merge 重新合成 HTML。--from 也可指定 merge 只重合成。
| 参数 | 说明 |
|---|---|
input | 输入 Markdown |
output | 输出 HTML 路径 |
--rate | 默认语速,默认 1.15 |
--open | 生成后打开浏览器 |
| 参数 | 说明 |
|---|---|
input | 输入 Markdown |
work_dir | 工作目录(存 src.md/srt.md/audio/产物) |
--voice | 音色 xiaoxiao/xiaoyi,默认 xiaoxiao |
--rate | 语速,默认 1.175 |
--open | 生成后打开浏览器 |
--from NODE | 从指定节点续跑该节点及下游,上游从 --job-dir 加载 |
--job-dir DIR | --from 续跑时必填,指向上次 job 目录 |
| 情况 | 行为 |
|---|---|
| 输入文件不存在 | 预检失败,退出码 3 |
--voice 非法 | bad_voice 错误,退出码 3 |
--rate 非数字 | bad_rate 错误,退出码 3 |
| edge-tts 合成失败 | 单段失败跳过,日志 ⚠️ 失败,不中断整体 |
match 缺 onnxruntime | no_onnxruntime 错误,退出码 1 |
--from 未配 --job-dir | 退出码 3 |
用户提到「博客转演示」「逐行披露 HTML」「博客配音」时使用本 skill:
python3 scripts/run.py preview <input.md> <output.html> --openpython3 scripts/run.py tts <input.md> <work_dir> --open--from match --job-dir <上次job> 续跑scripts/narrator_core.pyscripts/flow.py;节点实现:scripts/nodes/scripts/run.py、scripts/common.py