cyxj-subfix — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited cyxj-subfix (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
脚本一律用 ${CLAUDE_PLUGIN_ROOT}(Claude Code 加载插件时自动注入)定位:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/cyxj-subfix/srt_cleaner.py" ...三层分离:Python 做结构处理,Gemini 做语义初修,Opus 审查把关。
词典定位:词典是"已知陷阱"参考,不是主力。同一个词的错误变体太多,词典永远无法穷举。真正的修正靠 Gemini 的语义理解 + 视频主题上下文。Opus 审查后发现的遗漏会反馈到词典,让系统越来越准。
/字幕修正 ~/Desktop/Timeline1.srt # 完整流程
/字幕修正 ~/Desktop/Timeline1.srt --topic "Claude Code教程" # 指定主题提高修正准确度
/字幕修正 ~/Desktop/Timeline1.srt --no-regroup # 跳过合并拆分
/字幕修正 ~/Desktop/Timeline1.srt --premium # Phase 2a 用高端 Gemini 模型
/字幕修正 添加词条 错误词→正确词 # 添加词典条目(见下方"词典管理")<steps>
.bak 备份文件(保住原始 SRT——后续各 Phase 会在同目录产出多个文件,防误覆盖,也便于最后回滚比对) python3 "${CLAUDE_PLUGIN_ROOT}/skills/cyxj-subfix/srt_cleaner.py" "<input.srt>" --stats如果用户指定 --no-regroup,追加该参数跳过合并拆分。
--topic,以此为语境参考;否则从字幕内容推断主题,向用户确认 python3 "${CLAUDE_PLUGIN_ROOT}/skills/cyxj-subfix/srt_corrector.py" "<_cleaned.srt>" --topic "主题"如果用户指定 --premium,追加该参数使用高端模型。
_gemini_fixed.srt:Gemini 修正后的完整 SRT_changes.json:修改清单(原文→修正,带原因)_fixed.srtdictionary.json 的 feedback.gemini_missed 字段corrections 中SRT 是 ASR 已经听错一遍的产物,拿 SRT 改 SRT 只能靠主题和上下文猜。若用户能提供成片音频,用 lark-minutes 妙记转写作为第二个独立信源做交叉验证(运行时证据 > 单一 ASR):
依赖声明:本 Phase 依赖本机已配置好的 lark-minutes CLI(飞书妙记)。该 CLI 不可用时直接跳过本 Phase。drive +upload <音频> → minutes +upload --file-token <token> → minutes +detail --minute-tokens <token> --transcript 拿妙记逐字稿没有音频时跳过本 Phase,存疑条目在汇总里显式标注「请对音频核对」,不要把推断当事实。
Phase 2b/2c 完成后,从 _fixed.srt 生成分段逐字稿 Markdown:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/cyxj-subfix/srt_cleaner.py" "<_fixed.srt>" --export-md --title "<视频标题>"生成 _transcript.md(按自然停顿 + 每段约 200 字分段,文字一字不改)。然后写回 Obsidian:
~/obsidian/灵感库/待发布/):把该笔记正文替换为逐字稿;同一视频的多份草稿合拢成一篇,多余的删除(vault 是 git 仓库,可回滚)。~/obsidian/灵感库/待发布/<视频标题>(成片逐字稿).md,留待用户归位。.txt(--export-txt→_script.txt)已不是默认产物——它过去仅用于把逐字稿转回 Obsidian,现在直接写回。只有用户明确要把逐字稿导回 DaVinci IntelliScript 时才用--export-txt。
交接:逐字稿写回后,若用户想把这期视频再做成图文,提示可用 cyxj-transcript(转稿)把逐字稿整理成文章草稿。
Phase 3 完成、逐字稿已写回 Obsidian 后,必须清理全部中间产物。同目录最终只留两份文件:
<原文件名>.srt — 母片(用户给的原始文件,全程未改动)<原文件名>_fixed.srt — 最终修正后的字幕清理步骤:
_cleaned_stats.json 里的 splits_needing_review 和 over_soft_limit 条目提醒给用户(这是唯一需要在删除前读取的信息)cmp 确认母片与 .bak 逐字节一致(母片没被误改)。一致 → 连 .bak 一起删;不一致 → 先用 .bak 还原母片,再删 .bakcmp -s "<原文件>.srt" "<原文件>.srt.bak" && rm -f "<原文件>.srt.bak" "<stem>_cleaned.srt" "<stem>_cleaned_stats.json" "<stem>_gemini_fixed.srt" "<stem>_changes.json" "<stem>_transcript.md"_transcript.md 已在 Phase 3 写回 Obsidian,本地副本一并删除。删除后向用户报一句"以下中间产物已清理"+文件列表(不用事先逐个确认)。
向用户说明最终输出:
<原文件名>.srt — 母片(未动)<stem>_fixed.srt — 最终修正后的字幕</steps>
可以做:
绝不可以做:
| 用途 | 模型 ID | 价格(输入/输出 per M token) | 说明 |
|---|---|---|---|
| 日常初修 | gemini-3.1-flash-lite | $0.25 / $1.50 | 默认,官方定位"高频/批量数据处理",价格约为 3.5-flash 的 1/6 |
| 高端初修 | gemini-3.5-flash | $1.50 / $9.00 | --premium 时启用,语义理解更强,用于疑难字幕 |
| 审查 | Opus(对话内) | 按对话计费 | 只审查 diff |
价格核实于 2026-07-09(ai.google.dev/gemini-api/docs/pricing 原文,Standard 档)。
注意:gemini-3.1-flash-image(Nano Banana 2)、gemini-3-pro-image(Nano Banana Pro)是图片生成专用模型,不用于文本修正。
添加词条 = 由 Claude 直接编辑 dictionary.json 的 user_additions 字段(格式:正确词 → 错误变体数组),编辑完成后向用户复述已添加的映射。脚本没有 --add 参数。
词典结构为"正确词 → 已知错误变体列表",添加时归类到对应的正确词下:
"user_additions": {"正确词": ["错误变体1", "错误变体2"]}词典路径:${CLAUDE_PLUGIN_ROOT}/skills/cyxj-subfix/dictionary.json
dictionary.json 的 feedback.gemini_missed 字段记录 Gemini 漏掉但 Opus 审查时发现的错误:
{"original": "错误文字", "correct": "正确文字", "context": "错误类型描述", "date": "2026-03-21"}这些记录用于:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.