with one click
epub2podcast-gpt-image
// 可独立运行的 GPT-Image 增强版 EPUB2Podcast:在本地把 EPUB 转成双人中文音频、GPT-Image/Smart Slide 视觉页、最终 MP4,并生成 YouTube 发布素材。
// 可独立运行的 GPT-Image 增强版 EPUB2Podcast:在本地把 EPUB 转成双人中文音频、GPT-Image/Smart Slide 视觉页、最终 MP4,并生成 YouTube 发布素材。
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.
可独立运行的 standalone 版 EPUB2Podcast:用户只需下载当前项目本身,即可在本地把 EPUB 转成 Smart Slide + 双人中文音频 + 最终 MP4 视频播客。
【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-gpt-image |
| description | 可独立运行的 GPT-Image 增强版 EPUB2Podcast:在本地把 EPUB 转成双人中文音频、GPT-Image/Smart Slide 视觉页、最终 MP4,并生成 YouTube 发布素材。 |
| version | 0.2.0 |
| author | Hermes Agent |
| license | MIT |
| platforms | ["linux"] |
| metadata | {"hermes":{"tags":["epub","podcast","smart-ppt","smart-slide","gpt-image","youtube","tts","video","mp4","standalone"]}} |
这个 skill 对应的是 GPT-Image 增强 standalone 版本 的 epub2podcast 管线。旧的 Smart Slide 基础公开版保留在 epub2podcast/。用户只需要下载当前项目本身,就可以把 EPUB 转成:
full_podcast.mp3final_podcast.mp4EPUB2PODCAST_PROJECT_ROOT)language=ChineseimageStyle.preset=smart_pptimageStyle.colorTheme=gq_fashionimageStyle.pptModel=deepseek/deepseek-v4-flashapiProvider=openroutertextModel=deepseek-v4-flashvolcenginesmart_ppt / antv_infographic 模式,脚本生成现在会同时启用:
当前机器需要:
注意:本公开版 skill 不会包含任何真实 API key、token、secret 或私有凭证;相关环境变量需由使用者自行提供。
主命令:
node dist/cli/run.js 或 bash scripts/epub2podcast_local_run.shnode dist/cli/generate-gpt-images.js(对已有 delivery 生成 GPT-Image 视觉页,可选重合成 mp4)node dist/cli/regenerate-slide.js(只重生某一页,可选自动重合成 mp4)node dist/cli/compress-video.js(把最终 mp4 压到更适合上传的体积)python3 scripts/publish_podcast_site.py(生成 YouTube 发布交接页)node dist/cli/run.js --epub ./book.epub
node dist/cli/run.js --epub ./book.epub --output-dir ./deliveries
node dist/cli/run.js \
--epub ./book.epub \
--output-dir ./deliveries \
--color-theme gq_fashion \
--ppt-model deepseek/deepseek-v4-flash \
--text-model deepseek-v4-flash
node dist/cli/regenerate-slide.js \
--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 和 HTMLnode dist/cli/compress-video.js \
--input /path/to/final_podcast.mp4 \
--output /path/to/final_podcast_feishu.mp4
node dist/cli/run.js \
--epub ./book.epub \
--output-dir ./deliveries \
--visual-mode gpt-image-slide \
--image-density segment \
--resolution 1440x1080
如果已有 delivery,只想补生或重生 GPT-Image 视觉页:
node dist/cli/generate-gpt-images.js \
--delivery-dir /path/to/delivery \
--recompose
metadata/marketing.json 会包含 title、description、thumbnailPrompt。如果 delivery 目录里已有 youtube_thumbnail.png/.jpg,发布脚本会优先原样使用该封面,不裁切、不补边。
python3 scripts/publish_podcast_site.py \
--delivery-dir /path/to/delivery \
--output-root ./published-podcasts
默认压缩策略:
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/gpt_image_slides/(使用 GPT-Image 模式时)gpt_image_raw/(使用 GPT-Image 模式时)metadata/book.jsonmetadata/script.jsonmetadata/marketing.json(YouTube 标题、description、缩略图 prompt)full_podcast.mp3final_podcast.mp4manifest.json默认视频合成为 4:3 的 1440x1080(保持当前 slide 比例不变,不拉伸到 16:9)。
metadata/marketing.json.description。[MM:SS] Topic / MM:SS 主题;不要把对应台词直接贴上去。visualPrompt 的标题、字幕、关键句或结构化 【标题】... 中提取,缺失时再生成中性的章节标签。细节见:references/youtube-marketing-description.md。
不要把交付目录默认放在 /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。