# Cyxj Release Kit

> 陈与小金的视频发布物料一条龙：成片定稿后，一次产出 6 平台「标题+简介」（YouTube/B站/抖音 主平台, 视频号/TikTok/小红书 分发平台）+ 三比例封面（4:3 为工作台首项,另含 16:9 / 3:4,HTML 封面工作台出图, 文字零错字零裁切） + 上传用 JPG。封面走「无字底图 + HTML 排字」路线,不再用生图赌中文渲染。 触发方式:/cyxj-release-kit、发布物料、出发布包、取标题、六平台标题、写标题和简介、 做封面(HTML/工作台)、封面工作台、视频要发布了。 凡是"视频做完了准备发"的场景都应该用本 skill——哪怕用户只提了其中一样(只要标题/只要封面), 也按本 skill 对应模块走,保证口径一致。

- Skill: `chenyuxiaojin/cyxj-release-kit` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add chenyuxiaojin/cyxj-release-kit`
- Raw SKILL.md: https://api.skillmd.com/api/skills/chenyuxiaojin/cyxj-release-kit/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: chenyuxiaojin (https://skillmd.com/u/chenyuxiaojin)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/chenyuxiaojin/cyxj-release-kit

---


# cyxj-release-kit:视频发布物料一条龙

成片定稿 → 标题(6 平台)→ 简介(6 平台)→ 封面(4:3 首选,另含 16:9 / 3:4)→ 上传 JPG。
本 skill 把 2026-07-05 loop 视频那次全流程实战固化下来,核心教训只有一条:
**中文文字永远不要交给生图模型渲染**——模型不认精确比例、脚本会中心裁切,文字进画面必掉字;
文字由浏览器渲染,底图才交给生图/实拍。

## 前置

1. 读 `内容创作/log/index.md` HEAD,拿到:成片位置、**最终导出字幕**(SRT)位置、视频主题。
2. 确认**视频标题已定稿**。没定稿就先出候选(规则见下),用户拍板后再走后面模块。
3. 所有事实(数字、时间戳、功能点)只从最终字幕/成片里来,**数据不编**(同 cyxj-jingxuan 的红线)。

## 模块一:标题(6 平台)

先读 `${CLAUDE_PLUGIN_ROOT}/skills/cyxj-release-kit/references/platform-specs.md`(各平台字数上限 + 自家高播放样本,必读)。

**标题只做一件事:对观众正在用 / 正在选的东西,给一个具体判决。** 形式就是"X 实测:发生了什么,数字多少"。
用户拍板的标准样本(2026-09-04):**「Agent Teams 实测:3 个 AI 互相证伪排 bug,Token 贵 4 倍」**——
东西名 + 体裁词 + 一个具体事件 + 一个数字判决,平铺直叙像新闻导语,第三人称陈述句。

流程:
1. **先摘利害句**:从最终字幕 / 成片里摘 3-5 条——具体数字(倍数 / 刀 / 分钟 / 百分比)、判决(不如 / 贵 / 降智 / 删掉 / 别用)、
   观众身上正在发生的痛。摘不出来就如实回报用户"这期没有可卖的判决",等用户定方向。
2. **拼标题**:主语(工具 / 功能名,观众认识的东西)+ 体裁词(实测 / 对比 / 拆解 / 翻车)+ 事件 + 数字判决。冒号 / 逗号分隔。
3. **每平台 3 条候选**,各卖一条不同的利害句;每条附「前 15 字截断预览」;标一条推荐并说一句为什么。
   用户拍板;拿不准的上 YouTube 后台「标题测试」让数据选,不靠猜。
4. **自检**(逐条过):≤字数上限?有具体数字?主语是观众认识的东西?体裁词 = 真实体裁?是陈述句?

硬上限(交付前数一遍):YouTube ≤25 字 / B 站 ≤25 字 / 抖音首行 ≤20 字 / 视频号 ≤25 字 / 小红书 ≤20 字 / TikTok 英文 ≤50 字符。

写法要求(只说要怎么写):
- 主语是观众正在用的工具 / 功能名,只写一次,英文名直接用
- 一条标题一个判决,判决里带一个具体数字(倍数 / 百分比 / 刀 / 天)
- 陈述句,第三人称,冒号或逗号分隔,像新闻导语
- 体裁词 = 片子的真实体裁(实测 / 对比 / 拆解 / 教程),标题里的每个事实都能在片中找到
- 三平台卖同一个判决,各平台只调字数和关键词位置

## 模块二:简介(6 平台)

规格逐平台见 platform-specs.md。要点:
- YouTube 简介带章节时间戳,第一条必须 `00:00`,**每个时间戳都要回字幕核对**,禁止估。
- 标题+简介成对交付,一次给全 6 个平台,别挤牙膏。

## 模块三:封面(HTML 封面工作台)

### 3.1 底图(一期一张,无字)

底图 = 16:9 无文字场景图,来源二选一:

- **生图**:调 cyxj-image-studio 的 `generate.py`,**必须显式指定风格**:

  ```bash
  S=~/.claude/plugins/.../cyxj-video-cover/scripts/generate.py
  # 真人底图(人在左、右半边留白):
  python3 $S --title "本期标识" --style plate --ratios 16:9 --n 3 \
            --face ~/Pictures/封面形象/<用户指定的原图> --label "<项目>-底图"
  # 无人底图(不喂脸,走文生图端点):
  python3 $S --title "本期标识" --style plate-noface --ratios 16:9 --n 3 --label "<项目>-底图"
  ```

  **`--style` 不给就是 default,那会把中文标题渲进画面,出来是带字整图,不能当底图。**
  plate / plate-noface 的 prompt 完全不含 title,并且写死了「无任何文字/字母/数字/logo/水印」
  + 「右半边整片空墙留给排版」。`--title` 在这两个风格里只是批次标识,不进画面。

  人脸参考用 `~/Pictures/封面形象/` 里**用户指定的原图**(**每次都喂原图,严禁拿生成图回喂**,
  会越来越不像)。目录里有十几张,**别默认取第一张——先问用户用哪张**。

- **实拍/抽帧**:用户给照片,或从成片开头口播段 ffmpeg 抽帧(注意挑眼睛睁开的帧,先抽 5-6 帧给用户选)。

底图只出 16:9 一个比例——其余比例由工作台的 blur-fill 自己适配,不要分比例生图。

**通道的坑(2026-08-25 实测,踩过一遍才跑通)**:

| 现象 | 真因 | 处理 |
|---|---|---|
| 503 `No available channel for model gpt-image-2-vip` | 这把 key 的分组里**没有 vip 档** | 用 `gpt-image-2`(已是脚本默认);先 `GET /v1/models` 看分组里到底有啥 |
| 自写脚本 403 `error code: 1010` | **Cloudflare 拦 `Python-urllib` 的 UA** | 请求和下图都要带浏览器 UA;`generate.py` 已内置 |
| 400 `only supports image generation ... text conversation` | 上游偶发把图片请求错路由到对话模型,**成功率约五成** | 原样重试即可;`generate.py` 已内置 4 次重试 |
| 524 | Cloudflare 网关超时(~100s),并发越高越容易撞 | 并发别开太大 + 重试。实测并发 6 → 3 成功(36/63/89s)/3 个 524 |

已作废的旧说法:「gpt-image-2 会无视 size、强制 1254² 缩水,比例要稳得走 Gemini」——
2026-08-25 实测传 `size: 2560x1440` 就出 2560×1440,不必绕道。

### 3.2 工作台

1. 把 `${CLAUDE_PLUGIN_ROOT}/skills/cyxj-release-kit/templates/cover-studio.html` 复制到本期
   物料目录(`~/Pictures/封面出图/<日期>-<项目>-最终/源文件/`),底图重命名为 `plate_16x9.png` 放同目录。
2. 改模板顶部三个常量 `L1/L2/L3`(标题三段)。字数和默认(5/4/4 字)差很多时,按
   「字数 × 字号 ≈ 可用宽度」调 `RATIOS` 里各比例的 `s1/s3`,渲一次画廊自检确认没有换行/贴边。
3. `open -a "Google Chrome" 工作台.html` 给用户挑。4:3 排在最前,画廊 = 3 比例 × 3 样式(A 右栏三行+箭头 /
   B 通栏大字 / C 微倾斜+橙底线),点选存 localStorage,可多选。所有样式右上角都不放图标。
4. 读用户选择:**扩展碰不了 file:// 页面**,从磁盘读:
   ```bash
   cd ~/Library/Application\ Support/Google/Chrome/Default/Local\ Storage/leveldb
   strings -a $(ls -t *.log | head -1) | grep -a 'coverPicks\|16x9-\|4x3-\|3x4-' | tail -3
   ```
   取**最后一条** JSON 数组为准。读不到就直接问用户选了哪几个编号。
5. 按选中变体逐张导出(无头 Chrome,像素级精确):
   ```bash
   C="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
   "$C" --headless --disable-gpu --hide-scrollbars \
        --window-size=<W>,<H> --virtual-time-budget=4000 \
        --screenshot=<输出>.png "file://<工作台绝对路径>?v=<变体ID>"
   ```
   尺寸:16x9=2560,1440;4x3=2048,1536;3x4=1536,2048。导出后 `sips -g pixelWidth -g pixelHeight` 验尺寸。

### 3.3 工作台原理(改样式/排错时读)

- **blur-fill 模糊延展**:清晰底图按宽度贴底,画布上方缺口用同图 `blur(60px)` 放大版补,
  清晰层顶部加 `mask-image: linear-gradient` 渐隐,接缝不可见。模糊层 `background-position`
  取景**纯墙区**(right center),否则人物鬼影会浮在模糊区。
- 人物大小由清晰层 `plateW` 控制,文字大小在 `RATIOS` 每比例配置里。
  · **真人底图**:竖版必须把人顶上来才够看 —— 3x4 实测 `plateW: 1536`(=画布宽)人物偏小,
    **2200 才合适**(超出画布的右半边被 overflow 裁掉,人在左侧不受影响)。
  · **无人底图**:纯背景,`plateW` 设成画布宽即可满幅铺开,16:9 还能 `fade:false` 免渐隐。
- 字号三档 `s1/s2/s3` 对应 L1/L2/L3,**`s2` 不写会回退成 `s1`**。L1/L2 字数差很多时必须分开给:
  例 L1「如何管理上下文?」(8 字) 与 L2「SUBAGENTS」(9 个拉丁字母 ≈ 4.5 汉字宽) 共用一个字号,
  L1 必超宽。拉丁字母按 ≈0.5 汉字宽估,汉字按「字数 × 字号 ≈ 可用宽度」估。
- 字体 = 得意黑 Smiley Sans,已装 `~/Library/Fonts/SmileySans-Oblique.ttf`;模板 @font-face 走
  `local()` + 同目录 ttf 兜底。新机器没装:GitHub `atelier-anchor/smiley-sans` releases 下载
  (v2.0.1 实测可用),cp 进 `~/Library/Fonts/`。

## 模块四:上传 JPG

- HTML 截图无任何来源痕迹,无需去痕,直接轻量转换:
  `sips -s format jpeg -s formatOptions 95 <png> --out <jpg>`

## 产物归集与收尾

```
~/Pictures/封面出图/<日期>-<项目>-最终/
  封面_16x9.png / 封面_4x3.png / 封面_3x4.png     ← 定稿 PNG
  源文件/ 封面工作台.html + plate_16x9.png + 字体   ← 可复用,下期只改 L1/L2/L3
```
- 过程稿文件夹在用户确认定稿后**问一声再删**(先例:用户会要求清掉)。
- 标题+简介直接在对话交付;按内容创作仓库规矩更新 log HEAD + 历史流水。

## 与相邻 skill 的分工

| skill | 管什么 | 本 skill 关系 |
|---|---|---|
| cyxj-video-cover | 生图封面(整图带字) | 降级为**底图生成器**:只用 `--style plate` / `plate-noface`,default 风格会渲字不能用 |
| cyxj-jingxuan | 抖音精选申请文案 | 发布后的下一步,不在本 skill 内 |
| cyxj-hook / cyxj-content | 视频开头/内容诊断 | 管片子本身,不管发布物料 |

