with one click
epub2podcast-standalone
// 可独立运行的 standalone 版 EPUB2Podcast:用户只需下载当前项目本身,即可在本地把 EPUB 转成 Smart Slide + 双人中文音频 + 最终 MP4 视频播客。
// 可独立运行的 standalone 版 EPUB2Podcast:用户只需下载当前项目本身,即可在本地把 EPUB 转成 Smart Slide + 双人中文音频 + 最终 MP4 视频播客。
Use when generating PPT-style image slides, poetic presentation covers, quiet paper-texture visual pages, report pages, invitations, social cards, or slide-image sets with GPT-Image-2 via image_generate.
Use when generating high-readability hand-drawn knowledge diagrams, architecture diagrams, workflow maps, or consulting-style visual explanations with GPT-Image-2 via image_generate.
可独立运行的 GPT-Image 增强版 EPUB2Podcast:在本地把 EPUB 转成双人中文音频、GPT-Image/Smart Slide 视觉页、最终 MP4,并生成 YouTube 发布素材。
【Ark Agent Plan 专用版本】EPUB 转双人中文播客视频流水线:使用火山引擎 TTS(与 Seedream/Seedance 共享技术栈),Smart Slide + 双人音频 + 最终 MP4 视频,无需额外 Google/OpenRouter API Key。
【Ark Agent Plan 专用版本】Manim 数学/算法讲解视频完整流水线,使用火山引擎 TTS 中文旁白(与 Seedream/Seedance 共享认证)。Plan → TTS → Code → Render → Stitch → Deliver. 适用于:Manim 动画 + 中文配音、音画同步讲解视频、3Blue1Brown 风格教学视频。
【Ark Agent Plan 专用版本】基于 Remotion 的英文词汇视频自动化生成流水线。输入一个英文单词,自动完成:诊断、火山引擎 TTS 音频(与 Seedream/Seedance 共享认证)、节奏分割、视频渲染、飞书上传和成本汇报。
| name | epub2podcast-standalone |
| description | 可独立运行的 standalone 版 EPUB2Podcast:用户只需下载当前项目本身,即可在本地把 EPUB 转成 Smart Slide + 双人中文音频 + 最终 MP4 视频播客。 |
| version | 0.1.0 |
| author | Hermes Agent |
| license | MIT |
| platforms | ["linux"] |
| metadata | {"hermes":{"tags":["epub","podcast","smart-ppt","smart-slide","tts","video","mp4","standalone"]}} |
这个 skill 对应的是 standalone 版本 的 epub2podcast 管线。用户只需要下载当前项目本身,就可以把 EPUB 转成:
full_podcast.mp3final_podcast.mp4EPUB2PODCAST_PROJECT_ROOT)language=ChineseimageStyle.preset=smart_pptimageStyle.colorTheme=gq_fashionimageStyle.pptModel=google/gemini-3-flash-previewapiProvider=openroutertextModel=gemini-3-flashvolcenginesmart_ppt / antv_infographic 模式,脚本生成现在会同时启用:
当前机器需要:
注意:本公开版 skill 不会包含任何真实 API key、token、secret 或私有凭证;相关环境变量需由使用者自行提供。
主命令:
epub2podcast-local-runepub2podcast-local-regenerate-slide(只重生某一页,可选自动重合成 mp4)epub2podcast-local-compress-feishu-video(把最终 mp4 压到更适合飞书上传的体积)epub2podcast-local-run --epub ./book.epub
epub2podcast-local-run --epub ./book.epub --output-dir ./deliveries
epub2podcast-local-run \
--epub ./book.epub \
--output-dir ./deliveries \
--color-theme gq_fashion \
--ppt-model google/gemini-3-flash-preview \
--text-model gemini-3-flash
epub2podcast-local-regenerate-slide \
--delivery-dir /path/to/delivery \
--slide-index 0 \
--recompose \
--color-theme gq_fashion \
--ppt-model google/gemini-3-flash-preview
说明:
--slide-index 0 用于首页/封面页metadata/book.json 中的 coverImageBase64 落地到本地 assets/cover.*,并通过本地 HTTP 临时地址喂给 Puppeteer 渲染--recompose 会基于现有 full_podcast.mp3 + smart_slides/*.png 重写 final_podcast.mp4--recompose 时,只更新指定页的 PNG 和 HTMLepub2podcast-local-compress-feishu-video \
--input /path/to/final_podcast.mp4 \
--output /path/to/final_podcast_feishu.mp4
默认压缩策略:
libx264-preset medium-crf 27-maxrate 2200k -bufsize 4400kaac -b:a 96k适用场景:
lark-cli drive +upload 因 20MB 限制无法上传最终 mp4 时*_feishu.mp4,再上传到用户指定的飞书云盘文件夹输出目录通常包含:
source/audio_segments/smart_slides/smart_slides_html/metadata/book.jsonmetadata/script.jsonmetadata/marketing.jsonfull_podcast.mp3final_podcast.mp4manifest.json默认视频合成为 4:3 的 1440x1080(保持当前 slide 比例不变,不拉伸到 16:9)。
不要把交付目录默认放在 /tmp。
原因:
/tmp 下的 delivery 目录可能在会话后被清理推荐使用持久目录,例如:
./deliveries/epub2podcast-local
lark-cli drive +upload 当前路径对单文件有 20MB 限制。
这意味着:
full_podcast.mp3、封面图、单张 slide 通常可直接上传final_podcast.mp4 若超过 20MB,可能上传失败典型错误:
file 23.9MB exceeds 20MB limit
遇到这种情况时:
mp3 / cover / 首图 / manifest / metadata针对 smart_ppt / antv_infographic 模式,当前本地管线已经补上三层保障,用于避免“只生成 6-7 分钟短播客、只覆盖书前半部分”的问题:
长书输入覆盖
更严格的 smart_ppt 约束
18-22 段3200 中文字符,推荐更高)硬校验 + 自动重试
18-2210 分钟在《十件古物中的丝路文明史》样本上:
13 段,约 6分39秒18 段,约 14分10秒因此,当用户反馈“播客太短”时,优先检查是否走到了上述新逻辑;如果没有,先同步代码或重建产物,再重新运行。
如果用户反馈:
final_podcast.mp4 第一页右侧没有封面优先按下面顺序排查:
metadata/book.json 是否存在 coverImageBase64
smart_slides_html/000.html
<img class="book-cover" ...><img src="data:image/...;base64,...">,但最终 PNG / MP4 里看不到封面,说明问题出在 HTML -> Puppeteer 渲染链路。在当前这套 local 管线里:
<img src> 不够稳<img>page.setContent() 后,最终 DOM/截图里封面消失这会导致:
smart_slides_html/000.html 看起来有封面代码smart_slides/000.png 和最终 mp4 却没有封面把 local 管线进一步稳固:
coverImageBase64 传给第一页 prompt推荐优先级:
http://.../cover.jpgdata:image/...;base64,...若要快速确认是不是这个问题:
smart_slides/000.png,确认右侧是否空白smart_slides_html/000.html 是否仍然包含 <img><img>、最终图片无封面,基本就能锁定为 local 首屏封面资源引用方式不对如果用户反馈:
优先检查以下几点:
metadata/script.json 的段数与总文本量
12-13 段、总文本很短(例如 2000 多中文字符),最终时长通常会落到 6-8 分钟src/services/scriptService.ts 的真实验收逻辑
200000 字符送入模型,长书就容易只覆盖前半本内容,覆盖度和时长都会受影响当用户说“播客应该至少 10 分钟,为什么这么短”时,优先怀疑:
而不是优先怀疑:
18-22当用户说:
优先使用本 skill。