小红书自动发布教程:用 Skill 整理图文并自动填写发布页

小红书图文的重复工作往往是整理图片、挑标题、复制正文和标签,再逐项填写发布页。我把这部分整理成了 xhs-fat-publisher,仓库里包含 Skill 和实际执行的 Node.js 脚本。

它能做的是:打包本地素材,打开创作者页面,上传图片并填写内容,最后停下来让人确认发布。 它不自动点击发布,也不保证页面填写成功后,平台已经持久保存了草稿。

本文依据仓库 SKILL.mdscripts/xhs_fat_publisher.js、示例配置和本地样例验证整理。先把能跑到哪一步讲清楚,再谈自动化。

Agent 和脚本各做什么

你或 Agent:选题、改写正文、制作并检查正式图片

build:整理 content.md、meta.json 和 images/

validate:检查发布包的基本结构

prepare:复用登录态,上传图片,填写标题和正文

你:检查账号、内容和可见范围,点击发布

当前脚本不会调用大模型帮你精修文案。没有传入图片时,它生成的是纯色占位 PNG,不是带知识点的成品卡片。内容生产与页面填写需要分别检查。

第一步:安装依赖和浏览器

准备 Node.js、npm、Git。后续命令都在仓库目录执行:

git clone https://github.com/Lianminx/xhs-fat-publisher.git
cd xhs-fat-publisher
npm ci
npx playwright install chromium
node scripts/xhs_fat_publisher.js doctor

npm ci 按仓库锁文件安装依赖;下一步安装 Playwright 使用的 Chromium。桌面端运行这条路线需要可见的浏览器窗口。

特别注意 doctor 的输出:当前实现即便没有装好 Playwright,也可能输出顶层 ok: true。要看 playwrightInstalled 字段;它也不检查账号是否已经登录。进程退出码为零不能替代这些检查。

第二步:建立专用登录态

node scripts/xhs_fat_publisher.js init
node scripts/xhs_fat_publisher.js open-login --keep-open

在打开的创作者浏览器里手动完成登录。登录结束后关闭这个浏览器,再执行后面的 prepare;不要让两个进程同时占用同一份 profile。

默认文件位置是:

~/.xhs-fat-publisher/
  profile.json          本地默认配置
  playwright-profile/   浏览器登录态
  workspace/            未指定输出路径时的工作目录

~ 代表当前系统用户目录。使用专用 profile,能让这个流程复用自己的登录态;普通浏览器已经登录,不代表这个 profile 也已登录。

登录态、Cookie 和诊断页面可能包含账号信息,别把它们作为“开箱即用配置”放进 GitHub。

第三步:先跑一个完全本地的例子

node scripts/xhs_fat_publisher.js build --source-file assets/sample-input.md --output-dir ./out/demo
node scripts/xhs_fat_publisher.js validate --package-dir ./out/demo

输出目录如下:

out/demo/
  content.md
  meta.json
  images/
  diagnostics/

这个例子会生成 1080×1440 的纯色占位图,用来证明文件生成和读取路径能工作。到这里停住,不要把演示包直接上传。 validate 成功只说明标题、正文、图片列表和文件存在,不表示图片好看、内容合适或者满足平台限制。

第四步:换成可以发布的真实内容

准备下面的输入:

input/
  post.md
  images/
    01-cover.png
    02-steps.png
    03-example.png

post.md 使用 UTF-8,里面放已经整理过的正文。图片可以由你设计,也可以由 Agent 使用可用的制图工具制作;先看完所有图片,再进入上传。不要把复杂图表和长文章截图硬塞进一张封面。

node scripts/xhs_fat_publisher.js build --source-file input/post.md --image-dir input/images --output-dir ./out/post
node scripts/xhs_fat_publisher.js validate --package-dir ./out/post

图片支持 PNG、JPG、JPEG、WebP。使用数字前缀方便排序,但仍要对照生成的图片列表与最终页面确认顺序。

打开 out/post/content.md,逐项编辑:

  • 推荐标题: 上传使用第一个候选,把最终标题放在第一项。脚本生成的候选只是一组机械模板,不代表已经做过选题判断。
  • 正文: 删除不适合发布的 Markdown 标记,检查段落与表达。脚本会保留源文本,不会自动精修所有格式。
  • 标签: 保留与内容直接相关的词。脚本把标签追加成正文文本,不保证已经选中平台话题。
  • 图片: 检查文件名、顺序以及每张图里的文字。

字数、图片数量和页面校验要求,以发布时平台给出的限制为准。不要把脚本的结构检查当成平台的验收。

有个当前版本的坑:用 build --package-dir 重建旧包时,已有标题会优先于 --title-override;没有再次指定图片目录,还会生成占位图。因此修改成稿优先直接编辑 content.md,确实需要重建时提供正式图片并使用新的输出目录。

第五步:填写页面,人工确认

node scripts/xhs_fat_publisher.js prepare --package-dir ./out/post --keep-open

脚本会打开创作者页面,切换到图文入口,上传图片,填写标题和正文。--keep-open 会保持窗口和进程等待,检查完成后关闭窗口即可结束。

发布前看一遍:账号是否正确,图片是否完整且有序,标题与正文是否填进正确区域,标签是否需要在界面选择话题,以及最终可见范围是否符合预期。

之后由你点击发布。页面填写成功与公开发布成功是两件事;实际发布结果应以平台回执和作品页面为准。

交给 Agent 时,怎样描述任务

将整个仓库安装进 Agent 支持的 Skill 目录,或直接指定 SKILL.md 路径。仓库带执行脚本,但仍需要安装 Node 依赖和浏览器。

读取 xhs-fat-publisher/SKILL.md。
输入正文是 input/post.md,正式图片在 input/images。
输出到 out/post。整理成适合小红书的图文包,检查标题、正文、标签和图片。
完成本地检查后,打开创作者页面并填写,保持窗口打开。
不要点击发布。遇到登录失效就告诉我;如果图片仍是占位图,不要上传。

如果要让 Agent 同时写稿和制图,应在任务里明确素材来源、主题与图像工具,不要期待执行脚本自行补齐这些能力。

出错时从哪一层看

现象 排查方向
无法加载 Playwright 确认在仓库内完成 npm ci,再安装 Chromium
浏览器要求重新登录 用同一 profile 执行 open-login,完成后关闭再重试
profile 被占用 关闭前一个使用该 profile 的自动化浏览器
图片上传或输入框定位失败 查看包内 diagnostics/ 的截图和 HTML,核对页面是否改版
脚本成功但内容不对 检查第一个标题候选、正文标记和图片列表,不能只看 ok

发生超时或部分填充后,先检查当前页面,不要盲目重复上传。截图和 HTML 只用于本地诊断,分享前先移除账号与会话信息。

本轮做了本地样例构建、结构校验和缺失文件验证,没有登录真实小红书账号执行上传或发布。浏览器端流程依赖平台页面结构,首次使用需要在自己的账号中确认。

源码与安装入口:xhs-fat-publisher。公众号通过 CLI 上传远端草稿,参见微信公众号自动发布教程