refactor(skill): 主技能 subskill 目录更名 subskills(09-02 用户要求)

- V1.0/subskill/ → V1.0/subskills/(browser-harness/mcn-dou-analysis/mcn-script-review/mcn-video-prompt,git 识别 R100 纯重命名保留历史)
- 路径说明同步:V1.0/SKILL.md(96/105行)、Lite1.0/SKILL.md(66行)、mcn-dou-analysis/SKILL.md 红线行、操作规范.md 159/175行、mcn-work-shop app.js SKILL_HINT_ACCOUNT
- 用户环境 ~/.workbuddy/skills/短视频脚本创作/ 与源仓库 V1.0 同 inode(junction),自动同步无需单独改
- mcn-dou-analysis 内部 subskills/nuwa-skill-main 为正常结构不受影响
This commit is contained in:
maogeigei committed 2026-09-02 10:36:23 +08:00
1 parent 19bf4949a9
commit f1f6288b7b
520 files changed
+14 -9

No files matched your search

@@ -0,0 +1,34 @@
# 功能一:获取账号信息
> 本文件是 MCNDouAnalysis 技能**功能一(获取账号信息)**的完整执行流程。
> 独立文件设计目的:部署到用户电脑时,如不需要此功能,**删除本文件即可禁用**(同时可删除 `references/浏览器搜索抖音账号操作规范.md`;**如功能二仍启用,浏览器搜索规范需保留**,功能二获取视频流程以其为准)。
---
## Step 1:获取达人账号信息
### 数据源优先级(红线)
获取达人账号信息**必须浏览器优先**:默认用 browser-harness 访问抖音网页版账号主页提取(流程见下)。**如无必要不用查 MCP 达人信息**——MCP 的 `list_hot_accounts`/`hot_account_detail` 是**内部账号库查询工具**(MCN 内部维护的达人账号库,含人设/赛道/标签,非抖音页面实时数据),**不是本功能数据源**;仅当浏览器无法访问(账号搜索不到/主页打不开)时,才可用 MCP 达人信息兜底,并须在账号表「备注」列注明数据来源。
### Step 1.0 账号表登记(前置)
先检查 `达人账号表.xlsx`,输入信息中的账号若不在表中,先添加到表:**只占位 账号ID(自增)+ 达人昵称**;抖音号/抖音ID(sec_uid)/抖音地址等身份标识字段**留空,待浏览器抓取后回填**(浏览器抓取到的值才写,存文本格式防科学计数法),其余字段(粉丝数/解析状态/更新时间等)同样留空待补。**禁止从工作台库(`mcn-plugin.db` 的 `hot_accounts` 表 = MCP 内部账号库本地副本)/ dsh 原库 / MCP 内部账号库读取任何字段填表**——身份标识也一样,一律浏览器抓取(红线见 SKILL.md「账号信息数据源」)。再继续获取数据。
### 浏览器搜索抖音账号ID
> 详细操作规范见 `references/浏览器搜索抖音账号操作规范.md`
通过 browser-harness 打开抖音网页版,搜索账号 ID,进入达人主页提取账号信息。核心原则:**适度访问网站**,控制访问频率与行为节奏。
流程概要:
1. 适度访问 — 50% 概率先浏览抖音首页(随机停留3~8秒,自动关闭登录弹窗)
2. 搜索账号 ID,如弹登录窗口则暂停提示用户登录
3. 进入达人主页,提取账号信息(昵称/抖音号/抖音ID(sec_uid)/抖音地址/粉丝数/获赞数/关注数/作品数/IP属地/简介等基础信息)
4. **sec_uid 失效处理**:若用账号表已有「抖音地址」直接访问主页报「用户不存在」,说明 sec_uid 已失效或不完整(三方数据提供的 sec_uid 末尾可能缺失),**改用抖音搜索昵称/抖音号重新定位主页**,提取正确 sec_uid 后回填「抖音ID」「抖音地址」两列
### 数据保存规则
- 账号信息登记到 **`达人账号表.xlsx`**(权威源,字段:账号ID/达人昵称/抖音号/抖音ID/抖音地址/粉丝数/解析状态/人设卡/更新时间/获赞数/关注数/作品数/IP属地/简介/备注;抖音号/抖音ID/抖音地址存文本格式。**注:仅保留网页可获取的账号数据列 + 内部主键/更新时间/流程状态,已删除非网页字段「类别/数据来源/对标视频数」**)
- **「更新时间」字段**:每次获取账号数据后,**更新「更新时间」字段**(格式 `YYYY-MM-DD HH:MM`)。再次获取前先检查该字段:若数据较新(如近 1 个月内)应提示用户判断是否仍需刷新,避免无谓重复抓取
- 根目录默认位于用户桌面 `{产出根目录}/`(实际产出路径以 `references/路径配置.md` 为准)
@@ -0,0 +1,22 @@
# 功能二:获取视频列表
> 本文件是 MCNDouAnalysis 技能**功能二(获取视频列表)**的完整执行流程。
> 独立文件设计目的:部署到用户电脑时,如不需要此功能,**删除本文件即可禁用**(同时可删除 `references/浏览器搜索抖音账号操作规范.md`;**如功能一仍启用,浏览器搜索规范需保留**,功能一获取账号信息流程以其为准)。
---
## Step 2:获取达人视频列表
通过 browser-harness 在达人主页滚动加载视频列表,保存为 Excel。核心原则:**适度访问网站**,控制访问频率与行为节奏。
> 详细操作规范见 `references/浏览器搜索抖音账号操作规范.md`(搜索账号 ID、进入达人主页等前置动作与功能一共享)
流程概要:
1. 进入达人主页(账号信息已在功能一获取,抖音号/抖音ID/抖音地址已登记到 `达人账号表.xlsx`)
2. 滚动加载视频列表(每次间隔随机1~3秒),收集数量按 SKILL.md「视频获取数量」参数即可停止
3. 保存为 Excel 到 `{产出根目录}/{达人昵称}/短视频表格.xlsx`
### 数据保存规则
- 浏览器抓取数据保存为 **Excel 文件**(`短视频表格.xlsx`,13列标准格式:序号 | 视频ID | 视频标题 | 视频地址 | 点赞数 | 点赞(显示) | 评论数 | 分享数 | 收藏数 | 播放量 | 视频时长 | 发布时间 | 标签)
- 根目录默认位于用户桌面 `{产出根目录}/`(实际产出路径以 `references/路径配置.md` 为准)
@@ -0,0 +1,98 @@
# 功能三:提炼账号设定
> 本文件是 MCNDouAnalysis 技能**功能三(提炼账号设定)**的完整执行流程。
> 独立文件设计目的:部署到用户电脑时,如不需要此功能,**删除本文件即可禁用**(同时可删除 `references/人设卡生成方法.md`、`references/知识库/账号设定/`、`references/解析结果格式规范.md`;**如功能四仍启用,解析结果格式规范需保留**,功能四目录结构以其为准)。
> 🔴 **执行前必读避坑**:`references/铁律避坑规则/账号设定执行避坑.md`(本功能执行中踩过的坑:本地接口调用超时、大文本序列化、analysis 简化格式、写库验证等,防止重复犯错)。
---
## Step 3:筛选 TOP 视频
从 Excel(`短视频表格.xlsx`,13列标准格式)中,**先按发布时间过滤最近三个月**,再按 `点赞数 + 分享数` 降序排列,取前 N 条(**N 按 SKILL.md「视频筛选标准」唯一权威参数**)。
**筛选条件:**
1. **时间过滤**:仅保留发布时间在最近三个月内的视频(基于 `发布时间` 列)
2. **时长过滤**:仅保留视频时长 ≤ 15分钟的视频(基于 `视频时长` 列,排除超长视频)
3. **排名排序**:按 `点赞数(列5) + 分享数(列8)` 降序排列
4. **取前 N 条**:截取排名前 N 的视频进行 MCP 解析(N 按 SKILL.md「视频筛选标准」)
**Excel 列结构(13列标准):**
序号 | 视频ID | 视频标题 | 视频地址 | 点赞数 | 点赞(显示) | 评论数 | 分享数 | 收藏数 | 播放量 | 视频时长 | 发布时间 | 标签
> 筛选/查询/导出统一使用 `scripts/excel_tool.py`:
> - `python excel_tool.py select-top6 <xlsx> --output top6.json`(筛选TOP视频,默认数量按 SKILL.md「视频筛选标准」;如需调整数量加 `--count N`)
> - `python excel_tool.py query <xlsx> --keywords "关键词1,关键词2"`(按关键词查询含三比率)
> - `python excel_tool.py export-selected <xlsx> --titles-file selected.txt --output result.json`(批量导出)
>
> 旧脚本 `scripts/select_top6.py` 保留向后兼容,实际委托给 excel_tool.py。
---
## Step 4:视频解析(MCP 工具)
### 4.1 提交解析
对每条视频调用 `upload_douyin_video`,传入视频 URL(即 `works[].url`):
```
share_text = "https://www.douyin.com/video/xxxxx"
→ 返回 detailId(数字字符串)
```
### 4.2 等待解析完成
- 新提交的视频需要等待 **3-5分钟** 才能查询
- 已被平台解析过的视频可直接查询
- 使用 `sleep 180` 等待后批量查询
### 4.3 查询解析结果
调用 `short_video_detail`,传入 `detailId`:
```
id = "{detailId}"
→ 返回 content(分镜头表,含镜头/景别/时长/画面/表情/字幕口播)
→ 返回 analysis(结构化JSON,含赛道/核心人设/差异化壁垒/情绪设计/通用框架等)
```
**注意事项:**
- 部分视频可能 `content` 已出但 `analysis` 仍在处理,需稍后重试
- 如果返回"解析中",等待2-3分钟后重新查询
---
## Step 5:保存解析结果
> 完整格式规范见 `references/解析结果格式规范.md`(目录结构、JSON格式、analysis两种格式表、13维度说明)
>
> 统一使用 `scripts/json_tool.py` 保存和检视JSON:
> - `python json_tool.py create-content --detail-id {detailId} --title "标题" --output-dir "视频分析/文件夹" --input-file _tmp.txt`(创建content.json)
> - `python json_tool.py create-analysis --output-dir "视频分析/文件夹" --input-file _analysis_tmp.txt`(创建analysis.json,自动修复未转义双引号)
> - `python json_tool.py inspect --json-path "路径/file.json" --keys 赛道,人设,框架`(检视JSON指定字段)
> - `python json_tool.py verify-folders --base-dir "视频分析"`(批量验证文件夹完整性)
---
## Step 6:生成人设卡
> 完整方法见 `references/人设卡生成方法.md`(账号类型判定 + 三种模板结构 + 女娲造人术深度分析 + 综合人设卡结构)
**必须使用两个技能库综合生成,缺一不可:**
- 脚本创作技能 → 源技能 `{源技能目录}/references/`(结构骨架,调用 `创作流程/4_账号设定解析和确认.md` + `创作流程/3_对标视频账号拆解.md` + `知识库/01_账号设定/` + `知识库/08_对话风格/`;①开发机/②dsh环境优先调用源技能。V2.0 模板核心已吸收进 `references/人设卡生成方法.md`,③用户环境独立使用;选项体系在 `references/知识库/账号设定/`)
- 女娲造人术 → `subskills/nuwa-skill-main/`(深度分析方法)
**人设卡统一 12 段结构**:账号核心定位 → 账号内容基因 → 类型库(按账号类型适配)→ 情绪结构 → 视听风格 → 内容打法 → 内容规则 → 系列内容规划 → 差异化壁垒 → 红线清单 → 当前需解决的问题 → 设定分析说明。**人设卡聚焦内容创作本身(含差异化壁垒的内容侧"为什么别人做不了"),不含商业化变现路径分析**(商业化/市场分析归功能四账号数据分析)。
---
## Step 7:自动生成账号设定卡片(联动)
> 完整方法见 `references/feature/06_生成账号设定卡片.md`(读设定 → 读模板样例 → 模块映射 → SVG 手绘 → 验证交付)
**默认自动触发**:`{达人昵称}账号设定.md` 落盘后,**无需用户单独要求**,直接执行功能六生成 `{达人昵称}账号设定卡.svg`(与设定 md 同目录)。仅当功能六文件被删除(部署禁用)或用户明确「只要设定不要卡片」时跳过。
**双向联动维护(修改时两边一起修改)**:
- 设定 md 与设定卡是**同一账号信息的两种载体**,任何一方修改,另一方必须同步:
- **改设定**(内容/模块/命名)→ 卡片同步更新:内容级改动走功能六「方式」重新生成;单点改动(改文案/换底色)直接改 SVG 对应元素
- **改卡片**(单点微调:换底色/微调布局)→ 设定 md 中对应内容同步(底色映射见 06 文档「配色适配」,内容以设定为源)
- **术语/模块改名** → 两边一起改(历史案例:「内容路线」→「叙事结构」、「核心气质」→「内容标签」均同步改设定 md + 卡片 SVG)
- **一致性校验**:交付前用 grep 核对两文件关键术语一致(模块名「叙事结构」「内容标签」「内容基因·TOPn」等,n=实际解析条数),零残留后再交付
@@ -0,0 +1,65 @@
# 功能四:分析视频数据
> 本文件是 MCNDouAnalysis 技能**功能四(分析视频数据)**的完整执行流程。
> 独立文件设计目的:部署到用户电脑时,如不需要此功能,**删除本文件即可禁用**(同时可删除 `references/账号数据分析方法.md`)。
> 完整方法见 `references/账号数据分析方法.md`(六维分析维度 + 报告8章结构 + 13条自查红线)。
---
## Step 7:账号数据分析
### 7.1 前置条件
- 已有 `短视频表格.xlsx`(13列标准格式,来自功能二)
- 视频时长 ≤ 15分钟(与功能三筛选规则一致)
- 人设卡可选(功能四独立运行,不依赖功能三)。**若被分析账号已有账号人设卡则读取对齐(分析谁的视频,对齐谁的账号设定);无则数据层照常分析,内容层「冲突人设对齐」维度临时从视频 analysis 提炼账号核心定位,提炼不出则跳过该维度并标注「无人设卡,冲突对齐待补」。**
### 7.2 数据范围与选取规则
- **近4个月**完整视频数据(基于 `发布时间` 列)
- 每月按 `点赞数 + 分享数` 降序排列,取**最好1条**(排名第1)+ **最差1条**(排名末1)
- 4个月共计最多8条(某月不足2条则全取)
### 7.3 红线(数据分析硬性要求)
| 红线 | 说明 |
|------|------|
| 分析依据要求 | 所有分析结论必须有明确数据依据:具体到视频标题 + 具体数值(点赞/评论/分享/收藏/播放量等),禁止凭印象或主观推断 |
| 数据缺失处理 | 后台私有数据拿不到时(完播率/3秒5秒留存率/GMV/挂车点击率/二次传播率/评论区正面率/粉丝增量等),空着并注明「无数据」;禁止用间接推断或定性描述替代 |
| 两段式强制流程 | **先逐条拆解 → 再汇总分析**:先对每条入选视频重度调用源技能逐条拆解(拆解内容单独保存到各视频自己的文件夹),拆解全部完成后才能进入汇总分析;禁止跳过拆解直接凭 MCP analysis + 表格数据写报告 |
| 内容层与数据层边界 | 无解析视频只在数据层分析呈现,不进入内容层分析;**无解析视频不得作为内容层结论的论据出现在任何章节**,只能陈述数据层事实并注明「无解析,植入方式待验证」,禁止推断 |
### 7.4 执行流程
1. 读取 `短视频表格.xlsx`(13列标准格式)
2. 按发布时间过滤近4个月
3. 按月份分组,每月取最好1条 + 最差1条
4. 补齐 MCP 解析:入选视频无解析的先提交解析(`upload_douyin_video` → 等待 → `short_video_detail`)
5. **逐条拆解(重度调用源技能 + 自有拆解知识库)**:按 `references/账号数据分析方法.md` 3.0 对每条入选视频完整拆解(调用源技能 `{源技能目录}/references/` 的拆解知识库,见《账号数据分析方法.md》3.0 源技能依赖表;**本技能自有拆解知识库 `references/知识库/视频拆解/`(23文件)③用户环境独立运行**,无源技能时以自有知识库为准),拆解分析保存到各视频自己的文件夹(`视频分析/{视频文件夹}/{视频标题}_拆解分析.md`)
6. **汇总分析**:拆解全部完成后,结合拆解文件 + 表格数据,按 3.1-3.6 维度逐项分析(月度趋势/爆款共性/低表现共性/内容要素关联/差异化壁垒/商业化空间);报告内容层结论必须回溯到拆解文件
7. 产出 `{达人昵称}账号数据分析.md`
**解析不可用时的拆解降级**:MCP 解析不可用(未安装/登录失败/服务异常)且用户无法手动提供解析数据时——无解析视频**不进入逐条拆解**,只做数据层分析;内容层维度统一标「无解析,内容结论待补」,禁止推断;报告头部注明「本次 X 条无解析,内容层结论覆盖率 X/8」。降级判定与触发条件见 `references/接口调用/MCP_工具调用规范.md` 5。
### 7.5 产出文件
```
{产出根目录}/{达人昵称}/
├── {达人昵称}账号数据分析.md ← 账号数据分析(本功能产出,报告8章结构)
└── 视频分析/
└── {视频标题(去特殊符号)_标签1_标签2}/
├── content.json / analysis.json ← MCP 解析原始数据(content 去分镜表 + analysis 结构化)
└── {视频标题(去特殊符号)}_拆解分析.md ← 单视频拆解(每条入选视频一个文件夹)
```
> 完整目录结构与 `references/解析结果格式规范.md` 保持一致(该文件为目录结构权威源)。逐条拆解文件规则:入选的最好/最差视频**每条一个文件夹**(已有文件夹的复用,没有的按命名规则新建),禁止把多条视频的拆解合并成单文件。
### 7.6 关键引用
| 文件 | 用途 |
|------|------|
| `references/账号数据分析方法.md` | 完整方法(六维分析维度/报告8章结构/13条报告质量自查红线) |
| `references/知识库/视频拆解/` | 功能四拆解知识库(23文件:开场/框架/情绪/钩子/植入/拆解,③用户环境独立运行) |
| `references/解析结果格式规范.md` | 目录结构权威源 |
| `references/接口调用/MCP_工具调用规范.md` | MCP 安装/登录/降级规范(Step 7 补解析 + 拆解降级) |
| `references/铁律避坑规则/账号数据分析执行避坑.md` | 功能四执行避坑(14个问题按工具/数据/流程/分析四类归档) |
@@ -0,0 +1,59 @@
# 功能五:解析视频
> 本文件是 MCNDouAnalysis 技能**功能五(解析视频)**的完整执行流程。
> 独立文件设计目的:部署到用户电脑时,如不需要此功能,**删除本文件即可禁用**(可连带删除 `references/解析结果格式规范.md` 中与本功能相关的说明;**如功能三/四仍启用,解析结果格式规范需保留**)。
> 使用场景:用户从账号详情视频列表点击「解析视频」触发——对**单个视频**进行 MCP 解析,不依赖功能三的 TOP 视频筛选流程。
---
## 输入
- 视频 aweme_id(抖音视频 ID)或完整视频链接 `https://www.douyin.com/video/{aweme_id}`
- 视频标题(用于文件夹命名/JSON 保存)
- 所属达人昵称(用于定位产出目录)
## 解析流程
### ① 提交解析
调用 `upload_douyin_video`(MCP 工具 myai-mcp-production):
```
share_text = "https://www.douyin.com/video/{aweme_id}"
→ 返回 detailId(数字字符串)
```
> MCP 配置/登录检查/降级规则见 `references/接口调用/MCP_工具调用规范.md`;返回字段说明见 `references/接口调用/Douyin_Video_Analysis.md`。
### ② 等待解析完成
- 新提交的视频需要等待 **3-5分钟** 才能查询;已被平台解析过的视频可直接查询
- 使用 `sleep 180` 等待后查询;批量场景(多个视频)统一等待后批量查询
### ③ 查询解析结果
调用 `short_video_detail`,传入 `detailId`:
```
id = "{detailId}"
→ 返回 content(分镜头表,含镜头/景别/时长/画面/表情/字幕口播)
→ 返回 analysis(结构化JSON,含赛道/核心人设/差异化壁垒/情绪设计/通用框架等)
```
**注意事项:**
- 部分视频可能 `content` 已出但 `analysis` 仍在处理,需稍后重试
- 如果返回"解析中",等待2-3分钟后重新查询
### ④ 保存解析结果
> 完整格式规范见 `references/解析结果格式规范.md`;统一使用 `scripts/json_tool.py` 保存:
> - `python json_tool.py create-content --detail-id {detailId} --title "标题" --output-dir "{产出目录}/视频文件夹" --input-file _tmp.txt`
> - `python json_tool.py create-analysis --output-dir "{产出目录}/视频文件夹" --input-file _analysis_tmp.txt`
保存位置:`{产出根目录}/{达人昵称}/视频对标/{视频文件夹}/`(产出根目录以 `references/路径配置.md` 为准;视频文件夹命名按 SKILL.md 规则:`视频标题(去特殊符号)_标签1_标签2`)。
### ⑤ 写入数据库(可选,环境支持时)
解析结果对应「原视频解析」数据:若当前环境有 MCN 插件接口(`/mcn/api/video/source/backfill`,可用 pwsh 调用,基地址 `$env:DSH_WEB_URL` 或 3081/3080),调用它把视频文件夹下的 `content.json` 补录进 `account_video_source` 并提取选题(topic);接口不可用时跳过(不影响本地保存)。
## 完成汇报
向用户汇报:detailId、解析状态(content/analysis 是否齐备)、保存路径、数据库写入结果(如执行)。
@@ -0,0 +1,233 @@
# 功能六:生成账号设定卡片
> 本文件是 MCNDouAnalysis 技能**功能六(生成账号设定卡片)**的完整执行流程。
> 独立文件设计目的:部署到用户电脑时,如不需要此功能,**删除本文件即可禁用**(本功能不依赖其他功能文件,无连带删除项;依赖功能三产出的 `{达人昵称}账号设定.md` 作为输入)。
> 使用场景:**默认由功能三自动联动触发**——功能三产出 `{达人昵称}账号设定.md` 后自动生成本卡片(无需用户开口);用户单独要求生成/调整已有卡片时也可独立触发。产出为**竖版长图信息图**(SVG 设定卡),可视化展示账号定位/内容基因/情绪结构等核心信息。
---
## 输入
- `{达人昵称}账号设定.md`(功能三产出,人设卡 12 段结构:账号核心定位→内容基因→类型库→情绪结构→视听风格→内容打法→内容规则→系列内容规划→差异化壁垒→红线清单→当前需解决的问题→设定分析说明)
- 产出目录:与账号设定.md 同目录(`{产出根目录}/{达人昵称}/`,产出根目录以 `references/路径配置.md` 为准)
## 产出
- `{达人昵称}账号设定卡.svg`(竖版长图信息图,默认 `viewBox="0 0 680 1700"` 量级,宽度响应式 100%)
- 同一目录可另存参考图:`{达人昵称}_账号设定卡_长图版.png`(导出格式,供快速预览/分享)
---
## 触发场景处理(先判定再执行,勿直接开画)
> **默认自动触发**:功能三产出账号设定后**自动执行本功能**(用户无感,直接落盘卡片);以下判定链适用于「用户单独要求生成/调整卡片」场景,或自动生成后的校验。
核心前置:**卡片 = f(账号设定.md)**。用户要求生成卡片时,先走判定链再分支处理:
**判定链(三问)**:
```
① 账号设定.md 有没有?
├─ 没有 → 账号在达人账号表吗?
│ ├─ 在库 → 先功能三(提炼账号设定)→ 情况3
│ └─ 不在 → 功能一→二→三→六 全链路 → 情况4
└─ 有 → ② 卡片 svg 已存在吗?
├─ 存在 → 询问覆盖 or 微调 → 情况2 / 7
└─ 不存在 → ③ 设定模块完整吗?
├─ 完整 → 全模块生成 → 情况1
└─ 缺模块 → 裁剪适配生成 → 情况5
```
| # | 情况 | 判定依据 | 处理方式 |
|---|------|---------|---------|
| 1 | 有设定 + 无卡片 | `{账号名}账号设定.md` 存在,`{账号名}账号设定卡.svg` 不存在 | **自动流程已覆盖**(功能三产出即生成);此处仅当自动生成被跳过(如部署禁用)时手动走「方式」全流程 |
| 2 | 有设定 + 已有卡片 | 卡片文件已存在 | **先询问用户**:重新生成覆盖 / 基于现有卡片微调(换底色/加模块/改布局) |
| 3 | 无设定(账号在库) | 达人账号表有该账号,但无设定文件 | **先走功能三**提炼账号设定(人设卡)→ 再生成卡片(两步串行) |
| 4 | 无设定(账号不在库) | 用户给的是全新账号 | **全链路**:功能一获取信息 → 功能二抓视频 → 功能三提炼设定 → 功能六生成卡片 |
| 5 | 设定不完整(缺模块) | 设定缺叙事结构/角色库/色彩体系等某段 | 正常生成 + **模块裁剪适配**(删对应模块,后续模块上移,不留空白) |
| 6 | 参考某账号样式 | 用户指定「像 XX 那样做」 | 读被参考账号的卡片做样式参考(版式+底色跟该账号风格),内容仍用本账号设定 |
| 7 | 调整已有卡片 | 用户说改现有卡片的某处 | **直接改 SVG 文件**(单点修改,不重走功能三/全流程) |
**环境路径**:① 开发机 / ③ 用户环境 = `桌面/MCNSkill项目/{账号名}/`;② dsh 环境 = `D:\dshworkspace\解析任务\{达人昵称}/`(以 `references/路径配置.md` 为唯一权威)。
**双向联动维护(修改时两边一起修改)**:
- 设定 md 与设定卡 = **同一账号信息的两种载体**,任一边修改,另一边必须同步:
- **改设定**(内容/模块/命名)→ 卡片同步:内容级改动走下方「方式」重新生成;单点改动(改文案/换底色)直接改 SVG 对应元素
- **改卡片**(单点微调:换底色/微调布局)→ 设定 md 对应内容同步(底色映射见上方「配色适配」,内容以设定为源)
- **术语/模块改名** → 两边一起改(历史案例:「内容路线」→「叙事结构」、「核心气质」→「内容标签」、「六大内容基因」→「内容基因·TOPn」,均同步改设定 md + 卡片 SVG)
- **一致性校验**:交付前用 grep 核对关键术语两文件一致(模块名「叙事结构」「内容标签」「内容基因·TOPn」等,n 按实际解析条数),零残留后再交付
---
## 方式(五步执行)
### ① 读取账号设定
通读 `{达人昵称}账号设定.md` 全文,提取全部模块内容(内容基因/类型库/情绪结构/红线等),**不允许跳读、不允许只挑标题**——卡片内容必须来自设定文件原文,可做金句化压缩,但不得自行编造数据。
### ①.5 读取模板样例(关键步骤,保证同款效果)
动手前**必须先读 `references/样例/模板_旧梦留声机账号设定卡.svg`**(最佳成品模板)与 `references/样例/参考_旧梦留声机_账号设定卡_长图版.png`(渲染效果参考):
- 以模板的**版式骨架/字号体系/卡片尺寸/模块间距**为基准,新账号卡片沿用同一套视觉语言;**配色不沿用模板**(模板底只是旧梦留声机风格),按下方「配色适配」章节随账号风格换底色
- 模板是「旧梦留声机」实例(内容不可照搬),新账号只复用**版式骨架与样式常量**,内容全部替换
- 模板如被反复复用后需整体迭代(配色/布局升级),改模板 → 同步生成一次旧梦留声机卡确认效果 → 再用于新账号
### ② 模块映射(对齐 12 段人设卡 → 信息图模块)
| # | 账号设定内容 | 信息图模块 | 布局 |
|---|------------|-----------|------|
| 1 | 账号核心定位(赛道/类型/定位语) | 顶部标题区(账号名 + 「账号设定卡」副题 + 定位语) | 浅米色大框 520×170,居中 |
| 2 | 内容打法中的路线/流程(如有六步闭环) | 叙事结构(流程条) | 6 卡横排,箭头串联 |
| 3 | 内容标签/核心标签 | 内容标签(chips) | 胶囊 86×32,两行 |
| 4 | 内容基因(功能三基于 TOPn 视频提炼的结论,n=实际解析条数) | 内容基因·TOPn | 3 列 × 2 行,卡 186×130 |
| 5 | 视听风格/色彩体系 | 色彩体系 | 5 色卡横排(色块 + 标签) |
| 6 | 类型库/角色类型 | 角色类型库 | 3 列 × 2 行,卡 186×130 |
| 7 | 情绪结构(六段式) | 情绪图(柱状条) | 7 条条形,底边对齐 |
| 8 | 红线清单 | 红线清单 | 2 列 × 3 行卡 |
| 9 | 差异化壁垒/其他亮点 | 可并入基因/类型卡描述行 | — |
| — | 底部版权 | 数据来源 + 版本注记 | 居中两行小字 |
> **注**:内容基因条目由**功能三基于 TOPn 视频**(n=实际解析条数;筛选上限见 SKILL.md「视频筛选标准」)提炼得出——TOPn 视频是分析依据(输入),内容基因是结论(输出),卡片上全量呈现、不裁剪。**模块名「内容基因·TOPn」的 n 按实际解析条数写(几个视频就是 TOP 几,如王微斯 4 条→「内容基因·TOP4」),不是固定 6**;n 与设定 md「解析视频:最近三个月TOPn」保持一致。
### ③ 排版绘制(SVG 手写)
逐模块写 SVG(无模板文件,直接手写 `<rect>`/`<text>`),坐标自上而下递增,模块间留白 ≥30px。
### ④ 验证交付
- 结构校验:`<svg>` 配对、`<g>` 配对、所有文字 x 不超卡片右缘
- 坐标校验:条形底边对齐、卡片文字垂直居中(y = rect.y + rect.h/2)
- 间距校验:相邻模块最小间距 ≥16px,无重叠
- 交付:present_files 打开预览,用户确认后再定稿
---
## 模块裁剪适配(不同账号内容不同,禁止照搬模板模块清单)
模板的 9 个模块以旧梦留声机的设定内容为准。**新账号按设定文件实际有无对应内容裁剪/增补模块**,不得为了凑模块硬塞内容,也不得遗漏设定中已有的核心模块:
| 设定文件内容 | 模块去留 | 处理 |
|------------|---------|------|
| 有叙事结构/六步闭环/流程 | 保留「叙事结构」 | 流程条按实际步骤数画(4/5/6 步皆可,等宽均分 600px 宽) |
| 无流程类内容 | **删除**「叙事结构」模块 | 后续模块上移,不留空白 |
| 有内容基因(≥3 条) | 保留「内容基因·TOPn」(n=实际解析条数) | 按实际条数画 2 列或 3 列(卡宽 = 600px/列数 - 间距) |
| 有角色类型/角色库 | 保留「角色类型库」 | 按实际条数画 2 列或 3 列 |
| 无角色库 | **删除**「角色类型库」 | — |
| 有情绪结构/情绪曲线 | 保留「情绪图」 | 条形按实际段数画(4-7 段),底边对齐 |
| 有色彩体系 | 保留「色彩体系」 | 色块按实际色数画(3-6 块),色值用设定中的真实色值 |
| 有红线清单 | 保留「红线清单」 | 2 列排布,条数不限(2-6 条) |
| 有差异化壁垒/独特点 | 可并入基因卡描述行或单独卡 | — |
**适配后校验**:每个保留模块必须能在设定文件中找到对应原文(grep 关键字验证);删除模块后 y 坐标整体上移,模块间间距保持 ≥30px。
---
## 配色适配(底色 = 背景色,跟随账号风格;内部元素保持模板统一)
模板配色(深棕红渐变底 + 浅米卡)是旧梦留声机的「暖黄旧时光」色系,**只代表该账号风格,不是默认底色**。**新账号卡片只换底色(整卡背景),必须按账号风格匹配,禁止全部沿用深棕红底。底色分两系:深沉/浓郁调性走深色系(深色渐变底),明快/甜美/治愈调性走浅色系(浅色渐变底),内部元素跟随所选色系规范。**
> **关键定义**:本节「底色」一律指**整卡背景色**(深色渐变底或浅色渐变底)。卡片块、文字、标签、强调色等**内部元素不随账号风格变**,统一按所选色系的「配色规范」表执行:**深色系(深色长图风)**= 浅米卡片 + 深色文字 + 珊瑚红强调;**浅色系(浅色甜宠风)**= 白卡 + 粉边 + 深粉文字 + 粉强调。同一账号系列卡片必须固定同一色系,保证系列视觉语言一致。
### ① 判定账号风格(调性 + 色值 + 赛道,三层判定)
1. **第一依据 = 账号实际内容调性**(读设定 md 的「账号核心定位」情绪锚点 + 「情绪结构」五段 + 「视听风格」氛围):**决定底色走深色系还是浅色系**。情绪锚点含「明快/欢乐/爽文/解压/暖心/积极治愈/宠/甜」→ 浅色系;含「深沉/催泪/怀旧/忧郁/厚重/故事感/悲情」→ 深色系。
2. **第二依据 = 视听风格/色彩体系真实色值**(主色/强调色),作为具体底色取色的色相来源。
3. **第三依据 = 赛道/类型**,仅作初筛归入下表风格,**不作为色系终判**。
> ⚠️ **赛道标签有歧义时必须二次判定(反例:俊希)**:「温情/亲子/治愈」中的「治愈」是**双义**标签——深沉催泪型治愈走深色系,明快欢乐型治愈走浅色系。凡赛道含「治愈/亲子/温情」等暧昧词,**必须回读情绪锚点判定明快 vs 深沉**,禁止机械套下表默认色。俊希=「满级小孩哥给妈妈做饭」明快欢乐治愈爽文 → 浅色系(暖橙 `#F5D0A4→#DE9A5E`),非下表深焦糖深色。
### ② 风格 → 背景色映射(示例,可扩展)
| 账号风格(色彩体系/赛道特征) | 背景底色(深色渐变) |
|----------------------------|--------------------|
| 暖怀旧/旧时光(剧情·怀旧,如旧梦留声机) | 深棕红 `#2B0F0A→#1A0805` |
| 温情/亲子/治愈(亲子Vlog) | 调性分叉:**深沉催泪型 → 深焦糖 `#2B1A10→#1A0F08`**;**明快欢乐型(如俊希)→ 浅色系**(暖橙 `#F5D0A4→#DE9A5E`,提亮降饱和) |
| 科技/数码/冷淡(数码科技/商业) | 深灰蓝 `#0E1626→#080D16` |
| 清新/田园/三农(三农/户外) | 深墨绿 `#0F1F18→#08130E` |
| 潮流/都市/时尚(潮流风尚/颜值) | 深紫黑 `#17101F→#0C0810` |
| 活力/运动/热血(身体锻炼/体育) | 深海军 `#0E1B2E→#080F1A` |
| 甜美/少女/二次元(甜宠/乙女向) | 深莓紫 `#3A1E42→#22102A`(调性深沉时);**玫瑰金渐变 `#D6A3A9→#9A5563`(调性明快时,如王微斯·定稿)** |
**背景色推导公式(表中未列的风格)**:取账号色彩体系主色 → 压暗至 15-25% 亮度 + 降饱和 → 得深色渐变底(**仅背景色**,内部元素色不变)。
**浅色系推导(明快/甜美/治愈调性)**:取账号色彩体系主色 → 提亮+降饱和至中浅明度(约 65-90% 亮度,如王微斯:主粉 → 玫瑰金 `#D6A3A9→#9A5563`)→ 得浅色系渐变底;正文文字用主色加深版(`#7B2D5E` 档)。**背景上直接书写的文字(模块标题/装饰线/注释/版权)随背景深浅提亮保可读**:背景越深文字越亮(如玫瑰金底上模块标题 `#FDE8EC`、装饰线/注释 `#EAC6CE`、斜体/版权 `#DDBCC4`)。
### ③ 强规则
- **调性优先于赛道标签**:色系二选(深/浅)以账号实际内容调性(情绪锚点)为最终判据,赛道标签只作初筛;赛道含「治愈/温情/亲子」等暧昧词时必须二次判定,禁止机械套默认色
- **禁止**默认沿用模板深棕红底;同一账号每次生成的卡背景色保持一致(系列一致性 = 同账号一致,非跨账号一致)
- **底色决定色系**:选深色系则内部元素按「配色规范·深色系」执行,选浅色系则按「配色规范·浅色系」执行;同一色系内部元素色一律固定,不随账号再改
- 模块「色彩体系」色块:必须用设定文件中账号的真实色值(模板 5 色块仅示例)
- 冲突时:以「看得清、有层次、账号辨识度」为最高准则,模板色优先兜底
---
## 要求
### 配色规范(色系内统一,所有账号通用;底色随账号风格选系)
**深色系(深色长图风,深沉/浓郁调性,如旧梦留声机)**
| 元素 | 色值 |
|------|------|
| 背景 | 深棕红渐变 `#2B0F0A → #1A0805` |
| 顶部标题框 | 浅米色 `#FAEEDA`,圆角 14 |
| 主标题 | 渐变 `#8C2F1E → #C05A32`,28px 700 |
| 副标题(账号设定卡) | `#8C2F1E`,16px 600,letter-spacing 2 |
| 模块标题 | `#FAEEDA`,14px 700,前缀「▍」 |
| 卡片背景(内容类) | `#FAEEDA`,边框 `#EDCBA4` |
| 卡片背景(强调类) | `#FDEBE2`,边框 `#E8B7A2` |
| 卡片标题 | `#7B2D1B`(基因)/ `#8C3B2B`(角色)14px 700 |
| 卡片正文 | `#6F5B4A`,11px |
| 小标签(GENE 0X) | `#C13B2F`,10px 700,letter-spacing 1 |
| 英文代号(角色卡) | `#B0715A`,10px 斜体 |
| 情绪图核爆段 | `#D6403A` 底 + 白字 700 |
| 情绪图琥珀段 | `#F0B25C` / `#F7D9A8` |
| 情绪小字/注释 | `#A88770`,10px |
| 红线×号 | `#D6403A` 700 |
**浅色系(浅色甜宠风,明快/甜美/治愈调性,如王微斯)**
| 元素 | 色值 |
|------|------|
| 背景 | 玫瑰金渐变 `#D6A3A9 → #9A5563`(王微斯定稿;更浅可回退浅粉紫 `#F8EDF6 → #F1E0EE`) |
| 顶部标题框 | 白 `#FFFFFF`,粉边 `#E8C9DC`,圆角 14 |
| 主标题 | 渐变 `#C0457F → #E876A9`,28px 700 |
| 副标题(账号设定卡) | `#7B2D5E`,16px 600,letter-spacing 2 |
| 模块标题(背景上) | `#FDE8EC`(玫瑰金底),14px 700,前缀「▍」 |
| 卡片背景(内容类) | 白 `#FFFFFF`,边框 `#E8C9DC` |
| 卡片背景(强调类/chips) | `#F7E8F2`,边框 `#D8A9C8` |
| 卡片标题 | `#7B2D5E`,14px 700 |
| 卡片正文 | `#6F4A5E`,11px |
| 小标签(GENE 0X) | `#E0437F`,10px 700,letter-spacing 1 |
| 英文代号(角色卡) | `#B98AA6`,10px 斜体 |
| 情绪图破防段 | `#E0437F` 底 + 白字 700 |
| 情绪图琥珀段 | `#E8B7D0` / `#F7E8F2` |
| 情绪小字/注释(背景上) | `#EAC6CE`,10px |
| 红线×号 | `#E0437F` 700 |
> 背景上直接书写的装饰线/版权等元素取同色系提亮(`#EAC6CE`/`#DDBCC4`),随背景深浅微调保可读;背景越浅(如浅粉紫)越接近深粉字 `#7B2D5E`,背景越深(如玫瑰金)越接近浅粉白 `#FDE8EC`。
### 排版要求
1. **文字垂直居中**:卡片内文字用 `dominant-baseline="central"` 且 y = 卡片中心;不用则手动算(y = rect.y + rect.h/2),禁止偏移
2. **情绪图条形**:底边全部对齐同一基线(峰谷差 ≥ 40px,核爆段最高),文字在条形内居中
3. **卡片文字不超界**:标题末字尾 ≤ 卡右缘 - 8px;中文按 12px/字、14px/字粗算宽度
4. **角色卡英文代号**:大写首字母缩写 + 单词(如 `E. ELDER` / `M. SUFFERING`),贴合角色记忆符号
5. **金句化压缩**:描述行可加 1-2 句传播性金句("沉默里把全家扛在肩上"式),但必须源自设定语义
---
## 格式
- 文件:`.svg`(可另导出 `.png`)
- 画布:`viewBox="0 0 680 {高度}"`(宽度固定 680,高度随内容约 1700 量级;内容增加则加高并同步 `height` 与背景 rect)
- 背景:全幅渐变 rect(首元素)
- 文字:`<text>` 内联属性(font-size/font-weight/fill/letter-spacing),无外部字体依赖
- 命名:`{达人昵称}账号设定卡.svg`,与 `{达人昵称}账号设定.md` 同目录
---
## 注意事项(执行避坑)
1. **🔴 批量移动坐标防叠加偏移**:需整体下移某模块时,优先用脚本对该区域所有 `y="…"` 统一加减;若先手动改了一张卡又跑脚本,会造成该卡双重偏移(实测踩坑:手动改 y=1018→1028 后又脚本 +10 → 1038,需单独修正回 1028)。改完必须校验同排卡片 y 一致。
2. **模块间最小间距 16px**:情绪小字与红线标题曾贴在一起(16px 内),文字行距需显式拉开(≥32px 为宜)。
3. **红线清单全量**:6 条红线必须全部呈现,禁止压缩条数(实测重写时漏到 2 条)。
4. **垂直居中靠计算不靠感觉**:`dominant-baseline="central"` 的 y 即中心线;不带该属性时文字基线偏下,需 y = 中心 + 字高/2 左右微调。
5. **情绪图高度**:条形高度按用户要求可翻倍(峰顶 112px),底边对齐即可,翻倍后需同步下移注释行与后续模块。
6. **交付前必须 present_files 预览**:用户基于预览提出微调(配色/字号/间距),逐条修改逐条验证,禁止批量猜测。
7. **导出 PNG**:用户要 PNG 时用支持 SVG 渲染的工具导出(分辨率按 viewBox 宽 680 × 高度),文件放同目录。
---
## 完成汇报
向用户汇报:卡片文件路径、SVG 尺寸(viewBox)、模块数量、与账号设定.md 的一致性说明;如导出 PNG 一并汇报。