@topmindspace/topmind-writing-skills 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.en.md +2 -2
  3. package/README.md +2 -2
  4. package/package.json +1 -1
  5. package/topmind-briefs/knowledge/README.md +1 -1
  6. package/topmind-briefs/knowledge/cards/cover-typography.md +6 -0
  7. package/topmind-briefs/knowledge/index.json +2 -2
  8. package/topmind-briefs/references/platform-cover-specs.md +17 -2
  9. package/topmind-cover/README.en.md +5 -2
  10. package/topmind-cover/README.md +4 -1
  11. package/topmind-cover/SKILL.md +7 -6
  12. package/topmind-cover/knowledge/README.md +1 -1
  13. package/topmind-cover/knowledge/cards/cover-typography.md +6 -0
  14. package/topmind-cover/knowledge/index.json +2 -2
  15. package/topmind-cover/package.json +2 -2
  16. package/topmind-cover/references/platform-cover-specs.md +17 -2
  17. package/topmind-cover/references/typography-system.md +10 -0
  18. package/topmind-cover/scripts/crop-cover.py +18 -2
  19. package/topmind-cover/scripts/negative_tests.py +3 -0
  20. package/topmind-cover/scripts/test_crop_cover.py +29 -1
  21. package/topmind-cover/scripts/test_title_font_resolution.py +36 -0
  22. package/topmind-cover/scripts/title-engine.py +34 -8
  23. package/topmind-format/knowledge/README.md +1 -1
  24. package/topmind-format/knowledge/cards/cover-typography.md +6 -0
  25. package/topmind-format/knowledge/index.json +2 -2
  26. package/topmind-poster/knowledge/README.md +1 -1
  27. package/topmind-poster/knowledge/cards/cover-typography.md +6 -0
  28. package/topmind-poster/knowledge/index.json +2 -2
  29. package/topmind-poster/references/platform-cover-specs.md +17 -2
  30. package/topmind-revise/knowledge/README.md +1 -1
  31. package/topmind-revise/knowledge/cards/cover-typography.md +6 -0
  32. package/topmind-revise/knowledge/index.json +2 -2
  33. package/topmind-viral-posts/knowledge/README.md +1 -1
  34. package/topmind-viral-posts/knowledge/cards/cover-typography.md +6 -0
  35. package/topmind-viral-posts/knowledge/index.json +2 -2
  36. package/topmind-wechat-post/knowledge/README.md +1 -1
  37. package/topmind-wechat-post/knowledge/cards/cover-typography.md +6 -0
  38. package/topmind-wechat-post/knowledge/index.json +2 -2
  39. package/topmind-wechat-post/references/platform-cover-specs.md +17 -2
  40. package/topmind-x-article/knowledge/README.md +1 -1
  41. package/topmind-x-article/knowledge/cards/cover-typography.md +6 -0
  42. package/topmind-x-article/knowledge/index.json +2 -2
  43. package/topmind-x-article/references/platform-cover-specs.md +17 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [0.9.3] - 2026-11-09
2
+
3
+ - `topmind-cover` 0.5.1:小红书与抖音横版先构图中央 4:3,按需保留 16:9 两侧场景;新增 `landscape-pair` 双尺寸导出。区分成片画幅、封面选择框与列表露出,记录公开证据和未实测入口。
4
+ - 系列封面按主体安排角色名、动作词和字效,增加缩略图与实际字重核对。标题引擎在 macOS 可回退到系统中文字体,列出实际字体字重和集合索引。
5
+ - 更新双语使用说明、共享知识卡和能力说明;自动验证中心裁切、字体回退及封面工具在独立 ZIP、宿主包和 npm 包中的交付。
6
+
1
7
  ## [0.9.2] - 2026-10-31
2
8
 
3
9
  - 宿主包运行时显式提供文章渲染、从源稿渲染、本地文本提取、长度评估和长度规则集评估。文章结果绑定所选稿与产物的 SHA-256,可选绑定创作快照指纹。
package/README.en.md CHANGED
@@ -54,7 +54,7 @@ See the [practice and specimens](./shared/references/creative-practice.md) and [
54
54
  | Long-form · WeChat | [`topmind-wechat-post`](./topmind-wechat-post/) | WeChat articles: three quality gates, inline-image layout, publish checklist | "写公众号", "公众号排版" |
55
55
  | Formatting | [`topmind-format`](./topmind-format/) | Re-layout without changing a word; stitch alternative openings into full posts | "转段子", "排一下版" |
56
56
  | Revision | [`topmind-revise`](./topmind-revise/) | Structure → facts → logic → de-AI → fidelity audit; quick review for replies | "改稿", "去 AI 味", "看看这条回复" |
57
- | Covers | [`topmind-cover`](./topmind-cover/) | Xiaohongshu, Douyin image posts, WeChat and X covers; sourced guidance and crop presets | "做个封面" |
57
+ | Covers | [`topmind-cover`](./topmind-cover/) | Xiaohongshu, Douyin, WeChat and X covers, including video thumbnails and paired crops | "做个封面" |
58
58
  | Long images | [`topmind-poster`](./topmind-poster/) | HTML → hi-res long image / poster / infographic with exact text and numbers | "出张长图" |
59
59
 
60
60
  ## Creative directions and on-demand knowledge
@@ -76,7 +76,7 @@ Cover resources include 22 adaptable style entries, 16 composition relationships
76
76
 
77
77
  The [platform reference](./shared/references/platform-cover-specs.md) records public sources, verification dates and untested details. Start Xiaohongshu image notes at 3:4; check ordinary Douyin image posts separately from commerce content; distinguish WeChat article landscape / square covers from image messages. Dimensions are package export presets; current editors and user requirements take priority.
78
78
 
79
- `topmind-cover` provides `article`, `x-post`, `xiaohongshu`, `douyin` and `wechat` presets. The WeChat preset exports landscape and square versions, with adjustable crop alignment. Recompose portrait and landscape versions when needed. Dense content pages use `topmind-poster`; platform adaptation does not authorize publishing.
79
+ The `landscape-pair` preset in `topmind-cover` exports a centered 4:3 cover and the full 16:9 master. Compose the subject and title in the 4:3 window and extend the scene at both sides. Start portrait covers at 3:4 and export 9:16 separately when the publishing surface calls for it. Check the video frame, cover picker, and feed preview separately. Article, image-post, X, and WeChat presets continue to serve their own surfaces.
80
80
 
81
81
  ## Duanzi: 14 patterns
82
82
 
package/README.md CHANGED
@@ -54,7 +54,7 @@ npx @topmindspace/topmind-writing-skills@latest update # 以后只更新已
54
54
  | 长文 · 公众号 | [`topmind-wechat-post`](./topmind-wechat-post/) | 公众号长文:质量三关、图片内嵌排版、发布清单 | 「写公众号」「公众号排版」 |
55
55
  | 格式化 | [`topmind-format`](./topmind-format/) | 现成文字只改排版不改字:转段子、格式化成短文、几个开头拼成品 | 「转段子」「排一下版」 |
56
56
  | 改稿 | [`topmind-revise`](./topmind-revise/) | 结构 → 事实 → 逻辑 → 去 AI 味 → 保真审计;也能快审一条回复 | 「改稿」「去 AI 味」「看看这条回复」 |
57
- | 封面 | [`topmind-cover`](./topmind-cover/) | 小红书、抖音图文、公众号与 X 封面:平台适配、核字与多比例裁切 | 「做个封面」「头图」 |
57
+ | 封面 | [`topmind-cover`](./topmind-cover/) | 小红书、抖音、公众号与 X 封面,含视频缩略图、叠字和多比例裁切 | 「做个封面」「头图」 |
58
58
  | 长图 | [`topmind-poster`](./topmind-poster/) | HTML → 高清长图 / 海报 / 信息图,文字数字逐字正确 | 「出张长图」「做个榜单图」 |
59
59
 
60
60
  **短文** = X 纯文本帖,1000 字以内都行;**长文** = X Article 或公众号长文;**段子** = 以观察、反差或幽默推进的短帖,排版按节奏选择。
@@ -78,7 +78,7 @@ npm run knowledge:check
78
78
 
79
79
  [平台参考](./shared/references/platform-cover-specs.md) 记录公开来源、核验日期和未实测项:小红书图文可从 3:4 起步,抖音普通图文与商城内容分别核对,公众号普通文章宽图 / 方图与图片消息分开处理。尺寸是本包导出预设,当前发布入口与用户要求优先。
80
80
 
81
- `topmind-cover` 支持 `article`、`x-post`、`xiaohongshu`、`douyin` 和 `wechat` 预设;`wechat` 另给宽图与方图,裁切方向可调整。横竖版需要时分别构图,不用固定安全区或缺少证据的点击率约束设计。密集内容页用 `topmind-poster`,跨平台不自动扩展发布权限。
81
+ `topmind-cover` 的 `landscape-pair` 从同一张 16:9 母图导出中央 4:3 主版和完整 16:9 备版。先在 4:3 框内放主体和标题,两侧用场景延展。竖版以 3:4 构图为起点,按发布入口另取 9:16。成片画幅、封面选择和列表露出分别核对。文章、X 短帖、普通图文和微信宽图及方图继续使用各自预设。
82
82
 
83
83
  ## 段子:14 种写法
84
84
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topmindspace/topmind-writing-skills",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "description": "TopMindSpace 写作技能合集 — 通过 npm / npx 安装技能(公众号长文、X 长文、干货短文、X 引流短帖、改稿与质检、封面图、长图海报)。只出稿与发布包,不代发。",
5
5
  "license": "MIT",
6
6
  "author": "TopMindspace",
@@ -8,7 +8,7 @@
8
8
  | * | [把参考转成自己的方法](cards/reference-reading.md) | 记录实际可见的组织关系,再用当前素材重新表达。 |
9
9
  | * | [把一次反馈变成有范围的经验](cards/experience-loop.md) | 保留场景、选择、结果、例外与证据性质,先候选后纳入。 |
10
10
  | topmind-cover | [编辑式封面:用版面关系建立气质](cards/cover-editorial.md) | 用对齐、尺度、负空间和图像裁切建立优雅,而非统一靠大字与装饰。 |
11
- | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。 |
11
+ | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。 |
12
12
  | topmind-cover | [场景:让关系承载故事](cards/cover-scene.md) | 从时间、地点、动作、材料和尺度关系中选择最能解释主题的场景。 |
13
13
  | topmind-cover | [摄影与真实素材:裁切、负空间和介质](cards/cover-photo.md) | 用真实素材的独有细节与负空间组织封面,区别纪实照片和生成示意。 |
14
14
  | topmind-cover | [拼贴:统一材料,保留多层信息](cards/cover-collage.md) | 用裁切边缘、材料和重叠关系建立层次,避免无目的堆素材。 |
@@ -17,3 +17,9 @@
17
17
 
18
18
  ## 花式
19
19
  轮廓与填色错位、字作蒙版、压印、剪纸、连笔、细线穿插、玻璃、材质字、沿路径排字、局部透视都可试。中文关键笔画与意思要完整,艺术变形不能替代核字。
20
+
21
+ ## 系列封面复核
22
+
23
+ 同系列共用识别色和标识,排版随主体变化。机械主体可以用接续场景光色的实心金属字;突出动作时可以让动词单独成块,用错位或斜条指向画面动作。只保留识别主题所需的字,说明性内容可放正文。
24
+
25
+ 先核对实际字族与字重,再看约 300 px 宽的目标比例缩略图。字的大小、光效、识别主体和裁切一起判断。小红书与抖音共用横版时,按场景需要先做 4:3 核心,再看 16:9 两侧延展和实际发布页。
@@ -137,7 +137,7 @@
137
137
  "typography",
138
138
  "type"
139
139
  ],
