主流程:参考样本 → 风格拆解 → 图文关系抽象 → 模板保存 → 新内容结构化 → 图文排版生成 → 平台兼容交付 → 自检。
一个用于拆解、对比、抽象和模仿任意优秀内容的 Codex Skill。
这个 Skill 的长期目标不是只做公众号排版,而是建立一套通用的“内容模仿系统”:面对一篇文章、一套页面、一个视频脚本、一份产品文档或任意可观察样本,先提取其结构、节奏、表达方式、视觉语言和关键约束,再沉淀成可复用模板,最后迁移到新的内容任务中。
当前版本先从“公众号图文排版”这个具体场景切入。原因是公众号文章同时包含文本结构、视觉排版、图文节奏、平台兼容和发布交付等问题,非常适合作为 Everything Mimic Skill 的第一个 MVP 场景。
它的目标不是机械复制某个公众号,而是从 PDF 样本中抽取可复用的风格原则,再将这些原则应用到新的中文文章中,生成更适合粘贴到微信公众号编辑器的 HTML。
Everything Mimic Skill 可以理解为一个通用模仿系统。它不直接复制某个样式,而是把优秀样本拆成可复用的结构、节奏、视觉和交付规则,再迁移到新的内容里。
当前 MVP 先服务公众号图文排版。完整流程包括:
-
输入参考样本和目标内容
参考样本可以是公众号 PDF、公众号链接、截图、网页、文章样本等;目标内容是用户希望重新组织、排版或表达的新文章。 -
提取风格模板
从参考样本中观察标题、正文、图片、图注、引用、卡片、分隔线、字体、颜色、间距和组件规则,并保存为style-profile.json与style-brief.md。 -
区分正文与平台信息
PDF 或截图里的文章标题、作者、日期、账号信息等属于发布平台字段或页面 chrome,默认只作为元数据分析,不进入最终正文 HTML。 -
分析图文关系
不只看图片长什么样,还要判断图片为什么放在这里、是否每个板块都有图、图片在标题前还是标题后、是否有图注,以及图片承担解释、转场、证明还是总结功能。 -
生成原创适配图片
如果参考风格依赖配图,就使用 Image2 或可用的图片生成工具,为新文章生成原创图片,并保存到assets/,再插入article.wechat.html。 -
结构化新内容并套用风格
先识别新文章的开头、主要章节、转折、案例、总结和行动入口,再套用段落节奏、标题样式、强调方式、图片位置、图注样式和结尾方式。 -
生成平台兼容交付物
默认输出公众号正文 HTML、本地预览preview.html、图片文件夹、图片上传对照表和交付说明。HTML 要优先保证能粘贴进公众号编辑器。 -
运行自检
检查是否误把标题/作者放进正文、图片数量是否匹配章节节奏、图片是否保存并插入、是否提供上传对照表,以及是否使用了公众号编辑器不稳定支持的富网页布局。
- 对任意参考内容进行拆解:识别结构、节奏、表达、视觉、媒介和平台约束。
- 对新内容与参考样本进行对比:找出应该保留、迁移、舍弃或改造的部分。
- 将可复用规律模板化,形成之后可以反复调用的风格或方法档案。
- 从公众号 PDF 样本中提取排版风格。
- 将字体、间距、色彩、段落节奏、标题层级、组件样式保存成风格模板。
- 分析整篇文章的图文关系,而不是只孤立模仿某一张图。
- 当参考文章依赖配图、图解、截图或封面/板块卡片时,使用 Image2 或可用的图片生成工具为新文章生成原创适配图片,并保存到输出项目的
assets/。 - 根据模板为新文章生成正文排版 HTML。
- 输出本地预览文件、公众号正文 HTML、图片素材文件夹和上传对照表。
- 默认只输出公众号正文区域,不把文章标题、作者、日期、账号信息等公众号后台字段放进正文 HTML。
- 尽量使用公众号编辑器兼容的简单 HTML/CSS,避免富网页端布局导致粘贴后格式丢失。
wechat-style-runs/
├── 输入/
│ └── 具体日期_文章核心内容/
│ ├── source.pdf
│ ├── source.html
│ ├── fullpage.png
│ └── capture-report.json
├── 输出/
│ └── 具体日期_文章核心内容_风格名/
│ ├── article.wechat.html
│ ├── preview.html
│ ├── assets/
│ ├── wechat-image-upload-map.md
│ ├── layout-notes.md
│ ├── self-check.md
│ └── DELIVERY.md
├── 风格/
│ └── style-id_中文风格名/
│ ├── style-profile.json
│ ├── style-brief.md
│ ├── inspection.json
│ ├── pages/
│ └── self-check.md
└── README.md
如果用户只提供公众号文章链接,不需要再要求用户手动打印 PDF。默认流程是:先用脚本自动捕获公众号页面,生成 PDF/HTML/长图/诊断报告,然后直接进入风格提取。
/Users/lucas/.cache/codex-runtimes/codex-primary-runtime/dependencies/node/bin/node \
scripts/wechat_url_to_pdf.mjs "https://mp.weixin.qq.com/s/..." \
--out-dir "wechat-style-runs/输入/2026-06-27_文章核心内容"输出:
source.pdf:后续风格提取使用的 PDF。source.html:渲染后的页面 HTML,便于排查。fullpage.png:整页截图,便于视觉检查。capture-report.json:标题、账号、发布时间、图片数量、图片加载失败数等诊断信息。
脚本会使用本机 Chrome 打开真实页面,修复常见公众号懒加载图片属性,自动滚动到底部等待图片加载,再打印 PDF。
如果 capture-report.json 中 failedImageCount 不为 0,应先检查截图和 HTML,不要直接把该 PDF 当作完整风格样本。
链接输入的交付要求:
- 读取并反馈文章标题、公众号、发布时间。
- 反馈 PDF 页数、正文图片数、失败图片数。
- 如果图片全部成功加载,直接基于
source.pdf提取风格。 - 最终反馈风格名称、
style_id、核心图文风格摘要,以及输入捕获目录和风格目录。
用户提供公众号文章 PDF 后:
- 渲染 PDF 页面,抽样检查首页、中间页、标题页、图文页、组件页。
- 判断正文标题和公众号页面标题的边界。
- 提取段落、标题、强调、引用、卡片、分隔、图片、图注等规则。
- 为风格命名,例如
暖米课程图解体、蓝标访谈体。 - 保存
style-profile.json和style-brief.md。
必须从全局判断图片节奏:
- 是否每个主要板块都有图片?
- 图片在标题前还是标题后?
- 图片与正文之间是否有图注?
- 图片是课程图解、访谈照片、截图、流程图、概念卡片,还是封面图?
- 多久出现一张图?
- 图片承担解释、转场、总结,还是情绪渲染?
如果原模板依赖“每个板块一张图”,新文章也应该默认补齐这个节奏。
用户提供新文章和目标风格后:
- 先做文章结构化:引入、主要板块、转折、案例、总结、行动入口。
- 再做风格映射:段落长度、标题样式、强调方式、图片位置、图注样式。
- 输出正文 HTML,默认不包含公众号标题、作者、日期等后台字段。
- 输出本地图片素材和上传对照表。
- 生成
preview.html供用户直接预览。
公众号后台粘贴 HTML 时,会清理很多富网页端能力。为了提高复制粘贴成功率:
- 优先使用
section、p、span、img等简单标签。 - 尽量使用内联 CSS。
- 避免依赖
flex、grid、复杂选择器、伪元素、脚本、动画、canvas。 - 不要把关键内容做成只在网页端渲染的复杂组件。
- 图片不要指望随本地 HTML 自动粘贴进公众号,默认交付本地图片文件夹和上传对照表。
如果普通 HTTPS 图床测试失败,可以使用微信官方 media/uploadimg 路线:
- 将正文里的本地图片压缩到微信接口限制以内。
- 使用公众号
WECHAT_APP_ID/WECHAT_APP_SECRET获取access_token。 - 调用微信图文正文图片上传接口,获得微信托管的图片 URL。
- 将
article.wechat.html中的assets/...图片路径替换为微信返回的 URL。 - 生成
article.wechat-uploadimg.html后再复制到公众号编辑器。
本仓库提供脚本:
python3 scripts/wechat_uploadimg.py article.wechat.html \
--project-dir path/to/output-project \
--out article.wechat-uploadimg.html \
--map wechat-uploadimg-map.json真实上传前先运行 --dry-run 检查图片路径和压缩结果。不要把 AppSecret 写入文章文件或提交到仓库,统一通过环境变量传入。
图片上传跑通后,可以继续用公众号 API 创建草稿箱文章,再由人工检查草稿。
发布也可以自动化,但必须加安全闸门:
- 默认只创建草稿,不发布。
- 发布前必须明确确认标题、账号、草稿、发布时间。
- 发布脚本默认 dry-run,只有带
--execute才会真正调用微信发布接口。 - 微信
freepublish/submit是立即发布接口;如果需要定时发布,应由本地或服务器调度器在指定时间调用发布脚本。
本仓库提供:
# 创建草稿
python3 scripts/wechat_create_draft.py article.wechat-uploadimg.html \
--title "文章标题" \
--author "作者" \
--digest "摘要" \
--cover assets/cover.png \
--out-report wechat-draft-report.json
# 发布 dry-run,不会发布
python3 scripts/wechat_publish.py \
--draft-media-id wechat-draft-report.json
# 真实发布,必须显式 --execute
python3 scripts/wechat_publish.py \
--draft-media-id wechat-draft-report.json \
--execute \
--out-report wechat-publish-report.json定时发布的推荐方式是:先创建草稿和发布命令,再由 launchd、cron、GitHub Actions 或服务器任务队列在指定时间执行真实发布命令。
当风格依赖配图时:
- 先提取参考图的整体风格和内容逻辑。
- 使用 Image2 或当前可用的最佳图片生成工具,生成适配新文章主题的原创配图。
- 将图片保存进当前输出项目的
assets/。 - 在 HTML 中引用本地图片。
- 给用户提供
wechat-image-upload-map.md,提示实际发布时手动上传到对应位置。
不要把必要图片留成文字占位符,也不要只生成一张外部预览图而不保存到项目文件夹。
在 Codex Desktop 中,内置图片生成结果可能不会直接出现在普通图片目录,而是保存在会话 JSONL 中。可以使用 scripts/extract_session_images.py 从 ~/.codex/sessions/.../rollout-*.jsonl 解码图片。
核心规则拆在 references/ 目录中,调用 Skill 时不应该只看 SKILL.md:
core-principles.md:文字排版、图文节奏、正文边界、自检系统。style-extraction.md:如何从 PDF 或参考样本提取可复用风格。style-replication-policy.md:复刻边界,避免复制品牌标识和专有资产。image-style-generation.md:如何分析图片逻辑、用 Image2/图片生成工具生成原创配图,并整合进 HTML。wechat-rendering-rules.md:公众号编辑器兼容、复制粘贴稳定性和 HTML/CSS 限制。wechat-image-transfer.md:本地图片、托管图片、第三方编辑器和微信 API 草稿同步的取舍。
公众号后台已经单独提供标题、作者、封面、摘要等字段。因此默认交付的 article.wechat.html 只包含正文内容:
- 包含:正文段落、正文内部小标题、引用、卡片、列表、图片、图注、分隔和结尾说明。
- 不包含:文章标题、副标题、作者、账号名、日期、地点、阅读/收听数量、平台头部和分享尾部。
如果用户提供的新文章里带有标题,默认只用它判断主题和输出文件夹命名,不把它作为正文块放进 HTML。
将本仓库复制到 Codex Skill 目录:
git clone https://github.com/glanderness/everything-mimic-skill.git
mkdir -p ~/.codex/skills
cp -R everything-mimic-skill ~/.codex/skills/everything-mimic-skill然后在 Codex 中直接描述任务,例如:
用 Everything Mimic Skill 帮我从这篇 PDF 提取公众号图文风格。
或:
用暖米课程图解体给下面这篇文章排版。
本 Skill 只提取可复用的结构、节奏、方法和风格原则,不应复制他人的 logo、二维码、固定品牌标识、专有插画、独特文案或可识别的原创图形资产。发布版本应当是“方法相通、风格相近、表达原创”的适配结果。