审查 Codex v0.15 后修复以下问题: 1. agent.md → AGENT.md:消除 macOS 大小写不敏感文件系统上的文件名冲突 2. HANDOFF.md:validator 规则数从"6 条"更正为"R1-R9" 3. makelive 版本锁定到 0.7.0(live-photo-production.md + package-live-photo.py) 4. 补充 Swift metadata helper 脚本的执行说明和依赖要求 5. platform-specs.md:将"Observed support"改为"截至 2026-07 实测" 6. SKILL.md:补充 GIF/MP4 降级路径,覆盖无法走 iPhone/AirDrop 的发布场景 由 Kiro (Claude Code) 完成审查和修复。 Co-Authored-By: Claude <noreply@anthropic.com>
465 lines
37 KiB
Markdown
465 lines
37 KiB
Markdown
# Handoff — guizang-social-card-skill
|
||
|
||
最后更新:2026-07-01 · 版本:v0.15(Live Photo 生产规则:3s/5s 平台限制、拼图版式、长视频处理、发布提醒、可见文案与不自造规则)
|
||
|
||
这份文档只记录**事实**:当前 skill 由哪些文件组成、每个文件管什么、本轮更新改了什么、怎么验证它还能跑。想读"为什么这样做"或"未来要怎么走",去看 `PRODUCT.md`。
|
||
|
||
> **v0.13 路径约定**:本文件 v0.12 及更早版本历史段落里的 `demo-*` / `social-card-*` / `smoke-*` / `test-*` 目录已统一搬入 `local-tests/`。读历史时请在脑中前缀 `local-tests/`。
|
||
|
||
---
|
||
|
||
## 1. 目录结构(事实版)
|
||
|
||
```
|
||
guizang-social-card-skill/
|
||
├── SKILL.md # 7 步工作流入口
|
||
├── HANDOFF.md # 本文件
|
||
├── PRODUCT.md # 产品思考
|
||
├── assets/
|
||
│ ├── template-editorial-card.html # 杂志风种子
|
||
│ ├── template-swiss-card.html # 瑞士风种子
|
||
│ ├── magazine-bg-webgl.js # WebGL 墨流背景
|
||
│ └── screenshot-backgrounds/ # 9 张 WebP 截图舞台底(v0.14 从 PPT skill port)
|
||
│ ├── style-a/ # 5 张 Editorial(dune / forest-ink / indigo-porcelain / kraft-paper / monocle-classic)
|
||
│ └── style-b/ # 4 张 Swiss(ikb-dot / lemon-green-dot / lemon-grid / safety-orange)
|
||
├── references/ # 子规范,按需读取
|
||
│ ├── platform-specs.md 平台 × 分辨率 × 命名
|
||
│ ├── style-system.md 两种风格的硬规则与反模式
|
||
│ ├── theme-presets.md 6 套杂志 palette(含 Midnight Ink)+ 4 套 Swiss accent
|
||
│ ├── layout-recipes.md 版式骨架(M01-M16 + S01-S12 + WeChat)
|
||
│ ├── components.md 字体 / 卡片 / 间距 / 图标 / 标题字数表
|
||
│ ├── background-systems.md 墨流 / 网格 / 纸纹层
|
||
│ ├── portrait-fill.md 3:4 板的留白对策
|
||
│ ├── content-planning.md 钩子 / 拆页 / 文案压缩
|
||
│ ├── production-workflow.md 渲染管线与命令
|
||
│ ├── image-overlay.md 文字压图:选图 / 局部 tint / 主体映射
|
||
│ ├── screenshot-treatment.md 截图处理
|
||
│ ├── map-component.md Mapbox / OSM / schematic 地图
|
||
│ ├── title-shortener.md 公众号 1:1 短标题
|
||
│ ├── category-cookbook.md 小红书 11 个品类的版式路由
|
||
│ ├── live-photo-production.md Live Photo 生产、拼图、长视频与发布规范
|
||
│ └── qa-checklist.md 交付前 checklist
|
||
├── agents/
|
||
│ └── openai.yaml # 子代理配置(备用)
|
||
├── scripts/
|
||
│ ├── check-skill-docs.mjs # Skill 文档约束测试
|
||
│ ├── make-video-contact-sheet.py # Live Photo 视频抽帧 contact sheet
|
||
│ ├── package-live-photo.py # JPG+MOV 打包为 .pvt 的入口
|
||
│ └── *.swift # Apple Live Photo metadata helper
|
||
├── validate-social-deck.mjs # R1-R9 渲染后校验器
|
||
├── package.json / package-lock.json / node_modules # 仅 playwright
|
||
├── .gitignore # v0.13 新增
|
||
└── local-tests/ # 本地测试与素材(git 忽略,不随 skill 分发)
|
||
├── demo-* # 各次设计案例(kyoto / yading / wukong / kit-* / zzz-* / m16-camping / eyeliner / showcase / smoke-editorial-travel / map-component / screenshot-treatment / multi-platform)
|
||
├── social-card-* # 历史与 Codex 外部测试产物(含 codex-remote-* / wukong-breakout / kyoto-guide / moon-eyes-lip-mud)
|
||
├── smoke-ai-tools/ # v0.6 冒烟测试样例
|
||
├── test-dark-theme-elden-ring/ # v0.12 Midnight Ink 验证
|
||
├── Image/ # 用户上传的测试图
|
||
├── 全图封面参考/ # v0.10 杂志封面参考图
|
||
├── .codepilot-uploads/ # 历史上传缓存
|
||
└── *.cjs # 旧的 debug / probe / render 脚本
|
||
```
|
||
|
||
v0.13 起:git 仓库。`local-tests/` 整目录在 `.gitignore` 中,commit 只跟踪 skill 内容。
|
||
|
||
---
|
||
|
||
## 2. 数据规模与覆盖面
|
||
|
||
| 维度 | 数量 |
|
||
| --- | --- |
|
||
| 工作流步骤 | 7 步(Intake → Extract → Style → Plan → Seed → Build → Image → Deliver) |
|
||
| 风格模式 | 2 个(Editorial Magazine × E-ink / Swiss International) |
|
||
| 主题色 | Editorial 6 套(5 浅 + 1 暗 Midnight Ink)+ Swiss 4 套 = 10 套 |
|
||
| 版式骨架 | Editorial 16 个(M01-M16)+ Swiss 12 个(S01-S12)= 28 个 |
|
||
| 平台 × 比例 | 小红书 3:4 / 1:1,微信 21:9 + 1:1 配对,方封面 1:1 |
|
||
| 小红书品类覆盖 | 11 个品类中 7 个完整支持,4 个需用户提供素材,4 个明确不接 |
|
||
| 种子模板 | 2 份(Editorial / Swiss),单文件即含全部 class 与字体 |
|
||
| 已交付案例 | 7 个 demo(2 个 image-cover + 5 个 kit) |
|
||
| Live Photo 支持 | 小红书 `5s` / 微信公众号 `3s`;单视频、二宫格、三宫格、四宫格、三连拼图、长视频低成本诊断 |
|
||
|
||
---
|
||
|
||
## 3. 版本历史
|
||
|
||
仅记录"什么时候新增/变更了哪些可见资产",不记录文风调整。
|
||
|
||
### v0.15 · 2026-07-01(本轮)
|
||
|
||
主题:**Live Photo 从一次测试能力收口成 Skill 规则**。本轮把两天聊天里关于平台限制、拼图版式、长视频处理、品类判断、发布路径和执行失误的结论写回文档,并补上文档测试。
|
||
|
||
**新增**
|
||
- `references/live-photo-production.md`:Live Photo 生产规范。覆盖 `.pvt` 打包、AirDrop/iPhone 测试、小红书 `5s`、微信公众号 `3s`、信息量判断、三连拼图、material-first 拼图、长视频低成本诊断、contact sheet、平台发布提醒和常见故障。
|
||
- `scripts/check-skill-docs.mjs`:文档约束测试。当前卡住根目录产物、Live Photo 拼图能力、M16 图片压字规则、可见文案规则、非模板装饰禁令、平台发布提醒、产品复盘和交接记录。
|
||
- `scripts/make-video-contact-sheet.py`:把视频按少量时间点抽成 contact sheet,用于长视频或 Live Photo 视觉检查,避免默认密集抽帧。
|
||
- `scripts/package-live-photo.py` 及 Swift helper:把 JPG + MOV 写入 Apple Live Photo metadata 并打包成 `.pvt`,用于 iPhone/AirDrop 测试。
|
||
|
||
**修改**
|
||
- `SKILL.md` 增加 Live Photo 支持范围:短 motion card、三连 Live Photo、material-first 单视频/二宫格/三宫格/四宫格拼图、长视频 intake。明确用户提供视频是正常路径,网页素材只用于 demo / promo / 测试。
|
||
- `SKILL.md` 加硬规则:生成产物必须在任务文件夹,默认 `local-tests/<slug>/`;禁止把结果放在 Skill 根目录。
|
||
- `SKILL.md` 加可见文案规则:卡面文案必须描述用户真实场景,不能把 `3s`、`5s`、`Live Photo`、`三连拼图`、`信息量`、`长视频处理`、`倍速`、`高光检测` 等内部制作词写成标题或正文。
|
||
- `SKILL.md` 加 material-first 规则:单视频加字必须走 M16 / image-overlay 的图片压字逻辑;如果只有一个标题,就用断行、字号、字重、字距、对齐和位置做排版,不发明 kicker、meta、hairline、线条、刻度、徽章、字幕或说明文字。
|
||
- `references/category-cookbook.md` 加 Live Photo Scene Library。它不是固定模板清单,而是判断素材在 `3s` / `5s` 内能承载多少信息,以及适合单视频、三连、拼图、修剪还是不做 Live Photo。
|
||
- `references/platform-specs.md` 加小红书 / 微信公众号 Live Photo 平台说明:小红书 `5s`,微信文章内 `3s`,发布路径以手机端为准。
|
||
- `PRODUCT.md` 加 `Live Photo 复盘(2026-07-01)`,记录这次需求、产品判断、执行问题和验收标准。
|
||
|
||
**本轮测试素材与输出**
|
||
- 用户素材目录:`local-tests/live-photo-best-suite/视频素材/`
|
||
- 统一测试目录:`local-tests/live-photo-best-suite/puzzle-layouts/`
|
||
- 四个测试视频输出:
|
||
- `IMG_XHS_PUZZLE_SINGLE_TEXT_5S_LIVE.MOV`
|
||
- `IMG_XHS_PUZZLE_TWO_STACK_5S_LIVE.MOV`
|
||
- `IMG_XHS_PUZZLE_THREE_STACK_5S_LIVE.MOV`
|
||
- `IMG_XHS_PUZZLE_FOUR_GRID_5S_LIVE.MOV`
|
||
- 规格:全部 `1080x1440` / `5s` / `24fps` / `120 frames`。本地测试目录被 `.gitignore` 忽略,不随 Skill 分发。
|
||
|
||
**线程里暴露的问题,已转成规则**
|
||
- 不要把制作要求当成观众可见内容。之前错误例子包括把"三连拼图"、"5 秒看完完整幅度"、"别硬塞"写到画面上。
|
||
- 不要自造主题、背景色、线条、刻度字或装饰组件。没有在 `theme-presets.md` / `layout-recipes.md` / `image-overlay.md` 出现,就不能为了"显得设计过"而加。
|
||
- 不要为了通过密度警告给 material-first 拼图加字。二宫格、三宫格、四宫格可以无字;单视频也只能加用户场景需要的短标题。
|
||
- 长视频不要默认做精准高光检测。只能先做稀疏抽帧和候选段诊断,再让用户选择修剪、倍速、拆成三连或指定时间段。
|
||
- 网页下载视频不是用户工作流。那只服务我们自己的测试和宣传案例。
|
||
|
||
### v0.14 · 2026-05-28(本轮)
|
||
|
||
主题:**截图美化素材从 PPT skill 迁移**。v0.11 当时只 port 了规则文档(`references/screenshot-treatment.md` 154 行)和工具类(`.frame-shot.*` + `.device-browser` / `.device-phone`),但 PPT skill 的真实材质 WebP 背景**整目录没拷过来**,导致 `.bg-paper / bg-grid / bg-dot` 这些舞台底全是纯 CSS 实色,截图密度高的卡片视觉偏薄。本轮把素材补齐。
|
||
|
||
**改动事实**:
|
||
- 新增 `assets/screenshot-backgrounds/`,整目录 1.8 MB / 9 张 WebP:
|
||
- `style-a/` 5 张 Editorial:`dune.webp` / `forest-ink.webp` / `indigo-porcelain.webp` / `kraft-paper.webp` / `monocle-classic.webp`
|
||
- `style-b/` 4 张 Swiss:`ikb-dot-gradient.webp` / `lemon-green-dot-shadow.webp` / `lemon-grid.webp` / `safety-orange-halftone.webp`
|
||
- `assets/template-editorial-card.html` 加 5 条 `.frame-shot.bg-asset-*` 规则,指向 `style-a/` 五张图(带 fallback 实色防止素材未加载时透明)
|
||
- `assets/template-swiss-card.html` 加 4 条 `.frame-shot.bg-asset-*` 规则,指向 `style-b/` 四张图
|
||
- `references/screenshot-treatment.md` 加 "Solid `bg-*` vs asset `bg-asset-*`" 小节:两张对照表 + 4 条 rules of thumb(不混 accent / 不叠 `shadow-ed` / 一致使用 / 高比例板不用)+ 路径说明
|
||
- 同文件 Style cheat-sheet 加两条 recipe:Editorial hero with real texture / Swiss hero with brand-aligned stage
|
||
- `HANDOFF.md` 目录结构段加 `screenshot-backgrounds/` 子目录视图
|
||
|
||
**重要约定**:
|
||
- 素材路径用相对 URL `../assets/screenshot-backgrounds/style-{a|b}/{name}.webp`,假设 deck 的 `index.html` 在 `local-tests/<task>/` 下(比 `assets/` 低一层)。放别处需要在 deck 里本地 override 路径
|
||
- Swiss 资产**强 accent 绑定**:`bg-asset-ikb-dot` 只能在 `data-accent="ikb"` 的 deck 用,不允许混色
|
||
- 不要在 asset 背景上叠 `shadow-ed`——`1px` 描边会和材质冲突,读起来像 SaaS 框
|
||
- `r-3x4` / `r-1x1` 高比例板仍优先用 solid `bg-*`,asset 材质在过裁切时会变怪
|
||
- 这是**素材迁移**,不是规则迁移:PPT skill 原版 `screenshot-framing.md` 的 7 参数语义系统未引入(本 skill 走 CSS 工具类路线,决策更轻)
|
||
|
||
### v0.13 · 2026-05-27(上一轮)
|
||
|
||
主题:**git 初始化 + 仓库瘦身**。把所有本地测试 / demo / 上传图 / 旧脚本统一搬到 `local-tests/`,写 `.gitignore` 忽略整个测试目录与 `node_modules/`。skill 本身只保留:`SKILL.md` / `HANDOFF.md` / `PRODUCT.md` / `assets/` / `references/` / `agents/` / `validate-social-deck.mjs` / `package.json` 与锁文件。
|
||
|
||
**改动事实**:
|
||
- 新建 `local-tests/`,搬入 28 个测试目录(demo-* 16 个 / social-card-* 6 个 / smoke-* 1 个 / test-* 1 个 / Image / 全图封面参考 / .codepilot-uploads)以及 3 个旧脚本(`render.cjs` / `debug-bg.cjs` / `probe-webgl.cjs`)
|
||
- 新增 `.gitignore`:忽略 `local-tests/` / `node_modules/` / `.DS_Store` / `*.log` / `.vscode/` / `.idea/`
|
||
- `HANDOFF.md` 目录结构段同步更新,列入 `local-tests/` 子目录视图
|
||
- skill 自身文件结构未变,模板与规则文档一律未改
|
||
|
||
**重要约定**:`local-tests/` 不进 git,不分发,不放入 skill 包。`demo-showcase/editorial.html` 和 `demo-showcase/swiss.html` 仍然是字号/字距/版式还原的 source-of-truth——它们移到了 `local-tests/demo-showcase/`,路径变了但作用未变。所有后续 demo / 冒烟测试都应在 `local-tests/` 下新建子目录。
|
||
|
||
### v0.12 · 2026-05-27
|
||
|
||
主题:**Editorial 美学回退 + 第 6 个杂志主题 Midnight Ink + 图片裁切策略 + 交付工作流调整**。本轮起因是用户对 v0.11 冒烟测试的"质量回退"反馈——v0.10/v0.11 在把 showcase 模板化进 seed 的过程中,把 Editorial 的字重/字距/正文字族无意中改成了"信息图横幅"风(900 字重 / 负字距 / sans 正文),与 `demo-showcase/editorial.html` 的"克制磁带感"完全偏离。同时 Codex 外部测试 `social-card-wukong-breakout` 暴露了缺暗色主题、自造 `wukong-night` 不合规的问题。
|
||
|
||
**新增**
|
||
- `assets/template-editorial-card.html` 增加 `[data-theme="midnight-ink"]` 暗色 palette + 三段必随覆盖(`.grain` 翻成 screen-mode 暖光斑 / `.paper-wash` 改成金辉 + 阴影 vignette / `.frame-img` 加深底色 + 1px 暖边)。Editorial palette 从 5 套变 6 套。
|
||
- `references/theme-presets.md` 增 **Midnight Ink** 段,含色值 + 必随覆盖代码 + 使用场景(游戏 key art / 夜景 / 影调封面)。明确"暗色 Editorial 只有这一套,不要自造第二套"。
|
||
- `test-dark-theme-elden-ring/` — Midnight Ink 验证 deck(4 张 1080×1440,《艾尔登法环》新手指南)。图源 Steam 官方 8 张截图,记录在 `assets/`。验证 P1 全幅 hero-bleed + 黄金 accent、P2 M14 pipeline 4 步 + 21:9 atmosphere、P3 M07 ledger 4 行 + 战斗 atmosphere、P4 quote-card + 4:3 静态时刻。
|
||
|
||
**修改:Editorial 美学回退(核心)**
|
||
- `assets/template-editorial-card.html` 全部 Editorial 排版默认值恢复 showcase 美学:
|
||
- `.h-display` 124px **weight 500** letter-spacing **+.04em**(v0.10/v0.11 误改为 900 / −.01em)
|
||
- `.h-xl` 88px weight 500 +.03em(曾经 700 / −.01em)
|
||
- `.h-md` 56px weight 500 +.02em
|
||
- `.lead` 28px **font-family: var(--serif-zh)**(曾经被切到 sans-zh,是塌掉杂志感的主因)
|
||
- `.body` 24px serif-zh(同上)
|
||
- `.kicker` 21px letter-spacing **+.22em**
|
||
- `.meta` / `.label` 18px +.20em
|
||
- `.ledger-row .ledger-title` 42px weight 500,`.ledger-note` 22px serif-zh
|
||
- `.pipeline-v .step-title` 40px weight 500,`.step-desc` 24px serif-zh
|
||
- `references/components.md` Editorial 字号表完整改写为上述值,加一段 **Restored 2026-05-27** 警示,写明"v0.10/v0.11 错改值是什么,为何会塌掉,showcase 是 source-of-truth"。
|
||
- `references/style-system.md` Mode A 加 **Typography stance — "the larger, the lighter"** 段:Editorial display 必须 500、serif body、宽字距;反模式(700-900 + sans + 负字距)= "infographic banner" 塌方。
|
||
|
||
**修改:图片裁切策略**
|
||
- `assets/template-editorial-card.html` `.frame-img img` 默认 `object-position` 从 `center top` 改为 `center 50%`。Editorial 之前的 `center top` 是默认值意外,导致竖图主体被切掉;showcase 实际上是逐图 inline 覆盖。
|
||
- `references/components.md` Image Containers 段加 **主体感知裁切表**(主体位置 → object-position 取值)+ 硬规则"每张图都要 inline 写 object-position,默认值是 fallback 不是推荐"。
|
||
- `SKILL.md` Step 6 Image and Screenshot Handling **Crop discipline** 改写为强制每张图 inline 写 `object-position`,带具体取值示例(`center 25%` 天空多 / `center 50%` 居中 / `center 62%` 半身 / `center 70%` 前景物)。
|
||
|
||
**修改:交付工作流("show user first, ask before validating")**
|
||
- `SKILL.md` Step 7 Deliver 重写:
|
||
- 默认 **不再** 渲完自动跑 validator。
|
||
- 渲完先把图给用户看,问一句"先你自己看,还是我先自动核查一遍?"。
|
||
- 用户说"自己看"→ 停下来等反馈;说"你查吧"→ 才跑 `validate-social-deck.mjs`。
|
||
- 起因:用户反馈每次渲完自动跑 validator 让交付窗口变得很长,用户大多数时候眼睛比脚本更快。
|
||
- 代价:自动校验的"安全网"被撤掉一格——但脚本仍然可用、用户随时可调。
|
||
|
||
**修改:已有 demo 同步**
|
||
- `demo-kyoto-trip/index.html` — 字号回退到 showcase 值,P4 ledger 去掉 03(岚山)解决 3:4 溢出,title 改"四条建议"。
|
||
- `demo-smoke-editorial-travel/index.html` — 字号回退到 showcase 值。P1 hero 从 `r-16x10` 改 `r-3x2` + `object-position:center 62%`(hero-grassland 主体在画面中下)。P5 camp-tarp 加 `center 55%`。两份 demo 都 4-5 张 1080×1440 重渲过,无溢出。
|
||
|
||
**Codex `social-card-wukong-breakout` 诊断**
|
||
- 状态:未由本 skill 修复。Codex 在 v0.11 规则下做的测试。
|
||
- 根因:Codex 实际**遵守**了规则——错的是规则本身。`components.md` 当时还在写 900/700/sans-body 默认值,Codex 照搬出来必然塌;Codex 自造的 `wukong-night` 是"规则没暗色"的合理外推。
|
||
- 修复路径:v0.12 已落地 Midnight Ink 官方暗色 + 美学回退;后续 Codex 任务直接 `data-theme="midnight-ink"` 即可,无需自造。
|
||
|
||
**未做**
|
||
1. 截图美化资产 port(仍在短期清单)
|
||
2. 地图组件(同上)
|
||
3. 1:1 短标题生成器(同上)
|
||
4. 多平台一次出包(同上)
|
||
5. `social-card-wukong-breakout` 未重新生成——v0.12 是规则修复,不回灌历史 Codex 测试
|
||
|
||
### v0.11 · 2026-05-27
|
||
|
||
主题:**短期规划 Phase A 收口 — validator + Editorial 冒烟测试**。短期规划 6 件事完成第 1、2 件,把 v0.10 留下的 Editorial 长内容欠债(M11/M14 在 3:4 上从未单独验证)也清掉。
|
||
|
||
**新增**
|
||
- `validate-social-deck.mjs` — 单文件 Node 脚本,接受 task-dir 或 index.html,对每个 `<section class="poster …">` 跑 6 条规则:R1 overflow / R2 footer 碰撞 / R3 Swiss 粗体 display / R4 字号下限 / R5 4 横带密度(pixel-row union 覆盖率)/ R6 `.h-xl` 行/字 cap。`--style=swiss|editorial` 可显式指定,默认按 `data-theme/data-accent` 或 serif 字族 fallback 自动判断。退出码 1 仅在 FAIL 时;WARN 是 advisory。
|
||
- `package.json` `scripts.validate` — 把 `node validate-social-deck.mjs` 包到 `npm run validate <task-dir>`。
|
||
- `demo-smoke-editorial-travel/` — Editorial 冒烟测试 5 张 1080×1440:M01 cover + M11 Marginalia Essay(3 段正文 + 7 行 marginalia)+ M07 Field Ledger(5 行账本)+ M14 Vertical Pipeline(5 步)+ M16 Image-Led Cover 收束。全部 PASS validator。
|
||
- `references/components.md` § Editorial `.h-xl` Hard Caps — 实测表:xhs 92px / square 78px / wide 96px;附 M11/M14/M07 各自的 ledger / paragraph / step 数硬上限。
|
||
|
||
**修改**
|
||
- `SKILL.md` Step 5 Build And Render 加:每次 render 后必须跑 validator,FAIL 必修。Step 7 Deliver 加:交付前再跑一次;WARN 在交付消息里报告让用户决定。
|
||
- `validate-social-deck.mjs` 修两轮 false positive:
|
||
- R2 footer collision:原版把 `.content` 容器 + 全幅 `.mag-bg` 误判碰底;改成只看 leaf text/media + 跳过 ≥95% 全幅 absolute 节点。
|
||
- R4 min font:原版按 class 选择器命中所有 `.lead`,但 Swiss `.role-card .lead` 是子组件文本。改成只查 leaf text 节点的角色。
|
||
- `references/components.md` § Image Containers 加:figcaption 类名硬规则——Editorial 用 `.img-cap`、Swiss 用 `.swiss-img-caption`、**没有共享 `.cap`**。冒烟测试中我把它写成 `.cap` 触发 R4,已固化为警示。
|
||
|
||
**回归测试**(在 5 个 demo 上跑过 validator)
|
||
- `demo-smoke-editorial-travel`:5 pass / 0 fail / 0 warn
|
||
- `demo-zzz-miyabi`:4 pass / 1 R5 warn(p4 H-Bar 底部 trailing whitespace,可接受)
|
||
- `demo-eyeliner`:3 pass / 1 R5 warn(xhs-03 底带 13%,可接受)
|
||
- `smoke-ai-tools`:发现一处历史 R1 overflow(xhs-03 +101px)—— 之前漏看,已暴露
|
||
- `demo-showcase/swiss.html` + `editorial.html`:共暴露 39 + 46 条 R4/R5/R6 warn,主要是 lead/body/caption 在数据密集页里被压到 18-22px、几条 h-statement 行数超 cap。下一轮可逐张回修。
|
||
|
||
**未做(同短期规划清单)**
|
||
1. 截图美化资产 port(下一件)
|
||
2. 地图组件
|
||
3. 1:1 短标题生成器
|
||
4. 多平台一次出包
|
||
|
||
### v0.10 · 2026-05-26
|
||
|
||
主题:**内容密度硬规则 + 风格-内容类型解绑 + 全版式 showcase**。两件事并轨:(1) 解决 3:4 卡内容欠填——把"杂志留白逻辑"和"社交卡逐张刷"这两件事在文档层面拆清;(2) 把"Editorial 只接生活类 / Swiss 只接产品类"的隐含绑定明确解除,让用户用同一篇内容自由选风格。
|
||
|
||
**新增**
|
||
- `demo-eyeliner/` — 4 张 3:4 美妆类 Editorial 案例(kraft-paper),P1 M16 全幅产品图,P2 M03 翻车叙事,P3 M01 双头机制,P4 M07 收束。验证密度规则在"图+文+ledger"混合卡上的落地。
|
||
- `demo-showcase-editorial/` — 16 张 1080×1440 案例,逐张覆盖 M01-M16,循环用 5 套杂志 palette。
|
||
- `demo-showcase-swiss/` — 12 张 1080×1440 案例,逐张覆盖 S01-S12,循环用 4 套 Swiss accent。两套 showcase 演示「内容类型与风格脱钩」——美食内容也可走 Swiss、AI 工具也可走 Editorial。
|
||
|
||
**修改**
|
||
- `SKILL.md` Step 3 重写:"Editorial 用于 / Swiss 用于" 的硬绑定改成"两种风格是 visual stance,不是 content category;任何内容都可走任一风格;选风格按 editorial intent(feature story 还是 release note),不按 topic lookup。"
|
||
- `SKILL.md` Non-Negotiables 增加 **3:4 内容密度硬规则**:内容 ≥75% 画布高度;>15% 空白带需"留白理由";禁用 `<div style="flex: 1"></div>` 上下夹击;杂志留白逻辑不适用于社交卡。
|
||
- `references/style-system.md` 顶部增 **"Style ↔ content type are decoupled"** 段;Mode A / Mode B 的"Use for"硬列表改成"Good fits"软建议(含明确反例:workplace essay 也可走 Editorial、travel ledger 也可走 Swiss)。
|
||
- `references/layout-recipes.md`:
|
||
- Editorial 和 Swiss recipe 总览段都加了"这些结构适用于任何 topic"的前言。
|
||
- **新增 Content density rule (hard)** 段,写在 Editorial recipe 列表前。
|
||
- **M03 / M04 / M07 / M13 各加 Minimum density 段**:
|
||
- M03:title + 3 段 或 title + 2 段 + 编号 footer 列表。title 单独是 M04 不是 M03。
|
||
- M04:唯一允许 ≤60% 内容的 recipe,但必须有 3 个 anchor(source row / kicker / hairline)。
|
||
- M07:title + ≥4 ledger items with sub-lines + closing block。"3 短 ledger 行"是已知失败模式。
|
||
- M13:必备 anchor(top kicker + bottom prompt + bottom metadata + 可见 WebGL bg)。
|
||
- `references/qa-checklist.md`:新增 **4 横带密度检查**(Filled / Justified empty / Under-filled 分类,>15% 画布的 under-filled 带判失败;通过门槛:Filled+Justified ≥100%、Filled ≥75%、相邻两带不能都 justified)。
|
||
- `PRODUCT.md` 决策 1 重写:风格不再绑定内容品类。删除"Editorial × 人文/Swiss × 工程"的硬对应;明确"两种风格是视觉立场不是内容门"。
|
||
|
||
**修复路径(落到代码)**
|
||
- 杂志留白逻辑→社交卡的对策:用 `flex-grow: 1` + `justify-content: space-between` 让"内容块本身撑开",禁用空 `<div style="flex:1"></div>` 作为占位。`demo-eyeliner` P2/P4 两次重渲染后通过 4 横带检查。
|
||
- M07 spec 从 "2-3 rules" 改成 "4-6 ledger items with sub-lines",每行 100-140px 垂直。
|
||
|
||
**未变动**
|
||
- Recipe 计数:仍是 M01-M16 + S01-S12 = 28 个。
|
||
- Theme palette 计数:5 + 4 = 9 套。
|
||
- 工作流步数仍 7 步;种子模板未动。
|
||
- 小红书品类能力圈未变;只是不再把"风格-品类"硬绑定。
|
||
|
||
**对比验证**
|
||
- 旧 P2/P4(v0.9 demo-eyeliner 第一版):内容散在画布中段,底部 25%-35% 是空白带,缩略图刷过去像 PPT 漏排。
|
||
- 新 P2/P4(v0.10):内容撑满到 ~92% 画布高度,引语+footer 紧贴底缘;FALLOUT 四条 a-d 均匀分布到引语之上。
|
||
- showcase 两套:28 个 recipe 每个出 1 张 1080×1440,全部通过 4 横带检查、覆盖全 9 调色、内容类型故意打散(户外 / AI / 食谱 / 数据 / 节气 / 影评等都既出现在 Editorial 也出现在 Swiss)。
|
||
|
||
### v0.9 · 2026-05-26
|
||
|
||
主题:**M16 编辑杂志化重写**。v0.8 的 M16 借了"游戏 key art"那套(全幅黑色 vertical falloff + 132px 黑体感字 + 纯白文字),出来像旅游海报、不像 Kinfolk / Cereal。本轮按 8 张参考的共同语言推倒重来:**选图是主要杠杆,遮罩是兜底;字小、字细、字色偏纸**。
|
||
|
||
**修改**
|
||
- `references/image-overlay.md` **Rule 1 重写**:"选图先,遮罩后,禁全幅 falloff"四步法。Step 1 选图门(quiet-zone 测试 + light 测试),Step 2 默认不加 mask 直接验,Step 3 兜底用 localized + image-toned 软渐变(peak α ≤ 0.30),Step 4 缩略图测试。Banned 段把"全幅 vertical falloff"和"纯黑 mask 色"明确点名禁掉。
|
||
- `references/image-overlay.md` Rule 2 增 **Composition discipline** 段:4 条编辑杂志构图硬规(非对称、≥60% 留白、标题只占一个 quiet zone、绝不跨越主体轮廓)。
|
||
- `references/image-overlay.md` Checklist 重写:把"≥60% → 强制 mask"翻成"先看选图通不通过,mask 仅在 Step 4 失败时"。
|
||
- `references/layout-recipes.md` **M16 重写**:
|
||
- 顶部加 **Photo qualification gate**——quiet-zone test + light test 都过才能走 M16,否则退回 M01。
|
||
- Modes A/B/C/D 表里"Mask"列改成"Tint (only if Step 4 fails)",明确"先无 mask、不行再局部图调色软渐变"。
|
||
- **字号字色字体彻底改**:标题 88-108px(v0.8 是 108-132px),Noto Serif SC 400-500(v0.8 没限制字重,default 700+),色 `#f5f1e8` 纸米(v0.8 是 var(--paper) 容易跑成 #fff),letter-spacing 0.10-0.15em。
|
||
- 加 **Forbidden in M16 type** 段:禁 inline 700+ 字重、禁纯白 `#fff`、禁标题 > 120px、禁拉丁 sans 作主标题、禁 D 模式标题居中。
|
||
- HTML skeleton 两段重写:默认不加 mask、用 `Noto Serif SC weight 500 + #f5f1e8`,全 inline 字号(不依赖 `.h-display`,因为种子模板 `.h-display` 强制 `color: var(--ink)` 在暗背景上失效)。
|
||
- `demo-m16-camping/index.html` **P1 封面重做**:Mode A(顶 kicker + 底标题),无全幅 mask,仅底部 22%x84% 苔绿色 (`rgba(20,32,22,...)`) 软 radial 在标题区,标题 92px Noto Serif SC weight 500 / tracking 0.12em / 色 `#f5f1e8`。HTML 注释加 photo qualification 记录。
|
||
|
||
**未变动**
|
||
- Editorial recipe 计数:仍是 M01-M16。
|
||
- Swiss recipe / theme / 工作流 / 种子模板没动。
|
||
- demo-m16-camping P2 (ledger) / P3 (field notes) 没动——它们用的是 M05/M02 文字主导版式,没踩 M16 的坑。
|
||
|
||
**对比验证**
|
||
- 旧 P1(v0.8):黑色 78% 侧栏 scrim + 132px 字 + 整页压重。读起来像旅游打卡。
|
||
- 新 P1(v0.9):林荫透出、字小克制、底部苔绿软渐渍只够支撑标题对比。读起来像 Kinfolk camping 专题。
|
||
- 缩略图测试(360px wide):标题 / kicker / 底部 mono strip 全部可读,无糊。
|
||
|
||
### v0.8 · 2026-05-26
|
||
|
||
主题:**图先序列 + 满图封面 recipe**。给"生活化、吃图片"的内容一个明确的 P1 图占满 + P2-3 数据的版式。
|
||
|
||
**新增**
|
||
- `references/layout-recipes.md` 新增 **M16 Image-Led Cover (Full-Bleed Hero)**:填补 M01"图+文分块"到"图占满 + 文字压上"的空白。含 4 种文字位置(顶压底沉 / 侧栏立柱 / 角落徽章 / 下沉条带,按 subject map 选)、字号 spec 表、标题长度上限表、1:1 / 21:9 适配、两段完整 HTML 骨架(Mode A + Mode D)。Editorial 模式专用,Swiss 不用。Editorial recipe 数:15 → 16。
|
||
- `references/content-planning.md` 新增 **Image-Led Sequence** 段:P1 M16 满图 → P2 文字数据卡(S11/M05/M10)→ P3 M02 副图 → … 硬规则"绝不连续两张 M16"。
|
||
|
||
**修改**
|
||
- `references/category-cookbook.md`:
|
||
- 旅行 / 家居 / 美食(食谱)路由首选改为 M16 → S11/数据卡 → M02 的图先序列。
|
||
- 情感不强推图先序列(M16 不适合 quiet documentary 的 "窗 / 椅 / 手"——继续走 M04/M09/M11 文字主导)。
|
||
- `SKILL.md` Seed 引用范围 `M01-M15` → `M01-M16`。
|
||
|
||
**未变动**
|
||
- 工作流步数与种子模板。
|
||
- Swiss 12 个 recipe / 9 套 palette / image-overlay 规则。
|
||
- M16 强依赖既有 image-overlay.md(mask + subject map + crop),没有放宽任何安全检查。
|
||
|
||
### v0.7 · 2026-05-26(上一轮)
|
||
|
||
主题:**Editorial 图源扩展**。没有新增 layout,没有改种子。
|
||
|
||
**修改**
|
||
- `SKILL.md` Step 6 web-sourced 图源从 3 条扩到 5 条:新增 **Pexels**(#2,原生支持中文搜索,补 Unsplash 在国内场景的缺口)与 **Flickr CC**(#3,`license=2,3,4,5,6,9` 过滤,补"纪实感真实感"的缺口)。加了取图顺序:Pexels(中文/国内)→ Unsplash → Flickr CC(纪实)→ direct search。明确"全部免版权图库,不接 视觉中国 / Getty / 站酷海洛 等付费源"。Swiss 模式继续不走图库。
|
||
- `references/category-cookbook.md`:
|
||
- 旅行:Pexels 优先用于国内目的地(中文关键词);Flickr CC 用于"真实旅程"的纪实质感。
|
||
- 美食:Pexels 用于中式菜品 / 国内餐厅;Unsplash 标注为"西式 stock 感",仅做兜底。
|
||
- 情感:Flickr CC 升为主推(窗 / 椅 / 手这类纪实质感最契合);Pexels 补国内语境;Unsplash 仍然可用但避开"moodcore" gradient-light stock。
|
||
- `references/qa-checklist.md`:图源 checklist 改为枚举 Pexels / Unsplash / Flickr CC / Wallhaven / direct search,并提示 Flickr CC 在用户同意标注时要保留作者署名。
|
||
|
||
**新增**
|
||
- `SKILL.md` Step 1 Intake 加"三选一"入口:用户只给文字时问一次(A. 自己提供照片 推荐 / B. 我帮你找 / C. AI 生成),按选择走 Step 6,不二次劝导。
|
||
- `SKILL.md` Step 6 "When the user has no images" 改为依赖 Step 1 gate,明确不再自动跳到 B/C。
|
||
|
||
**未变动**
|
||
- 工作流步数(仍为 7 步,三选一是 Step 1 内的子项)与种子模板。
|
||
- 9 套 palette 与 27 个 recipe。
|
||
- 不接付费图库(视觉中国 / Getty)是产品边界(见 `PRODUCT.md` 决策 4)。
|
||
|
||
### v0.6 · 2026-05-26(上一轮)
|
||
|
||
主题:**冒烟测试 + 种子模板硬化**。没有新增 layout,没有改工作流。
|
||
|
||
**新增**
|
||
- `smoke-ai-tools/` — 完整冒烟测试样例。主题"程序员一周 AI 工具使用周记"。用 5 张 1080×1440 跑通 S01/S07/S10/S11/S12 五个 recipe。Klein Blue accent。
|
||
- `HANDOFF.md` · `PRODUCT.md`(本文件 + 产品文档)
|
||
|
||
**修改**
|
||
- `assets/template-swiss-card.html`:为 `.poster.xhs` 补全 display 字号 override。
|
||
- `.h-hero` 168px · `.h-statement` 124px · `.h-xl` 96px · `.num-mega` 168px · `.num-xl` 120px
|
||
- `.matrix-fill` 改为 `grid-auto-rows: min-content`、`min-height: 0`、`gap: var(--sp-4)`
|
||
- `.matrix-cell .cell-title` 在 xhs 下降到 24px
|
||
- `.hero-stat-bottom` 在 xhs 下紧凑 margin / padding,`num-mega` 128px
|
||
- `references/components.md`:新增两张实测对照表。
|
||
- "Swiss `.h-xl` Hard Caps per Board" — 每板最多几行、单行最多几字、超限会怎样
|
||
- "Matrix + hero-stat-bottom on `.poster.xhs`" — cell 数对应的搭配建议
|
||
|
||
**已知遗留**
|
||
- Editorial 模板(`template-editorial-card.html`)**未做同样的冒烟测试**。M14 纵向 Pipeline 5 步在 3:4 板上是否溢出,未验证。
|
||
- 冒烟测试只覆盖 5 个 Swiss recipe(S01/S07/S10/S11/S12)。其余 S02-S06/S08/S09 未跑过真实小例子。
|
||
|
||
### v0.5 · 2026-05-26 早些时候
|
||
|
||
主题:**image-overlay 规则上线 + 文字压图验证**。
|
||
|
||
**新增**
|
||
- `references/image-overlay.md` — 文字压图规则:蒙版强制 + 多模态主体映射 + 缩略图测试
|
||
- `demo-image-02-wukong/` — 用《黑神话:悟空》主视觉验证 image-overlay 规则
|
||
|
||
**修改**
|
||
- `SKILL.md` Step 6 加入文字压图小节
|
||
- `references/style-system.md` 新增 Anti-Pattern D(封面照片裸跑无蒙版)
|
||
|
||
### v0.4 · 之前
|
||
|
||
主题:**模板种子 + 9 个新版式补全**(对齐已成熟的 PPT skill)。
|
||
|
||
**新增**
|
||
- `assets/template-editorial-card.html` · `assets/template-swiss-card.html` 两份种子
|
||
- `references/components.md` 字体/卡片/间距/Lucide token 表
|
||
- `layout-recipes.md` 加 M12-M15(Editorial 缺失节奏型)+ S08-S12(Swiss 5 个 port from PPT)
|
||
|
||
**修改**
|
||
- `SKILL.md` 加 Step 4.5(拷贝种子模板)
|
||
- Required References 加 `components.md`
|
||
|
||
### v0.3 及更早
|
||
|
||
`SKILL.md` + 9 份 reference 的初始体系。小红书品类能力圈(`category-cookbook.md`)。Editorial 11 个版式 + Swiss 7 个版式。
|
||
|
||
---
|
||
|
||
## 4. 如何验证 skill 还能跑
|
||
|
||
先跑文档层验证,确认 Skill Creator 基础格式和本仓库约束都还成立:
|
||
|
||
```bash
|
||
python3 /Users/guohao/.agents/skills/skill-creator/scripts/quick_validate.py .
|
||
npm run test:docs
|
||
```
|
||
|
||
`quick_validate.py` 只检查 Skill Creator 的基础结构:`SKILL.md`、frontmatter、name / description 合法性。`npm run test:docs` 检查本仓库新增的产品规则:根目录不产出、Live Photo 拼图、M16 图片压字、可见文案、发布提醒、产品复盘和交接记录。
|
||
|
||
最快的验证路径,不要发明新需求。
|
||
|
||
```bash
|
||
cd /Users/guohao/Documents/code/HyperFrames-test/guizang-social-card-skill/local-tests/smoke-ai-tools
|
||
node render.mjs
|
||
ls output/ # 应该看到 xhs-01.png ... xhs-05.png
|
||
sips -g pixelWidth -g pixelHeight output/xhs-01.png # 应为 1080×1440
|
||
```
|
||
|
||
5 张图都能渲染、尺寸都对 → Swiss 种子模板 + 5 个 recipe 工作正常。
|
||
|
||
视觉验收:用 `Read` 工具读 `output/xhs-04.png`,确认大数字 "8" 在右下角完整可见、未被截断。
|
||
|
||
更全的 demo:`local-tests/demo-image-02-wukong/index.html` 用 Playwright 渲染,验证 image-overlay 规则下文字与人物未冲突。
|
||
|
||
Live Photo 视觉回归可以直接看本地测试目录:
|
||
|
||
```bash
|
||
cd /Users/guohao/Documents/code/HyperFrames-test/guizang-social-card-skill/local-tests/live-photo-best-suite/puzzle-layouts
|
||
ls output/
|
||
```
|
||
|
||
重点看 `contact-sheet-*.jpg` 和四个 `IMG_XHS_PUZZLE_*_LIVE.MOV`。不要重新开新目录,除非用户明确要新的测试集。
|
||
|
||
---
|
||
|
||
## 5. 工作流要点(给接手者的极简版)
|
||
|
||
按 `SKILL.md` 第 7 步走,**不要跳步**。最易踩坑的两步:
|
||
|
||
- **Step 3 不要混风格**:Editorial 用 serif + ledger/marginalia;Swiss 用 Inter + card-fill/matrix。两套 class 命名空间隔离,模板间不能跨用。
|
||
- **Step 4.5 必须拷种子**:从零写 HTML 是 v0.4 之前的工作流,已废弃。
|
||
|
||
文字压图的页(封面 / 大图位 / 全幅图)四步:先 `Read` 图、写 HTML 注释记录主体位置、选 `object-position`、做 360px 缩略图检查。默认先不加遮罩;只有缩略图不可读时才加局部、取自图片色调的 tint。
|
||
|
||
Live Photo 页先当静态社交卡做:先确认第一帧、裁切、字体、可见文案和模板匹配,再渲 MOV / `.pvt`。单视频加字走 M16 / image-overlay;二宫格、三宫格、四宫格默认无字;三连拼图只放能并行理解的三个短片段。
|
||
|
||
---
|
||
|
||
## 6. 已知风险与限制(事实层面)
|
||
|
||
- **校验脚本是按需兜底**。`validate-social-deck.mjs` 已可检查溢出、页脚碰撞、字号下限、密度、标题行数与 figure 默认 margin 漂移;默认交付流先给用户看,用户要求 auto-check 时再跑。
|
||
- **没有跨平台一次出包工具**。一篇文章要同时出小红书 3:4 + 微信 21:9+1:1 + 方封面 1:1,目前要手工开两个任务文件夹。
|
||
- **品类能力圈未硬编码**。`category-cookbook.md` 写明了 4 个不接的品类,但 skill 不会主动拒绝;需要执行者在 Step 1 自己读到并主动告知用户。
|
||
- **图片来源签名机制是"用户决定"**。`SOURCES.md` 总会写,但是否在图上加标注由用户回答。这不是技术限制是产品决策(见 `PRODUCT.md`)。
|
||
- **Live Photo 高光选择只是低成本诊断**。默认只做稀疏抽帧 / contact sheet / 时间段建议,不承诺精准识别转场、空镜、黑场或最佳高光。
|
||
- **Live Photo 发布依赖手机端路径**。交付时必须提醒小红书 `5s`、微信公众号 `3s`,并提醒 `.pvt` AirDrop 到 iPhone 后从对应 App / 手机端编辑路径发布。
|
||
|
||
---
|
||
|
||
## 7. 不要做的事
|
||
|
||
- 不要改 PPT skill(在 `~/.claude/skills/guizang-ppt-skill/`)。本 skill 借了它的视觉原则但**独立维护**。
|
||
- 不要把 demo 文件夹删掉来"清理"。它们是回归测试样本。
|
||
- 不要在两份种子模板里塞动效系统、键盘翻页、ESC 索引——那是 PPT 的需求,社交卡是静态 PNG。
|
||
- 不要把 components.md 的硬上限表"调宽"以接更长的标题。先压文案。
|
||
- 不要把内部制作词写到卡面上,例如 `三连拼图`、`5 秒看完`、`信息量`、`Live Photo`、`长视频处理`。这些词只能出现在计划、文件名、QA 或交付说明里。
|
||
- 不要用自造背景色、线条、刻度、标签、徽章去"补排版"。先找既有模板和 reference;没有规则支持就不要加。
|