把录音(+PPT)→ 单页精排 HTML 洞察。本 skill 只负责”内容提炼 + 排版生成”,转写交给上游。
输入(缺啥问啥,见末尾「输入契约」):
录音 或 转写稿 或 纪要(三选一即可,按可得性)。活动元信息:标题、讲者、主办、地点、时长、日期。直播/相册链接(可选,挂在首部)。PPT:幻灯片照片(图片 URL / 本地文件)或 .pptx/.pdf 文件(可选,内嵌进正文)。输出:一个自包含的单文件 .html + 一份同名 .pdf(CSS 内联、可直接分享、移动端自适应、带”生成分享卡”功能;PDF 由 HTML 一键导出,见 ⑦——默认两种格式都产出)。
assets/styles.css = 整套视觉皮肤。逐字内联进产物的 <style>,不要改色板/字体/组件规则——风格一致性 100% 靠它。assets/skeleton.html = 页面外壳。复制它,填 <head> 与分享卡的 占位,把正文塞进。insight/luqi 那一页本身(本 skill 即从它反编译而来)。拿不准某模块长相时,对照它。本 skill 按模态自动分流:吃录音、读 PPT 这类多模态前段交给 Gemini;提炼与生成精排 HTML/SVG 留给运行本 skill 的宿主模型(如 Claude)——前者要”看懂世界”,后者要”写好代码与版式”。
| 阶段 | 交给谁 | 怎么调 |
|---|---|---|
| A 录音 → 转写 | Gemini(原生音频) | python3 scripts/transcribe_gemini.py <音频> > transcript.txt |
| B 读 PPT 图/视频 | Gemini(多模态视觉) | python3 scripts/read_slides_gemini.py <按序图...> > slides.json |
| C 提炼 + 生成 HTML/SVG | 宿主模型(你自己) | 不外包——这是质量命门,见下方流水线 ②–⑦ |
GEMINI_API_KEY 必填;GEMINI_MODEL 可选(默认模型名可能过时,按当前可用模型覆盖)。依赖:pip install -r scripts/requirements.txt。也可在项目根 .env 写 GEMINI_API_KEY / GEMINI_MODEL,脚本启动时自动加载(.env 已在 .gitignore 中,真实 env 优先)。thinking_budget=0 防止思考 token 吃光输出、上传后等 ACTIVE 再生成、并对中文文件名做 ASCII 兜底。逐字稿超 ~2 小时易撞 65k 输出上限:要”摘要/详述”就直接让模型出结构化纪要(绕开上限);要”逐字稿”优先用专用 ASR。get_transcript/get_note,或任意可用 ASR。scripts/transcribe_gemini.py 得转写稿;无 Gemini 则回退 Plaud get_transcript/get_note 或其它 ASR。已直接给转写稿/纪要就跳过本步。.pptx/.pdf 先逐页导出为图片;连同照片按播放顺序喂 scripts/read_slides_gemini.py 得 slides.json(每张含 summary / ocr_text / suggested_section / caption / render_hint)。无 Gemini 则由宿主模型自己看图。从素材里抽出:
<strong> 加粗)→ .thesis。.quotes-block。.tags-row。“延展”分两类,先做第一类:
WebSearch / WebFetch,或带联网的 OpenRouter 模型)查证,产出带真实链接的「延伸阅读 · 关联」——创作背景、权威评论、影视/舞台改编、理论出处、相关作品。每条都要有可点击来源。复制 skeleton.html,填这些占位:
(栏目/出版方名,顶栏 + og + 分享卡共用)、(分享卡副标语)、(分享卡方块 logo 里的单字)、(顶栏返回链接,无则 #)、``(二维码下网址)。不要再硬编码任何具体品牌名。 。 ``。按下面「版面语法」组织,每节用「模块目录」里的片段。对照「质量基线」自查。
slides.json)suggested_section 把图插到对应小节;caption 直接填进 figcaption(补图号);ocr_text 用于精确制图 / 引用幻灯片数字。render_hint=photo → 用 .fig / .fig-grid 放原图;render_hint=svg → 手写 <svg>(见 SVG 指南)重画成矢量概念图,不用图表库;both → 先 SVG 提炼逻辑、再 .fig 附原图佐证,并配「查看 PPT 原图 →」链接。.fig;需要被”重新结构化”的抽象框架用 SVG。styles.css 内容整段内联进 <head><style>…</style>(分享出去才不丢样式)。<h1>、所有 `` 已替换、移动端 600px 下网格塌成单列、每张图都有 caption。slug.html(如 luqi.html),URL 形态 /insight/<slug>。node build/render_pdf.mjs <slug>.html → 生成同名单页连续版 <slug>-纪要.pdf(printBackground 保留暖纸底色与配色,自动隐藏顶栏/分享浮层,SVG/卡片不被分页截断);加 --a4 出 A4 分页版供打印。依赖 puppeteer-core + 本机 Chrome(与切卡片同环境)。§ 章节头(.sec-head) → 导语(.sec-intro) → 一个模块(列表/图表/卡片/表/SVG/.fig)
全文开头是「首部块」,结尾是「金句 → 分隔线 → 延展 → 标签 → 页脚」。模块之间留白靠各自 margin,不要堆纯 <p>。
首部块(BODY 最前;含直播链接与 thesis)
<div class="meta-label"> · · </div>
<h1 class="page-title"><br></h1>
<div class="event-chips">
<span class="ev-chip"></span><span class="ev-chip"></span>
<span class="ev-chip"></span><span class="ev-chip"></span><span class="ev-chip"></span>
</div>
<!-- 首部直播/相册链接(可选)-->
<a class="gallery-link" href="" target="_blank" rel="noopener">▷ 活动图片直播 →</a>
<blockquote class="pull-quote">
<div class="pull-quote-text"></div>
<div class="pull-quote-attr">— · · </div>
</blockquote>
<p class="thesis"></p>
章节 + 要点列表(最常用)
<div class="sec-head"></div>
<p class="sec-intro"></p>
<ul class="pts">
<li><strong></strong>:</li>
</ul>
PPT 幻灯片图片(单张 / 两栏)
<figure class="fig">
<img src="" alt="" loading="lazy">
<figcaption class="fig-cap"><span class="n">图 1</span></figcaption>
</figure>
<div class="fig-grid">
<figure class="fig"><img src="" alt=""><figcaption class="fig-cap"><span class="n">图 2</span>…</figcaption></figure>
<figure class="fig"><img src="" alt=""><figcaption class="fig-cap"><span class="n">图 3</span>…</figcaption></figure>
</div>
编号时间线 / 范式列表(讲”演进/分代”用)
<div class="paradigm-list">
<div class="paradigm-item">
<div class="para-num">01</div>
<div>
<div class="para-era"></div>
<div class="para-title"></div>
<div class="para-desc"></div>
<span class="para-tag"></span>
</div>
</div>
</div>
纯 CSS 条形图(比较量级/距离/占比,不必精确)
<div class="dist-chart">
<div class="dist-row">
<div class="dist-era"></div>
<div class="dist-bar-wrap"><div class="dist-bar" style="width:100%"></div></div>
<div class="dist-label"></div>
</div>
</div>
矩阵卡片(风险/步骤/分类,2 列).risk-matrix
<div class="risk-matrix">
<div class="risk-cell">
<div class="risk-num"></div>
<div class="risk-title"></div>
<div class="risk-desc"></div>
</div>
</div>
人物卡(案例人物,2–3 列).person-grid
<div class="person-grid">
<div class="person-card">
<div class="pc-name"></div>
<div class="pc-thesis"></div>
<div class="pc-impact"></div>
</div>
</div>
行动条目(大编号的”怎么做”).action-three
<div class="action-three">
<div class="action-item">
<div class="action-num">01</div>
<div class="action-content">
<div class="action-title"></div>
<div class="action-desc"></div>
</div>
</div>
</div>
数据表(公司/清单/对照).portfolio-table
<table class="portfolio-table">
<thead><tr><th></th><th></th><th></th></tr></thead>
<tbody>
<tr><td></td><td></td><td class="hi"> <span class="badge"></span></td></tr>
</tbody>
</table>
公式/口号块(一句被反复引用的核心式子).formula-block
<div class="formula-block"><br><br></div>
年代线(时间相变事件).epoch-line
<div class="epoch-line">
<div class="epoch-item">
<div class="ep-year"></div>
<div class="ep-event"><strong></strong>—— <span class="ep-marker"></span></div>
</div>
</div>
过去→未来对比.vibe-compare(左旧 / 中箭头 / 右新)
<div class="vibe-compare">
<div class="vc-col vc-past"><div class="vc-col-title"></div>
<div class="vc-item"></div><div class="vc-item"></div></div>
<div class="vc-arrow">过 去 ─→ 未 来</div>
<div class="vc-col vc-future"><div class="vc-col-title"></div>
<div class="vc-block"><div class="vc-bname"></div><div class="vc-bsub"></div></div></div>
</div>
金句块(结尾前,8–12 条逐字金句).quotes-block
<div class="quotes-block">
<div class="quotes-label">金句</div>
<div class="quote-item"></div>
</div>
延展块(先检索关联、再编辑推演;见流水线 ③)
<hr class="divider">
<div class="ext-head">§ 延展 · 延伸与关联</div>
<!-- A. 延伸阅读·关联:联网检索得来,必须带真实链接 -->
<div class="ext-block">
<div class="ext-block-title">延伸阅读 · 关联</div>
<ul>
<li><strong></strong>: <a href="" target="_blank" rel="noopener">来源 →</a></li>
</ul>
</div>
<!-- B. 编辑推演:显式标明是编辑视角 -->
<div class="ext-block">
<div class="ext-block-title"></div>
<p></p>
<ul>
<li></li>
<li class="q"></li>
</ul>
</div>
标签 + 页脚(全文末尾;品牌走 ``,可留空)
<div class="tags-row"><span class="tag"></span></div>
<footer>
<div></div>
<div> · · · · </div>
<div>活动图片直播:<a href="" target="_blank" rel="noopener">查看完整现场影像</a></div>
<div>本页内容为整理,非演讲方官方发布 · <a href="">返回</a></div>
</footer>
用来把抽象关系重新结构化(不是放照片)。统一外壳:
<div class="impact-chart-wrap">
<div class="impact-chart-title"></div>
<div class="impact-chart-sub"></div>
<svg viewBox="0 0 540 240" class="impact-svg" preserveAspectRatio="xMidYMid meet"> … </svg>
<div class="impact-chart-caption"></div>
</div>
styles.css 已备好这些文字样式钩子,挑对应图型直接用:
.axis-label .axis-title .curve-label .curve-label-sm(面积积分图、成长曲线).tri-label .tri-sub .tri-center(如”三位一体”).funnel-title .funnel-input .funnel-name .funnel-desc .funnel-bottom.venn-label .venn-center .slope-title .slope-box-title .slope-plus .slope-arrow.flow-section .flow-role .flow-vibe .flow-cross .flow-fdx(角色框 + 箭头 <marker>).org-title .org-node .org-center .org-tag .org-conclusion.radar-label .radar-sub(多维评估)style="fill:var(--t)/var(--p)/var(--ink-2)" 直接上色(CSS 变量在 SVG 内有效)做法:手算坐标,<polygon>/<path>/<line>/<circle>/<text> 拼,箭头用 <defs><marker>,配色沿用墨绿 --t/蓝 rgba(82,150,200,…)/紫 --p。坐标拿不准时,直接照搬参考页里同型图的数值再改文字。
ul.pts);正文每 2–3 个区块就穿插一个视觉模块或 pull-quote 调节奏,向参考页 luqi 的密度看齐。<h1>;占位符忘了替换。<p>——每节都要落到一个模块。ul.pts、零 SVG——视觉单调,不达「质量基线」。