[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6M25MN85WB58N3QQSCRHX2E":3,"skill-same:01M6M25MN85WB58N3QQSCRHX2E":168},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":15,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":23,"linkOnly":24,"markdownContent":25,"markdownBody":26,"frontMatter":27,"refName":28,"commitSha":29,"skillDirectory":30,"forksCount":13,"repositoryHtmlUrl":31,"repositoryHomepageUrl":6,"ownerHtmlUrl":32,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":33,"install":34,"resources":47},"01M6M25MN85WB58N3QQSCRHX2E","AI剪口播",null,"口播视频口误识别、审查稿和删除任务清单。需要语音转录时委派给 asr-router；本 skill 保留分析、审核、剪辑和字幕格式化流程。","endman100\u002Fskill-router-nexus","endman100","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F31997019?v=4","01M6KPDX17BYDWW4RRB0TNGGMX","01M6KPDX64Y2QBEWVFG5W5PWPF",0,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002FSKILL.md",[],[5,19,20,21,22],"ASR","格式化","视频","router","2026-11-10 10:12:30",false,"---\nname: AI剪口播\ndescription: 口播视频口误识别、审查稿和删除任务清单。需要语音转录时委派给 asr-router；本 skill 保留分析、审核、剪辑和字幕格式化流程。\n---\n\n# 剪口播 \n\n> ASR Router 转录 + AI 口误识别 + 网页审核 \u002F 字幕格式化\n\n## 模式\n\n- **模式 A: 剪口播** — 转录 → 口误识别 → 网页审核 → 剪辑\n- **模式 B: 转字幕** — 转录 → 格式化字幕文本（markdown，无时间戳）\n\n## 输出目录结构\n\n**模式 A（剪口播）：**\n```\noutput\u002FYYYY-MM-DD_HH-MM_视频名\u002F剪口播\u002F\n├── 1_转录\u002F   audio.mp3 · asr-result.json · subtitles_words.json\n├── 2_分析\u002F   analysis.txt · sentence_map.json · speech_errors.json · auto_selected.json\n└── 3_审核\u002F   review.html · audio.mp3 · data.json · silence_periods.json\n                \u003C视频名>_cut.fcpxml   ← 网页点击「导出 FCPXML」后生成在此目录\n                                       拖入剪映 \u002F Final Cut Pro 完成最终剪辑\n```\n\n**模式 B（转字幕）：**\n```\noutput\u002FYYYY-MM-DD_HH-MM_视频名\u002F剪口播\u002F\n├── 1_转录\u002F   audio.mp3 · asr-result.json · subtitles_words.json · raw_text.txt\n└── 2_纠错\u002F   corrected.txt · uncertain.md（可选）\n视频所在目录\u002F\n└── subtitles_formatted.md   ← 最终输出\n```\n\n## 流程总览\n\n```\n-1. 首次引导（仅第一次：环境自检 + 配置 ASR Router）\n0. 确认视频路径 + 选择模式\n1-4. run_transcribe.sh（自动，两模式共用）\n\n模式 A（剪口播）:\n  5.1 gen_analysis.js\n  5.2 读规则.md + analysis.txt\n  5.3 AI 判断整句口误 → speech_errors.json（只填 delete_sentences）\n  5.4 auto_filler.js → 自动补充词级口癖 idx（快速预筛）\n  5.5 AI 逐句扫剩余词级口癖（B2\u002FB3\u002FB4，脚本覆盖不到的部分）\n  5.6 merge_selections.js\n  6-7. 生成审核网页 + 启动服务器\n  【等待用户确认】→ 网页点击「导出 FCPXML」→ 拖入剪映 \u002F Final Cut Pro 完成剪辑\n       （导出同时写 3_审核\u002Freview_log.json，供步骤 8 学习）\n  8. 自进化学习（用户显式触发「已导出，学一下」）→ diff 抽规则 → 确认 → 写 经验规则.md\n\n模式 B（转字幕）:\n  B-1 提取纯文本\n  B-2 第一步：纠错（只改词，不断行）→ corrected.txt\n  B-3 第二步：断行（只格式化，不改字）→ subtitles_formatted.md\n```\n\n## 执行步骤\n\n> **路径约定（重要）**：本 skill 不绑定特定 agent，**不要假设它装在 `~\u002F.claude\u002Fskills\u002F`**。\n> 下面命令里的 `SKILL_DIR` 一律指**本 skill 的安装目录**（即你加载本 `SKILL.md` 的那个目录，\n> 含 `scripts\u002F`、`用户习惯\u002F`）。执行前把它设成你实际加载 skill 的绝对路径即可：\n> ```bash\n> SKILL_DIR=\"\u003C本 skill 的安装目录>\"   # 例：Claude Code 默认 ~\u002F.claude\u002Fskills\u002FAI剪口播\n> ```\n> ASR 方法、凭证和资源选择统一由 Agent 调用 `asr-router` 管理。\n\n### 步骤 -1: 首次引导（只在第一次跑）\n\n> **目的**：第一次使用时检查业务依赖与 ASR Router；通过后写标记文件。\n\n**闸门**：先看标记文件是否存在（`SKILL_DIR` = 本 skill 安装目录，见上方「路径约定」）。\n```bash\nSKILL_DIR=\"\u003C本 skill 的安装目录>\"\n[ -f \"$SKILL_DIR\u002F.setup_done\" ] && echo \"已配置，跳过引导\" || echo \"需要引导\"\n```\n- 存在 `.setup_done` → **直接进入步骤 0**，不要跑自检、不要提引导。\n- 不存在 → 跑自检脚本（跨平台，Win\u002FmacOS\u002FLinux 通用）：\n\n```bash\nnode \"$SKILL_DIR\u002Fscripts\u002Fdoctor.js\"\n```\n\n`doctor.js` 只检查本 skill 的 ffmpeg 与 Node 业务依赖。ASR 可用性由\nAgent 在调用 `asr-router` 时检查。全绿时写 `.setup_done` 并退出 0。\n\n**AI 按报告分情况引导用户**（不要让用户自己看懂报告）：\n1. **缺系统依赖** → 把报告里对应平台的安装命令复制给用户（脚本已按 Win\u002FMac 给好），让其装完。\n2. **Router 报告供应商不可用** → 按 Router 选中的子方法文档配置。\n3. 用户修完 → 重跑对应检查，直到业务依赖与 Router 都可用。\n\n> 全程不要替用户去控制台点按钮或粘贴他的私有 key 到别处；只给清晰可复制的命令和链接。\n\n### 步骤 0: 确认视频路径 + 选择模式\n\n收到视频路径后，**先展示确认**，格式：\n\n```\n? 视频：\u002Fpath\u002Fto\u002F视频.mp4\n? 输出：~\u002FDesktop\u002Foutput\u002FYYYY-MM-DD_HH-MM_视频名\u002F剪口播\u002F\n\n请选择模式：\n  [A] 剪口播 — 识别口误 → 网页审核 → 导出 FCPXML 给剪映 \u002F FCP\n  [B] 转字幕 — 转录 → 格式化字幕文本（markdown，无时间戳）\n```\n\n用户确认后再继续，不自动开始。\n\n### 步骤 1-4: Router 转录 + 业务格式化\n\n```bash\nSKILL_DIR=\"\u003C本 skill 的安装目录>\"   # 见上方「路径约定」\nVIDEO_PATH=\"\u002Fpath\u002Fto\u002F视频.mp4\"\nBASE_DIR=\"$HOME\u002FDesktop\u002Foutput\u002F$(date +%Y-%m-%d_%H-%M)_$(basename \"$VIDEO_PATH\" | sed 's\u002F\\.[^.]*$\u002F\u002F')\u002F剪口播\"\n\n# 1. Agent 调用 asr-router：\n#    source=$VIDEO_PATH, profile=word_timestamps,\n#    privacy=local_only 或 allow_api, output_dir=\u003C临时 Router 输出目录>\n# 2. 将 Router normalized result 交给本 skill：\nbash \"$SKILL_DIR\u002Fscripts\u002Frun_transcribe.sh\" \"$VIDEO_PATH\" \"$BASE_DIR\" \\\n  --asr-result \u003C临时 Router 输出目录>\u002Fasr-result.json\n# 输出: BASE_DIR\u002F1_转录\u002F{audio.mp3, asr-result.json, subtitles_words.json}\n```\n\n### 步骤 5: 生成分析文件 + 口误识别\n\n#### 5.1 生成分析文件\n\n```bash\nnode \"$SKILL_DIR\u002Fscripts\u002Fgen_analysis.js\" \\\n  \"$BASE_DIR\u002F1_转录\u002Fsubtitles_words.json\" \\\n  \"$BASE_DIR\u002F2_分析\"\n# 输出: analysis.txt + sentence_map.json + auto_selected.json\n```\n\n#### 5.2 读取规则 + 分析文件\n\n读 `用户习惯\u002F规则.md`、`用户习惯\u002F经验规则.md`（自进化沉淀的个人偏好，见步骤 8）和 `analysis.txt`。\n两份规则都要遵守；冲突时以更具体、更新的为准。\n\n`analysis.txt` 格式（每行一句，序号: 文本）：\n```\n0: 直接开始了啊\n1: 这是深圳腾讯总部楼下\n2: 就为了安装一只\n```\n\n#### 5.3 AI 判断整句口误（只填 delete_sentences）\n\n> ⚠️ 由你直接阅读 `analysis.txt` 并判断哪些**整句**是口误。\n> **本步只填 `delete_sentences`**，`delete_idx` 留空数组。词级口癖留到 5.4（脚本）+ 5.5（AI 补漏）。\n\n按 `规则.md` 的 **A 节（整句删除）** 判断：重复重说、残句、句内卡顿、只含语气词的整句等。\n\n**输出格式**（写入 `$BASE_DIR\u002F2_分析\u002Fspeech_errors.json`）：\n```json\n{\n  \"delete_sentences\": [2, 3, 8, 10],\n  \"delete_idx\": []\n}\n```\n\n#### 5.4 脚本自动识别词级口癖（无需 AI）\n\n```bash\nnode \"$SKILL_DIR\u002Fscripts\u002Fauto_filler.js\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fsentence_map.json\" \\\n  \"$BASE_DIR\u002F1_转录\u002Fsubtitles_words.json\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fspeech_errors.json\"\n```\n\n脚本会**就地修改** `speech_errors.json`，把识别到的口癖 idx 合并进 `delete_idx`：\n\n- 任意位置：`呃 \u002F 嗯 \u002F 额 \u002F 诶 \u002F 欸 \u002F 唉 \u002F 噢`（已排除\"额外\u002F金额\"等真词）\n- 任意位置的：`然后`（用户偏好：宁可手动加回）\n- 句首过渡词：`然后 \u002F 那么 \u002F 好的 \u002F 啊 \u002F 哦 \u002F 哎 \u002F 呀 \u002F 对 \u002F 呢 \u002F 那`（\"那\"会避开\"那个\u002F那么\u002F那里\"等）\n- 句尾废词：`对 \u002F 呢 \u002F 啊 \u002F 哦`\n- 跳过已整句删除的句子；保护剩余字数 ≤3-4 的短句不被掏空\n\n跑完后，用户已手工填的 idx 也会被保留（合并去重）。\n\n#### 5.5 AI 逐句扫剩余词级口癖（脚本覆盖不到的部分）\n\n脚本只处理\"无需上下文判断\"的安全口癖。AI 在此扫 `analysis.txt`，找出脚本覆盖不到的：\n\n- **B4 句中重说**（优先级最高）：前半段说错、后半段纠正 → 删前半段，保留后半段\n- **B3 冗余引导短语**：大家可以看到、你看、给大家看一下、比如说你看一下、我可以告诉你、你明白吗\n- **B2 句中填充词**（**慎用**，需明确判断为口癖才删）：其实、就、也、大概、这个、那个、就是\n- **B5 脚本未覆盖的句尾拖音**\n\n**工作方式（避免 token 爆炸 + 过删）：**\n1. 顺序扫 `analysis.txt`，只标\"明显有问题\"的句子。没明显问题的句子直接跳过，不要为了\"也许能再删一点\"硬挑刺。\n2. 把候选句号攒成一批（建议 20-30 句一组），**一次** `gen_word_detail.js` 调用拿到词级 idx。\n3. 把新增 idx **合并**写回 `speech_errors.json` 的 `delete_idx`（与 5.4 结果取并集，不要覆盖）。\n\n```bash\n# 一次传多个句号，减少往返\nnode \"$SKILL_DIR\u002Fscripts\u002Fgen_word_detail.js\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fsentence_map.json\" \\\n  \"$BASE_DIR\u002F1_转录\u002Fsubtitles_words.json\" \\\n  5 8 12 24 25 44 ...\n```\n\n**判断尺度**：句子已经能读通就不要再动。剪口播的容错来自审核网页（用户能取消勾选），但**误删比漏删难恢复**——用户得手动取消勾选才能找回。所以**漏删优于过删**。\n\n#### 5.6 合并到 auto_selected（代码自动映射句号→idx）\n\n```bash\nnode \"$SKILL_DIR\u002Fscripts\u002Fmerge_selections.js\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fsentence_map.json\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fspeech_errors.json\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fauto_selected.json\"\n```\n\n### 步骤 6-7: 生成审核数据并启动服务器\n\n```bash\n# 6. 生成 data.json + review.html（从 templates\u002Freview.html 复制）\n#    前端模板在 scripts\u002Ftemplates\u002Freview.html，改样式直接改那里\nnode \"$SKILL_DIR\u002Fscripts\u002Fgenerate_review.js\" \\\n  \"$BASE_DIR\u002F1_转录\u002Fsubtitles_words.json\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fauto_selected.json\" \\\n  \"$BASE_DIR\u002F1_转录\u002Faudio.mp3\" \\\n  \"$BASE_DIR\u002F3_审核\"\n\n# 7. 启动审核服务器\n#    serve_review.sh 会自动选端口、在【一个独立的 OS 终端窗口】里前台运行服务器、\n#    健康检查、打开浏览器；若环境禁止开新窗口，会打印一条手动命令兜底。\n#    （不要再用 `&` \u002F nohup 在 agent 后台挂服务——见下方「为什么」。）\nbash \"$SKILL_DIR\u002Fscripts\u002Fserve_review.sh\" \\\n  \"$BASE_DIR\u002F3_审核\" \"$VIDEO_PATH\" \"$SKILL_DIR\u002Fscripts\u002Freview_server.js\"\n```\n\n> **⚠️ 为什么必须用 `serve_review.sh`，不能直接后台 `&`\u002Fnohup 挂服务（重要，否则用户会「拒绝连接」）：**\n> 审核网页要这个本地服务**一直监听端口**。但各 agent 对后台进程的处理不同：\n> - **Claude Code** 有常驻进程管理器，会在整个会话期间替你保活后台进程 → 直接 `&` 也没事；\n> - **某些 agent（如 Codex）** 把每条命令放在临时子进程\u002F沙箱里，命令一返回就**回收整棵进程树**\n>   （连 `nohup`\u002F`disown` 的子进程也杀）→ 端口失联，浏览器报「localhost 拒绝了连接请求」。\n>\n> 所以**不要依赖 agent 替你保活**。`serve_review.sh` 改在 OS 层另起一个真正的终端窗口前台运行\n> （macOS 写可双击的 `.command` 并 `open`；Linux\u002FWindows 起对应终端），它由系统拥有、不随 agent\n> 命令回收。脚本最后还会打印一条 `bash \"\u003C3_审核>\u002F启动审核服务.command\"` 的手动命令——\n> 万一连开窗口都被禁，让用户在自己的终端里跑这一条、**保持窗口开着**即可。\n>\n> 服务器启动时会把地址写进 `3_审核\u002Fserver_url.txt`、进程号写进 `.review_server.pid`，方便排障。\n\n用户在网页中：播放片段确认 → 勾选\u002F取消 → 点击「导出 FCPXML」→ 生成的 `*_cut.fcpxml` 拖入剪映或 Final Cut Pro 完成最终剪辑。\n\n> **导出时服务器同时写一份 `3_审核\u002Freview_log.json`**（与 FCPXML 同一次点击产出）：记录\n> AI 初选 idx、用户最终 idx、切割参数，以及二者**词级 diff**（带文字+句子上下文）。\n> 这是步骤 8「自进化学习」的唯一原料，**不读 `.fcpxml`**（那是算完的时间线，丢失了词级选择）。\n\n### 步骤 8: 自进化学习（用户显式触发）\n\n> **不自动跑。** 用户导出后，在**任意会话**说「\u003C项目> 已导出，学一下」之类，才执行本步。\n> 本步只读文件、不依赖对话上下文还在，所以冷会话也能跑。\n\n1. **定位日志**：单个项目读 `\u003Cproject>\u002F剪口播\u002F3_审核\u002Freview_log.json`；\n   批量重学则 glob `~\u002FDesktop\u002Foutput\u002F*\u002F剪口播\u002F3_审核\u002Freview_log.json`，逐个汇总。\n   （日志只存在项目里，清理 output 会丢语料。）\n2. **读现有规则**：先读 `用户习惯\u002F经验规则.md` **全文** + `用户习惯\u002F规则.md`，避免重复提已有规则。\n3. **看 diff 抽规则**：对每条 `diff.aiOnly`（AI 想删你留回，可能过删）和 `diff.userOnly`\n   （你删了 AI 没想到，可能漏删），对比「AI 为何这么剪 vs 你为何这么剪」，\n   抽象出**能泛化到下一条视频**的通用偏好。**严禁**把单条口误\u002F语境例外固化成规则。\n4. **违例提醒**：若 diff 显示用户违反了某条已有规则，**逐条提醒**用户，让其判断\n   是「正当例外（规则不动）」还是「该改松\u002F加例外条件」。\n5. **列给用户确认**：把候选的【新增 \u002F 细化已有 \u002F 合并重复 \u002F 改某条】列出来，**等用户确认**。\n6. **写入**：确认后才改 `用户习惯\u002F经验规则.md`，每条带出处标签 `（学于 \u003C视频名> YYYY-MM-DD；已确认）`。\n   下次步骤 5.2 即生效。\n\n### 模式 B: 转字幕\n\n> 步骤 1-4 完成后，如果用户选了模式 B，执行以下步骤。\n> **两步拆分**：先纠错，再断行。两步必须分开进行，不要混为一步。\n\n#### B-1 提取纯文本（脚本执行）\n\n```bash\nnode \"$SKILL_DIR\u002Fscripts\u002Fextract_text.js\" \\\n  \"$BASE_DIR\u002F1_转录\u002Fsubtitles_words.json\" \\\n  \"$BASE_DIR\u002F1_转录\"\n# 输出: $BASE_DIR\u002F1_转录\u002Fraw_text.txt\n```\n\n#### B-2 第一步：纠错（AI 处理）\n\n1. 读取 `$BASE_DIR\u002F1_转录\u002Fraw_text.txt`\n2. 读取 `$SKILL_DIR\u002F用户习惯\u002F纠错prompt.md` 规则\n3. **只做纠错**，不断行、不去标点、不改格式\n4. 输出到 `$BASE_DIR\u002F2_纠错\u002Fcorrected.txt`（每行一句，与输入 1:1 对应）\n5. 如有「不确定清单」，输出到 `$BASE_DIR\u002F2_纠错\u002Funcertain.md` 并在对话中列出给用户\n\n#### B-3 第二步：断行（AI 处理）\n\n1. 读取 `$BASE_DIR\u002F2_纠错\u002Fcorrected.txt`\n2. 读取 `$SKILL_DIR\u002F用户习惯\u002F断行prompt.md` 规则\n3. **只做格式化**，不改字、不删字、不加字\n4. 输出到**视频所在目录**：`$(dirname \"$VIDEO_PATH\")\u002Fsubtitles_formatted.md`\n5. 告知用户文件路径，流程结束\n\n---\n\n## ASR 委派\n\n所有模型顺序、API 标注、凭证、资源 ID、请求方法和 fallback 规则都以\n`asr-router` 为唯一来源。本 skill 不锁定 provider，也不执行任何 ASR\nadapter；只消费 Router 的 `asr-result.json` 与字级时间戳。\n\n","# 剪口播 \n\n> ASR Router 转录 + AI 口误识别 + 网页审核 \u002F 字幕格式化\n\n## 模式\n\n- **模式 A: 剪口播** — 转录 → 口误识别 → 网页审核 → 剪辑\n- **模式 B: 转字幕** — 转录 → 格式化字幕文本（markdown，无时间戳）\n\n## 输出目录结构\n\n**模式 A（剪口播）：**\n```\noutput\u002FYYYY-MM-DD_HH-MM_视频名\u002F剪口播\u002F\n├── 1_转录\u002F   audio.mp3 · asr-result.json · subtitles_words.json\n├── 2_分析\u002F   analysis.txt · sentence_map.json · speech_errors.json · auto_selected.json\n└── 3_审核\u002F   review.html · audio.mp3 · data.json · silence_periods.json\n                \u003C视频名>_cut.fcpxml   ← 网页点击「导出 FCPXML」后生成在此目录\n                                       拖入剪映 \u002F Final Cut Pro 完成最终剪辑\n```\n\n**模式 B（转字幕）：**\n```\noutput\u002FYYYY-MM-DD_HH-MM_视频名\u002F剪口播\u002F\n├── 1_转录\u002F   audio.mp3 · asr-result.json · subtitles_words.json · raw_text.txt\n└── 2_纠错\u002F   corrected.txt · uncertain.md（可选）\n视频所在目录\u002F\n└── subtitles_formatted.md   ← 最终输出\n```\n\n## 流程总览\n\n```\n-1. 首次引导（仅第一次：环境自检 + 配置 ASR Router）\n0. 确认视频路径 + 选择模式\n1-4. run_transcribe.sh（自动，两模式共用）\n\n模式 A（剪口播）:\n  5.1 gen_analysis.js\n  5.2 读规则.md + analysis.txt\n  5.3 AI 判断整句口误 → speech_errors.json（只填 delete_sentences）\n  5.4 auto_filler.js → 自动补充词级口癖 idx（快速预筛）\n  5.5 AI 逐句扫剩余词级口癖（B2\u002FB3\u002FB4，脚本覆盖不到的部分）\n  5.6 merge_selections.js\n  6-7. 生成审核网页 + 启动服务器\n  【等待用户确认】→ 网页点击「导出 FCPXML」→ 拖入剪映 \u002F Final Cut Pro 完成剪辑\n       （导出同时写 3_审核\u002Freview_log.json，供步骤 8 学习）\n  8. 自进化学习（用户显式触发「已导出，学一下」）→ diff 抽规则 → 确认 → 写 经验规则.md\n\n模式 B（转字幕）:\n  B-1 提取纯文本\n  B-2 第一步：纠错（只改词，不断行）→ corrected.txt\n  B-3 第二步：断行（只格式化，不改字）→ subtitles_formatted.md\n```\n\n## 执行步骤\n\n> **路径约定（重要）**：本 skill 不绑定特定 agent，**不要假设它装在 `~\u002F.claude\u002Fskills\u002F`**。\n> 下面命令里的 `SKILL_DIR` 一律指**本 skill 的安装目录**（即你加载本 `SKILL.md` 的那个目录，\n> 含 `scripts\u002F`、`用户习惯\u002F`）。执行前把它设成你实际加载 skill 的绝对路径即可：\n> ```bash\n> SKILL_DIR=\"\u003C本 skill 的安装目录>\"   # 例：Claude Code 默认 ~\u002F.claude\u002Fskills\u002FAI剪口播\n> ```\n> ASR 方法、凭证和资源选择统一由 Agent 调用 `asr-router` 管理。\n\n### 步骤 -1: 首次引导（只在第一次跑）\n\n> **目的**：第一次使用时检查业务依赖与 ASR Router；通过后写标记文件。\n\n**闸门**：先看标记文件是否存在（`SKILL_DIR` = 本 skill 安装目录，见上方「路径约定」）。\n```bash\nSKILL_DIR=\"\u003C本 skill 的安装目录>\"\n[ -f \"$SKILL_DIR\u002F.setup_done\" ] && echo \"已配置，跳过引导\" || echo \"需要引导\"\n```\n- 存在 `.setup_done` → **直接进入步骤 0**，不要跑自检、不要提引导。\n- 不存在 → 跑自检脚本（跨平台，Win\u002FmacOS\u002FLinux 通用）：\n\n```bash\nnode \"$SKILL_DIR\u002Fscripts\u002Fdoctor.js\"\n```\n\n`doctor.js` 只检查本 skill 的 ffmpeg 与 Node 业务依赖。ASR 可用性由\nAgent 在调用 `asr-router` 时检查。全绿时写 `.setup_done` 并退出 0。\n\n**AI 按报告分情况引导用户**（不要让用户自己看懂报告）：\n1. **缺系统依赖** → 把报告里对应平台的安装命令复制给用户（脚本已按 Win\u002FMac 给好），让其装完。\n2. **Router 报告供应商不可用** → 按 Router 选中的子方法文档配置。\n3. 用户修完 → 重跑对应检查，直到业务依赖与 Router 都可用。\n\n> 全程不要替用户去控制台点按钮或粘贴他的私有 key 到别处；只给清晰可复制的命令和链接。\n\n### 步骤 0: 确认视频路径 + 选择模式\n\n收到视频路径后，**先展示确认**，格式：\n\n```\n? 视频：\u002Fpath\u002Fto\u002F视频.mp4\n? 输出：~\u002FDesktop\u002Foutput\u002FYYYY-MM-DD_HH-MM_视频名\u002F剪口播\u002F\n\n请选择模式：\n  [A] 剪口播 — 识别口误 → 网页审核 → 导出 FCPXML 给剪映 \u002F FCP\n  [B] 转字幕 — 转录 → 格式化字幕文本（markdown，无时间戳）\n```\n\n用户确认后再继续，不自动开始。\n\n### 步骤 1-4: Router 转录 + 业务格式化\n\n```bash\nSKILL_DIR=\"\u003C本 skill 的安装目录>\"   # 见上方「路径约定」\nVIDEO_PATH=\"\u002Fpath\u002Fto\u002F视频.mp4\"\nBASE_DIR=\"$HOME\u002FDesktop\u002Foutput\u002F$(date +%Y-%m-%d_%H-%M)_$(basename \"$VIDEO_PATH\" | sed 's\u002F\\.[^.]*$\u002F\u002F')\u002F剪口播\"\n\n# 1. Agent 调用 asr-router：\n#    source=$VIDEO_PATH, profile=word_timestamps,\n#    privacy=local_only 或 allow_api, output_dir=\u003C临时 Router 输出目录>\n# 2. 将 Router normalized result 交给本 skill：\nbash \"$SKILL_DIR\u002Fscripts\u002Frun_transcribe.sh\" \"$VIDEO_PATH\" \"$BASE_DIR\" \\\n  --asr-result \u003C临时 Router 输出目录>\u002Fasr-result.json\n# 输出: BASE_DIR\u002F1_转录\u002F{audio.mp3, asr-result.json, subtitles_words.json}\n```\n\n### 步骤 5: 生成分析文件 + 口误识别\n\n#### 5.1 生成分析文件\n\n```bash\nnode \"$SKILL_DIR\u002Fscripts\u002Fgen_analysis.js\" \\\n  \"$BASE_DIR\u002F1_转录\u002Fsubtitles_words.json\" \\\n  \"$BASE_DIR\u002F2_分析\"\n# 输出: analysis.txt + sentence_map.json + auto_selected.json\n```\n\n#### 5.2 读取规则 + 分析文件\n\n读 `用户习惯\u002F规则.md`、`用户习惯\u002F经验规则.md`（自进化沉淀的个人偏好，见步骤 8）和 `analysis.txt`。\n两份规则都要遵守；冲突时以更具体、更新的为准。\n\n`analysis.txt` 格式（每行一句，序号: 文本）：\n```\n0: 直接开始了啊\n1: 这是深圳腾讯总部楼下\n2: 就为了安装一只\n```\n\n#### 5.3 AI 判断整句口误（只填 delete_sentences）\n\n> ⚠️ 由你直接阅读 `analysis.txt` 并判断哪些**整句**是口误。\n> **本步只填 `delete_sentences`**，`delete_idx` 留空数组。词级口癖留到 5.4（脚本）+ 5.5（AI 补漏）。\n\n按 `规则.md` 的 **A 节（整句删除）** 判断：重复重说、残句、句内卡顿、只含语气词的整句等。\n\n**输出格式**（写入 `$BASE_DIR\u002F2_分析\u002Fspeech_errors.json`）：\n```json\n{\n  \"delete_sentences\": [2, 3, 8, 10],\n  \"delete_idx\": []\n}\n```\n\n#### 5.4 脚本自动识别词级口癖（无需 AI）\n\n```bash\nnode \"$SKILL_DIR\u002Fscripts\u002Fauto_filler.js\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fsentence_map.json\" \\\n  \"$BASE_DIR\u002F1_转录\u002Fsubtitles_words.json\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fspeech_errors.json\"\n```\n\n脚本会**就地修改** `speech_errors.json`，把识别到的口癖 idx 合并进 `delete_idx`：\n\n- 任意位置：`呃 \u002F 嗯 \u002F 额 \u002F 诶 \u002F 欸 \u002F 唉 \u002F 噢`（已排除\"额外\u002F金额\"等真词）\n- 任意位置的：`然后`（用户偏好：宁可手动加回）\n- 句首过渡词：`然后 \u002F 那么 \u002F 好的 \u002F 啊 \u002F 哦 \u002F 哎 \u002F 呀 \u002F 对 \u002F 呢 \u002F 那`（\"那\"会避开\"那个\u002F那么\u002F那里\"等）\n- 句尾废词：`对 \u002F 呢 \u002F 啊 \u002F 哦`\n- 跳过已整句删除的句子；保护剩余字数 ≤3-4 的短句不被掏空\n\n跑完后，用户已手工填的 idx 也会被保留（合并去重）。\n\n#### 5.5 AI 逐句扫剩余词级口癖（脚本覆盖不到的部分）\n\n脚本只处理\"无需上下文判断\"的安全口癖。AI 在此扫 `analysis.txt`，找出脚本覆盖不到的：\n\n- **B4 句中重说**（优先级最高）：前半段说错、后半段纠正 → 删前半段，保留后半段\n- **B3 冗余引导短语**：大家可以看到、你看、给大家看一下、比如说你看一下、我可以告诉你、你明白吗\n- **B2 句中填充词**（**慎用**，需明确判断为口癖才删）：其实、就、也、大概、这个、那个、就是\n- **B5 脚本未覆盖的句尾拖音**\n\n**工作方式（避免 token 爆炸 + 过删）：**\n1. 顺序扫 `analysis.txt`，只标\"明显有问题\"的句子。没明显问题的句子直接跳过，不要为了\"也许能再删一点\"硬挑刺。\n2. 把候选句号攒成一批（建议 20-30 句一组），**一次** `gen_word_detail.js` 调用拿到词级 idx。\n3. 把新增 idx **合并**写回 `speech_errors.json` 的 `delete_idx`（与 5.4 结果取并集，不要覆盖）。\n\n```bash\n# 一次传多个句号，减少往返\nnode \"$SKILL_DIR\u002Fscripts\u002Fgen_word_detail.js\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fsentence_map.json\" \\\n  \"$BASE_DIR\u002F1_转录\u002Fsubtitles_words.json\" \\\n  5 8 12 24 25 44 ...\n```\n\n**判断尺度**：句子已经能读通就不要再动。剪口播的容错来自审核网页（用户能取消勾选），但**误删比漏删难恢复**——用户得手动取消勾选才能找回。所以**漏删优于过删**。\n\n#### 5.6 合并到 auto_selected（代码自动映射句号→idx）\n\n```bash\nnode \"$SKILL_DIR\u002Fscripts\u002Fmerge_selections.js\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fsentence_map.json\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fspeech_errors.json\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fauto_selected.json\"\n```\n\n### 步骤 6-7: 生成审核数据并启动服务器\n\n```bash\n# 6. 生成 data.json + review.html（从 templates\u002Freview.html 复制）\n#    前端模板在 scripts\u002Ftemplates\u002Freview.html，改样式直接改那里\nnode \"$SKILL_DIR\u002Fscripts\u002Fgenerate_review.js\" \\\n  \"$BASE_DIR\u002F1_转录\u002Fsubtitles_words.json\" \\\n  \"$BASE_DIR\u002F2_分析\u002Fauto_selected.json\" \\\n  \"$BASE_DIR\u002F1_转录\u002Faudio.mp3\" \\\n  \"$BASE_DIR\u002F3_审核\"\n\n# 7. 启动审核服务器\n#    serve_review.sh 会自动选端口、在【一个独立的 OS 终端窗口】里前台运行服务器、\n#    健康检查、打开浏览器；若环境禁止开新窗口，会打印一条手动命令兜底。\n#    （不要再用 `&` \u002F nohup 在 agent 后台挂服务——见下方「为什么」。）\nbash \"$SKILL_DIR\u002Fscripts\u002Fserve_review.sh\" \\\n  \"$BASE_DIR\u002F3_审核\" \"$VIDEO_PATH\" \"$SKILL_DIR\u002Fscripts\u002Freview_server.js\"\n```\n\n> **⚠️ 为什么必须用 `serve_review.sh`，不能直接后台 `&`\u002Fnohup 挂服务（重要，否则用户会「拒绝连接」）：**\n> 审核网页要这个本地服务**一直监听端口**。但各 agent 对后台进程的处理不同：\n> - **Claude Code** 有常驻进程管理器，会在整个会话期间替你保活后台进程 → 直接 `&` 也没事；\n> - **某些 agent（如 Codex）** 把每条命令放在临时子进程\u002F沙箱里，命令一返回就**回收整棵进程树**\n>   （连 `nohup`\u002F`disown` 的子进程也杀）→ 端口失联，浏览器报「localhost 拒绝了连接请求」。\n>\n> 所以**不要依赖 agent 替你保活**。`serve_review.sh` 改在 OS 层另起一个真正的终端窗口前台运行\n> （macOS 写可双击的 `.command` 并 `open`；Linux\u002FWindows 起对应终端），它由系统拥有、不随 agent\n> 命令回收。脚本最后还会打印一条 `bash \"\u003C3_审核>\u002F启动审核服务.command\"` 的手动命令——\n> 万一连开窗口都被禁，让用户在自己的终端里跑这一条、**保持窗口开着**即可。\n>\n> 服务器启动时会把地址写进 `3_审核\u002Fserver_url.txt`、进程号写进 `.review_server.pid`，方便排障。\n\n用户在网页中：播放片段确认 → 勾选\u002F取消 → 点击「导出 FCPXML」→ 生成的 `*_cut.fcpxml` 拖入剪映或 Final Cut Pro 完成最终剪辑。\n\n> **导出时服务器同时写一份 `3_审核\u002Freview_log.json`**（与 FCPXML 同一次点击产出）：记录\n> AI 初选 idx、用户最终 idx、切割参数，以及二者**词级 diff**（带文字+句子上下文）。\n> 这是步骤 8「自进化学习」的唯一原料，**不读 `.fcpxml`**（那是算完的时间线，丢失了词级选择）。\n\n### 步骤 8: 自进化学习（用户显式触发）\n\n> **不自动跑。** 用户导出后，在**任意会话**说「\u003C项目> 已导出，学一下」之类，才执行本步。\n> 本步只读文件、不依赖对话上下文还在，所以冷会话也能跑。\n\n1. **定位日志**：单个项目读 `\u003Cproject>\u002F剪口播\u002F3_审核\u002Freview_log.json`；\n   批量重学则 glob `~\u002FDesktop\u002Foutput\u002F*\u002F剪口播\u002F3_审核\u002Freview_log.json`，逐个汇总。\n   （日志只存在项目里，清理 output 会丢语料。）\n2. **读现有规则**：先读 `用户习惯\u002F经验规则.md` **全文** + `用户习惯\u002F规则.md`，避免重复提已有规则。\n3. **看 diff 抽规则**：对每条 `diff.aiOnly`（AI 想删你留回，可能过删）和 `diff.userOnly`\n   （你删了 AI 没想到，可能漏删），对比「AI 为何这么剪 vs 你为何这么剪」，\n   抽象出**能泛化到下一条视频**的通用偏好。**严禁**把单条口误\u002F语境例外固化成规则。\n4. **违例提醒**：若 diff 显示用户违反了某条已有规则，**逐条提醒**用户，让其判断\n   是「正当例外（规则不动）」还是「该改松\u002F加例外条件」。\n5. **列给用户确认**：把候选的【新增 \u002F 细化已有 \u002F 合并重复 \u002F 改某条】列出来，**等用户确认**。\n6. **写入**：确认后才改 `用户习惯\u002F经验规则.md`，每条带出处标签 `（学于 \u003C视频名> YYYY-MM-DD；已确认）`。\n   下次步骤 5.2 即生效。\n\n### 模式 B: 转字幕\n\n> 步骤 1-4 完成后，如果用户选了模式 B，执行以下步骤。\n> **两步拆分**：先纠错，再断行。两步必须分开进行，不要混为一步。\n\n#### B-1 提取纯文本（脚本执行）\n\n```bash\nnode \"$SKILL_DIR\u002Fscripts\u002Fextract_text.js\" \\\n  \"$BASE_DIR\u002F1_转录\u002Fsubtitles_words.json\" \\\n  \"$BASE_DIR\u002F1_转录\"\n# 输出: $BASE_DIR\u002F1_转录\u002Fraw_text.txt\n```\n\n#### B-2 第一步：纠错（AI 处理）\n\n1. 读取 `$BASE_DIR\u002F1_转录\u002Fraw_text.txt`\n2. 读取 `$SKILL_DIR\u002F用户习惯\u002F纠错prompt.md` 规则\n3. **只做纠错**，不断行、不去标点、不改格式\n4. 输出到 `$BASE_DIR\u002F2_纠错\u002Fcorrected.txt`（每行一句，与输入 1:1 对应）\n5. 如有「不确定清单」，输出到 `$BASE_DIR\u002F2_纠错\u002Funcertain.md` 并在对话中列出给用户\n\n#### B-3 第二步：断行（AI 处理）\n\n1. 读取 `$BASE_DIR\u002F2_纠错\u002Fcorrected.txt`\n2. 读取 `$SKILL_DIR\u002F用户习惯\u002F断行prompt.md` 规则\n3. **只做格式化**，不改字、不删字、不加字\n4. 输出到**视频所在目录**：`$(dirname \"$VIDEO_PATH\")\u002Fsubtitles_formatted.md`\n5. 告知用户文件路径，流程结束\n\n---\n\n## ASR 委派\n\n所有模型顺序、API 标注、凭证、资源 ID、请求方法和 fallback 规则都以\n`asr-router` 为唯一来源。本 skill 不锁定 provider，也不执行任何 ASR\nadapter；只消费 Router 的 `asr-result.json` 与字级时间戳。\n\n",{"name":5,"description":7},"main","f19b254e8975d0bfddb394686706106930d7964d","Video-Editing\u002Fai-jian-koubo","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus","https:\u002F\u002Fgithub.com\u002Fendman100","2026-11-11 18:19:10",{"source":8,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add endman100\u002Fskill-router-nexus --skill \"AI剪口播\"",{"tool":40,"command":41},"bunx","bunx skills add endman100\u002Fskill-router-nexus --skill \"AI剪口播\"",{"tool":43,"command":44},"pnpm","pnpm dlx skills add endman100\u002Fskill-router-nexus --skill \"AI剪口播\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002FSKILL.md",true,[48,54,60,64,68,72,76,80,84,90,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164],{"path":49,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":52,"sourceHtmlUrl":53},".gitignore","OTHER","其他",494,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002F.gitignore",{"path":55,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":58,"sourceHtmlUrl":59},"assets\u002Freview-ui.png","ASSET","资产文件",1410108,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fassets\u002Freview-ui.png",{"path":61,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":62,"sourceHtmlUrl":63},"assets\u002Fvolc-1-overview.png",641083,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fassets\u002Fvolc-1-overview.png",{"path":65,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":66,"sourceHtmlUrl":67},"assets\u002Fvolc-2-enable.png",449679,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fassets\u002Fvolc-2-enable.png",{"path":69,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":70,"sourceHtmlUrl":71},"assets\u002Fvolc-3-standard.png",224167,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fassets\u002Fvolc-3-standard.png",{"path":73,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":74,"sourceHtmlUrl":75},"assets\u002Fvolc-4-flash.png",247180,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fassets\u002Fvolc-4-flash.png",{"path":77,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":78,"sourceHtmlUrl":79},"assets\u002Fvolc-5-apikey.png",382488,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fassets\u002Fvolc-5-apikey.png",{"path":81,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":15},"LICENSE","许可证",34523,{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"README.md","REFERENCE","参考文档",4833,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002FREADME.md",{"path":91,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":94,"sourceHtmlUrl":95},"scripts\u002Fauto_filler.js","SCRIPT","脚本",4678,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Fauto_filler.js",{"path":97,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":98,"sourceHtmlUrl":99},"scripts\u002Fdoctor.js",1058,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Fdoctor.js",{"path":101,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":102,"sourceHtmlUrl":103},"scripts\u002Fextract_text.js",1009,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Fextract_text.js",{"path":105,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":106,"sourceHtmlUrl":107},"scripts\u002Fgen_analysis.js",1733,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Fgen_analysis.js",{"path":109,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":110,"sourceHtmlUrl":111},"scripts\u002Fgen_word_detail.js",1165,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Fgen_word_detail.js",{"path":113,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":114,"sourceHtmlUrl":115},"scripts\u002Fgenerate_review.js",8123,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Fgenerate_review.js",{"path":117,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":118,"sourceHtmlUrl":119},"scripts\u002Fgenerate_subtitles.js",3361,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Fgenerate_subtitles.js",{"path":121,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":122,"sourceHtmlUrl":123},"scripts\u002Flib\u002Fcompute_keeps.js",6353,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Flib\u002Fcompute_keeps.js",{"path":125,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":126,"sourceHtmlUrl":127},"scripts\u002Flib\u002Ffcpxml.js",5212,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Flib\u002Ffcpxml.js",{"path":129,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":130,"sourceHtmlUrl":131},"scripts\u002Flib\u002Frefine_boundaries.js",5954,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Flib\u002Frefine_boundaries.js",{"path":133,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":134,"sourceHtmlUrl":135},"scripts\u002Fmerge_selections.js",1855,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Fmerge_selections.js",{"path":137,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":138,"sourceHtmlUrl":139},"scripts\u002Freview_server.js",11883,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Freview_server.js",{"path":141,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":142,"sourceHtmlUrl":143},"scripts\u002Frun_transcribe.sh",1587,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Frun_transcribe.sh",{"path":145,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":146,"sourceHtmlUrl":147},"scripts\u002Fserve_review.sh",4595,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Fserve_review.sh",{"path":149,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":150,"sourceHtmlUrl":151},"scripts\u002Ftemplates\u002Freview.html",76921,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002Fscripts\u002Ftemplates\u002Freview.html",{"path":153,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":154,"sourceHtmlUrl":155},"用户习惯\u002F断行prompt.md",1172,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002F用户习惯\u002F断行prompt.md",{"path":157,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":158,"sourceHtmlUrl":159},"用户习惯\u002F纠错prompt.md",1462,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002F用户习惯\u002F纠错prompt.md",{"path":161,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":162,"sourceHtmlUrl":163},"用户习惯\u002F经验规则.md",1532,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002F用户习惯\u002F经验规则.md",{"path":165,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":166,"sourceHtmlUrl":167},"用户习惯\u002F规则.md",4048,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FVideo-Editing\u002Fai-jian-koubo\u002F用户习惯\u002F规则.md",[169,194,232,255,264,288],{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":173,"licenseFileUrl":174,"sourceHtmlUrl":175,"categories":176,"keywords":182,"publishedAt":23},"01M6MPCT5BXVER8HQZTW3QE9AS","create-master","基于佛教经典文献，生成特定高僧大德的 AI 教学角色","MIT","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FMetaphysics-and-Spirituality\u002FMaster-skill\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FMetaphysics-and-Spirituality\u002FMaster-skill\u002FSKILL.md",[177],{"categoryNo":178,"categoryName":179,"taxonomyType":180,"taxonomyTypeDesc":181},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[183,184,185,186,187,188,189,190,191,192,193],"create master","master","create","生成","true","webfetch","edit","write","read","grep","Bash",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":173,"licenseFileUrl":198,"sourceHtmlUrl":199,"categories":200,"keywords":212,"publishedAt":23},"01M6M43AKE95Y64E1JRXEF5QQ3","writing-dna-skill","从至少 20 篇完整文章中蒸馏可复用的写作 DNA，分析语言、文章结构、选题逻辑、素材策略、认知框架和视觉风格，并生成 Writing-DNA.md；按该 DNA 写作时会读取全部蒸馏产物和 5 篇相关原文。用于中英文作者、账号、品牌或出版物的风格分析与一致性写作。 Distill reusable Writing DNA from at least 20 complete articles for Chinese or English authors, publications, brands, and accounts; use for language, structure, topic logic, source strategy, cognitive-frame, and visual-style analysis.","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fwriting-dna-skill\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fwriting-dna-skill\u002FSKILL.md",[201,206,209],{"categoryNo":202,"categoryName":203,"taxonomyType":204,"taxonomyTypeDesc":205},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":207,"categoryName":208,"taxonomyType":204,"taxonomyTypeDesc":205},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":210,"categoryName":211,"taxonomyType":180,"taxonomyTypeDesc":181},"01JBSEEDCAT000000000000036","内容创作者",[213,214,215,216,217,218,219,220,221,222,223,224,225,186,226,227,228,229,230,231],"writing dna skill","DNA","writing","strategy","english","logic","visual","structure","chinese","reusable","use","style","distill","analysis","frame","source","for","at","complete",{"skillNo":233,"name":234,"nameZh":6,"description":235,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":173,"licenseFileUrl":236,"sourceHtmlUrl":237,"categories":238,"keywords":241,"publishedAt":23},"01M6M428TTCGQ4ME3KY99VN037","stop-slop","Remove AI writing patterns from prose. Use when drafting, editing, or reviewing text to eliminate predictable AI tells.","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fstop-slop\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fstop-slop\u002FSKILL.md",[239,240],{"categoryNo":202,"categoryName":203,"taxonomyType":204,"taxonomyTypeDesc":205},{"categoryNo":210,"categoryName":211,"taxonomyType":180,"taxonomyTypeDesc":181},[242,243,244,245,246,247,248,249,250,223,251,252,253,229,254,215],"slop","stop slop","stop","drafting","when","drafts","https","patterns","prose","remove","editing","text","content",{"skillNo":256,"name":257,"nameZh":6,"description":258,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":173,"licenseFileUrl":259,"sourceHtmlUrl":260,"categories":261,"keywords":262,"publishedAt":23},"01M6M41X0B7EBX42TK435DMGGR","shuorenhua","检查和清理中英文文本里的 AI 套路，适用于“去 AI 味”“说人话”“自然一点”“别像模板”“先标问题”这类改写和审稿需求；按场景控制力度，同时保留事实、术语、语域和责任主体。","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fshuorenhua\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fshuorenhua\u002FSKILL.md",[],[257,263],"文本",{"skillNo":265,"name":266,"nameZh":6,"description":267,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":173,"licenseFileUrl":268,"sourceHtmlUrl":269,"categories":270,"keywords":271,"publishedAt":23},"01M6M3ZD12WBEW5KXKDM4N6DFG","naming","Name products, SaaS, brands, open source projects, bots, and apps. Use when the user needs to name something, find a brand name, or pick a product name. Metaphor-driven process that produces memorable, meaningful names and avoids AI slop.","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fnaming-main\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fnaming-main\u002FSKILL.md",[],[266,272,273,274,275,276,223,277,191,228,278,279,280,281,193,282,283,284,285,246,286,287,242],"repo","websearch","product name","apps","bots","view","brand","pick","gh","projects","open","saas","open source","product","describe","ai slop",{"skillNo":289,"name":290,"nameZh":6,"description":291,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":173,"licenseFileUrl":292,"sourceHtmlUrl":293,"categories":294,"keywords":296,"publishedAt":23},"01M6M3YVXAFAAWJ7F6JMPFREYE","humanizer-zh","去除文本中的 AI 生成痕迹。适用于编辑或审阅文本，使其听起来更自然、更像人类书写。\n基于维基百科的\"AI 写作特征\"综合指南。检测并修复以下模式：夸大的象征意义、\n宣传性语言、以 -ing 结尾的肤浅分析、模糊的归因、破折号过度使用、三段式法则、\nAI 词汇、否定式排比、过多的连接性短语。","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fhumanizer-zh\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FWriting-and-Content\u002Fhumanizer-zh\u002FSKILL.md",[295],{"categoryNo":202,"categoryName":203,"taxonomyType":204,"taxonomyTypeDesc":205},[297,298,299,191,190,189,215,186,263,300,242,244],"humanizer","zh","humanizer zh","翻译"]