创作者拆解
路径:${CLAUDE_SKILL_DIR} 表示包含本 SKILL.md 的文件夹。在 Windows 上,使用 py 替代命令中的 python3。
所有向用户提出的问题都通过对话框发起:调用 AskUserQuestion 工具(2-4 个选项,推荐选项放第一个)。仅在没有该工具的代理中,在文本中通过编号问题询问。
输出
creator-teardowns/<handle>/:teardown.md(分析报告)、teardown.html(用户查看的页面)、look.md(Claude 读取的内容)、style.json(所有测量数据,用于以此风格编辑),以及 ${CLAUDE_SKILL_DIR}/references/outputs.md 中列出的每个视频的单独文件。编辑计划输出到 edit-plants/<name>/。判断某个编辑是否符合此风格:scripts/match.py(references/outputs.md 中的“匹配检查”)。
第一步:检查环境
python3 "${CLAUDE_SKILL_DIR}/scripts/fetch.py" doctor
在会话中首次拆解前运行。输出 Ready. 表示就绪。如果输出 Not ready,或用户要求安装/配置此技能,请遵循 ${CLAUDE_SKILL_DIR}/references/setup.md。ElevenLabs 密钥为可选项。切勿在聊天中询问:用户应在其终端中使用 setkey 保存。
VPY="${CLAUDE_SKILL_DIR}/scripts/run.py";下面的 python3 "$VPY"(Windows 上为 py)会使用 AI_EDITOR_HOME 指定的工具虚拟环境中的 Python 运行脚本。
流程
快速模式(由 ai-editor 的 start、setup 或 style-edit 调用)
当其他技能仅需要 style.json 时,运行以下命令:第一步 list,第二步的命令加上 --top 5(5 个视频加 2 个对照组和 2 个备用视频;对于粘贴的链接:全部),接着第三步的 3b 四个命令,再运行第三步的 3c 四个命令,然后停止。第三步 0 的问题仅在调用方尚未询问时才发问。跳过 metrics.py、第三步的文字分析阶段以及第四至第六步。每个创作者约需 3 分钟(14 核 Mac;实测 2-3 分钟;备用视频在最坏情况下增加约 1 分钟),8 核笔记本所需时间翻倍。先告知用户此预估时间。
第三步 0:询问(仅一次)
跳过消息中已回答的内容。调用一次问题框:
- 哪些创作者? 用户提到的用户名或链接(推荐)/ 我将粘贴更多。多个创作者是正常的:用户可能喜欢一个创作者的标题和另一个的节奏。每个创作者的风格是一种格式。
- 多于一个时:从谁那里借鉴哪些部分? 暂时不确定(推荐):在第三步 3b 之后,结合每位创作者的
look.md再次询问;或指定:标题、节奏(剪辑、缩放、运动)、视觉(图形、人脸构图、卡片)、声音。
第一步:获取视频
python3 "${CLAUDE_SKILL_DIR}/scripts/fetch.py" list <handle> --platform tiktok --limit 40 # 或 youtube
python3 "${CLAUDE_SKILL_DIR}/scripts/fetch.py" list <name> --urls picks.txt # 粘贴的链接,每行一个
输出一个排名表格(播放量,中位数的倍数),并写入 videos.json;* 标记播放量达到中位数 3 倍以上的视频。
Instagram: list <handle> --platform instagram 通过用户在浏览器中登录 instagram.com 读取最新的 Reels(数据仅发送至 instagram.com)。若未登录,则退出并返回一条错误信息;告知用户,或在 picks.txt 中放入至少 6 个 Reel 链接并使用 --urls(按点赞数排序;需告知用户)。
第二步:下载并转录优胜视频及对照组
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/visual.py" download <handle>
python3 "${CLAUDE_SKILL_DIR}/scripts/fetch.py" transcribe <handle>
--top N 下载并转录 N 个视频加上 2 个对照组视频(播放量最接近中位数的两个;--control 可更改为其他视频)再加上 2 个备用视频(用于格式检查;--spare),全部为创作者通常时长(若数量足够)。粘贴的链接:每个都处理。默认 --top 8 为 12 个视频;快速模式 --top 5 为 9 个;将参数同时传给两个命令。两者均会先输出计数。--ids <id>,<id> 选择指定视频。中位数视频作为对照:一个出现在 500K 播放量和 3K 播放量视频中的动作,是创作者的习惯,而非 500K 视频成功的原因。保留至少 2 个。
每个测量脚本都可同时处理多个视频(CT_JOBS=1 可在小笔记本上关闭并行)。
先告知预计时间(下载加转录,14 核 Mac 上约每视频 10 秒)。Whisper(免费、本地)为默认引擎;若配置了 ElevenLabs 密钥,transcribe 会使用 Scribe,后者保留所有填充词(每小时音频 $0.22;在转录超过 10 个视频前给出费用估算)。如果 Whisper 转录的填充词计数偏低,需在拆解报告中说明。
第三步:测量,然后分析
python3 "${CLAUDE_SKILL_DIR}/scripts/metrics.py" <handle>
写入 metrics.json(每三分之一段的每分钟字数、停顿、填充词、句子长度、人称代词“你/我/我们”、重复短语),全部基于单词时间戳。
先运行第三步 3b,以便后续阶段跳过 format.json 排除的视频。然后加载 ${CLAUDE_SKILL_DIR}/references/analysis-framework.md 并按阶段顺序运行。对于第一阶段,为每个视频启动一个 video-analyst 代理,所有代理在同一消息中发送(它们同时运行):为每个代理提供 creator-teardowns/<handle>/ 的绝对路径和一个视频 ID。每个代理返回一个 JSON 节拍图;将其合并到表格中。若没有 Agent 工具,则自行阅读 transcripts/<id>.timed.txt,一次处理一个视频。切勿整体读取 transcripts/<id>.json 或 metrics.json:
- 节拍图 + 时间线。 每个视频拆分为带标签的节拍,附带秒标记和单词数。
- 语音/词汇特征。 句子长度、人称、命令句、重复短语,以及用户通常不会使用的表达方式。
- 视觉分析。 始终执行:第三步 3b。这是让用户能够以此风格编辑自己视频的基础。
- 卡片事件, 仅当任务要求分析创作者的卡片和图形,或即将生成编辑计划时执行。写入
events.json,格式如${CLAUDE_SKILL_DIR}/references/edit-plan.md所示。scripts/strip.py需要 ffmpeg、numpy和pillow。
不要省略时间信息:“钩子(hook)在 0:03 处落地,持续 14 个单词,每个条目持续 8-11 秒”才是可拍摄的格式;而“钩子、列表、结尾”则不够具体。
第三步 3b:视觉分析阶段(基于测量,无需你查看图像)
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/visual.py" measure <handle>
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/look.py" measure <handle>
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/format_check.py" check <handle>
然后运行视图合并阶段(下方第 4 步),接着运行 python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/lookpass.py" merge <handle>。
在 transcribe 之后执行它们(look.py 将 OCR 文本与语音单词匹配)。
visual.py:剪辑的类型和次数、镜头长度、缩放、摇摄和抖动。look.py:每秒 3 帧的 OCR 和人脸检测(YuNet):字幕(位置、大小、单词、大小写、颜色、粗细、入场方式)、人脸构图、图形占比、调色板、运动特征。每视频约 40 秒。format_check.py:一种风格是一种格式,而非所有发布内容的混合体。它将视频按帧、人脸、字幕、镜头长度和时长分组;保留多数分组(3 个及以上),其余移至video/left-out/(format.json说明原因;参见references/look-pass.md)。当有视频不同时,告知用户其第一行(“4 个视频使用中,2 个看起来是不同的格式”);如果混合,请用户提供更多同一种视频。- 视图合并阶段:一个 Agent 调用,模型为
"haiku",读取每个保留视频的sheets/<id>.jpg(每个视频的 3x3 缩略图,由visual.py生成),并按照lookpass.py的提示写入video/<id>.look-ai.json:字体、图形风格、转场、非通用元素。不包含数字。具体说明见references/look-pass.md。lookpass.py merge将其融入style.json。
然后阅读 look.md(不超过 48 行)。不要打开帧或缩略图。 所有字段见 ${CLAUDE_SKILL_DIR}/references/look-pass.md。style.json 中的数字来自代码;切勿手动编辑。当 look.md 和模型的文字不一致时(例如测量值为 motion: punchy,模型称为 smooth),以测量值为准,并在拆解报告中同时提及两者。
没有 OCR 引擎(doctor 会说明可选): captions 保持未测量状态,look.md 中会注明。与其自行阅读缩略图,不如安装 OCR 引擎(doctor 会打印安装命令)。
第三步 3c:深度分析及页面生成
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/graphics.py" measure <handle>
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/sound.py" measure <handle>
python3 "$VPY" "${CLAUDE_SKILL_DIR}/scripts/report.py" build <handle>
每个 measure 命令打印一行摘要和写入的文件(--json 打印完整 JSON 块;不需要,因为 look.md 包含数字)。在第三步 3b 之后运行它们(graphics.py 使用 look.py 的人脸数据来遮盖说话人)。它们添加每个图形(裁剪后、类型、位置、入场出场方式,拟合为 GSAP 缓动)、剪辑类型和摄影机运动(visual.py)、音效和音乐、每个视频的前 3 秒、优胜视频与对照组的对比,以及创作者自身形象的 AI 痕迹扫描。字段、方法、上限和成本:见 ${CLAUDE_SKILL_DIR}/references/teardown-page.md。graphics.py measure 之后,运行该参考文档中的 haiku 分类阶段(否则分类仍为代码的猜测),然后运行 sound.py 和 report.py。
然后为用户打开 creator-teardowns/<handle>/teardown.html(Mac 上使用 open,Windows 上使用 start,Linux 上使用 xdg-open),并提供将其发布为 artifact 的选项。不要阅读页面或其图像:look.md 已包含数字。用两三行告诉用户优胜视频的不同之处(参见 look.md 中的 Winners: 行,附样本数量)以及其形象中任何 BAN 级别的 AI 痕迹。
然后在问题框中(页面仅展示证据,没有勾选选项)提出一个多选问题:“你的视频应复制 @ 的哪些部分?”选项:标题、节奏、图形类型、入场运动、布局、声音(每个问题最多 4 个选项;必要时拆分为两个问题)。每个选项的描述来自 look.md 中的一行测量数据(例如“0.25 秒带过冲的滑入”)。如果用户选择的某个部分包含 BAN 痕迹,在确认前告知用户。保存答案:
python3 "${CLAUDE_SKILL_DIR}/scripts/editplan.py" blend <handle>-mine --from <handle> \
--take captions,pace,graphics,entrances,layout,sound # 仅用户选中的部分
style-edit 读取 creator-teardowns/<handle>-mine/style.json;未选中的部分使用默认值。report.py build 和 editplan.py blend 会打印该风格的技能名称(如 skill edit-like-<handle> -> <path>,前提是已安装 ai-editor):告知用户其名称。对该风格编辑的反馈即针对该技能。
第三步 3d:多个创作者(当用户命名了多个时)
遵循 ${CLAUDE_SKILL_DIR}/references/blend.md:每位创作者执行第一步至第三步 3b,将 look.md 并排展示,然后运行 editplan.py blend。
第四步:撰写拆解报告
将 ${CLAUDE_SKILL_DIR}/references/teardown-template.md 填充至 creator-teardowns/<handle>/teardown.md。每个视频包含统计行、逐字转录、带时间的节拍表、应保留的模式和应拒绝的模式。
第五步(可选):转化为技能
询问用户该格式是否值得保留。若为肯定,遵循 ${CLAUDE_SKILL_DIR}/references/skill-handoff.md(格式技能,与该风格的技能并列)。
第六步(可选):按创作者风格规划用户的视频
当用户提供自己的视频时,遵循 ${CLAUDE_SKILL_DIR}/references/edit-plan.md。此步需要创作者的 events.json(来自视觉分析阶段);不进行渲染。
如果脚本停止
| 消息 | 操作 |
|---|---|
doctor Not ready: ... | 按照 references/setup.md 处理它列出的每一行 |
yt-dlp returned nothing / parsed 0 videos | 阅读提示的线索:更新 yt-dlp(doctor 会显示方法),或要求用户提供单个视频链接并使用 --urls |
| Instagram 个人资料获取失败 | 提示用户登录 Chrome 中的 instagram.com,或提供至少 6 个 Reel 链接(第一步中的“Instagram”) |
... Fix the key, then rerun(转录) | ElevenLabs 密钥错误:用户在其终端中重新使用 setkey 保存,或放弃密钥使用 Whisper |
no videos in ... Run download first | 运行 visual.py download <handle> |
download failed: <ids>(退出码 1) | 使用其输出的 --ids 重新运行;如果仍然失败,告知用户样本更小并继续 |
yt-dlp not found | 运行 fetch.py doctor 并修复它列出的问题 |
| 部分视频转录失败 | 使用 --ids 重试,然后告知哪些失败;切勿手动填补转录 |
硬性规则
- 只有真实数据。 每个关于“成功”的论断都必须附上播放量数据。永远不要在没有数据的情况下说某个视频“爆红”。
- 仅使用逐字转录。 永远不要总结未转录的视频。
- 复制结构,不复制声音。 每个拆解报告都必须明确指出哪些要拒绝。
- 中位数对照组。 至少转录两个中等表现视频,否则无法区分格式与创作者的习惯。
- 永远不要编造转录行、统计数字或卡片引用。 如果转录失败,使用
--ids重试,然后明确说明失败。 - 绝不在聊天中询问 ElevenLabs 密钥。
- style.json 中只包含测量数字。
pace和zoom来自visual.py;captions、face、graphics和motion来自look.py;只有文字(look、font_match)来自模型。 - 阅读 look.md,不要打开帧。 仅在
look.md无法回答的问题时打开一帧,并说明是哪一帧。用户获得teardown.html;Claude 获得look.md。 - 优胜视频与对照组对比:说明样本数量。 永远不要声称差异已被“证明”;“所有优胜视频都...”仅表示在此样本中没有例外。