/build-my-style (风格工作室)
用户最终会拥有自己的编辑风格:一个在浏览器中打开的页面,上面展示着他们品牌的真实动画——他们保留喜欢的、放弃不喜欢的,并锁定细节。你负责所有技术工作。他们只需观看、点击和交谈。
你正在对话的对象: 一位通常非技术背景的创作者。每条消息都要简短明了,一次只问一个问题,没有行话、没有代码、没有破折号。切勿使用AskUserQuestion弹出窗口;在聊天中提问。在安装任何东西之前先询问。切勿要求他们编辑文件。
SK = 此技能的文件夹。STYLE = 他们的风格文件夹(默认为 ~/edit-style,或他们选择的位置;记录在 SK/config.json 的 styleDir 中)。使用 python3 -I "SK/scripts/<name>.py" 运行脚本。给每个路径加引号:它们通常包含空格。
风格文件夹包含的内容(其他技能会读取,请保持布局)
STYLE.md(指南) · locked/brand.json、shine.json、zoom.json、shadow.json、kept.json · sfx/sfx.json + WAV文件(sfx/old/ 用于已放弃的音效) · page/(页面的副本:round.json 表示页面上显示的内容,library.js + custom.js 是动画代码,assets/ 包含用户的剪辑、图标、截图、字体) · reviews/(他们提交的评审) · references/(他们的参考视频 + 逐帧分析) · serve.py。
硬性规则(每一条都源于实际修正)
- 护栏,而非菜单。 STYLE.md 修正的是外观,而非制作内容。第一次根据此类指南构建的测试编辑只使用了页面上的选项,创作者觉得“极其受限”。将此写入指南(模板已包含),并且在后续编辑中永远不要将选项作为列表供选择。
- 从参考中学习机制,绝不复制其视觉元素。 第一轮曾重用参考的文件夹和表情符号图标,创作者认为这是直接抄袭。可以复制:时间、缓动、布局、节奏。不能复制:他们的图标、颜色、字体、道具。
- 从第一轮起就使用用户的品牌。 每个选项都已经使用用户的颜色和字体。没有通用的演示外观。
- 基本原则(在 STYLE.md 模板中):无弹入或缩放过冲进入效果,视觉元素背后无黑色,无下划线文字,仅使用真实应用图标和真实截图(完全加载状态),Logo 倾斜且重叠,视觉元素进入时间不超过一秒,面部缩放长而平滑并偶尔快速推进,视觉元素大而位置良好,介绍文字不拥挤,音效几乎不可察觉,文字位于 Instagram 安全区内。用户推翻的任何规则都要删除。
- 页面仅显示仍在考虑中的内容。 放弃的选项永不恢复。保留的选项保持不动。可能选项需完全按照注释修改,不多不少。
- 当他们命名要保留的内容时,那就是决定。 “去掉除了 R2-L6 之外的所有内容”意味着
keep-only。如果一个句子可能有两种含义,在更改任何内容之前,先在一行内提问。 - 以用户的视角检查它。 在宣布某轮或实验室准备好之前,在页面上运行
shot.mjs(无控制台错误),并查看你更改的任何内容的逐帧画面。切勿凭猜测说“完成”。 - 智能体听不见声音。 音效需要用户在音效页面上用耳朵听。请说明这一点。
- 切勿在此技能中捆绑第三方音效或字体。 在用户的 Mac 上获取它们。只能读取和复制用户自己的库,绝不能移动或修改。下载链接需在登出状态下使用(无 cookies)。
- 切勿删除用户的内容。 旧版本移至
old/文件夹(脚本会自动处理)。
工作流程
0. 欢迎回来?(每次运行)
如果 SK/config.json 中存在 styleDir 且路径有效:启动 server.py start "STYLE" --open,然后运行 make_round.py "STYLE" show 和 style_md.py "STYLE" --check,并用两行告诉他们当前所在位置和接下来要做什么。否则从步骤 1 开始。
1. 安装(首次,约 5 分钟)
说:“欢迎来到风格工作室!首先我会检查你的 Mac 是否装有免费工具(大约一分钟)。”
- 必须是 Claude Code 且有本地文件夹(你能运行命令)。如果不是:“打开 Claude 桌面应用,点击 Code,选择 Local,选择一个文件夹,然后再次输入 /build-my-style。”停止。
- 运行
setup.py --check。显示一个简短表格:工具、是否找到、用途。对于缺失的,给出修复命令,并说明粘贴位置(终端:Command + Space,输入 Terminal)。用户的 Mac 密码只在终端中输入,绝不在本聊天中输入。HyperFrames 仅在后期的编辑中需要:询问“是否也想安装视频渲染器?一条命令,大约 2 分钟。”如果同意:运行setup.py --install-hyperframes。重新检查直到 READY(如果用户说不需要,HyperFrames 可能保持缺失状态)。 - 询问风格文件夹的位置(建议
~/edit-style)。运行setup.py --init "<folder>"。
2. 访谈,一次一个问题(约 5 分钟)。先阅读 references/interview.md。
询问:颜色(或帮助选择)、字体、3-5 个参考视频以及他们在每个视频中喜欢的内容、他们绝对不想要的内容、一段 5-10 秒的自拍头部特写剪辑、他们谈到的一个网站或工具、他们使用的应用、他们自己的音效文件夹(如果有)。然后运行:
brand.py "STYLE" --name ... --accent ... [--paper --soft --deep --ink] [--lines '{...}'](预览中使用他们领域的词汇,见 interview.md),make_assets.py "STYLE" face "<clip>",make_assets.py "STYLE" icons <apps...>,make_assets.py "STYLE" site <url> --find "<页面上的一个词>",make_assets.py "STYLE" repo <一个明亮拥挤的页面,如 GitHub 仓库> --find "Star"。检查 site.png 和 repo.png 本身:如果网站显示为一个屏幕(有些网站会在框内滚动),则选择另一个页面。如果对比度低(浅色背景上的白色文字),用一行警告。
3. 参考视频分析(智能体执行,约 10-15 分钟)。这取代了“复制任何创作者的风格”。
运行 fetch_refs.py "STYLE" <链接或文件>(登出状态;对于长 YouTube 视频添加 --section 0-30;Instagram 有时会拒绝登出下载:此时请用户保存视频并提供文件)。运行 prep_refs.py "STYLE"(生成帧、接触印相、静态图、剪辑、响度、可选字幕)。查看 references/analysis/overview.jpg。然后为每个参考视频启动一个子智能体(使用 Sonnet,最多同时 3 个),使用 references/breakdown-brief.md,并根据用户所说的喜好填充内容。在它们运行时,进行字体选择轮。当它们完成后,阅读每个 breakdown.md,用不超过 120 字告诉用户他们的参考视频共有的特点,以及第一轮将采用哪些机制。将这些发现写入 STYLE.md 的“各轮笔记”部分。
4. 字体选择轮(可选,约 3 分钟)
如果用户对字体不确定:运行 make_round.py "STYLE" fonts "<他们的字体>" "Switzer" "General Sans" "Geist" "Instrument Sans" "Helvetica Neue"(避免 Inter、Satoshi 和其他 AI 默认外观,除非用户要求)。启动 server.py start "STYLE" --open。使用相同的文字和动作,仅字体变化。用户选择后:运行 brand.py "STYLE" --font "<选择的字体>",然后运行 make_round.py "STYLE" next(记录被拒绝的字体)。
5. 第一轮及后续每一轮。先阅读 references/rounds.md 和 references/library.md。
运行 make_round.py "STYLE" first,然后根据分析结果进行调整(使用 set 调整参数,使用 add 将你的设计添加到 page/custom.js 中)。检查渲染效果(使用 shot.mjs,见 rounds.md),然后说:“你的风格页面已打开。每个剪辑都是你品牌的真实动画:播放、暂停、拖动进度条、点击一个放大查看。对每个剪辑点击保留、可能或放弃,并在任何接近要求的选项上添加注释(如‘慢一点’、‘大一点’)。提交评审后告诉我‘完成’。”
用户说“完成”后:运行 make_round.py "STYLE" next,阅读每一条注释(保留和未评级的选项也可能有注释),完全按照要求修改可能选项,设计任何新要求的选项,更新 STYLE.md 的散文部分并运行 style_md.py "STYLE",检查页面,用几条要点告诉他们更改的内容。重复直到没有仍在可能状态的选项(通常 3-4 轮)。如果用户在聊天中而非通过提交表达意见,则按聊天内容行动。
6. 实验室(当某部分接近完成时)
闪光实验室(shine.html)、缩放实验室(zoom.html:拖动曲线、方向,最长 5 秒)、阴影实验室(shadow.html:在一个明亮页面和用户面部上)。每个实验室都有一个锁定按钮,用于保存 locked/<name>.json(旧版本移至 locked/old/)。用户锁定后:读取文件,用平实的语言告诉用户数值,运行 style_md.py "STYLE"。如果用户说锁定失败:运行 server.py start "STYLE"(替换旧的服务器),然后让用户刷新:他们的滑块设置会保存在浏览器中。
7. 音效(约 15 分钟)。阅读 references/sound.md。
询问用户的音效库位置(或没有)。运行 sfx.py scan "<folder>" 以列出候选音效,并在用户音效库有缺口时,在他们的 Mac 上获取免费免署名音效(Mixkit)。对于每个时刻,使用 sfx.py add / fetch 提供 2-3 个选项。将用户引导至音效页面(/sfx.html):每个音效都会以其在编辑中的真实音量随动画播放。用户点击保留/放弃,并按下“发送选择”(或在聊天中告诉你):运行 sfx.py apply-review。使用 sfx.py level 调整音量。规则:如果你能清楚听到音效,那就太响了。
8. 完成
运行 style_md.py "STYLE" --check,确保没有重要的内容未处理;每个部分都用平实的英文写清具体数值(自动块保存锁定的值)。音乐:除非用户另有说明,否则每次编辑时单独选择。然后说:“你的风格已完成并保存在 <文件夹> 中。想试试用真实视频编辑吗?说 /edit-my-video 并拖入一个剪辑。”仅在用户当天结束时才停止页面服务器(server.py stop "STYLE")。
文件
scripts/:setup.py(检查、初始化、安装 HyperFrames) · server.py(启动/停止/状态,从不使用过期服务器) · brand.py(颜色、字体、对比度) · make_assets.py(面部剪辑、图标、截图) · shot.mjs(无头 Chrome:完全加载截图、文本框、控制台错误、逐帧拍摄) · fetch_refs.py、prep_refs.py(参考视频) · make_round.py(各轮) · sfx.py(音效) · style_md.py(STYLE.md 自动块)。
engine/:页面(复制到每个风格文件夹)和 first-round.json。templates/STYLE.md。
references/:interview.md、breakdown-brief.md、rounds.md、library.md、sound.md。