blender-motion-state-inspection
AFaffaan-m/ECC278k近 7 天新增 4,046 个 star
把一道化学题做成 16:9、1920×1080、带中文配音 + 中英双语字幕 + 黑板粉笔风格动画的 MP4。流水线与 edu-math-video / edu-physics-video 相同(配音、字幕、检查、渲染),区别在解题方法和画面:
script.json ──build_audio.py──► build/timeline.json + build/mix.wav + ../<name>.srt
(旁白) (GLM-TTS + 合成音乐) │
anim.js + chem.js + engine.js ◄───────────────┘ (按旁白时间点驱动动画)
└──node render.mjs video──► ../<name>.mp4
核心原则:方程式在讲题,守恒被"数"出来。 每句旁白都有一个动作把这句化学推理演出来;所有比例、数量都从配平后的方程式取(系数飞出去成为比例 / 转化量);每个动画用 S.at(k, f) 定时,绝不写死秒数。
本技能自带全部代码,不要从别的项目复制文件:
template/:可直接运行的完整示例(铜与稀硝酸:标化合价 → 电子守恒配平 → 双线桥 → 物质的量计算 → 区分被还原的硝酸)。engine.js 通用引擎(黑板主题 + 方程式条版面,不改),chem.js 化学道具库(化学式自动下标、equation、valence、bridge、eFlow、tally、molMap、iceTable、molecule、particles、beaker、graph),anim.js / script.json / episode.json / storyboard.md / problem.png 每道题重写。examples/equilibrium/:化学平衡完整示例(三段式、分子盒按比例反应、c-t 曲线、K、转化率)。平衡 / 速率题先读它。scripts/chem_check.py:零依赖的方程式配平与核对(系数、原子 / 电荷守恒、摩尔质量),第 1 步必用。shared/pron.py + shared/pron.json:读音控制,已收录化学常见多音词(还原、反应、物质的量、足量、化合价、转化率……)和元素名。scripts/:另有 new_video.sh、setup_check.sh、make_problem_png.py(化学式、单位不会被折行拆开)、problem_boxes.py、contact_sheet.py。下文 SKILL = 本文件所在目录,WS = 用户当前所在的目录($PWD):视频文件夹建在这里,mp4/srt 也输出到这里。不要因为别的目录已经有 .env、node_modules、pron.json 就把 WS 换过去。PROJ = 本视频文件夹,PY = setup_check.sh 报告的 python(macOS 一般是 /usr/bin/python3)。
退出码不是 0 就是没完成。 --check 退出码 1(哪怕只剩一个 ⚠ 多音字)、motion 退出码 1、chem_check.py check 退出码 1、截图有问题,都要修好再往下走。
chem_check.py 核对。tts 只能是能念出来的中文,化学式一律换成名称。 HNO3 → 硝酸,SO4^{2-} → 硫酸根离子,0.2 mol·L^{-1} → 零点二摩尔每升,+5 → 正五价(对照表见 reference/script-writing.md)。字幕 zh 照常写化学式(Cu(NO3)2、Fe^{3+}),会自动排成下标 / 上标。--check 必须显示 未固定读音的生僻字/多音字: 0 且 script errors: 0。标注写在字后面:还[huán]原、盛[chéng]有。GLM_API_KEY 时先问用户:配置 key(推荐),还是用兜底引擎(edge-tts / macOS say,见 reference/glm-tts-setup.md)。不要编造 key、模型名或接口地址,不要打印 key。eqStrip + equation(spec, 960, EQY));演示区 x 60board() + bm()(第 0storyboard.md 顶部写解题卡 + 图形清单,每句规划"指/动/留",按 reference/visual-design.md 的化学动作表选动作;node render.mjs motion 必须通过。--preview + stills auto),看图验证(每次都打开 build/sheet*.png,汇报你实际看到了什么)。engine.js;通用化学道具加在 chem.js,只属于这道题的图形写在 anim.js。不要把 node_modules、package*.json 复制进视频文件夹。读 reference/chemistry-solving.md。写下:反应类型与限量物质;方程式及配平过程(氧化还原:变价元素、升降数、最小公倍数);已知量与所求量之间的关系(系数比 / 守恒 / 关系式);以 n 为中心的每一步计算(单位带着);平衡题的三段式;守恒验算与易错点。
PY SKILL/scripts/chem_check.py balance "Cu + HNO3 -> Cu(NO3)2 + NO + H2O"
PY SKILL/scripts/chem_check.py check "3Cu + 8HNO3 = 3Cu(NO3)2 + 2NO + 4H2O"
chem_check.py 通过;能用 4~7 幕讲完。bash SKILL/scripts/new_video.sh "$PWD" <ascii_folder_name>
bash SKILL/scripts/setup_check.sh WS/<ascii_folder_name>
new_video.sh 链接共享词表和已有的 node_modules;找不到才在 WS 下 npm install。python 包:PY -m pip install --user numpy requests pypinyin pillow。GLM_API_KEY:停下,按 reference/glm-tts-setup.md 引导用户(~/.config/math-problem-video/.env,三个视频技能共用)。用户没有 key:TTS_ENGINE=auto 自动兜底;装 edge-tts 前先征得同意。setup_check.sh 输出 ALL OK。cd PROJ && PY build_audio.py --say "你好,我们来看一道化学题。"
problem.png 和高亮框PY SKILL/scripts/make_problem_png.py --text "完整题目" --mark "条件1" ... --out PROJ/problem.png(化学式用 Unicode 下标 HNO₃ 显示更好;小问前用换行)。problem_boxes.py crop / grid / check(见 reference/animation.md)。*.preview.png / *.check.png,文字完整,框准确。episode.json 和 script.json按 reference/script-writing.md。幕的顺序照解题流程:intro 读题 → 方程式 / 化合价 → 配平 → (双线桥)→ 计算 / 三段式 → (复查、易错点)→ outro。每句 ≤ 36 字宽,一句一件事,数值带单位。
storyboard.md先读 reference/visual-design.md,按 template/storyboard.md 格式:顶部解题卡 + 图形清单(方程式、化合价、桥、计数、表格、分子盒……),再每句一行 | 幕id 句号 | 旁白要点 | 指 | 动 | 留 | 板书 |。"动"从化学动作表选,不能只写"出现/显示/高亮"。
cd PROJ && PY build_audio.py --check ; cat build/pron_report.txt
未固定读音的生僻字/多音字: 0 且 script errors: 0。anim.js先通读 template/anim.js,API 见 reference/animation.md(engine.js + chem.js 速查)。结构:PROBLEM、TAGS;化学常量区(方程式 spec、系数、用同样式子算出的数值,如 const N_NO = N_CU * 2 / 3);eqDraw();每幕 SC.<id>。
eqStrip(1) + 方程式(先 {p: 0} 取版面 → glow 提到的物质 → 正式画);演示区做动作;board() + bm() 写板书;答案 bbox + stamp。--check 无 ERROR。cd PROJ && PY build_audio.py --preview && node render.mjs motion && node render.mjs stills auto && PY SKILL/scripts/contact_sheet.py .
motion:STATIC 必须修,每幕至少一句 MOVE。build/sheet_*.png 逐张检查(审查清单):不重叠、不出界、桥和化合价不撞标签;化学正确:化合价、系数、桥、电子数、单位、分子数量。motion check passed;截图检查通过(逐幕说明你看到了什么)。cd PROJ && PY build_audio.py && PY build_audio.py --asr && node render.mjs stills auto && PY SKILL/scripts/contact_sheet.py .
mix + srt written;字母读错的句子: 0(无 GLM key 时 ASR SKIPPED,交付时说明);截图检查通过。cd PROJ && node render.mjs video 6 # 6 = 并行浏览器页数(不是帧率)
| 错误做法 | 正确做法 |
|---|---|
| 方程式没配平(或凭印象配平)就开始算 | 先 chem_check.py balance / check,系数进 anim.js 常量区 |
| 配平只讲"观察法",不讲为什么 | 氧化还原:标价 → 电子守恒定关键系数 → 原子守恒补全,每一步画出来 |
tts 写 HNO3、SO4^{2-}、mol/L | 硝酸、硫酸根离子、摩尔每升 |
| 双线桥连了不同元素 / 方向反了 | 双线桥连同种元素,从反应物指向生成物;失电子蓝、得电子红 |
| 被还原的硝酸 = 参加反应的硝酸 | 分清作用:被还原的 n = 生成 NO 的 n;画 2 + 6 分流 |
| K 用了物质的量 | 三段式后先除以体积得平衡浓度,再代入 K |
| 分子盒数量随便画 | 写明每个分子代表多少 mol,数量与三段式一致,按系数比转化 |
离子电荷写 Fe3+ | Fe^{3+}(否则 3 变成下标) |
| 双线桥标签撞到左上角标签 | 桥放到方程式下方(side: 1)或减小 h |
| 从别的视频文件夹复制代码 / 用物理或数学技能的 engine.js | 用本技能的 new_video.sh 建项目 |
编造 GLM_MODEL、接口地址 | 只需用户提供 GLM_API_KEY |
--check 还有 ⚠ 就调 TTS | 修到 0 |
| 渲染完不看画面就交付 | 每次都看 build/sheet*.png |
chem_check.py、把解变成画面的要求、常见题型的幕结构。第 1 步必读。script.json 格式、幕的设计、化学式 / 离子 / 单位的口语写法对照表。AFaffaan-m/ECC278k近 7 天新增 4,046 个 star
ANanthropics/skills181k近 7 天新增 1,119 个 star
SHShubhamsaboo/awesome-llm-apps141k近 7 天新增 808 个 star
HAharry0703/MoneyPrinterTurbo130k近 7 天新增 1,722 个 star
PApaperclipai/paperclip101k近 7 天新增 2,948 个 star