v0.14: 截图美化素材迁移 + 散落改动归集

主线:从 PPT skill port 9 张截图舞台底 WebP,补齐 v0.11 当时只迁规则未迁素材的缺口。

新增
- assets/screenshot-backgrounds/style-a/ · 5 张 Editorial 底
  dune / forest-ink / indigo-porcelain / kraft-paper / monocle-classic
- assets/screenshot-backgrounds/style-b/ · 4 张 Swiss 底
  ikb-dot-gradient / lemon-green-dot-shadow / lemon-grid / safety-orange-halftone

模板
- template-editorial-card.html: 加 5 条 .frame-shot.bg-asset-* 规则
- template-swiss-card.html: 加 4 条 .frame-shot.bg-asset-* 规则
  两侧都带 fallback 实色,素材未加载时背景不透

文档
- screenshot-treatment.md: 新增 Solid vs Asset 小节 + 两张对照表 + 4 条 rules of thumb
  + 两条新 cheat-sheet recipe,明确路径假设与 accent 绑定
- HANDOFF.md: 版本号 v0.14,目录树加 screenshot-backgrounds/,
  写清"素材迁移不是规则迁移"的边界(未引入 PPT 原 7 参数语义系统)

顺带归集本轮工作期间累积的散落改动(PRODUCT/SKILL/category-cookbook/
components/content-planning/map-component/production-workflow/
qa-checklist/style-system/validate-social-deck)一并入库,避免长期挂在 dirty tree。
This commit is contained in:
郭浩 committed 2026-05-28 00:39:45 +08:00
1 parent 82d221bb90
commit bd1bb1e16d
23 files changed
+215 -90

No files matched your search

+7 -6
View File
@@ -177,7 +177,7 @@ v0.6-v0.11 都把 validator(`validate-social-deck.mjs`)写成"渲完必须
2. **重字号 + 重字重的标题**:Swiss 80-120px 配 weight 700 → 拒绝。"越大越细"是 Swiss 的内核。
3. **任意装饰 SVG**:blob、雨滴、kawaii 贴纸、随手画的圈 → 拒绝。
4. **嵌套卡片 / SaaS 拼盘**:默认布局不应该是"卡片里再放卡片" → 拒绝。
5. **裸跑图片压字**:照片占 ≥60% 画面但没加蒙版 → 拒绝。
5. **裸跑图片压字**:照片没有 quiet zone、标题压过主体,或缩略图不可读 → 拒绝;局部 tint 只是兜底,不是默认遮罩。
6. **假数据 / 假版本号 / 假报价** → 拒绝。
7. **一图复用到所有比例**:把 21:9 直接裁成 1:1 → 拒绝。两个比例必须分别构图。
8. **图上加教程说明**:键盘快捷键、操作步骤压在卡上 → 拒绝(教程内容写在 caption / 文案区)。
@@ -194,19 +194,20 @@ v0.6-v0.11 都把 validator(`validate-social-deck.mjs`)写成"渲完必须
1. **Editorial 模板的冒烟测试**。v0.6 只在 Swiss 上跑了真实小例子,Editorial 模板尚未做同样的硬化。预计会暴露 M14 纵向 Pipeline 5 步在 3:4 上的溢出,以及 M11 Marginalia Essay 的字号上限。下一轮优先做。
2. **校验脚本 `validate-social-deck.mjs`**。在 Step 5 渲染后自动跑:
- 检查每张图的 `scrollHeight` 是否超过 board 高度(v0.6 用 Playwright `evaluate` 验证过这个方法)
2. **校验脚本 `validate-social-deck.mjs`**。脚本已完成,默认作为用户要求 auto-check 时的兜底:
- 检查每张图的 `scrollHeight` 是否超过 board 高度
- 检查正文字号是否低于平台最小值
- 检查 `.poster.xhs` 上的 `.h-xl` 是否超过硬上限
把 "渲染前看不出来 / 渲染后才发现溢出" 这种坑用脚本兜底。
- 后续可补媒体左对齐 / browser-default margin 这类视觉漂移检查
把 "渲染前看不出来 / 渲染后才发现溢出" 这种坑用脚本兜底,同时不阻塞用户先看图。
3. **一次出多平台的"包"**。当前一篇文章如果同时要发小红书 + 公众号,要开两个任务文件夹各做一遍。可以做一个 `deck` 概念:一份 source content → 同时产出 **小红书 5-9 张 3:4 组图** + **公众号封面对(21:9 主图 + 1:1 方图,同一封面的两个尺寸)** → 一次渲染出全部 PNG。
关键设计点:避免把 21:9 内容直接缩到 1:1(产品决策 7 已禁止)。需要在 plan 阶段就为 21:9 写长标题、为 1:1 写一版短标题。
4. **1:1 短标题生成器(公众号封面对的同源短标题)**。21:9 主图用 "一周的代码 · 我和五个 AI 工具的同居生活",1:1 方图用 "AI 同居生活"。注意这是**同一篇文章的封面对**,不是组图——21:9 有水平空间放长标题,1:1 没有所以必须压短。当前两个尺寸的标题靠 AI 自由发挥,可以加一个明确的"6-8 字短标题"约束在 Step 2 的 plan 阶段。
5. **地图组件**。旅行类内容经常需要"路线图 + 关键节点"。Mapbox 静态 API 出图能用,但目前要 AI 现写代码调用。可以做成一个 `.map-block` class,传 GeoJSON 进去自动出。
**执行路径**:用 Mapbox Static Images API(免费额度够冒烟测试),出 1080×720 或 1080×1440 PNG,限制底图为 `light-v11` / `dark-v11` 两种以匹配 Editorial / Swiss 的中性基调,禁用花哨色板。节点用 Swiss 编号风(黑底白数字)或 Editorial 墨点风,避开默认蓝针。GeoJSON 仅接 LineString + Point,复杂面/标注超出范围。
5. **地图组件**。旅行类内容经常需要"路线图 + 关键节点"。真实攻略地图默认用 Mapbox Static;没有 token 时用 OSM 静态瓦片;SVG schematic 只用于抽象关系图。
**执行路径**:用 Mapbox Static Images API 或 OSM tile composite 出 1080×720 / 1080×1440 PNG,限制底图为中性浅色 / 暗色以匹配 Editorial / Swiss,禁用花哨色板。节点用 Swiss 编号风(黑底白数字)或 Editorial 墨点风,避开默认蓝针。GeoJSON 仅接 LineString + Point,复杂面/标注超出范围。
**路由**:先接入 `category-cookbook.md` 的"旅行"路由,作为 M02 / S08 的可选 inset;不强推。
6. **截图美化资产(从 PPT skill 借现成的)**。Tutorial / News 类目最大的痛点是"截图本身不好看"——背景太杂、有阴影、文字太多。可以加一组工具:自动加圆角、自动模糊背景、自动裁安全区。