/** * aigc_report.mjs — AIGC 分镜拉片报告生成器(JSS-03) * 读取 aigc_remake.json + aigc_prompt.md → 产出 aigc_report.html(暗色/手机自适应/相对路径) * 纯 ESM, 零依赖。CLI: node aigc_report.mjs workdir */ import fs from "node:fs"; const esc = (s) => String(s ?? "").replace(/&/g, "&").replace(//g, ">").replace(/"/g, """); const fmtTs = (ms) => { const s = Math.floor(ms / 1000); return `${Math.floor(s / 60)}:${String(s % 60).padStart(2, "0")}`; }; function scoreBars(dims) { return dims.map((d) => `
画面: ${esc(s.caption)}
${s.lyric ? `音频: ${esc(s.lyric)}
` : ""} ${s.vision?.char ? `主体: ${esc(s.vision.char)}
` : ""} ${s.vision?.shot ? `运镜: ${esc(s.vision.shot)}
` : ""} ${s.vision?.style ? `风格: ${esc(s.vision.style)}
` : ""} ${s.vision?.aigc ? `AI痕迹: ${esc(s.vision.aigc)}
` : ""}| 段落 | 时间 | 类型 | 内容 |
|---|---|---|---|
| ${esc(s.name)} | ${s.start}s–${s.end}s | ${esc(s.type || "")} | ${esc(s.content || s.lyric || "")} |
${esc(promptMd)}
▸ ${esc(s)}
`).join("")}