Help us improve
Share bugs, ideas, or general feedback.
From creative-skills
Rewrites existing notes or articles into Xiaohongshu image-text format. Preserves original content while compressing into card-style pages with captions and AI-generated images.
npx claudepluginhub wpsnote/wpsnote-skills --plugin base-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/creative-skills:xiaohongshu-note-creatorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **脚本路径说明**:本 Skill 依赖的 `image_gen.py` 位于此 SKILL.md **同目录的 `scripts/` 下**。
Generates infographic image card series with 12 visual styles, 8 layouts, and 3 color palettes for social media engagement.
Formats completed WPS notes into WeChat public account HTML with inline styles. Applies templates and converts placeholder tags. Final step after content creation.
Create viral Xiaohongshu (小红书) content with platform-native strategy, save-rate optimization, trending formats, and search SEO for China's #1 lifestyle platform.
Share bugs, ideas, or general feedback.
脚本路径说明:本 Skill 依赖的
image_gen.py位于此 SKILL.md 同目录的scripts/下。 AI 执行前,先确认脚本存在:ls {SKILL所在目录}/scripts/image_gen.py运行命令时指定路径:python3 {SKILL所在目录}/scripts/image_gen.py ...
将 WPS 笔记内容转化为完整的小红书图文方案,包含每页图文、AI 配图和话题标签。
调用 outline 找出所有图片 block,逐张调用 read-image 读取并做视觉描述,记录每张图的画面内容、风格色调、适合用于哪页。
wpsnote-cli outline --note_id {note_id} --json
wpsnote-cli read-image --note_id {note_id} --block_id {block_id} --json
MCP 降级:read_image({ note_id, block_id })
读取完成后,在对话中汇报:「原文共 N 张图,图1 [画面描述],适合 P{页码};图2...」
原文无图时:说「原文无图」,继续。
create_note + batch_edit / edit_block 写入 WPS 笔记对话中只能做两件事:提问 + 状态通知。
核心原则:这是一个"改写压缩"任务,不是"重新创作"任务。
严禁的行为:
❌ 用自己的话"总结"原文,丢失具体细节
❌ 添加原文没有的观点、类比、案例
❌ 用通用小红书套话替换原文独特表达
❌ 把多个不相关章节内容混写成一页
有原文图片时,禁止直接文生图:
image block,优先用 CLI 读取 base64 并立刻用视觉理解描述图片内容(见 Step 2 第 3 步):
wpsnote-cli read-image --note_id {note_id} --block_id {block_id} --json
# 返回 data.image_base64 字段
MCP 降级:read_image({ note_id, block_id })# 先将 base64 保存为临时文件
python3 -c "import base64; open('/tmp/ref_pN.jpg','wb').write(base64.b64decode('{data.image_base64}'))"
# 再传入 --image
python3 scripts/image_gen.py ... --image /tmp/ref_pN.jpg
✅ 原图是:男生坐在电脑前,周围漂浮着笔记软件图标,困惑表情,线条插画风
→ prompt:年轻男生坐在书桌前,Notion/Obsidian图标环绕飘散,眉头紧皱,同款线条插画风,奶油色调,竖版构图
❌ 凭空写:温馨书房,女生整理笔记,日系风格(完全不参考原图)
batch_edit operations 字段名必须是 op,不是 type:
✅ { "op": "insert", "anchor_id": "...", "position": "after", "content": "..." }
❌ { "type": "insert", ... }
op 合法值只有:replace / insert / delete / update_attrs
insert 的 position 只能是 "before" 或 "after",anchor_id 必须是真实 block id,不能为 null:
✅ { "op": "insert", "anchor_id": "aB3kLm9xZq", "position": "after", "content": "..." }
❌ { "op": "insert", "anchor_id": null, "position": "begin", ... }
❌ { "op": "insert", "anchor_id": null, "position": "end", ... }
想在笔记末尾追加:先 get_note_outline 取最后一个 block 的 id → anchor_id 填该 id,position 填 "after"
content 必须是纯 XML 字符串,不是数组、不是自然语言:
✅ content: "<h2>封面页(P1)</h2><p>内容...</p>"
❌ content: [{"type": "text", "text": "..."}]
❌ content: "把第二段改成..."
多段内容一次性拼入,不要分多次 insert:
✅ 一次 insert,content 里拼多个块级标签
❌ 每个块单独 insert 一次(容易乱序、锚点失效)
连续追加时用 last_block_id 做链式锚点(必须分批时):
第一次 insert → 返回 last_block_id: "id_A"
第二次 insert → anchor_id 用 "id_A",不要重新 outline
加载偏好 → 读取源笔记 → 分析内容 → 规划图文结构 → 生成各页文案 → 逐页生图 → 生成标签 → 确认是否更新偏好
使用 search_notes 搜索关键词 小红书创作偏好。
已加载小红书偏好:风格={风格} | 页数={页数} | 字数/页={字数} | 话题方向={方向}
询问用户:
"请告诉我要转换哪篇笔记的标题或 ID,我来帮你生成小红书图文方案。"
获取笔记标识后:
search_notes 或 get_note_outline 定位笔记read_note 读取完整内容get_note_outline / wpsnote-cli outline --note_id {id} --json 找出所有 image 类型的 blockwpsnote-cli read-image --note_id {note_id} --block_id {block_id} --json
MCP 降级:read_image({ note_id, block_id })图片1:block_id=xxx,位置第N页附近
画面内容:{描述图里有什么:人物/场景/元素/布局}
风格色调:{插画/摄影/扁平/日系/科技感/色调}
可用于:P{页码}(与该页主题最相关)
告知用户:「已读取笔记《{标题}》,识别为「{内容类型}」,核心是「{主题}」。原文含 {N} 张图片,将优先用于垫图生成配图。」
根据内容类型和偏好中的页数设置,规划每页主题:
| 页码 | 类型 | 作用 |
|---|---|---|
| P1 | 封面页 | 标题 + 核心钩子,让人点进来 |
| P2-PN-1 | 内容页 | 每页一个知识点/步骤/亮点 |
| PN | 结尾页 | 总结/金句 + 引导互动(点赞/收藏/评论) |
| 内容类型 | 推荐页数 |
|---|---|
| 干货教程 | 7-9 页(步骤拆解) |
| 经验分享 | 6-7 页(故事 + 提炼) |
| 知识科普 | 6-8 页(概念 + 案例) |
| 情感故事 | 5-6 页(节奏紧凑) |
规划完成后,调用 create_note 新建笔记(标题:{源笔记标题} - 小红书图文),用 batch_edit 写入规划结构(仅占位)后告知用户页数分配,不等用户确认直接继续。
规划每页主题时,必须标注对应原文的章节或段落(如"P2 → 原文 01 笔记软件的周期律"),确保每页都有原文锚点,不得无中生有。
get_note_outline(note_id) 获取当前 block 结构,记录最后一个 block 的 id 作为首次 anchor_idedit_block 的 insert 写入,避免分多次调用导致乱序或 block_id 失效last_block_id 作为下次的 anchor_id,禁止复用旧 id每页包含:
<h1>{源笔记标题} - 小红书图文</h1>
<p><tag>#小红书</tag></p>
<p>来源笔记:{标题} | 页数:{N}页 | 风格:{风格}</p>
<h2>封面页(P1)</h2>
<p><strong>页面标题:</strong>{封面标题,12字以内,有爆款感}</p>
<p><strong>副标题:</strong>{副标题/钩子句,20字以内}</p>
<p><strong>视觉描述:</strong>{生图prompt}</p>
<p><strong>配图:</strong>生成中…</p>
<h2>内容页 P2:{页面主题}</h2>
<p><strong>页面标题:</strong>{标题}</p>
<p><strong>正文:</strong>{内容文案}</p>
<p><strong>视觉描述:</strong>{生图prompt}</p>
<p><strong>配图:</strong>生成中…</p>
<!-- 更多内容页… -->
<h2>结尾页(PN)</h2>
<p><strong>页面标题:</strong>{金句或总结}</p>
<p><strong>正文:</strong>{互动引导文案,如:觉得有用就收藏吧~}</p>
<p><strong>视觉描述:</strong>{生图prompt}</p>
<p><strong>配图:</strong>生成中…</p>
<h2>发布文案</h2>
<p><strong>标题:</strong>{发布标题,含关键词,≤20字}</p>
<p><strong>正文:</strong>{完整发布正文,200-500字,首行必须吸引眼球}</p>
<p><strong>话题标签:</strong></p>
<p>{标签1} {标签2} {标签3} … (8-15个)</p>
<h2>推荐发布时间</h2>
<p>{工作日 / 周末} {上午 / 午休 / 晚间},约 {具体时段}</p>
写入后告知:「图文方案已写入,共 {N} 页。」然后进入 Step 5 检查生图 Key。
如果偏好中已设置外部 provider:
图像生成 Key 的笔记,找到对应 provider 的 ciphertext_b64--key note:{笔记ID} --ciphertext {密文})没有找到你的 {provider} Key,无法生图。请选择:
A. 现在提供 Key(可选择是否保存到笔记)
B. 跳过配图,只保留文案方案
严禁静默降级到内置工具,必须等用户明确选择后才能继续。
铁律0 已读取到该页原文图片(read-image base64)?
├─ 是 → provider 支持垫图(openrouter / gemini)?
│ ├─ 是 → 【方式A】原图 + 文案 → 排版生图
│ └─ 否(ark / dashscope)→ ⛔ 跳过,该页不配图,占位文字保留
└─ 否(原文无图)→ 【方式B】纯文生图(兜底)
核心思路:把原文图片 + 当页文案同时传给生图 AI,AI 直接输出排好版的小红书竖版卡片图。AI 拿着你的图、拿着你的文,负责排版。
执行步骤:
# Step 1:将 read-image 取到的 base64 存为临时文件
python3 -c "
import base64
data = '{从read-image取到的完整base64字符串}'
with open('/tmp/ref_p{页码}.jpg', 'wb') as f:
f.write(base64.b64decode(data))
print('saved')
"
# Step 2:把原图 + 排版文案一起传给生图 AI
python3 scripts/image_gen.py \
--provider "{偏好provider}" \
--model "{对应模型,见下表}" \
--key "note:{key笔记id}" --ciphertext "{密文}" \
--image /tmp/ref_p{页码}.jpg \
--prompt "小红书竖版卡片排版,3:4 比例。
页面标题(大字居中):{当页标题}
正文内容:{当页文案,不超过80字}
风格:参考输入图片的画风、色调和视觉元素,保持一致。
要求:文字清晰可读,留白充足,符合小红书视觉审美。" \
--aspect "3:4" \
--out "./output"
provider 对应模型(硬编码,不可修改):
| provider | 模型 | 是否支持本地文件垫图 |
|---|---|---|
| openrouter | google/gemini-3.1-flash-image-preview | ✅ 支持 |
| gemini | gemini-3-pro-image-preview | ✅ 支持 |
| ark(即梦) | doubao-seedream-5-0-260128 | ❌ 不支持 → 跳过该页 |
| dashscope | qwen-image-2.0-pro | ❌ 不支持 → 跳过该页 |
原文该页本身没有图片 / 用户明确要求重新生图时使用。ark / dashscope 用户有原图的页面不走此路径。
python3 scripts/image_gen.py \
--provider "{偏好provider}" \
--model "{对应模型}" \
--key "note:{key笔记id}" --ciphertext "{密文}" \
--prompt "小红书竖版卡片排版,3:4 比例。
页面标题(大字居中):{当页标题}
正文内容:{当页文案,不超过80字}
视觉风格:简约插画风,奶油色调
要求:文字清晰可读,留白充足,符合小红书视觉审美。" \
--aspect "3:4" \
--out "./output"
内置工具降级(image_gen.py 无法使用时):
wpsnote-cli gen-image \
--prompt "{排版指令+文案}" \
--width 1080 --height 1350 --json
或 MCP:generate_image({ prompt: "...", width: 1080, height: 1350 })
⚠️ 内置工具限速每分钟 1 张,多页生成前告知用户预计耗时(页数 × 约 60 秒)
每张图生成后按以下顺序执行:
1. 获取图片 URL
image_gen.py 生图:从 [saved] {路径} 取本地路径,作为 --src 传入wpsnote-cli gen-image 生图:从 JSON 输出取 data.image_url,直接作为 URL 传入2. 刷新 outline 获取 anchor_id
wpsnote-cli outline --note_id "{笔记ID}" --json
找到"配图:生成中…"所在段落对应的 block_id 作为 anchor_id(在写入笔记结构时已记录各页"配图"占位块的位置,取其上一个 block 的 id 作为 anchor)。
3. 插入图片(优先 CLI)
wpsnote-cli insert-image \
--note_id "{笔记ID}" \
--anchor_id "{占位段落的前一个block_id}" \
--position "after" \
--src "{URL或本地路径}" \
--json
4. 删除占位段落
插入成功后,用 edit_block delete 删除"配图:生成中…"的占位段落。
5. 降级:CLI 失败则用 MCP
insert_image({ note_id: "...", anchor_id: "...", position: "after", src: "..." })
⚠️
insert-image要求笔记在 WPS 编辑器中打开,否则报INTERNAL_ERROR。遇到此错误提示用户打开笔记后重试。
每张完成后说:「第 {N} 张配图({页面类型})已写入」。全部完成后说:「共 {N} 页配图已全部写入笔记《{笔记标题}》。」
询问:「这次用的是「{风格}」风格,{N} 页方案。有需要调整的参数吗?A. 更新偏好 B. 不用」
edit_block 整表替换偏好笔记,完成后说「偏好已更新」未找到偏好笔记时,询问:
我没找到你的小红书创作偏好,先配置一下:
1. 内容风格?(知识干货 / 生活分享 / 情感共鸣 / 时尚美妆)
2. 默认页数?(6页 / 8页 / 10页 / 自动判断)
3. 每页字数?(50字以内 / 80字左右 / 100字以上)
4. 主要话题方向?(如:职场/读书/设计/健康/育儿/...)
5. 图片风格偏好?(插画风 / 摄影风 / 信息图表风 / 自动匹配)
6. 生图服务商?(openrouter需代理 / dashscope百炼国内直连 / ark即梦国内直连 / gemini需代理 / 用内置工具)
收到后:
create_note 创建标题 小红书创作偏好 的笔记<h1>小红书创作偏好</h1>
<p><tag>#小红书</tag></p>
<table>
<tr>
<td><p><strong>配置项</strong></p></td>
<td><p><strong>当前值</strong></p></td>
<td><p><strong>可选项</strong></p></td>
</tr>
<tr>
<td><p>内容风格</p></td>
<td><p>{风格}</p></td>
<td><p>知识干货 / 生活分享 / 情感共鸣 / 时尚美妆</p></td>
</tr>
<tr>
<td><p>默认页数</p></td>
<td><p>{页数}</p></td>
<td><p>6页 / 8页 / 10页 / 自动判断</p></td>
</tr>
<tr>
<td><p>每页字数</p></td>
<td><p>{字数}</p></td>
<td><p>50字以内 / 80字左右 / 100字以上</p></td>
</tr>
<tr>
<td><p>话题方向</p></td>
<td><p>{方向}</p></td>
<td><p>职场 / 读书 / 设计 / 健康 / 育儿 等</p></td>
</tr>
<tr>
<td><p>图片风格</p></td>
<td><p>{图片风格}</p></td>
<td><p>插画风 / 摄影风 / 信息图表风 / 自动匹配</p></td>
</tr>
<tr>
<td><p>生图服务商</p></td>
<td><p>{provider}</p></td>
<td><p>openrouter / dashscope(百炼) / ark(即梦) / gemini / 内置工具</p></td>
</tr>
</table>
生成 8-15 个标签,分三层:
| 层级 | 数量 | 示例 |
|---|---|---|
| 核心话题(大流量) | 2-3 个 | #读书笔记 #学习方法 |
| 内容话题(中流量) | 4-6 个 | #高效阅读 #知识管理 #笔记整理 |
| 长尾话题(精准流量) | 2-4 个 | #{内容具体关键词} |
| 场景 | 处理方式 |
|---|---|
| 源笔记内容太少(<200字) | 提示用户:内容较少,将尽量丰富延伸,是否继续 |
| 源笔记内容太多(>5000字) | 用 search_note_content 定位核心段落,提炼后转化 |
| 用户要求减少页数 | 合并相近主题的页,保留最核心的知识点 |
| image_gen.py 生图失败 | 自动降级到 wpsnote-cli gen-image,再失败降级到 MCP |
| 所有生图均失败 | 保留"视觉描述"文字占位,告知用户可手动配图 |
| 偏好未设置 provider | 直接用内置工具生图,提示用户可在偏好中配置外部服务商 |
| 用户说「风格不对」 | 询问具体调整方向:配色/插画/文字排版/情绪 |