Summary
把一篇技术长文/论文解读自动做成章节式解说视频(1080p, 5-8 分钟)。双主题:warm(奶油底+珊瑚红+cozy-handdrawn 透明插图,亲和感)和 midnight(深蓝黑底+琥珀金+宋体标题+executive-tech 插图,AI 科技感),storyboard 一个 theme 字段切换。每章三种 layout 混排:illustration(左文右图+Ken Burns)/grid(卡片网格逐块?
lqshow/linyuebanzi-skills
把一篇技术长文/论文解读自动做成章节式解说视频(1080p, 5-8 分钟)。双主题:warm(奶油底+珊瑚红+cozy-handdrawn 透明插图,亲和感)和 midnight(深蓝黑底+琥珀金+宋体标题+executive-tech 插图,AI 科技感),storyboard 一个 theme 字段切换。每章三种 layout 混排:illustration(左文右图+Ken Burns)/grid(卡片网格逐块?
npx skills add lqshow/linyuebanzi-skills --skill linyuebanzi-article-video
把一篇技术长文/论文解读自动做成章节式解说视频(1080p, 5-8 分钟)。双主题:warm(奶油底+珊瑚红+cozy-handdrawn 透明插图,亲和感)和 midnight(深蓝黑底+琥珀金+宋体标题+executive-tech 插图,AI 科技感),storyboard 一个 theme 字段切换。每章三种 layout 混排:illustration(左文右图+Ken Burns)/grid(卡片网格逐块?
Other skills from lqshow/linyuebanzi-skills.
npx skills add lqshow/linyuebanzi-skills
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
main
Files included with this skill beyond the listing page.
SKILL.md
10,548 B
SUMMARY.md
989 B
输入一篇技术长文(或一个可展开的主题) → 输出 1080p 章节式解说 MP4:
- illustration(默认): 左栏标题+要点卡+术语标签, 右栏 AI 插图(全章 Ken Burns 缓推缓拉) - grid: 右栏换成卡片网格, 每块跟旁白逐个长出来(步骤/对比/清单类章节用, 信息感强) - statement: 无右栏, 全屏大字判断句(≤3 句的短促章节用, 做呼吸点) - terminal: 右栏 macOS 风格终端窗口, 命令逐行打字机入场(讲 CLI 的章节用; HTML 直接渲染, 命令绝不会错字) - 底部逐句字幕 + 章节进度条 + 右上灰色大章号全 layout 通用 - 8-10 章里建议 2-4 章用 grid/statement, 全片全是大图会拖节奏, 完播率差
# 0. 写分镜 (必读 references/storyboard-guide.md)
# 读文章 → <project_dir>/storyboard.json: 每章 kicker/headline/subhead/card/tags/
# narration(句子数组)/illustration.brief。分镜质量决定成片质量。
# 1. 插图 (需要 MULERUN_API_KEY; 三个脚本跨 skill 复用)
python3 scripts/make_manifest.py <project_dir> # → diagrams.json
python3 ../linyuebanzi-inline-diagram/scripts/inject_style.py \
--style cozy-handdrawn --manifest <project_dir>/diagrams.json # → diagrams-styled.json
python3 ../linyuebanzi-image-gen/scripts/generate.py \
--manifest <project_dir>/diagrams-styled.json \
--output-dir <project_dir>/images --parallel # → images/ch-NN.png
# 1b. 插图去底 (需要 Pillow) — 抠掉纯色背景, 透明 PNG 浮在页面上, 换背景直接兼容
python3 scripts/strip_background.py <project_dir>/images # 原图备份到 images/raw/
# 2. 逐句 TTS (需要 MINIMAX_API_KEY; 无 key 用 --provider say 预览)
python3 scripts/tts_pipeline.py <project_dir> # → audio/ + timeline.json
# 3. 合成 index.html (全数据驱动, 不需要手写场景)
python3 scripts/scaffold.py <project_dir> # → index.html
# 4. 出片
bash scripts/build.sh <project_dir> # → renders/<name>.mp4 + 蒙太奇
注意 inject_style.py / generate.py 的路径按实际 skill 安装位置解析(它们分别属于 linyuebanzi-inline-diagram 和 linyuebanzi-image-gen)。
环境: Node.js ≥22 + ffmpeg (npx hyperframes doctor 自检); MULERUNAPIKEY(插图) + MINIMAXAPIKEY(配音)。
theme 字段)| theme | 视觉 | 插图策略 |
|---|---|---|
warm(默认) |
奶油纸底 + 珊瑚红 + 粉彩 | cozy-handdrawn + 去底(透明浮空) |
midnight |
深蓝黑底 + 琥珀金 + 宋体大标题(AI 科技风) | executive-tech + 不去底(暗色相框) |
同一份分镜改 theme 字段即可换肤, 版式/动画/时间轴全部继承。差异只在第 1 步:
injectstyle.py --style cozy-handdrawn → 生图 → stripbackground.pyinject_style.py --style executive-tech → 生图 → 跳过去底(黑线手绘在深底上看不见, 深色设计图自带底色, 直接入框)加新主题: 模板里复制一个 body[data-theme="..."] 变量块 + 选一个 inline-diagram 风格, 十分钟的事。
默认男声 male-qn-jingying(LQ 是男博主), 语速 1.05。在 storyboard.json 的 voice 块改。
用自己的声音: Minimax 支持声音克隆, 一次克隆终身可用:
# 录一段 10s~5min 的干净人声 (安静环境、无 BGM、自然语速, 3 分钟左右最佳)
python3 scripts/clone_voice.py my-voice.m4a --voice-id LQvoice2026 \
--preview-text "大家好,我是林月半子。"
# 完成后把 voice_id 填进 storyboard.json 的 voice.voice_id
注意: 克隆音色首次合成时 Minimax 收一次性费用; 克隆声音只能用于本人授权的内容。
时间轴常量在 ttspipeline.py 顶部: HEADPAD 0.7 / GAP 0.18 / TAIL_PAD 0.75。 右侧插图全章做 Ken Burns 缓推缓拉(奇偶章交替方向), 画面不会死停。 如果还嫌慢: 先提 voice.speed(1.05→1.15), 再砍 narration 句数, 不要去动模板动画时长。
narration 写成句子数组,每句单独 TTS。得到的句级时间轴同时驱动三件事:
at: N 表示该条目在第 N 句开口时入场--skip-existing,删掉对应 mp3 再跑| 改了什么 | 重跑什么 |
|---|---|
| 某句旁白 | 删对应 audio/ch-NN-sNN.mp3 → tts_pipeline.py --skip-existing → scaffold.py → build.sh |
| 某章插图 | 改 storyboard 的 brief → make_manifest.py → 注入+生成(只留要重跑的 item) → 直接 build.sh |
| 卡片/标题文案 | scaffold.py → build.sh(不用重跑 TTS) |
| 增删章节/句子 | 全链路重跑 (时间轴变了) |
{
"topic": "j-lens",
"title": "AI 没说出口的想法,第一次被直接读到了",
"voice": { "provider": "minimax", "voice_id": "female-chengshu", "speed": 1.0 },
"chapters": [
{
"id": 1,
"kicker": "开场 / AI 黑箱",
"headline": ["AI 没说出口的想法", "第一次被直接读到了"],
"subhead": "Anthropic 的 J-lens,正在把模型内部的沉默概念变成可读信号",
"card": {
"title": "先记住这件事",
"items": [
{ "label": "以前", "text": "只能看 AI 说了什么", "at": 2 },
{ "label": "现在", "text": "开始能看它没说什么", "at": 4, "bar": 0.7 }
]
},
"tags": ["J-space", "J-lens", "silent thoughts"],
"narration": [
"你大概会把自己跟AI的聊天记录翻出来,看看它到底说了什么。",
"但你看到的,永远只是它说出口的那部分。"
],
"illustration": {
"id": "ch-01",
"brief": "{插图内容提示词, 不含风格前缀, 写法见 storyboard-guide}"
}
}
]
}
<project_dir>/
├── storyboard.json # 分镜 (人工可改的唯一事实源)
├── diagrams.json # 插图 manifest (make_manifest 产物)
├── diagrams-styled.json # 注入 cozy-handdrawn 后
├── images/ch-NN.png # 每章插图
├── audio/
│ ├── ch-NN-sNN.mp3 # 每句配音
│ └── timeline.json # 章节+句级时间轴
├── index.html # scaffold 产物 (勿手改, 改 storyboard 重新 scaffold)
├── renders/<name>.mp4 # 成片
└── preview/montage.png # 每章中点蒙太奇 (渲染后必看)
build.sh 内置 lint + validate;lint 必须 0 errorpreview/montage.png: 每章有没有空插图/文字溢出/标题换行难看| 现象 | 对策 |
|---|---|
| 插图把风格词画成了画面文字(实测 "wobble" 出现在图里) | brief 里不要出现英文形容词式描述;发现后改 brief 重跑该张 |
| LQ 形象服装在多张图间漂移(灰T/紫T/黑T) | brief 里统一写死 "LQ 形象穿灰色T恤";一个视频 8-10 张连续出场比文章插图更显眼 |
| Minimax 逐句调用容易撞 RPM 限流 | tts_pipeline.py 已内置 1002 限流 21s 退避,正常现象,等它自己跑完 |
<audio> 没有 id 渲染时静音 |
scaffold.py 已自动生成 id,手改 index.html 时别删 |
| 去底把插图里的近白面板一起抠掉 | 泛洪只抠与边缘连通的色块;插图里若有大块 ≈背景色 的面板会被吃掉。brief 里给面板明确写粉彩底色(蓝/绿/紫/橙),或对个别图 --tolerance 12 重跑 |
| 本机代理(127.0.0.1:8899)自签证书导致 Minimax TLS 失败 | 脚本已默认绕过系统代理;需要走代理 export MINIMAXUSEPROXY=1 |
assets/template/index.html — 数据驱动 HyperFrames 模板(占位符由 scaffold.py 填充)scripts/make_manifest.py — storyboard → 插图 manifestscripts/tts_pipeline.py — 逐句 Minimax TTS + 时间轴scripts/scaffold.py — 合成 index.htmlscripts/build.sh — lint + render + 蒙太奇references/storyboard-guide.md — 分镜拆解规范(第 0 步必读)linyuebanzi-inline-diagram(风格注入) + linyuebanzi-image-gen(生图)