140
- "summary": "以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。",
140
+ "summary": "按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。",
141
141
  "scope": "标题承担主要视觉、精确中文和多行文案",
142
142
  "limits": "字体名称不代表已安装;最终出字需要核字与许可核对。",
143
143
  "kind": "direction",
@@ -150,7 +150,7 @@
150
150
  "ref": "TopMindSpace authored teaching example; not a measured performance claim"
151
151
  }
152
152
  ],
153
- "updated": "2026-10-27"
153
+ "updated": "2026-11-09"
154
154
  },
155
155
  {
156
156
  "id": "cover-scene",
@@ -1,6 +1,6 @@
1
1
  # 平台封面与图文适配
2
2
 
3
- 资料核验:2026-10-27。依据公开页面和官方搜索索引;未登录各平台后台实测。页面不可读、不同入口或版本不一致时,只采用可确认结论,交付时写清未验证项。
3
+ 最近核验于 2026-11-09。依据公开页面、搜索索引及有标注的创作者录屏;未登录各平台后台实测。页面不可读、不同入口或版本不一致时,只采用可确认结论,交付时写清未验证项。
4
4
 
5
5
  ## 先确定发布形态
6
6
 
@@ -20,6 +20,18 @@
20
20
  | X Article | 1500×600,5:2 | 本包常用预设;官方帮助强调头图与内容相关,未在该页给出固定像素 [5] | Article 编辑器、信息流、文章页的实际裁切 |
21
21
  | X 普通帖配图 | 1200×675,16:9 | 本包常用预设;按单图、多图和用户要求调整 | 单图 / 多图预览、缩略图可读性 |
22
22
 
23
+ ## 小红书与抖音的跨平台封面
24
+
25
+ 先分别记录成片画幅、发布入口的封面选择框,以及实际预览中封面的露出和界面遮挡。图文、视频和商品入口各自记录。小红书电商课程的 3:4 建议针对商品笔记 [1]。公开创作者录屏曾显示抖音网页视频发布入口提供 3:4 竖封面和 4:3 横封面 [6]。该录屏只作入口线索,两个平台的发布页都未登录实测。
26
+
27
+ | 交付场景 | 制作预设 | 操作 |
28
+ | --- | --- | --- |
29
+ | 横版内容共用封面 | 4:3 主版 1080×810,16:9 备版 1920×1080 | 在 1920×1080 的中央 1440×1080 放标题、识别主体和必需标识。两侧各 240 px 用原场景延展。发布页接受 4:3 时直接用主版。要求 16:9 时用完整图。 |
30
+ | 小红书竖版为主 | 3:4 版 1080×1440,按需另出 9:16 版 1080×1920 | 在 9:16 底图的中央 1080×1440 排核心,使用原图背景延展上下两侧。发布页显示不同裁切时重新取景和排字。 |
31
+ | 同时要横版和竖版 | 两套构图 | 共用原始素材、标题逻辑和系列识别。横版需要横向动线,竖版优先保住面部与主标题。 |
32
+
33
+ 用实际的裁切框检查标题、眼睛、产品关键轮廓和归属信息。登录发布页后再核对封面截取、列表缩略图和界面遮挡。底部遮挡、字数、字号、文件大小及点击率等说法在缺少对应入口证据时保留为待验证项。
34
+
23
35
  ## 场景约束与设计判断
24
36
 
25
37
  - **小红书**:[1] 的生活化商品笔记课程建议用真实场景、图片尺寸一致,并不建议在该类封面额外加文案。这不能扩大成所有笔记禁止加字、禁止白底或必须发固定张数。知识、观点、清单封面可根据内容排字,不承诺某种字体、颜色或版式必然带来高互动。
@@ -36,13 +48,14 @@
36
48
  ```bash
37
49
  python3 crop-cover.py 横版主图.png --out-dir 输出目录
38
50
  python3 crop-cover.py X短帖主图.png --preset x-post --out-dir 输出目录
51
+ python3 crop-cover.py 中央4比3已构图的16比9母图.png --preset landscape-pair --out-dir 输出目录
39
52
  python3 crop-cover.py 竖版主图.png --preset xiaohongshu --out-dir 输出目录
40
53
  python3 crop-cover.py 竖版主图.png --preset douyin --out-dir 输出目录
41
54
  python3 crop-cover.py 原图.png --preset wechat --out-dir 输出目录
42
55
  python3 crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出目录
43
56
  ```
44
57
 
45
- 其他技能独立安装时不假定这个脚本存在,可用当前环境的等比裁切工具。`article` 保留既有双横图命名;`wechat` 另给宽图与方图。每张直接从原图等比裁切,`--anchor` 可选 center / left / right / top / bottom,不能恢复原图里没有的内容。方图标题被切时重新排版,禁止拉伸凑比例。脚本仅保证输出尺寸,不证明平台已验收或画面合格。
58
+ 其他技能独立安装时不假定这个脚本存在,可用当前环境的等比裁切工具。`article` 保留既有双横图命名;`wechat` 另给宽图与方图。每张直接从原图等比裁切,`--anchor` 可选 center / left / right / top / bottom,不能恢复原图里没有的内容。方图标题被切时重新排版,禁止拉伸凑比例。脚本仅保证输出尺寸,不证明平台已验收或画面合格。`landscape-pair` 只接收已完成中央构图的 16:9 母图,导出中央 4:3 和完整 16:9。原图只有 4:3 时先回原场景找两侧背景,或单独重排宽版。
46
59
 
47
60
  ## 交付前核对
48
61
 
@@ -56,4 +69,6 @@ python3 crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出
56
69
  4. [Canva 可画:微信公众号尺寸](https://www.canva.cn/sizes/wechat-official-account/)(第三方设计指南)。列有 900×383 与方形小图;其中其他上传限制未获微信官方现行资料验证,本包不引用为硬规则。
57
70
  5. [X 官方帮助:About Articles](https://help.x.com/en/using-x/articles)(官方帮助)。头图应贴题;该页不提供 1500×600 的硬性规格,账号主页 banner 也不是 Article 封面。
58
71
 
72
+ 6. [抖音公开创作者录屏](https://www.douyin.com/video/7671654312568851762)。公开搜索索引可读到录屏中横竖封面选项。内容由创作者发布,适用范围需在当前发布入口确认。
73
+
59
74
  平台资料发生冲突时回到当前发布入口与官方适用条款;新增证据时更新核验日期、场景和来源。未验证的参数保留为本包选项或待实测项,不补成“官方规定”。
@@ -4,7 +4,7 @@ English | [中文](./README.md)
4
4
 
5
5
  Design article covers and thumbnails using typography, photography, minimal layouts, scenes or original combinations. Inspect actual specimens, proofread text and verify the requested crops. Chinese is the default language; current user instructions and author samples take priority. See [SKILL.md](./SKILL.md) for the capability, workflow and tools.
6
6
 
7
- Supports Xiaohongshu image notes, ordinary Douyin image posts, WeChat articles and X. Identify the publishing surface first. The [platform reference](./references/platform-cover-specs.md) records sources, verification dates and untested details; export presets are not universal upload requirements. WeChat image messages, Douyin commerce content and product images need their own checks.
7
+ Supports article, image-post and video covers for Xiaohongshu, Douyin, WeChat and X. Identify the publishing surface first. The [platform reference](./references/platform-cover-specs.md) records sources, verification dates and untested details; export presets are not universal upload requirements. WeChat image messages, Douyin commerce content and product images need their own checks.
8
8
 
9
9
  ## Install
10
10
 
@@ -26,12 +26,15 @@ The [layout atlas](./assets/examples/creative-atlas.html) contains eight HTML/CS
26
26
  Run from this skill directory, using actual input paths:
27
27
 
28
28
  ```bash
29
- python3 scripts/crop-cover.py 主图.png --out-dir 输出目录
29
+ python3 scripts/crop-cover.py original.png --out-dir output
30
+ python3 scripts/crop-cover.py landscape-master.png --preset landscape-pair --out-dir output
30
31
  python3 scripts/crop-cover.py portrait.png --preset xiaohongshu --out-dir output
31
32
  python3 scripts/crop-cover.py portrait.png --preset douyin --out-dir output
32
33
  python3 scripts/crop-cover.py original.png --preset wechat --anchor left --out-dir output
33
34
  ```
34
35
 
36
+ `landscape-pair` takes a 16:9 master composed for its center 4:3 window and exports 1080×810 and 1920×1080. Review both near 300 px wide. Use `python3 scripts/title-engine.py --list-fonts` to check the actual local family, weight, and collection index.
37
+
35
38
  The default `article` preset keeps both landscape outputs (1500×600 and 900×383); `x-post` exports 1200×675; `xiaohongshu` / `douyin` export 1080×1440; `wechat` exports 900×383 and 900×900. These are package presets. Check the current editor and user specifications. Use `--anchor center|left|right|top|bottom` to adjust crop alignment. Every output is cropped proportionally from the original. Recompose when titles or subjects are cut; inspect every version. The script refuses to overwrite its source image.
36
39
 
37
40
  Cropping requires Pillow; title tools also need NumPy. Typography and decoration suggestions support design decisions; malformed input still needs correction. Proofread and inspect every final crop.
@@ -4,7 +4,7 @@
4
4
 
5
5
  看实际参考与风格样张,选择摄影、字体、极简、场景等方向,核字与裁切。
6
6
 
7
- 适配小红书图文、抖音普通图文、公众号文章和 X。先确定发布形态,平台依据与导出预设分开处理;[平台封面参考](./references/platform-cover-specs.md) 记录来源、核验日期与未实测项。公众号图片消息、抖音商城和商品主图需分别确认,不能照搬普通图文规则。
7
+ 适配小红书、抖音、公众号与 X 的图文和视频封面。先确定发布形态,平台依据与导出预设分开处理;[平台封面参考](./references/platform-cover-specs.md) 记录来源、核验日期与未实测项。公众号图片消息、抖音商城和商品主图需分别确认,不能照搬普通图文规则。
8
8
 
9
9
  ## 使用
10
10
 
@@ -29,11 +29,14 @@ npx @topmindspace/topmind-writing-skills install topmind-cover
29
29
 
30
30
  ```bash
31
31
  python3 scripts/crop-cover.py 主图.png --out-dir 输出目录
32
+ python3 scripts/crop-cover.py 横版母图.png --preset landscape-pair --out-dir 输出目录
32
33
  python3 scripts/crop-cover.py 竖版主图.png --preset xiaohongshu --out-dir 输出目录
33
34
  python3 scripts/crop-cover.py 竖版主图.png --preset douyin --out-dir 输出目录
34
35
  python3 scripts/crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出目录
35
36
  ```
36
37
 
38
+ `landscape-pair` 使用中央 4:3 已完成排版的 16:9 母图,导出 1080×810 与 1920×1080。检查约 300 px 宽的缩略图,并用 `python3 scripts/title-engine.py --list-fonts` 核对本机实际字族、字重和字体集合索引。
39
+
37
40
  默认 `article` 输出 1500×600 与 900×383 双横图;`x-post` 输出 1200×675;`xiaohongshu` / `douyin` 输出 1080×1440;`wechat` 输出 900×383 与 900×900。以上是本包预设,按当前发布入口与用户规格调整。`--anchor` 支持 center / left / right / top / bottom。每张直接从原图等比裁切,不能替代横竖版重新构图;标题或主体被切时重排,上传前逐版预览。脚本不会覆盖输入原图。
38
41
 
39
42
  裁切需 Pillow;标题工具还需 NumPy。字体、字号和装饰提示用于设计判断,结构错误仍需修复。最终逐版核字、看图与检查裁切。
@@ -1,14 +1,14 @@
1
1
  ---
2
2
  name: topmind-cover
3
- description: "设计文章封面、头图和缩略图,适配小红书图文、抖音图文、公众号、X Article 与短帖;按发布形态、真实参考和主题完成构图、成图、核字与裁切。密集信息图用 topmind-poster。"
3
+ description: "设计文章、图文与视频封面、头图和缩略图,适配小红书、抖音、公众号、X Article 与短帖;按发布形态、真实参考和主题完成构图、成图、核字与裁切。密集信息图用 topmind-poster。"
4
4
  license: MIT
5
5
  metadata:
6
- version: "0.5.0"
6
+ version: "0.5.1"
7
7
  action_category: "write"
8
- triggers: "封面, 封面图, 小红书封面, 抖音封面, 图文封面, X 短文封面, 短帖封面, 头图, 题图, 首图, 封面配图, 缩略图, banner, cover, thumbnail, 公众号封面, 公众号题图, 公众号头图, X 封面, X 首图, X 长文头图, 文章封面, 封面风格"
8
+ triggers: "封面, 封面图, 小红书封面, 抖音封面, 图文封面, 视频封面, X 短文封面, 短帖封面, 头图, 题图, 首图, 封面配图, 缩略图, banner, cover, thumbnail, 公众号封面, 公众号题图, 公众号头图, X 封面, X 首图, X 长文头图, 文章封面, 封面风格"
9
9
  author: "TopMindSpace"
10
10
  homepage: "https://github.com/topmindspace/topmind-writing-skills#readme"
11
- updated: "2026-10-27"
11
+ updated: "2026-11-09"
12
12
  ---
13
13
 
14
14
  # topmind-cover · 文章封面
@@ -52,18 +52,19 @@ metadata:
52
52
  | 抖音普通图文 | 1080×1440,3:4;本包起点,需核对实际发布入口 |
53
53
  | 公众号方图 | 900×900,1:1;本包高清预设,分别检查小图展示 |
54
54
 
55
- 系列多版可复用素材、字体与色彩;横竖版分别布局,需要时才裁切。宽图、方图直接从原图分别裁切并检查;裁切会损伤标题或主体时重新布局。标题长短、安全边距和字号由画幅、字体、缩略图可读性决定,不为字数阈值改坏意思;不把未经验证的占屏比例、遮挡区域或点击率写成平台规则。
55
+ 系列多版可复用素材、字体与色彩;横竖版分别布局,需要时才裁切。抖音和小红书共用横版时,先在中央 4:3 排主体与标题,再用原场景补足 16:9 两侧,按发布入口导出。视频比例、封面选择框和列表露出分开判断。制作 3:4 和 9:16 竖版时使用同一竖向核心,按入口重新裁取或排版。宽图、方图直接从原图分别裁切并检查;裁切会损伤标题或主体时重新布局。标题长短、安全边距和字号由画幅、字体、缩略图可读性决定,不为字数阈值改坏意思;不把未经验证的占屏比例、遮挡区域或点击率写成平台规则。
56
56
 
57
57
  可整张生成,也可生成场景后用 `scripts/title-engine.py` 或 `scripts/overlay-title.py` 叠字;纯文字封面可直接排版。文字多、生僻字或需要反复改字时,叠字可以从一开始采用。使用当前环境实际提供的生图工具,不假定某个固定 API 存在。完整 prompt 见 [cover-prompts.md](references/cover-prompts.md),按当前方案删改槽位。
58
58
 
59
59
  ## 核对与交付
60
60
 
61
- 出图后实际看图,核对每个字、数字、归属、主题、缩略图可读性和各尺寸裁切。设计维度用于诊断,不用自评分数证明质量,不因纯色底、没有人物或道具少而重做。发现问题先局部修正;多次尝试无改善时换路径或说明具体限制,迭代次数与成本相称。
61
+ 出图后实际看图,核对每个字、数字、归属、主题、缩略图可读性和各尺寸裁切。系列封面先核对观众第一眼要读的词与看到的主体,再决定哪些说明可以移到正文。按 [字效与排版](references/typography-system.md) 核对实际字重;多比例交付逐张看目标缩略图和模拟裁切。设计维度用于诊断,不用自评分数证明质量,不因纯色底、没有人物或道具少而重做。发现问题先局部修正;多次尝试无改善时换路径或说明具体限制,迭代次数与成本相称。
62
62
 
63
63
  事实图、logo、产品截图来自真实素材;生成示意与摄影原图分清。参考可借构图原理、配色关系与叙事方法,独特标识和素材按许可使用,表达服务当前文章。
64
64
 
65
65
  ```bash
66
66
  python3 scripts/crop-cover.py <主图> --out-dir <交付目录>
67
+ python3 scripts/crop-cover.py <中央4:3已构图的16:9母图> --preset landscape-pair --out-dir <交付目录>
67
68
  python3 scripts/crop-cover.py <主图> --preset x-post --out-dir <交付目录>
68
69
  python3 scripts/crop-cover.py <竖版主图> --preset xiaohongshu --out-dir <交付目录>
69
70
  python3 scripts/crop-cover.py <竖版主图> --preset douyin --out-dir <交付目录>
@@ -8,7 +8,7 @@
8
8
  | * | [把参考转成自己的方法](cards/reference-reading.md) | 记录实际可见的组织关系,再用当前素材重新表达。 |
9
9
  | * | [把一次反馈变成有范围的经验](cards/experience-loop.md) | 保留场景、选择、结果、例外与证据性质,先候选后纳入。 |
10
10
  | topmind-cover | [编辑式封面:用版面关系建立气质](cards/cover-editorial.md) | 用对齐、尺度、负空间和图像裁切建立优雅,而非统一靠大字与装饰。 |
11
- | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。 |
11
+ | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。 |
12
12
  | topmind-cover | [场景:让关系承载故事](cards/cover-scene.md) | 从时间、地点、动作、材料和尺度关系中选择最能解释主题的场景。 |
13
13
  | topmind-cover | [摄影与真实素材:裁切、负空间和介质](cards/cover-photo.md) | 用真实素材的独有细节与负空间组织封面,区别纪实照片和生成示意。 |
14
14
  | topmind-cover | [拼贴:统一材料,保留多层信息](cards/cover-collage.md) | 用裁切边缘、材料和重叠关系建立层次,避免无目的堆素材。 |
@@ -17,3 +17,9 @@
17
17
 
18
18
  ## 花式
19
19
  轮廓与填色错位、字作蒙版、压印、剪纸、连笔、细线穿插、玻璃、材质字、沿路径排字、局部透视都可试。中文关键笔画与意思要完整,艺术变形不能替代核字。
20
+
21
+ ## 系列封面复核
22
+
23
+ 同系列共用识别色和标识,排版随主体变化。机械主体可以用接续场景光色的实心金属字;突出动作时可以让动词单独成块,用错位或斜条指向画面动作。只保留识别主题所需的字,说明性内容可放正文。
24
+
25
+ 先核对实际字族与字重,再看约 300 px 宽的目标比例缩略图。字的大小、光效、识别主体和裁切一起判断。小红书与抖音共用横版时,按场景需要先做 4:3 核心,再看 16:9 两侧延展和实际发布页。
@@ -137,7 +137,7 @@
137
137
  "typography",
138
138
  "type"
139
139
  ],
140
- "summary": "以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。",
140
+ "summary": "按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。",
141
141
  "scope": "标题承担主要视觉、精确中文和多行文案",
142
142
  "limits": "字体名称不代表已安装;最终出字需要核字与许可核对。",
143
143
  "kind": "direction",
@@ -150,7 +150,7 @@
150
150
  "ref": "TopMindSpace authored teaching example; not a measured performance claim"
151
151
  }
152
152
  ],
153
- "updated": "2026-10-27"
153
+ "updated": "2026-11-09"
154
154
  },
155
155
  {
156
156
  "id": "cover-scene",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "topmind-cover",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "private": true,
5
- "description": "设计小红书、抖音图文、公众号与 X 封面;按平台场景核对来源、构图、文字和裁切。",
5
+ "description": "设计文章、图文与视频封面;支持小红书、抖音、公众号和 X 的构图、叠字与多比例导出。",
6
6
  "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",
@@ -1,6 +1,6 @@
1
1
  # 平台封面与图文适配
2
2
 
3
- 资料核验:2026-10-27。依据公开页面和官方搜索索引;未登录各平台后台实测。页面不可读、不同入口或版本不一致时,只采用可确认结论,交付时写清未验证项。
3
+ 最近核验于 2026-11-09。依据公开页面、搜索索引及有标注的创作者录屏;未登录各平台后台实测。页面不可读、不同入口或版本不一致时,只采用可确认结论,交付时写清未验证项。
4
4
 
5
5
  ## 先确定发布形态
6
6
 
@@ -20,6 +20,18 @@
20
20
  | X Article | 1500×600,5:2 | 本包常用预设;官方帮助强调头图与内容相关,未在该页给出固定像素 [5] | Article 编辑器、信息流、文章页的实际裁切 |
21
21
  | X 普通帖配图 | 1200×675,16:9 | 本包常用预设;按单图、多图和用户要求调整 | 单图 / 多图预览、缩略图可读性 |
22
22
 
23
+ ## 小红书与抖音的跨平台封面
24
+
25
+ 先分别记录成片画幅、发布入口的封面选择框,以及实际预览中封面的露出和界面遮挡。图文、视频和商品入口各自记录。小红书电商课程的 3:4 建议针对商品笔记 [1]。公开创作者录屏曾显示抖音网页视频发布入口提供 3:4 竖封面和 4:3 横封面 [6]。该录屏只作入口线索,两个平台的发布页都未登录实测。
26
+
27
+ | 交付场景 | 制作预设 | 操作 |
28
+ | --- | --- | --- |
29
+ | 横版内容共用封面 | 4:3 主版 1080×810,16:9 备版 1920×1080 | 在 1920×1080 的中央 1440×1080 放标题、识别主体和必需标识。两侧各 240 px 用原场景延展。发布页接受 4:3 时直接用主版。要求 16:9 时用完整图。 |
30
+ | 小红书竖版为主 | 3:4 版 1080×1440,按需另出 9:16 版 1080×1920 | 在 9:16 底图的中央 1080×1440 排核心,使用原图背景延展上下两侧。发布页显示不同裁切时重新取景和排字。 |
31
+ | 同时要横版和竖版 | 两套构图 | 共用原始素材、标题逻辑和系列识别。横版需要横向动线,竖版优先保住面部与主标题。 |
32
+
33
+ 用实际的裁切框检查标题、眼睛、产品关键轮廓和归属信息。登录发布页后再核对封面截取、列表缩略图和界面遮挡。底部遮挡、字数、字号、文件大小及点击率等说法在缺少对应入口证据时保留为待验证项。
34
+
23
35
  ## 场景约束与设计判断
24
36
 
25
37
  - **小红书**:[1] 的生活化商品笔记课程建议用真实场景、图片尺寸一致,并不建议在该类封面额外加文案。这不能扩大成所有笔记禁止加字、禁止白底或必须发固定张数。知识、观点、清单封面可根据内容排字,不承诺某种字体、颜色或版式必然带来高互动。
@@ -36,13 +48,14 @@
36
48
  ```bash
37
49
  python3 crop-cover.py 横版主图.png --out-dir 输出目录
38
50
  python3 crop-cover.py X短帖主图.png --preset x-post --out-dir 输出目录
51
+ python3 crop-cover.py 中央4比3已构图的16比9母图.png --preset landscape-pair --out-dir 输出目录
39
52
  python3 crop-cover.py 竖版主图.png --preset xiaohongshu --out-dir 输出目录
40
53
  python3 crop-cover.py 竖版主图.png --preset douyin --out-dir 输出目录
41
54
  python3 crop-cover.py 原图.png --preset wechat --out-dir 输出目录
42
55
  python3 crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出目录
43
56
  ```
44
57
 
45
- 其他技能独立安装时不假定这个脚本存在,可用当前环境的等比裁切工具。`article` 保留既有双横图命名;`wechat` 另给宽图与方图。每张直接从原图等比裁切,`--anchor` 可选 center / left / right / top / bottom,不能恢复原图里没有的内容。方图标题被切时重新排版,禁止拉伸凑比例。脚本仅保证输出尺寸,不证明平台已验收或画面合格。
58
+ 其他技能独立安装时不假定这个脚本存在,可用当前环境的等比裁切工具。`article` 保留既有双横图命名;`wechat` 另给宽图与方图。每张直接从原图等比裁切,`--anchor` 可选 center / left / right / top / bottom,不能恢复原图里没有的内容。方图标题被切时重新排版,禁止拉伸凑比例。脚本仅保证输出尺寸,不证明平台已验收或画面合格。`landscape-pair` 只接收已完成中央构图的 16:9 母图,导出中央 4:3 和完整 16:9。原图只有 4:3 时先回原场景找两侧背景,或单独重排宽版。
46
59
 
47
60
  ## 交付前核对
48
61
 
@@ -56,4 +69,6 @@ python3 crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出
56
69
  4. [Canva 可画:微信公众号尺寸](https://www.canva.cn/sizes/wechat-official-account/)(第三方设计指南)。列有 900×383 与方形小图;其中其他上传限制未获微信官方现行资料验证,本包不引用为硬规则。
57
70
  5. [X 官方帮助:About Articles](https://help.x.com/en/using-x/articles)(官方帮助)。头图应贴题;该页不提供 1500×600 的硬性规格,账号主页 banner 也不是 Article 封面。
58
71
 
72
+ 6. [抖音公开创作者录屏](https://www.douyin.com/video/7671654312568851762)。公开搜索索引可读到录屏中横竖封面选项。内容由创作者发布,适用范围需在当前发布入口确认。
73
+
59
74
  平台资料发生冲突时回到当前发布入口与官方适用条款;新增证据时更新核验日期、场景和来源。未验证的参数保留为本包选项或待实测项,不补成“官方规定”。
@@ -59,8 +59,18 @@
59
59
 
60
60
  三条路径都保留标题意思,区别是读序与媒介。长标题不必先压成八个字,手法的价值由实际成图判断。
61
61
 
62
+ ## 系列封面的层级诊断
63
+
64
+ 如果同一系列每张都变成相同的“大字、说明、英文名、徽标”,先判断这次要读到的是角色、结果还是问题,再让另一层文字负责补足。系列标识可以共用,排版和字效应随画面重心变化。人物眼睛、关键产品轮廓与主标题的位置一起调整。
65
+
66
+ - 机械主体的金属字可以接续画面光色。用一层实心高对比字面保住笔画,材质、挤出或描边集中在主要文字。
67
+ - 动作是重点时,可用错位字级、斜条或断行表达方向。动作词单独成块,背景与文字形成强对比,缩略图里仍能先读出动作。
68
+ - 打开约 300 px 宽的成图看一次,记录最先读到的词,再核对主体与必要标识。主标题不清时先换真实字重、位置或衬底,画面信息堆叠时先删重复说明。这个尺寸用于本地检查。
69
+
62
70
  ## 可执行叠字
63
71
 
64
72
  `overlay-title.py` 提供快速文字叠加;`title-engine.py` 支持逐字字号 / 颜色、tracking、vertical、arc、wave、渐变、材质、描边、挤出、投影、发光、故障、底板、贴纸、旋转、斜切、透视、装饰与主体遮挡。真实字段以脚本开头为准,基础协议见 [design-system.md](design-system.md)。
65
73
 
74
+ `title-engine.py --list-fonts` 显示实际字族、字重和 TTC 索引。优先用已配置的中文字体;常用黑体和宋体别名在 macOS 上可以回退到系统字库,例如 Hiragino W6。回退后的实际字重可能与别名不同,以输出与字形为准。
75
+
66
76
  可检索知识卡 cover-typography / cover-material / cover-editorial;实际排版样张见 [creative-atlas.html](../assets/examples/creative-atlas.html)。生成与确定性排字都可从一开始采用,不要求先失败多次。
@@ -10,6 +10,7 @@
10
10
 
11
11
  其他预设(各输出直接从原图裁切):
12
12
  python3 crop-cover.py <16:9 主图> --preset x-post --out-dir <目录>
13
+ python3 crop-cover.py <中央 4:3 已构图的 16:9 母图> --preset landscape-pair --out-dir <目录>
13
14
  python3 crop-cover.py <竖版主图> --preset xiaohongshu --out-dir <目录>
14
15
  python3 crop-cover.py <竖版主图> --preset douyin --out-dir <目录>
15
16
  python3 crop-cover.py <原图> --preset wechat --anchor left --out-dir <目录>
@@ -33,6 +34,10 @@ PRESETS = {
33
34
  "x-post": {
34
35
  "00-封面-X短文.png": (1200, 675),
35
36
  },
37
+ "landscape-pair": {
38
+ "00-封面-横版-4x3.png": (1080, 810),
39
+ "00-封面-横版-16x9.png": (1920, 1080),
40
+ },
36
41
  "xiaohongshu": {"00-封面-小红书.png": (1080, 1440)},
37
42
  "douyin": {"00-封面-抖音图文.png": (1080, 1440)},
38
43
  "wechat": {
@@ -56,6 +61,7 @@ def main() -> None:
56
61
  ap.add_argument("--out-dir", required=True)
57
62
  ap.add_argument("--preset", choices=sorted(PRESETS), default="article",
58
63
  help="本包导出预设:article 双横图(默认);x-post 16:9;"
64
+ "landscape-pair 中央 4:3 与完整 16:9;"
59
65
  "xiaohongshu / douyin 3:4;wechat 宽图与方图。不是平台硬性要求")
60
66
  ap.add_argument("--anchor", choices=sorted(ANCHORS), default="center",
61
67
  help="裁切保留方向,默认 center;请实际检查每张输出")
@@ -78,6 +84,11 @@ def main() -> None:
78
84
  img = ImageOps.exif_transpose(opened).convert("RGB")
79
85
  except Exception as e:
80
86
  sys.exit(f"错误:无法读取图片 {src}({e})")
87
+ if args.preset == "landscape-pair":
88
+ if args.anchor != "center":
89
+ sys.exit("错误:横版双尺寸预设只使用中央 4:3,请用 --anchor center")
90
+ if img.width * 9 != img.height * 16:
91
+ sys.exit("错误:横版双尺寸预设需要已完成构图的 16:9 母图,请保留完整背景再叠字")
81
92
  try:
82
93
  out_dir.mkdir(parents=True, exist_ok=True)
83
94
  except OSError as e:
@@ -85,8 +96,13 @@ def main() -> None:
85
96
 
86
97
  try:
87
98
  for name, (tw, th) in targets.items():
88
- out = ImageOps.fit(img, (tw, th), method=Image.Resampling.LANCZOS,
89
- centering=ANCHORS[args.anchor])
99
+ if args.preset == "landscape-pair" and tw * 3 == th * 4:
100
+ width = img.height * 4 // 3
101
+ left = (img.width - width) // 2
102
+ out = img.crop((left, 0, left + width, img.height)).resize((tw, th), Image.Resampling.LANCZOS)
103
+ else:
104
+ out = ImageOps.fit(img, (tw, th), method=Image.Resampling.LANCZOS,
105
+ centering=ANCHORS[args.anchor])
90
106
  dest = out_dir / name
91
107
  out.save(dest)
92
108
  print(f"OK {dest} ({tw}x{th})")
@@ -40,6 +40,9 @@ def main() -> None:
40
40
  crops = subprocess.run([PY, str(ROOT / "scripts" / "test_crop_cover.py")],
41
41
  capture_output=True, text=True, timeout=60)
42
42
  check("多平台裁切行为回归", crops.returncode == 0, crops.stdout + crops.stderr)
43
+ faces = subprocess.run([PY, str(ROOT / "scripts" / "test_title_font_resolution.py")],
44
+ capture_output=True, text=True, timeout=60)
45
+ check("中文字体解析与系统回退", faces.returncode == 0, faces.stdout + faces.stderr)
43
46
  with tempfile.TemporaryDirectory() as td:
44
47
  td = Path(td)
45
48
 
@@ -7,7 +7,7 @@ import sys
7
7
  import tempfile
8
8
  import unittest
9
9
 
10
- from PIL import Image
10
+ from PIL import Image, ImageChops
11
11
 
12
12
  CROP = Path(__file__).with_name("crop-cover.py")
13
13
 
@@ -45,6 +45,34 @@ class CoverCropTests(unittest.TestCase):
45
45
  self.assertEqual(image.size, size)
46
46
  self.assertEqual(image.format, "PNG")
47
47
 
48
+ def test_landscape_pair_shares_the_central_composition(self):
49
+ image = Image.new("RGB", (1920, 1080), "green")
50
+ image.paste("red", (0, 0, 240, 1080))
51
+ image.paste("blue", (1680, 0, 1920, 1080))
52
+ image.paste("gold", (830, 220, 1120, 450))
53
+ image.save(self.src)
54
+ r = self.run_crop("--preset", "landscape-pair")
55
+ self.assertEqual(r.returncode, 0, r.stderr)
56
+ self.assertEqual(len(list(self.out.iterdir())), 2)
57
+ with Image.open(self.out / "00-封面-横版-16x9.png") as wide:
58
+ self.assertEqual(wide.size, (1920, 1080))
59
+ self.assertIsNone(ImageChops.difference(image, wide).getbbox())
60
+ with Image.open(self.out / "00-封面-横版-4x3.png") as compact:
61
+ self.assertEqual(compact.size, (1080, 810))
62
+ expect = image.crop((240, 0, 1680, 1080)).resize((1080, 810), Image.Resampling.LANCZOS)
63
+ self.assertIsNone(ImageChops.difference(expect, compact).getbbox())
64
+
65
+ def test_landscape_pair_rejects_nonwide_source_or_offcenter_anchor(self):
66
+ r = self.run_crop("--preset", "landscape-pair")
67
+ self.assertNotEqual(r.returncode, 0)
68
+ self.assertIn("16:9 母图", r.stderr)
69
+ self.assertFalse(self.out.exists())
70
+ Image.new("RGB", (160, 90), "green").save(self.src)
71
+ r = self.run_crop("--preset", "landscape-pair", "--anchor", "left")
72
+ self.assertNotEqual(r.returncode, 0)
73
+ self.assertIn("--anchor center", r.stderr)
74
+ self.assertFalse(self.out.exists())
75
+
48
76
  def test_default_keeps_legacy_article_outputs(self):
49
77
  r = self.run_crop()
50
78
  self.assertEqual(r.returncode, 0, r.stderr)
@@ -0,0 +1,36 @@
1
+ import os
2
+ from pathlib import Path
3
+ import runpy
4
+ import unittest
5
+ from unittest.mock import patch
6
+
7
+
8
+ TITLE = Path(__file__).with_name("title-engine.py")
9
+
10
+
11
+ class TitleFontTests(unittest.TestCase):
12
+ def setUp(self):
13
+ self.engine = runpy.run_path(str(TITLE))
14
+ self.resolve = self.engine["resolve_alias"]
15
+ self.fallback, self.index = self.engine["MAC_FONT_FALLBACKS"]["hei"]
16
+
17
+ def test_local_noto_takes_priority_over_system_font(self):
18
+ candidate = self.engine["FONTS"]["hei"][0][0]
19
+ with patch("os.path.isfile", side_effect={candidate, self.fallback}.__contains__):
20
+ self.assertEqual(self.resolve("hei"), (candidate, 0, "Bold"))
21
+
22
+ def test_system_fallback_selects_the_actual_bold_face(self):
23
+ with patch("os.path.isfile", side_effect={self.fallback}.__contains__):
24
+ self.assertEqual(self.resolve("hei"), (self.fallback, 2, None))
25
+
26
+ @unittest.skipUnless(os.path.isfile("/System/Library/Fonts/Hiragino Sans GB.ttc"), "macOS CJK face")
27
+ def test_fallback_renders_hiragino_w6(self):
28
+ actual = os.path.isfile
29
+ with patch("os.path.isfile", side_effect=lambda p: p == self.fallback and actual(p)):
30
+ font = self.engine["font"]("hei", 52)
31
+ self.assertEqual(font.getname(), ("Hiragino Sans GB", "W6"))
32
+ self.assertIsNotNone(font.getmask("擎").getbbox())
33
+
34
+
35
+ if __name__ == "__main__":
36
+ unittest.main()
@@ -41,6 +41,15 @@ FONTS = { # 别名: (候选文件, ttc 索引, 可变字重)
41
41
  "maobi": ([f"{HOME}/MaShanZheng-Regular.ttf"], 0, None),
42
42
  "wenkai": ([f"{HOME}/LXGWWenKai-Bold.ttf"], 0, None),
43
43
  }
44
+ MAC_FONT_FALLBACKS = {
45
+ "hei": ("/System/Library/Fonts/Hiragino Sans GB.ttc", 2),
46
+ "hei-black": ("/System/Library/Fonts/Hiragino Sans GB.ttc", 2),
47
+ "hei-medium": ("/System/Library/Fonts/STHeiti Medium.ttc", 1),
48
+ "hei-light": ("/System/Library/Fonts/STHeiti Light.ttc", 1),
49
+ "song": ("/System/Library/Fonts/Supplemental/Songti.ttc", 1),
50
+ "song-black": ("/System/Library/Fonts/Supplemental/Songti.ttc", 0),
51
+ "song-regular": ("/System/Library/Fonts/Supplemental/Songti.ttc", 6),
52
+ }
44
53
  _fc = {}
45
54
 
46
55
 
@@ -48,6 +57,17 @@ def fail(m):
48
57
  print("错误:" + m, file=sys.stderr); sys.exit(1)
49
58
 
50
59
 
60
+ def resolve_alias(name):
61
+ paths, index, weight = FONTS[name]
62
+ for path in paths:
63
+ if os.path.isfile(path):
64
+ return path, index if path.endswith(".ttc") else 0, weight if path.endswith("VF.ttf") else None
65
+ fallback = MAC_FONT_FALLBACKS.get(name)
66
+ if fallback and os.path.isfile(fallback[0]):
67
+ return fallback[0], fallback[1], None
68
+ return None
69
+
70
+
51
71
  def font(name, size):
52
72
  key = (name, int(size))
53
73
  if key in _fc: return _fc[key]
@@ -55,12 +75,12 @@ def font(name, size):
55
75
  f = ImageFont.truetype(name, int(size), index=0)
56
76
  else:
57
77
  if name not in FONTS: fail(f"未知字体别名 {name},可用:{', '.join(FONTS)}")
58
- paths, idx, w = FONTS[name]
59
- p = next((p for p in paths if os.path.isfile(p)), None)
60
- if not p: fail(f"字体 {name} 未安装(见 references/typography-system.md 字体安装)")
61
- f = ImageFont.truetype(p, int(size), index=idx if p.endswith(".ttc") else 0)
62
- if w and p.endswith("VF.ttf"):
63
- try: f.set_variation_by_name(w)
78
+ resolved = resolve_alias(name)
79
+ if not resolved: fail(f"字体 {name} 未安装。用 --list-fonts 核对可用别名,或传入实际字体路径")
80
+ path, index, weight = resolved
81
+ f = ImageFont.truetype(path, int(size), index=index)
82
+ if weight:
83
+ try: f.set_variation_by_name(weight)
64
84
  except Exception: pass
65
85
  _fc[key] = f
66
86
  return f
@@ -496,8 +516,14 @@ def main():
496
516
  ap.add_argument("--strict", action="store_true", help="主动启用模板门禁:--check 有建议时退出 1;出图有设计建议时退出 2")
497
517
  a = ap.parse_args()
498
518
  if a.list_fonts:
499
- for k, (ps, _, w) in FONTS.items():
500
- p = next((p for p in ps if os.path.isfile(p)), None); print(f"{k:14s} {'OK ' + os.path.basename(p) if p else '缺失'} {w or ''}")
519
+ for name in FONTS:
520
+ resolved = resolve_alias(name)
521
+ if not resolved:
522
+ print(f"{name:14s} 缺失")
523
+ continue
524
+ path, index, _ = resolved
525
+ family, style = font(name, 32).getname()
526
+ print(f"{name:14s} OK {family} {style} [{os.path.basename(path)}#{index}]")
501
527
  return
502
528
  if a.check:
503
529
  path = a.spec or a.background
@@ -8,7 +8,7 @@
8
8
  | * | [把参考转成自己的方法](cards/reference-reading.md) | 记录实际可见的组织关系,再用当前素材重新表达。 |
9
9
  | * | [把一次反馈变成有范围的经验](cards/experience-loop.md) | 保留场景、选择、结果、例外与证据性质,先候选后纳入。 |
10
10
  | topmind-cover | [编辑式封面:用版面关系建立气质](cards/cover-editorial.md) | 用对齐、尺度、负空间和图像裁切建立优雅,而非统一靠大字与装饰。 |
11
- | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。 |
11
+ | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。 |
12
12
  | topmind-cover | [场景:让关系承载故事](cards/cover-scene.md) | 从时间、地点、动作、材料和尺度关系中选择最能解释主题的场景。 |
13
13
  | topmind-cover | [摄影与真实素材:裁切、负空间和介质](cards/cover-photo.md) | 用真实素材的独有细节与负空间组织封面,区别纪实照片和生成示意。 |
14
14
  | topmind-cover | [拼贴:统一材料,保留多层信息](cards/cover-collage.md) | 用裁切边缘、材料和重叠关系建立层次,避免无目的堆素材。 |
@@ -17,3 +17,9 @@
17
17
 
18
18
  ## 花式
19
19
  轮廓与填色错位、字作蒙版、压印、剪纸、连笔、细线穿插、玻璃、材质字、沿路径排字、局部透视都可试。中文关键笔画与意思要完整,艺术变形不能替代核字。
20
+
21
+ ## 系列封面复核
22
+
23
+ 同系列共用识别色和标识,排版随主体变化。机械主体可以用接续场景光色的实心金属字;突出动作时可以让动词单独成块,用错位或斜条指向画面动作。只保留识别主题所需的字,说明性内容可放正文。
24
+
25
+ 先核对实际字族与字重,再看约 300 px 宽的目标比例缩略图。字的大小、光效、识别主体和裁切一起判断。小红书与抖音共用横版时,按场景需要先做 4:3 核心,再看 16:9 两侧延展和实际发布页。
@@ -137,7 +137,7 @@
137
137
  "typography",
138
138
  "type"
139
139
  ],
140
- "summary": "以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。",
140
+ "summary": "按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。",
141
141
  "scope": "标题承担主要视觉、精确中文和多行文案",
142
142
  "limits": "字体名称不代表已安装;最终出字需要核字与许可核对。",
143
143
  "kind": "direction",
@@ -150,7 +150,7 @@
150
150
  "ref": "TopMindSpace authored teaching example; not a measured performance claim"
151
151
  }
152
152
  ],
153
- "updated": "2026-10-27"
153
+ "updated": "2026-11-09"
154
154
  },
155
155
  {
156
156
  "id": "cover-scene",
@@ -8,7 +8,7 @@
8
8
  | * | [把参考转成自己的方法](cards/reference-reading.md) | 记录实际可见的组织关系,再用当前素材重新表达。 |
9
9
  | * | [把一次反馈变成有范围的经验](cards/experience-loop.md) | 保留场景、选择、结果、例外与证据性质,先候选后纳入。 |
10
10
  | topmind-cover | [编辑式封面:用版面关系建立气质](cards/cover-editorial.md) | 用对齐、尺度、负空间和图像裁切建立优雅,而非统一靠大字与装饰。 |
11
- | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。 |
11
+ | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。 |
12
12
  | topmind-cover | [场景:让关系承载故事](cards/cover-scene.md) | 从时间、地点、动作、材料和尺度关系中选择最能解释主题的场景。 |
13
13
  | topmind-cover | [摄影与真实素材:裁切、负空间和介质](cards/cover-photo.md) | 用真实素材的独有细节与负空间组织封面,区别纪实照片和生成示意。 |
14
14
  | topmind-cover | [拼贴:统一材料,保留多层信息](cards/cover-collage.md) | 用裁切边缘、材料和重叠关系建立层次,避免无目的堆素材。 |
@@ -17,3 +17,9 @@
17
17
 
18
18
  ## 花式
19
19
  轮廓与填色错位、字作蒙版、压印、剪纸、连笔、细线穿插、玻璃、材质字、沿路径排字、局部透视都可试。中文关键笔画与意思要完整,艺术变形不能替代核字。
20
+
21
+ ## 系列封面复核
22
+
23
+ 同系列共用识别色和标识,排版随主体变化。机械主体可以用接续场景光色的实心金属字;突出动作时可以让动词单独成块,用错位或斜条指向画面动作。只保留识别主题所需的字,说明性内容可放正文。
24
+
25
+ 先核对实际字族与字重,再看约 300 px 宽的目标比例缩略图。字的大小、光效、识别主体和裁切一起判断。小红书与抖音共用横版时,按场景需要先做 4:3 核心,再看 16:9 两侧延展和实际发布页。
@@ -137,7 +137,7 @@
137
137
  "typography",
138
138
  "type"
139
139
  ],
140
- "summary": "以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。",
140
+ "summary": "按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。",
141
141
  "scope": "标题承担主要视觉、精确中文和多行文案",
142
142
  "limits": "字体名称不代表已安装;最终出字需要核字与许可核对。",
143
143
  "kind": "direction",
@@ -150,7 +150,7 @@
150
150
  "ref": "TopMindSpace authored teaching example; not a measured performance claim"
151
151
  }
152
152
  ],
153
- "updated": "2026-10-27"
153
+ "updated": "2026-11-09"
154
154
  },
155
155
  {
156
156
  "id": "cover-scene",
@@ -1,6 +1,6 @@
1
1
  # 平台封面与图文适配
2
2
 
3
- 资料核验:2026-10-27。依据公开页面和官方搜索索引;未登录各平台后台实测。页面不可读、不同入口或版本不一致时,只采用可确认结论,交付时写清未验证项。
3
+ 最近核验于 2026-11-09。依据公开页面、搜索索引及有标注的创作者录屏;未登录各平台后台实测。页面不可读、不同入口或版本不一致时,只采用可确认结论,交付时写清未验证项。
4
4
 
5
5
  ## 先确定发布形态
6
6
 
@@ -20,6 +20,18 @@
20
20
  | X Article | 1500×600,5:2 | 本包常用预设;官方帮助强调头图与内容相关,未在该页给出固定像素 [5] | Article 编辑器、信息流、文章页的实际裁切 |
21
21
  | X 普通帖配图 | 1200×675,16:9 | 本包常用预设;按单图、多图和用户要求调整 | 单图 / 多图预览、缩略图可读性 |
22
22
 
23
+ ## 小红书与抖音的跨平台封面
24
+
25
+ 先分别记录成片画幅、发布入口的封面选择框,以及实际预览中封面的露出和界面遮挡。图文、视频和商品入口各自记录。小红书电商课程的 3:4 建议针对商品笔记 [1]。公开创作者录屏曾显示抖音网页视频发布入口提供 3:4 竖封面和 4:3 横封面 [6]。该录屏只作入口线索,两个平台的发布页都未登录实测。
26
+
27
+ | 交付场景 | 制作预设 | 操作 |
28
+ | --- | --- | --- |
29
+ | 横版内容共用封面 | 4:3 主版 1080×810,16:9 备版 1920×1080 | 在 1920×1080 的中央 1440×1080 放标题、识别主体和必需标识。两侧各 240 px 用原场景延展。发布页接受 4:3 时直接用主版。要求 16:9 时用完整图。 |
30
+ | 小红书竖版为主 | 3:4 版 1080×1440,按需另出 9:16 版 1080×1920 | 在 9:16 底图的中央 1080×1440 排核心,使用原图背景延展上下两侧。发布页显示不同裁切时重新取景和排字。 |
31
+ | 同时要横版和竖版 | 两套构图 | 共用原始素材、标题逻辑和系列识别。横版需要横向动线,竖版优先保住面部与主标题。 |
32
+
33
+ 用实际的裁切框检查标题、眼睛、产品关键轮廓和归属信息。登录发布页后再核对封面截取、列表缩略图和界面遮挡。底部遮挡、字数、字号、文件大小及点击率等说法在缺少对应入口证据时保留为待验证项。
34
+
23
35
  ## 场景约束与设计判断
24
36
 
25
37
  - **小红书**:[1] 的生活化商品笔记课程建议用真实场景、图片尺寸一致,并不建议在该类封面额外加文案。这不能扩大成所有笔记禁止加字、禁止白底或必须发固定张数。知识、观点、清单封面可根据内容排字,不承诺某种字体、颜色或版式必然带来高互动。
@@ -36,13 +48,14 @@
36
48
  ```bash
37
49
  python3 crop-cover.py 横版主图.png --out-dir 输出目录
38
50
  python3 crop-cover.py X短帖主图.png --preset x-post --out-dir 输出目录
51
+ python3 crop-cover.py 中央4比3已构图的16比9母图.png --preset landscape-pair --out-dir 输出目录
39
52
  python3 crop-cover.py 竖版主图.png --preset xiaohongshu --out-dir 输出目录
40
53
  python3 crop-cover.py 竖版主图.png --preset douyin --out-dir 输出目录
41
54
  python3 crop-cover.py 原图.png --preset wechat --out-dir 输出目录
42
55
  python3 crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出目录
43
56
  ```
44
57
 
45
- 其他技能独立安装时不假定这个脚本存在,可用当前环境的等比裁切工具。`article` 保留既有双横图命名;`wechat` 另给宽图与方图。每张直接从原图等比裁切,`--anchor` 可选 center / left / right / top / bottom,不能恢复原图里没有的内容。方图标题被切时重新排版,禁止拉伸凑比例。脚本仅保证输出尺寸,不证明平台已验收或画面合格。
58
+ 其他技能独立安装时不假定这个脚本存在,可用当前环境的等比裁切工具。`article` 保留既有双横图命名;`wechat` 另给宽图与方图。每张直接从原图等比裁切,`--anchor` 可选 center / left / right / top / bottom,不能恢复原图里没有的内容。方图标题被切时重新排版,禁止拉伸凑比例。脚本仅保证输出尺寸,不证明平台已验收或画面合格。`landscape-pair` 只接收已完成中央构图的 16:9 母图,导出中央 4:3 和完整 16:9。原图只有 4:3 时先回原场景找两侧背景,或单独重排宽版。
46
59
 
47
60
  ## 交付前核对
48
61
 
@@ -56,4 +69,6 @@ python3 crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出
56
69
  4. [Canva 可画:微信公众号尺寸](https://www.canva.cn/sizes/wechat-official-account/)(第三方设计指南)。列有 900×383 与方形小图;其中其他上传限制未获微信官方现行资料验证,本包不引用为硬规则。
57
70
  5. [X 官方帮助:About Articles](https://help.x.com/en/using-x/articles)(官方帮助)。头图应贴题;该页不提供 1500×600 的硬性规格,账号主页 banner 也不是 Article 封面。
58
71
 
72
+ 6. [抖音公开创作者录屏](https://www.douyin.com/video/7671654312568851762)。公开搜索索引可读到录屏中横竖封面选项。内容由创作者发布,适用范围需在当前发布入口确认。
73
+
59
74
  平台资料发生冲突时回到当前发布入口与官方适用条款;新增证据时更新核验日期、场景和来源。未验证的参数保留为本包选项或待实测项,不补成“官方规定”。
@@ -8,7 +8,7 @@
8
8
  | * | [把参考转成自己的方法](cards/reference-reading.md) | 记录实际可见的组织关系,再用当前素材重新表达。 |
9
9
  | * | [把一次反馈变成有范围的经验](cards/experience-loop.md) | 保留场景、选择、结果、例外与证据性质,先候选后纳入。 |
10
10
  | topmind-cover | [编辑式封面:用版面关系建立气质](cards/cover-editorial.md) | 用对齐、尺度、负空间和图像裁切建立优雅,而非统一靠大字与装饰。 |
11
- | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。 |
11
+ | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。 |
12
12
  | topmind-cover | [场景:让关系承载故事](cards/cover-scene.md) | 从时间、地点、动作、材料和尺度关系中选择最能解释主题的场景。 |
13
13
  | topmind-cover | [摄影与真实素材:裁切、负空间和介质](cards/cover-photo.md) | 用真实素材的独有细节与负空间组织封面,区别纪实照片和生成示意。 |
14
14
  | topmind-cover | [拼贴:统一材料,保留多层信息](cards/cover-collage.md) | 用裁切边缘、材料和重叠关系建立层次,避免无目的堆素材。 |
@@ -17,3 +17,9 @@
17
17
 
18
18
  ## 花式
19
19
  轮廓与填色错位、字作蒙版、压印、剪纸、连笔、细线穿插、玻璃、材质字、沿路径排字、局部透视都可试。中文关键笔画与意思要完整,艺术变形不能替代核字。
20
+
21
+ ## 系列封面复核
22
+
23
+ 同系列共用识别色和标识,排版随主体变化。机械主体可以用接续场景光色的实心金属字;突出动作时可以让动词单独成块,用错位或斜条指向画面动作。只保留识别主题所需的字,说明性内容可放正文。
24
+
25
+ 先核对实际字族与字重,再看约 300 px 宽的目标比例缩略图。字的大小、光效、识别主体和裁切一起判断。小红书与抖音共用横版时,按场景需要先做 4:3 核心,再看 16:9 两侧延展和实际发布页。
@@ -137,7 +137,7 @@
137
137
  "typography",
138
138
  "type"
139
139
  ],
140
- "summary": "以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。",
140
+ "summary": "按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。",
141
141
  "scope": "标题承担主要视觉、精确中文和多行文案",
142
142
  "limits": "字体名称不代表已安装;最终出字需要核字与许可核对。",
143
143
  "kind": "direction",
@@ -150,7 +150,7 @@
150
150
  "ref": "TopMindSpace authored teaching example; not a measured performance claim"
151
151
  }
152
152
  ],
153
- "updated": "2026-10-27"
153
+ "updated": "2026-11-09"
154
154
  },
155
155
  {
156
156
  "id": "cover-scene",
@@ -8,7 +8,7 @@
8
8
  | * | [把参考转成自己的方法](cards/reference-reading.md) | 记录实际可见的组织关系,再用当前素材重新表达。 |
9
9
  | * | [把一次反馈变成有范围的经验](cards/experience-loop.md) | 保留场景、选择、结果、例外与证据性质,先候选后纳入。 |
10
10
  | topmind-cover | [编辑式封面:用版面关系建立气质](cards/cover-editorial.md) | 用对齐、尺度、负空间和图像裁切建立优雅,而非统一靠大字与装饰。 |
11
- | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。 |
11
+ | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。 |
12
12
  | topmind-cover | [场景:让关系承载故事](cards/cover-scene.md) | 从时间、地点、动作、材料和尺度关系中选择最能解释主题的场景。 |
13
13
  | topmind-cover | [摄影与真实素材:裁切、负空间和介质](cards/cover-photo.md) | 用真实素材的独有细节与负空间组织封面,区别纪实照片和生成示意。 |
14
14
  | topmind-cover | [拼贴:统一材料,保留多层信息](cards/cover-collage.md) | 用裁切边缘、材料和重叠关系建立层次,避免无目的堆素材。 |
@@ -17,3 +17,9 @@
17
17
 
18
18
  ## 花式
19
19
  轮廓与填色错位、字作蒙版、压印、剪纸、连笔、细线穿插、玻璃、材质字、沿路径排字、局部透视都可试。中文关键笔画与意思要完整,艺术变形不能替代核字。
20
+
21
+ ## 系列封面复核
22
+
23
+ 同系列共用识别色和标识,排版随主体变化。机械主体可以用接续场景光色的实心金属字;突出动作时可以让动词单独成块,用错位或斜条指向画面动作。只保留识别主题所需的字,说明性内容可放正文。
24
+
25
+ 先核对实际字族与字重,再看约 300 px 宽的目标比例缩略图。字的大小、光效、识别主体和裁切一起判断。小红书与抖音共用横版时,按场景需要先做 4:3 核心,再看 16:9 两侧延展和实际发布页。
@@ -137,7 +137,7 @@
137
137
  "typography",
138
138
  "type"
139
139
  ],
140
- "summary": "以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。",
140
+ "summary": "按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。",
141
141
  "scope": "标题承担主要视觉、精确中文和多行文案",
142
142
  "limits": "字体名称不代表已安装;最终出字需要核字与许可核对。",
143
143
  "kind": "direction",
@@ -150,7 +150,7 @@
150
150
  "ref": "TopMindSpace authored teaching example; not a measured performance claim"
151
151
  }
152
152
  ],
153
- "updated": "2026-10-27"
153
+ "updated": "2026-11-09"
154
154
  },
155
155
  {
156
156
  "id": "cover-scene",
@@ -8,7 +8,7 @@
8
8
  | * | [把参考转成自己的方法](cards/reference-reading.md) | 记录实际可见的组织关系,再用当前素材重新表达。 |
9
9
  | * | [把一次反馈变成有范围的经验](cards/experience-loop.md) | 保留场景、选择、结果、例外与证据性质,先候选后纳入。 |
10
10
  | topmind-cover | [编辑式封面:用版面关系建立气质](cards/cover-editorial.md) | 用对齐、尺度、负空间和图像裁切建立优雅,而非统一靠大字与装饰。 |
11
- | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。 |
11
+ | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。 |
12
12
  | topmind-cover | [场景:让关系承载故事](cards/cover-scene.md) | 从时间、地点、动作、材料和尺度关系中选择最能解释主题的场景。 |
13
13
  | topmind-cover | [摄影与真实素材:裁切、负空间和介质](cards/cover-photo.md) | 用真实素材的独有细节与负空间组织封面,区别纪实照片和生成示意。 |
14
14
  | topmind-cover | [拼贴:统一材料,保留多层信息](cards/cover-collage.md) | 用裁切边缘、材料和重叠关系建立层次,避免无目的堆素材。 |
@@ -17,3 +17,9 @@
17
17
 
18
18
  ## 花式
19
19
  轮廓与填色错位、字作蒙版、压印、剪纸、连笔、细线穿插、玻璃、材质字、沿路径排字、局部透视都可试。中文关键笔画与意思要完整,艺术变形不能替代核字。
20
+
21
+ ## 系列封面复核
22
+
23
+ 同系列共用识别色和标识,排版随主体变化。机械主体可以用接续场景光色的实心金属字;突出动作时可以让动词单独成块,用错位或斜条指向画面动作。只保留识别主题所需的字,说明性内容可放正文。
24
+
25
+ 先核对实际字族与字重,再看约 300 px 宽的目标比例缩略图。字的大小、光效、识别主体和裁切一起判断。小红书与抖音共用横版时,按场景需要先做 4:3 核心,再看 16:9 两侧延展和实际发布页。
@@ -137,7 +137,7 @@
137
137
  "typography",
138
138
  "type"
139
139
  ],
140
- "summary": "以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。",
140
+ "summary": "按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。",
141
141
  "scope": "标题承担主要视觉、精确中文和多行文案",
142
142
  "limits": "字体名称不代表已安装;最终出字需要核字与许可核对。",
143
143
  "kind": "direction",
@@ -150,7 +150,7 @@
150
150
  "ref": "TopMindSpace authored teaching example; not a measured performance claim"
151
151
  }
152
152
  ],
153
- "updated": "2026-10-27"
153
+ "updated": "2026-11-09"
154
154
  },
155
155
  {
156
156
  "id": "cover-scene",
@@ -1,6 +1,6 @@
1
1
  # 平台封面与图文适配
2
2
 
3
- 资料核验:2026-10-27。依据公开页面和官方搜索索引;未登录各平台后台实测。页面不可读、不同入口或版本不一致时,只采用可确认结论,交付时写清未验证项。
3
+ 最近核验于 2026-11-09。依据公开页面、搜索索引及有标注的创作者录屏;未登录各平台后台实测。页面不可读、不同入口或版本不一致时,只采用可确认结论,交付时写清未验证项。
4
4
 
5
5
  ## 先确定发布形态
6
6
 
@@ -20,6 +20,18 @@
20
20
  | X Article | 1500×600,5:2 | 本包常用预设;官方帮助强调头图与内容相关,未在该页给出固定像素 [5] | Article 编辑器、信息流、文章页的实际裁切 |
21
21
  | X 普通帖配图 | 1200×675,16:9 | 本包常用预设;按单图、多图和用户要求调整 | 单图 / 多图预览、缩略图可读性 |
22
22
 
23
+ ## 小红书与抖音的跨平台封面
24
+
25
+ 先分别记录成片画幅、发布入口的封面选择框,以及实际预览中封面的露出和界面遮挡。图文、视频和商品入口各自记录。小红书电商课程的 3:4 建议针对商品笔记 [1]。公开创作者录屏曾显示抖音网页视频发布入口提供 3:4 竖封面和 4:3 横封面 [6]。该录屏只作入口线索,两个平台的发布页都未登录实测。
26
+
27
+ | 交付场景 | 制作预设 | 操作 |
28
+ | --- | --- | --- |
29
+ | 横版内容共用封面 | 4:3 主版 1080×810,16:9 备版 1920×1080 | 在 1920×1080 的中央 1440×1080 放标题、识别主体和必需标识。两侧各 240 px 用原场景延展。发布页接受 4:3 时直接用主版。要求 16:9 时用完整图。 |
30
+ | 小红书竖版为主 | 3:4 版 1080×1440,按需另出 9:16 版 1080×1920 | 在 9:16 底图的中央 1080×1440 排核心,使用原图背景延展上下两侧。发布页显示不同裁切时重新取景和排字。 |
31
+ | 同时要横版和竖版 | 两套构图 | 共用原始素材、标题逻辑和系列识别。横版需要横向动线,竖版优先保住面部与主标题。 |
32
+
33
+ 用实际的裁切框检查标题、眼睛、产品关键轮廓和归属信息。登录发布页后再核对封面截取、列表缩略图和界面遮挡。底部遮挡、字数、字号、文件大小及点击率等说法在缺少对应入口证据时保留为待验证项。
34
+
23
35
  ## 场景约束与设计判断
24
36
 
25
37
  - **小红书**:[1] 的生活化商品笔记课程建议用真实场景、图片尺寸一致,并不建议在该类封面额外加文案。这不能扩大成所有笔记禁止加字、禁止白底或必须发固定张数。知识、观点、清单封面可根据内容排字,不承诺某种字体、颜色或版式必然带来高互动。
@@ -36,13 +48,14 @@
36
48
  ```bash
37
49
  python3 crop-cover.py 横版主图.png --out-dir 输出目录
38
50
  python3 crop-cover.py X短帖主图.png --preset x-post --out-dir 输出目录
51
+ python3 crop-cover.py 中央4比3已构图的16比9母图.png --preset landscape-pair --out-dir 输出目录
39
52
  python3 crop-cover.py 竖版主图.png --preset xiaohongshu --out-dir 输出目录
40
53
  python3 crop-cover.py 竖版主图.png --preset douyin --out-dir 输出目录
41
54
  python3 crop-cover.py 原图.png --preset wechat --out-dir 输出目录
42
55
  python3 crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出目录
43
56
  ```
44
57
 
45
- 其他技能独立安装时不假定这个脚本存在,可用当前环境的等比裁切工具。`article` 保留既有双横图命名;`wechat` 另给宽图与方图。每张直接从原图等比裁切,`--anchor` 可选 center / left / right / top / bottom,不能恢复原图里没有的内容。方图标题被切时重新排版,禁止拉伸凑比例。脚本仅保证输出尺寸,不证明平台已验收或画面合格。
58
+ 其他技能独立安装时不假定这个脚本存在,可用当前环境的等比裁切工具。`article` 保留既有双横图命名;`wechat` 另给宽图与方图。每张直接从原图等比裁切,`--anchor` 可选 center / left / right / top / bottom,不能恢复原图里没有的内容。方图标题被切时重新排版,禁止拉伸凑比例。脚本仅保证输出尺寸,不证明平台已验收或画面合格。`landscape-pair` 只接收已完成中央构图的 16:9 母图,导出中央 4:3 和完整 16:9。原图只有 4:3 时先回原场景找两侧背景,或单独重排宽版。
46
59
 
47
60
  ## 交付前核对
48
61
 
@@ -56,4 +69,6 @@ python3 crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出
56
69
  4. [Canva 可画:微信公众号尺寸](https://www.canva.cn/sizes/wechat-official-account/)(第三方设计指南)。列有 900×383 与方形小图;其中其他上传限制未获微信官方现行资料验证,本包不引用为硬规则。
57
70
  5. [X 官方帮助:About Articles](https://help.x.com/en/using-x/articles)(官方帮助)。头图应贴题;该页不提供 1500×600 的硬性规格,账号主页 banner 也不是 Article 封面。
58
71
 
72
+ 6. [抖音公开创作者录屏](https://www.douyin.com/video/7671654312568851762)。公开搜索索引可读到录屏中横竖封面选项。内容由创作者发布,适用范围需在当前发布入口确认。
73
+
59
74
  平台资料发生冲突时回到当前发布入口与官方适用条款;新增证据时更新核验日期、场景和来源。未验证的参数保留为本包选项或待实测项,不补成“官方规定”。
@@ -8,7 +8,7 @@
8
8
  | * | [把参考转成自己的方法](cards/reference-reading.md) | 记录实际可见的组织关系,再用当前素材重新表达。 |
9
9
  | * | [把一次反馈变成有范围的经验](cards/experience-loop.md) | 保留场景、选择、结果、例外与证据性质,先候选后纳入。 |
10
10
  | topmind-cover | [编辑式封面:用版面关系建立气质](cards/cover-editorial.md) | 用对齐、尺度、负空间和图像裁切建立优雅,而非统一靠大字与装饰。 |
11
- | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。 |
11
+ | topmind-cover | [字体是图像:字形、字重与空间](cards/cover-typography.md) | 按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。 |
12
12
  | topmind-cover | [场景:让关系承载故事](cards/cover-scene.md) | 从时间、地点、动作、材料和尺度关系中选择最能解释主题的场景。 |
13
13
  | topmind-cover | [摄影与真实素材:裁切、负空间和介质](cards/cover-photo.md) | 用真实素材的独有细节与负空间组织封面,区别纪实照片和生成示意。 |
14
14
  | topmind-cover | [拼贴:统一材料,保留多层信息](cards/cover-collage.md) | 用裁切边缘、材料和重叠关系建立层次,避免无目的堆素材。 |
@@ -17,3 +17,9 @@
17
17
 
18
18
  ## 花式
19
19
  轮廓与填色错位、字作蒙版、压印、剪纸、连笔、细线穿插、玻璃、材质字、沿路径排字、局部透视都可试。中文关键笔画与意思要完整,艺术变形不能替代核字。
20
+
21
+ ## 系列封面复核
22
+
23
+ 同系列共用识别色和标识,排版随主体变化。机械主体可以用接续场景光色的实心金属字;突出动作时可以让动词单独成块,用错位或斜条指向画面动作。只保留识别主题所需的字,说明性内容可放正文。
24
+
25
+ 先核对实际字族与字重,再看约 300 px 宽的目标比例缩略图。字的大小、光效、识别主体和裁切一起判断。小红书与抖音共用横版时,按场景需要先做 4:3 核心,再看 16:9 两侧延展和实际发布页。
@@ -137,7 +137,7 @@
137
137
  "typography",
138
138
  "type"
139
139
  ],
140
- "summary": "以字形气质、字面比例、断行和空间组织丰富标题;花式服务语义。",
140
+ "summary": "按真实字重、标题读序和目标缩略图组织字效;系列构图按主体调整。",
141
141
  "scope": "标题承担主要视觉、精确中文和多行文案",
142
142
  "limits": "字体名称不代表已安装;最终出字需要核字与许可核对。",
143
143
  "kind": "direction",
@@ -150,7 +150,7 @@
150
150
  "ref": "TopMindSpace authored teaching example; not a measured performance claim"
151
151
  }
152
152
  ],
153
- "updated": "2026-10-27"
153
+ "updated": "2026-11-09"
154
154
  },
155
155
  {
156
156
  "id": "cover-scene",
@@ -1,6 +1,6 @@
1
1
  # 平台封面与图文适配
2
2
 
3
- 资料核验:2026-10-27。依据公开页面和官方搜索索引;未登录各平台后台实测。页面不可读、不同入口或版本不一致时,只采用可确认结论,交付时写清未验证项。
3
+ 最近核验于 2026-11-09。依据公开页面、搜索索引及有标注的创作者录屏;未登录各平台后台实测。页面不可读、不同入口或版本不一致时,只采用可确认结论,交付时写清未验证项。
4
4
 
5
5
  ## 先确定发布形态
6
6
 
@@ -20,6 +20,18 @@
20
20
  | X Article | 1500×600,5:2 | 本包常用预设;官方帮助强调头图与内容相关,未在该页给出固定像素 [5] | Article 编辑器、信息流、文章页的实际裁切 |
21
21
  | X 普通帖配图 | 1200×675,16:9 | 本包常用预设;按单图、多图和用户要求调整 | 单图 / 多图预览、缩略图可读性 |
22
22
 
23
+ ## 小红书与抖音的跨平台封面
24
+
25
+ 先分别记录成片画幅、发布入口的封面选择框,以及实际预览中封面的露出和界面遮挡。图文、视频和商品入口各自记录。小红书电商课程的 3:4 建议针对商品笔记 [1]。公开创作者录屏曾显示抖音网页视频发布入口提供 3:4 竖封面和 4:3 横封面 [6]。该录屏只作入口线索,两个平台的发布页都未登录实测。
26
+
27
+ | 交付场景 | 制作预设 | 操作 |
28
+ | --- | --- | --- |
29
+ | 横版内容共用封面 | 4:3 主版 1080×810,16:9 备版 1920×1080 | 在 1920×1080 的中央 1440×1080 放标题、识别主体和必需标识。两侧各 240 px 用原场景延展。发布页接受 4:3 时直接用主版。要求 16:9 时用完整图。 |
30
+ | 小红书竖版为主 | 3:4 版 1080×1440,按需另出 9:16 版 1080×1920 | 在 9:16 底图的中央 1080×1440 排核心,使用原图背景延展上下两侧。发布页显示不同裁切时重新取景和排字。 |
31
+ | 同时要横版和竖版 | 两套构图 | 共用原始素材、标题逻辑和系列识别。横版需要横向动线,竖版优先保住面部与主标题。 |
32
+
33
+ 用实际的裁切框检查标题、眼睛、产品关键轮廓和归属信息。登录发布页后再核对封面截取、列表缩略图和界面遮挡。底部遮挡、字数、字号、文件大小及点击率等说法在缺少对应入口证据时保留为待验证项。
34
+
23
35
  ## 场景约束与设计判断
24
36
 
25
37
  - **小红书**:[1] 的生活化商品笔记课程建议用真实场景、图片尺寸一致,并不建议在该类封面额外加文案。这不能扩大成所有笔记禁止加字、禁止白底或必须发固定张数。知识、观点、清单封面可根据内容排字,不承诺某种字体、颜色或版式必然带来高互动。
@@ -36,13 +48,14 @@
36
48
  ```bash
37
49
  python3 crop-cover.py 横版主图.png --out-dir 输出目录
38
50
  python3 crop-cover.py X短帖主图.png --preset x-post --out-dir 输出目录
51
+ python3 crop-cover.py 中央4比3已构图的16比9母图.png --preset landscape-pair --out-dir 输出目录
39
52
  python3 crop-cover.py 竖版主图.png --preset xiaohongshu --out-dir 输出目录
40
53
  python3 crop-cover.py 竖版主图.png --preset douyin --out-dir 输出目录
41
54
  python3 crop-cover.py 原图.png --preset wechat --out-dir 输出目录
42
55
  python3 crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出目录
43
56
  ```
44
57
 
45
- 其他技能独立安装时不假定这个脚本存在,可用当前环境的等比裁切工具。`article` 保留既有双横图命名;`wechat` 另给宽图与方图。每张直接从原图等比裁切,`--anchor` 可选 center / left / right / top / bottom,不能恢复原图里没有的内容。方图标题被切时重新排版,禁止拉伸凑比例。脚本仅保证输出尺寸,不证明平台已验收或画面合格。
58
+ 其他技能独立安装时不假定这个脚本存在,可用当前环境的等比裁切工具。`article` 保留既有双横图命名;`wechat` 另给宽图与方图。每张直接从原图等比裁切,`--anchor` 可选 center / left / right / top / bottom,不能恢复原图里没有的内容。方图标题被切时重新排版,禁止拉伸凑比例。脚本仅保证输出尺寸,不证明平台已验收或画面合格。`landscape-pair` 只接收已完成中央构图的 16:9 母图,导出中央 4:3 和完整 16:9。原图只有 4:3 时先回原场景找两侧背景,或单独重排宽版。
46
59
 
47
60
  ## 交付前核对
48
61
 
@@ -56,4 +69,6 @@ python3 crop-cover.py 原图.png --preset wechat --anchor left --out-dir 输出
56
69
  4. [Canva 可画:微信公众号尺寸](https://www.canva.cn/sizes/wechat-official-account/)(第三方设计指南)。列有 900×383 与方形小图;其中其他上传限制未获微信官方现行资料验证,本包不引用为硬规则。
57
70
  5. [X 官方帮助:About Articles](https://help.x.com/en/using-x/articles)(官方帮助)。头图应贴题;该页不提供 1500×600 的硬性规格,账号主页 banner 也不是 Article 封面。
58
71
 
72
+ 6. [抖音公开创作者录屏](https://www.douyin.com/video/7671654312568851762)。公开搜索索引可读到录屏中横竖封面选项。内容由创作者发布,适用范围需在当前发布入口确认。
73
+
59
74
  平台资料发生冲突时回到当前发布入口与官方适用条款;新增证据时更新核验日期、场景和来源。未验证的参数保留为本包选项或待实测项,不补成“官方规定”。