Communitygithub.com

m4bwav/sfxwright

规划、制作、编辑、检查并记录游戏、电影、视频和应用中的音效,同时将每个文件的来源和许可证保存在磁盘上。一个简介、镜头列表或游戏事件列表会变成一个声音列表;声音来自无需模型的过程配方、任何可访问的 ComfyUI、托管的 API 或 CC0 库;脚本构建变体集、循环、层次和脚步声序列;测量式检查捕获削波、杂音、直流偏移、剪切末尾、填充和不良接缝;`ship` 回答“我们能发布这个吗?”。

sfxwright 是什么?

sfxwright 是一个 AI 智能体技能,旨在自动化游戏、电影、视频和应用程序的音效制作工作流程。它从计划阶段(将描述或事件列表转换为声音列表)到制作、编辑、检查、记录,甚至通过 `ship` 命令提供“能否发布”的评估,全程引导用户。该技能支持多种声音来源:通过 SFX synth 的配方声音合成、通过 ComfyUI 或 API 的生成式 AI 模型调用,以及来自 CC0 库的样本。它通过程序化脚本处理变体、循环和脚步声序列等复杂结构。评估方面,sfxwright 使用分析检查来检测削波、杂音、直流偏移等常见问题,但最终决策权保留给人类。它在 Claude Code 等 AI 编码代理上运行,读取 SKILL.md 来指导其行为,并维护一个 LEARNINGS.md 文件以从错误中学习。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/m4bwav/sfxwright/tree/HEAD/skills/sfxwright

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

sfxwright 是做什么的?

结果:每个声音都是 sounds.json 列表中的一行,包含其事件、层次、变体、长度、路线和状态,并且每个文件都记录其来源、模型、提示词、种子、许可证和编辑信息。数字捕捉故障;人耳做最终判断。报告哪些声音还没人听过。

SFX 意味着从该文件夹运行 python scripts/sfx.py(执行它,不要阅读它;sfx_audio.py 和 sfx_synth.py 是其模块)。当某个步骤需要时,阅读一篇参考资料。

步骤 0:新鲜度

读取 evergreen.json。如果设置了 contradiction 或者今天等于或晚于 next_due,用一句话说明,执行任务,然后运行 evergreen-refresh。如果 verify_at_use 为真,则在依赖模型和许可证声明之前重新检查它们。ai-sfx 常青侦察兵在存在时会提供刷新信息。

步骤 1:权利优先

  • 来自知名电影或节目,或著名声音标志(光剑、THX Deep Note、NBC 音调、Intel 提示音、MGM 狮吼、Netflix 开场音)的声音:用一句话拒绝复制,并提供一个基于声学特征构建的原创声音。不要将标题或名称放入提示词或文件中:references/rights.md。
  • 列表中的 commercial 决定了允许哪些来源。如果用户没有说明,则设置为 --commercial yes(更严格的解读),并用一句话说明;不要停下来询问。
  • 没有已知许可证的文件不能用于商业项目。找到其来源或替换它。切勿猜测许可证。
  • 切勿在模型上训练或将其用于训练 Sonniss、BOOM 或 A Sound Effect 文件。

步骤 2:规划

SFX init sounds.json --project NAME --use game --commercial yes,然后每个声音执行 SFX add。电影剪辑、游戏设计或简单描述都归结于此:references/plan.md。对于任何具有轴(表面、力、尺寸)的内容,在提交文件之前运行 SFX plan --axis surface=6 --axis force=3 --variations 4 --budget 100。格式:references/format.md。

步骤 3:选择路线

根据任务、许可证和硬件:references/routes.md。运行 SFX doctor 一次。用一句话说明选择及其原因。安装节点、引擎或大型模型,以及任何付费 API 调用,需要先获得用户的同意;同时使用现有资源。没有可访问的内容不是错误:SFX synth 不需要模型,而 SFX gen --workflow-out 会输出一个工作流。

步骤 4:制作

SFX synth list                          # 每个配方、其参数和材料
SFX synth footstep --param surface=gravel --takes 6 --out takes/ --name step
SFX gen "heavy wooden crate dropped on concrete, dead room" --seconds 2 --takes 4 --out takes/ --name crate
SFX library found.wav --licence cc0 --library Freesound --title "..." --url ...
SFX register sounds.json crate takes/crate_01.flac

提示词命名来源、材料、空间和时间,而非故事。请求的长度是最大值,因此要预留填充空间。先尝试不同的种子,再更改措词。切勿向模型请求行走周期:制作单步,然后使用 SFX sequence。

步骤 5:编辑

SFX edit(整理、修剪、淡入淡出、增益、峰值、音高、拉伸、反转、卷积、直流偏移)、layer、vary、sequence、loop、place、record-sheet(为带有录音路线的声音做规划)、tone(稳定的轻柔拉伸,可选填充;与 check --tone-match 比较)、pop(在干声上添加或 --verify 头和尾的 2 次爆音)。配方以及每次编辑的成本:references/edit.md。默认情况下,音高变化是变速的;拉伸会产生涂抹效果。编辑会向前传递来源信息,而无衍生作品许可证的来源会拒绝编辑。切勿手动复制或重命名声音:关联文件会留在后面。使用 edit、finish 或 synth --out 写入最终名称。

步骤 6:检查每批

SFX check takes/*.flac --seconds 2     # 每个文件的读数和标记
SFX set takes/step_*.wav               # 近似重复、异常值、电平分散度
SFX timing walk.wav                    # 过于均匀,或单个样本重复
SFX sheet takes/*.wav --out sheet.png  # 查看波形

任何变体集始终运行 set。标记意味着需要倾听;它不是判决,干净的结果也不意味着声音是好的。忽略简报中允许的内容(对噼啪声使用 --waive CLICK)。每个数字的含义及其校准依据:references/thresholds.md。

步骤 7:倾听

数字无法判断一个声音是否适合其画面,或者一个集合是否读起来像单个对象。当存在 askwright 页面时,将选中的声音放在页面上,进行电平匹配(SFX review --match)和盲测,并为电影提供画面。否则,提供带标签的文件列表和简单问题。在录音的 heard 字段中记录听到的内容,并将选中的声音标记为 picked: true。

步骤 8:完成并记录

SFX finish in out --dest game-sfx:仅调整增益,最后进行编码。未知的目的地是错误:询问。当存在 musicwright 并且整个混音需要响度目标时,使用 mw.py master。引擎和目的地:references/finish.md。

SFX doc sounds.json --kind cue|impl|credits,然后 SFX ship sounds.json。报告 BLOCKED、CHECK 或 CLEAR 状态及原因、需要署名的内容和商店披露信息。它是一个记录,而非法律建议。

输出

路线、列表路径、每批的标记、听到了什么以及是谁听到的,以及当有任何内容输出时的 ship 答案。

规则

  • 切勿将生成的声音称为已录制或无 AI。ship 会列出需要披露的内容。
  • 带有音符、调性和节奏的音乐应交给 musicwright;对话及其室内混响应交给 voicewright 或 cinewright。
  • 随插件发布的样本必须有明确的权利。

工作时:记录学习内容

如果用户纠正你,错误重复出现,或出现变通方法,将其添加到 LEARNINGS.md。如果它证明规则有误,修复规则,在 CHANGELOG.md 中记录,并在 evergreen.json 中设置 contradiction。

维护

常青单元,层级 fast;状态在 evergreen.json 中。请参阅 MAINTENANCE.md、RESEARCH.md、TESTS.md、evals/。

相关技能