# Douyin Publish

使用 Camoufox 持久化创作者会话登录并发布抖音视频或图文；支持本地预览、分步填表与配乐、短信续接和取链。

- Repository: https://github.com/TeamWiseFlow/xiaobei (8678 stars)
- Category: Engineering
- License: see repository
- Last updated: 2026-10-30
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add TeamWiseFlow/xiaobei --skill douyin-publish -g -a claude-code -y`
Codex: `npx skills add TeamWiseFlow/xiaobei --skill douyin-publish -g -a codex -y`
Cursor: `npx skills add TeamWiseFlow/xiaobei --skill douyin-publish -g -a cursor -y`
Gemini CLI: `npx skills add TeamWiseFlow/xiaobei --skill douyin-publish -g -a gemini-cli -y`

## Description

使用 Camoufox 持久化创作者会话登录并发布抖音视频或图文；支持本地预览、分步填表与配乐、短信续接和取链。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 抖音发布

发布使用 Camoufox 持久化 session `douyin`，登录态保存在 profile。本人作品取数由 douyin-engagement 通过 HTTP 完成，仅在进程内临时读取同一 profile 的 cookie/UA。不手工导出或导入 cookie，不使用 hunter 的 API 会话代替发布会话。

## 登录与检查

```bash
douyin-publish login
douyin-publish check
```

`login` 打开有头创作者中心，请用户完成扫码或页面验证；返回 `awaiting_user_login` 不代表已经登录。用户完成后用 `check` 验证创作者接口，检查会关闭浏览器进程并保留 profile。未登录返回 exit 2；验证码、风控和接口异常停止处理，不无限重试。

`check` 返回 `PUBLISH_PENDING` 是已有视频提交未结案，不是登录失效或取数故障；先用 `douyin-publish video resume` 只读核查原任务，不重新扫码、重传或清状态。核查确认原作品后工具自动结案，后续发布才可继续。

## 视频与图文

先展示目标账号、文件、标题和正文，执行不带 `--confirm` 的命令生成本地预览；用户已授权后在同一命令加 `--confirm`。

```bash
douyin-publish video run --video /绝对路径/video.mp4 --title "标题" --caption @/绝对路径/body.txt --cover-vertical /绝对路径/vertical.jpg --cover-horizontal /绝对路径/horizontal.jpg
douyin-publish note run --images /绝对路径/1.png /绝对路径/2.png --title "标题" --caption @/绝对路径/body.txt --original-sound
```

`video/note run` 是一键流程；原来的 `video --video …`、`note --images …` 简写仍可用。分步提交 `video publish` 和 `note publish` 同样必须加 `--confirm`；不带时只返回核对提示，不操作浏览器。上传、填表、配乐等分步操作按下方参考说明执行。

先将已确认的纯正文和话题写入 UTF-8 `body.txt`，用 `--caption @/绝对路径/body.txt` 由脚本读取。相对路径按当前工作目录解析；路径含空格时给整个 `@路径` 参数加引号。文件读取失败或正文超长时在浏览器操作前停止；预览的 `caption` 是实际正文。文件须有真实换行，不把标题或交付说明放进正文，不用 `$(cat ...)` 或将多行正文拼进命令。短文字仍支持直接传入；以 `@` 开头的参数一律按文件路径处理，文件内容只读取一次，正文里的 `@提及` 按原文保留。`video/note fill/run --caption` 均支持文件。

视频入口保留浏览器 AIGC 声明流程，不支持 `--declaration none`。图文默认声明 AI，可按实际来源传 `--declaration none`；原声图文必须明确传 `--original-sound`。视频分步操作、草稿修复与短信续接先读 [视频操作说明](references/video.md)；图文配乐和分步操作先读 [图文操作说明](references/note.md)。

视频提交必须有 3:4 竖封面与 4:3 横封面。比例不符时等比补底保留完整内容，不裁掉边缘文字；补底过宽也可能被平台拒绝，两张封面都要通过页面检测。`COVER_BORDER_TOO_LARGE` / `COVER_QUALITY_REJECTED` 时按目标比例重新构图或更换封面，不反复加宽补底或跳过检测。缺视频、标题或双封面即停止，不点击发布。

封面与 AIGC 声明必须在唯一可见的目标弹窗内保存；支持 dialog/modal/Semi Modal，不能只看 `role="dialog"` 或页面文字就判断已完成。已有声明弹窗时用 `video fill` / `cover` 续编，脚本先完成声明再操作正文/封面；同类弹窗不唯一或设置未保存时停止并保留草稿。浏览器异常的安全定位字段见 `references/video.md`。

The rest: https://github.com/TeamWiseFlow/xiaobei/blob/HEAD/crews/main/skills/expert-douyin/tools/douyin-publish/SKILL.md
