skill存档

AIGC Topic Cover Factory

适用场景

一次性把「想选题 → 找素材 → 出封面」三步跑完,产出一个可以直接拿去 A/B 的封面矩阵。

典型触发语:

与相邻 skill 的区别


核心约定

  1. 输出恒为 960×600(16:10),B 站视频封面比例。不是小红书 3:4——小红书只是素材来源
  2. 不做人物抠像。对标正片那层抠像人物本 skill 不覆盖,只做「场景照 + 大字」。
  3. 版式参数是量出来的,不是调出来的。所有数字见 references/对标版式解析.md, 改之前先看那份文档,尤其”整块共用一个字号”和”单行 ≤ 10 字”两条。
  4. 选题必须覆盖多个钩子公式。同公式灌 N 条等于只有 1 条选题,A/B 测不出东西。
  5. 人工挑图是流程的一部分,不是失败兜底。脚本产出矩阵,最后一步永远是人选。

环境准备(首次)

pip install pillow numpy httpx playwright
python -m playwright install chromium

字体:脚本按 NotoSansSC-VF(切 Black 字重)→ msyhbd.ttcsimhei.ttf 顺序找。 Windows 一般自带前两个。都没有就报错,去 make_covers.pyFONT_CANDIDATES 加路径。


工作流程

第一步:产选题(这一步是你做,不是脚本做)

references/选题钩子公式.md,按用户要的数量产选题。至少覆盖 6 个不同公式

每条选题写成 topics.json 的一项:

{
  "id": "01",
  "hook": "身份围观式",
  "title": "让大家感受下大厂 Agent 工程师的工作状态",
  "lines": [
    { "text": "让大家感受下",       "role": "sub"  },
    { "text": "大厂Agent工程师的", "role": "hero" },
    { "text": "工作状态",           "role": "sub"  }
  ],
  "style": "yellow",
  "deco": "block",
  "keywords": ["互联网大厂工位", "程序员桌搭", "写字楼加班"]
}

完整字段表见 scripts/topics.example.json。三条最容易写错的:

写完把选题列表给用户过目再往下走——采集和合成都不贵,但选题错了后面全白做。

第二步:采集背景素材

首次要登录一次(扫码,登录态存本地 profile,之后无头跑):

python scripts/xhs_fetch.py login

然后按 topics 批量拉,每个选题一个目录:

python scripts/xhs_fetch.py fetch --topics topics.json --out 01_素材 -n 12

单个关键词补图:

python scripts/xhs_fetch.py fetch --keyword "出租屋书桌" --out 01_素材/03 -n 8

兜底:登录态失效、接口改版、或者选题太偏搜不到图时,别在脚本上死磕—— 直接把关键词给用户,让 ta 手动存图进 01_素材/<id>/,或者贴一份直链清单:

python scripts/xhs_fetch.py from-urls urls.txt --out 01_素材/03

脚本已经做了:

素材权属:抓回来的是他人拍摄的照片,脚本只负责取,不处理授权。 商业项目里这一项由项目方/甲方负责,采集前确认清楚责任归属。

第三步:合成封面矩阵

python scripts/make_covers.py --topics topics.json --material 01_素材 --out 02_封面 --variants 5

产出 02_封面/<id>/<id>.<n>.jpg,即「每条选题 × 5 张背景」。

单图快速试排(调文案时用,不用等整批):

python scripts/make_covers.py --topics topics.json --only 03 --bg 某张图.jpg --out /tmp/试排

第四步:拼审图大图,交人工挑

python scripts/contact_sheet.py --covers 02_封面 --out 03_审图 --cols 5 --rows 4

产出带编号的 contact sheet。把审图大图给用户看,让 ta 报编号,别自己替 ta 挑。


出了问题往哪儿看

症状原因怎么办
字溢出画布 / 大小不一某行太长,或 role 全给了 hero拆行,或把铺垫行改成 sub
字号明显偏小、缩略图糊单行超过 10 个汉字宽改写文案,别指望排版救
字压在杂物上看不清自动选位没找到干净带"pos": "top" 指定,或 "deco": "scrim"
出现硬边灰块scrim 没羽化(老版本 bug)确认用的是 soft_scrim,不是 rounded_rectangle
一批封面长得都一样选题挤在同一个公式里回第一步,按公式覆盖度重出
fetch 报登录态失效profile 过期重跑 xhs_fetch.py login
取到 0 张笔记图登录态刚失效,或关键词太偏先重登;还是 0 就换关键词
搜不到合适的图keywords 太抽象换成具体场景词;实在不行走手动兜底

文件

scripts/
  make_covers.py        封面合成(核心)。改版式参数前先读 references/对标版式解析.md
  xhs_fetch.py          小红书采集,Playwright 持久化登录态
  contact_sheet.py      拼审图大图
  topics.example.json   topics.json 完整字段示例
references/
  对标版式解析.md        65 张对标图的像素级量化结果 + 为什么这么设
  选题钩子公式.md        10 个句式公式 + 文案硬规矩 + 一批选题的健康度自检