把长文章/Twitter/链接转化为高密度小红书图文系列。内容驱动分页,文案为主体(300-500字/页),视觉为辅(内容页≤25%)。10种布局模式 + 3种美学风格(手绘水彩/极简技术/现代SaaS)+ 30+ 具象隐喻物件库,按内容性质匹配。
Resources
8Install
npx skillscat add ricoocuii-source/rico-xhs-dense Install via the SkillsCat registry.
小红书高密度图文生成流程(Dense 版)
把文章/链接转化为高密度小红书图文系列。与 rico-xhs-stable 的核心区别:内容驱动而非原型驱动,每页文字极密(300-500字,目标350+),插画极克制(内容页≤25%),宁可少页不稀释。
环境配置
首次使用前需要安装依赖和配置 API 密钥。详见 references/setup.md。
前处理流程
URL → 抓取原文和图片 → 翻译(非中文,派老陈 agent)→ 确立 zh-translation.md 为后续主文本源 → voice 识别。详见 references/preprocessing.md。老陈的角色画像详见 references/laochen.md。
主文本源规则(强制)
- 非中文来源必须先完整产出
zh-translation.md再进入后续步骤;中文来源也保存为zh-translation.md作为唯一文本源。 source.md/ page-plan / tutorial-rewrite 不能作为上图文案来源。- 图片中的文字必须先转录进
zh-translation.md,才能上图。
Step 1: 分页规划
读完 zh-translation.md 后输出 page-plan.md。
核心原则:内容驱动,不选原型
不要先选"痛点页/教程页/概念页"再填内容。流程是:
- 读完原文,按章节划分页面
- 每页对应原文 1-2 个完整章节
- 根据该页内容的性质,匹配一种布局模式(见 references/page-archetypes.md)
page-plan 格式
voice: 工程方法论
style: A # A 手绘水彩 / B 极简技术 / C 现代 SaaS,全套统一
- page: 01
layout: cover
title: "主标题"
subtitle: "副标题"
source_sections: "zh-translation.md 第1-3段"
est_chars: 450
visual_budget: "hero隐喻'桥贯穿画面' 55%"
modules: [] # 0-3 个可组合模块(见 visual-rules.md 第 6 节)
on_canvas_text:
- "60-120字的完整段落,从原文直搬"
- "另一段完整叙事"
negative:
- "不要什么"voice 类型见 references/copywriting-rules.md 第 9 节。style 三选一见 references/visual-rules.md 第 4 节。visual_budget 必须写明 hero 隐喻名称(从 visual-rules.md 第 5b 节选)+ 占比。
一页 = 基础布局 + 0-3 个模块(叠加单位,见 visual-rules.md 第 6 节)。视觉合计仍 ≤25%。
分页密度规则(强制)
| 规则 | 要求 |
|---|---|
| 每页目标字数 | 300-500 字(目标 350+,封面和数据面板型 I 除外) |
| 合页门槛 | 章节预估 < 300 字 → 必须与相邻章节合并 |
| 拆页门槛 | 仅当章节 > 500 字且含 2+ 独立子话题时才拆 |
| 系列页数 | 宁可少页,不稀释信息 |
CLI 命令/代码的处理
原文含 CLI 命令、配置文件、API 调用时,用 J 布局(代码+说明分区)或在其他布局内加深色代码块。命令完整展示,不省略不缩写。
痛点/风险等内容的处理
不强制开独立页。只有原文明确包含"问题描述 + 数据佐证"时,才在某页内做一个痛点 zone。原文没有痛点就不做——不编造、不强塞。风险、对比等同理。
on_canvas_text 规则
- 每条 60-120 字,是原文的完整段落,不是 30 字摘要
- 原文信息不砍不缩,只删重复修饰和过渡连接词
- 一个卡片 = 原文一个完整段落,不是一个要点
覆盖率自查(强制)
page-plan 写完后,拿 zh-translation.md 逐段比对,覆盖率 ≥ 95%(排除推广类)。不通过 → 扩充或加页。
Step 1.5: 教程化改写(按需)
仅教程类文章需要。对每页对应章节做操作视角重写,产出 tutorial-rewrite.md。视角转换(作者→读者)、每步3层(动作+命令+判断)、不新增概念。
Step 2: 逐页 prompt(并行模式)
page-plan 定稿后,用 Agent 工具并行写各页 prompt。每个 agent 负责 1-2 页,收到完整的 style prefix + page-plan 对应条目 + zh-translation.md 对应章节原文。所有 agent 在同一条消息中派发,最大化并行度。
并行派发规则
- 封面单独一个 agent
- 内容页按 2 页一组分配(如 P02-03、P04-05、P06-07、P08 单独),总共 4-5 个 agent
- 每个 agent 的 prompt 必须包含:style prefix 全文、该页的 page-plan 条目(layout/title/subtitle/on_canvas_text/visual_budget/modules/negative)、zh-translation.md 中 source_sections 指定的原文段落
- agent 写完后把 prompt 文件写入
prompts/目录 - 所有 agent 完成后,主 agent 执行 Step 2.5 覆盖率反查和收尾自检
每个 prompt 由 4 层组成。
Layer 1 — Style Prefix(每个 prompt 顶部嵌入)
做一张 3:4 竖版的小红书高密度信息图。
风格要求:
- 整个页面背景必须暖白色(#FAFAF8),正文用深色文字,不要深色/黑色背景,不要白色文字
- 文字边缘必须锐利清晰,无弥散、无模糊
- 标题颜色:H1 统一 #4A4A4A 深灰加粗,副标题统一 #888 中灰
- 所有标题和副标题一律左对齐(封面也左对齐)
- 编辑型插画风格:轻 3D 体积感、2-3px 黑色描边、pastel 空气刷阴影
- 插画带手绘笔触和纸张纹理
- 圆角卡片(8-12px)+ 1px 细描边(#E0E0E0)+ 浅阴影
- 终端和代码块用深色底(#1E1E2E),等宽字体
- 文字是绝对主体,占页面 75-95%
- 视觉合计 ≤25%(小 icon + hero 隐喻插画 + 信息图组件 + 装饰累加),封面可达 50-60%
- hero 隐喻插画从 visual-rules.md 第 5b 节隐喻库选,含义对应原文概念
- 配色盘:绿 #2E7D32 / 紫 #6A1B9A / 蓝 #1565C0 / 橙 #E65100 / 粉 #AD1457
- 信息密度极高——每页 300-500 字真实内容,不要大留白
- 必须简体中文,禁止繁体中文
- 图上所有中文必须严格按指定文案渲染,不允许模型自由发挥
- 不要出现作者名、平台名、链接、水印、logo、乱码、伪中文Layer 2 — 布局描述
用自然语言描述布局,从 10 种布局模式中匹配。见 references/page-archetypes.md。禁止写百分比数字。
Layer 3 — 写死的上图文字
所有中文在 prompt 里写死。标题和正文写法详见 copywriting-rules.md。
关键约束:
- 单卡 60-120 字,每页 300-550 字(封面和数据面板型 I 除外)
- 每段必须追溯到 zh-translation.md 原句,禁从 page-plan / source.md 转写
- 不新增原文没有的概念/标签/判断
- 深色锚点条只装 CLI 命令/代码/数据,没有就不加
- 允许:术语展开为"定义+场景+例子",品类名补 1-2 个代表公司/工具名
Layer 4 — 视觉资产 + 负约束
视觉:30-50px 功能图标,从 references/visual-rules.md 物件库选。同一组图内同一物件不重复。
负约束:不要出现的东西。
最后一页底部署名
底部加一行小灰字:原文:@作者名。从 source.md 的 author 字段读取。
Step 2.5 反查(强制,prompt 写完后立即执行,三步串行)
所有 prompt 写完后,依次执行三步:覆盖率检查 → 主 agent 补写 → 老陈冷读终审。不能合并成一个 agent,原因见下文。
Step 2.5a:覆盖率检查(Agent)
派发一个 agent,给它:
zh-translation.md的完整绝对路径prompts/目录的完整绝对路径page-plan.md的完整绝对路径(仅供定位章节对应关系,不作为反向溯源的比对源)
任务(双向检查):
正向覆盖率:拿 zh-translation.md 每个自然段(跳过纯代码块和 YAML 示例),检查该段核心信息是否出现在某个 prompt 的上图文字中。
反向溯源:拿每个 prompt 的上图文字(标题、副标题、卡片正文),检查其中的概念、判断、术语是否能在 zh-translation.md 中找到对应。标记所有在原文中找不到来源的内容——包括但不限于生造的词、原文没有的判断、自行补充的对比项。
输出:
## 正向覆盖率
- 判定:PASS / FAIL
- 覆盖率:XX%
- 缺失清单(如有):
- 行 XX:「原文摘要」→ 未出现在任何 prompt → 建议补入 page-XX
## 反向溯源
- 判定:PASS / FAIL
- 问题清单(如有):
- page-XX「prompt 中的表述」→ 原文无对应 → 建议改为「原文原话或自然中文表述」权限:只报告,不改文件。
Step 2.5b:主 agent 补写
覆盖率 agent 返回后,主 agent 处理两类问题:
正向覆盖率缺失:
- PASS(≥ 95%)→ 跳过
- FAIL(< 95%)→ 主 agent 按缺失清单补写 prompt:
- 优先扩充已有卡片(到 120 字上限)
- 卡片满了 → 在最相关的页面新增卡片
- 页面满了(> 500 字)→ 新开页、更新 page-plan、写新 prompt
反向溯源问题:
- PASS → 跳过
- FAIL → 主 agent 逐条修改:改回原文的说法,或删掉原文没有的内容。不要用另一个新造的表述替换。
两类问题都处理完后,进 Step 2.5c。
Step 2.5c:老陈冷读终审(Agent,模式 B)
老陈角色画像、冷读终审的完整规则(三关检查、评分维度、输出格式、修改权限)详见 references/laochen.md 模式 B 章节。
主 agent 预处理:生成读者视角文案稿
派发老陈之前,主 agent 从所有 prompt 文件中只提取 Layer 3(标题、副标题、卡片正文、段落正文、底部文字),按页码顺序拼成一个干净的纯文案文件 reader-view.md,写入 run 目录。格式:
## P01 封面
标题:XXX
副标题:XXX
## P02
标题:XXX
副标题:XXX
卡片 1:正文正文正文...
卡片 2:正文正文正文...
...不含 style prefix、布局描述、视觉资产、负约束——任何技术噪音都不要。老陈读这个文件审文案,改的时候回 prompt 文件改。
派发要求
按 laochen.md 派发规则表的模式 B 行执行:只给 reader-view.md 路径 + prompts/ 目录路径。禁止给原文、page-plan、规则文档等任何上下文。
主 agent 汇总
老陈返回后,主 agent 执行收尾自检
Step 2 收尾自检(并行反查通过后执行)
- 文字:每页 ≥ 300 字 | 标题功能直述 | 无收束句 | 无禁词(详见 copywriting-rules.md)
- 视觉:内容页合计 ≤ 25% | 美学风格全套统一 | hero 隐喻对应原文概念
- 结构:相邻页布局不重复 | 末页有署名且不重复前页信息
Step 3: 批量生图
出图方式判断(先做这一步)
- 如果你是 Codex(或其它带原生出图能力的 agent),且当前账号可直接调用 GPT-Image-2:直接用你的原生出图能力,按各页 prompt 出图,无需 API Key / 中转站,跳过下面的脚本方式。
- 否则(如 Claude Code):用下面的 batch.json + 脚本方式,需先在
~/.rico-xhs/.env配好生图 API(中转站或官方,详见 references/image-api-setup.md)。
模型选择
- 默认模型
gpt-image-2(走中转站,provider: openai)。 - 若用户在对话里指定了模型(如「这次用 nano-banana-2 出图」「封面用 gpt-image-2」),就把 batch.json 里对应任务的
model改成用户指定的值,provider保持openai。
source ~/.rico-xhs/.env && OPENAI_API_KEY=$OPENAI_API_KEY OPENAI_BASE_URL=$OPENAI_BASE_URL bun <skill-path>/scripts/image-gen/main.ts --batchfile batch.json --jsonbatch.json 格式:
[
{
"promptFiles": ["prompts/page-01-cover.md"],
"image": "output/page-01-cover.png",
"ar": "3:4",
"quality": "2k",
"provider": "openai",
"model": "gpt-image-2"
}
]分波执行:先跑前 4 张,检查效果后再跑剩余。
参考策略
- 封面独立生成
- 内容页第一张作为锚点,独立生成
- 后续同类内容页参考锚点,不链式串联
输出目录
runs/YYYY-MM-DD-descriptive-name/
├── source/
├── images/
├── output/
├── prompts/
├── zh-translation.md
├── page-plan.md
├── reader-view.md ← Step 2.5c 产出
├── tutorial-rewrite.md ← 仅教程类
├── source.md
├── 01-analysis.md ← 前处理产出(voice + 术语表)
├── batch.json
└── batch-wave*.json ← 分波执行时产出Final 发布流程
当用户说「触发 final」或「放到 final」时执行。详见 references/final-publish.md。