关于 m4l-project
m4l-project 是指导 LLM 创建 Max for Live 设备的技能,侧重实用检查清单,涵盖补丁结构、MIDI 与传输时序、打包和验证。
主要功能
- 01保持生成源与产物一致
- 02Max for Live 设备与界面规则
- 03MIDI 和传输时序检查
- 04AMXD 打包要求
- 05脚本与补丁验证
适用场景
- 01通过脚本创建 Max for Live 设备
- 02检查界面边界与 MIDI 行为
- 03准备并验证 AMXD 发布包
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ philtzjp/ skills --skill m4l-project安装后在 Claude Code 中输入/m4l-project确认已加载。
详细介绍
M4L Project
此技能整合了 LLM 创建 Max for Live 设备时所需的实用规则。它不是一份详尽的参考资料,而是一份用于规避容易出错决策的检查清单。
基本方针
- MUST:将生成脚本视为唯一可信源。
.maxpat/.amxd是生成产物;即使直接编辑,也必须将改动反映到生成脚本中。 - MUST:为每个设备创建
packages/<device>/,并至少划分devices/、scripts/、assets/、releases/、DESIGN.md、VERSION和LICENSE的职责。 - MUST:更改 UI 尺寸、颜色、边距、显示逻辑、MIDI 规格或同步规格时,记录到
packages/<device>/DESIGN.md。 - SHOULD:将 Max patcher JSON 视为结构化数据,不要通过字符串替换来编辑。
- NEVER:不要通过将
.maxpat重命名为.amxd来创建.amxd。 - NEVER:不要只修改生成产物,导致它与生成源不一致。
Max for Live 生成
- MUST:MIDI Effect 必须从
midiin/notein输入,并通过midiout/noteout输出。 - MUST:先确定设备类型是 Audio Effect、Instrument 还是 MIDI Effect,再让 I/O 与
.amxdtype 相匹配。 - MUST:MIDI Effect 的
.amxd必须包含 FOURCCmmmm和project.amxdtype = 1835887981。 - MUST:
.maxpat必须包含openinpresentation: 1。 - MUST:可见 UI 对象必须包含
presentation: 1和整数类型的presentation_rect。 - MUST:所有可见 UI 对象必须满足
x + w <= devicewidth且y + h <= 169。 - SHOULD:
.amxd使用图像、JS 或外部依赖时,应将依赖文件一并打包,使其能够独立加载。
UI / Presentation
- MUST:Max for Live 设备的高度必须固定为
169px。 - MUST:更改 UI 后,必须通过程序检查 Presentation 边界。
- MUST:使用背景 panel 时,设置合适的层叠顺序,避免遮挡操作 UI。
- SHOULD:
live.*UI 应优先与 Live 主题保持一致,避免不必要地覆盖颜色。 - SHOULD:固定尺寸的输入框、图标、画布和 Logo 应设置稳定的
presentation_rect,避免因数值变化导致布局移动。
JS / MIDI 逻辑
- MUST:显示上的点判定与发声判定必须使用同一个函数,或从相同数据推导而来。
- MUST:保持 Note On 与 Note Off 的对应关系。
- MUST:规格要求使用输入 MIDI 时,没有输入时不得擅自回退并播放音符。
- MUST:Random 的目标仅限于规格明确指定的值。
- MUST:规格要求“仅在命中瞬间发声”时,必须加入边沿判定,避免在同一命中范围内持续触发期间重复发声。
- SHOULD:Max JS 函数名应能体现其与 Max 消息名之间的对应关系。
- SHOULD:将 JS
Task视为低优先级事件;对于 Freeze/Export 中需要精确 MIDI 时序的处理,应谨慎使用。
Transport / Freeze / Export
- MUST:不得将 Live API(
live.object、live.observer、LiveAPI)用作发声时钟。Live API 优先级较低且为异步机制,不应将其视为 Freeze/Export 期间可靠的时序源。 - SHOULD:需要 Transport 同步时,应使用 Max 侧与 Live transport 同步的机制,例如 Max 的 transport/tempo-relative clock。
- MUST:重负载导致 scheduler tick 跳过时,不得实现将过去的事件集中到当前时刻发声的追赶逻辑。应丢弃延迟的过去音符,或将其设为明确指定的独立模式。
- MUST:即使相同的 transport 位置、degree 和 tick 多次出现,也不得重复触发同一事件。
- SHOULD:如果 Freeze/Export 出现问题,应考虑改用 Max 标准对象(
makenote、pipe、flush、midiformat等),而不是使用 JS 内部的发声调度。
AMXD / Packaging
- MUST:写出
.amxd二进制容器时,生成后至少要检查其中包含预期的.maxpat/ JS / 图像名称。 - MUST:依赖文件的
dependency_cache必须使用可在分发环境中解析的路径。不得依赖本地绝对路径。 - MUST:发布产物必须包含
VERSION、LICENSE、.amxd、.maxpat、JS 和引用图像。 - SHOULD:安装到 Ableton User Library 时,先删除同名旧文件,再复制新的
.amxd。 - MUST:向用户提交最终报告时,如果需要在现有 Live 实例中重新插入设备,必须明确说明。
验证
- MUST:修改 JS 后,运行
node --check <device>.js。 - SHOULD:修改 Python 生成脚本后,运行
python3 -m py_compile <script>.py。 - SHOULD:生成后,检查
.maxpat的 Presentation 边界和 patchline 端点。 - SHOULD:生成
.amxd后,检查设备类型、打包的依赖项和主要 JS 字符串是否包含在其中。 - SHOULD:需要确认 Live 中的行为时,检查 Max Console / Open Max Window 是否有错误。
已精简旧技能的处理方式
旧结构将 overview、maxpat format、amxd conversion、presentation layout、live api、javascript、gen、debugging 和 py2max 分为不同技能。但在实际工作中,所需判断被拆散,存在受局部知识影响而将 Live API 用作时钟等风险。
今后以此整合技能为入口,并在需要时再单独查阅详细的官方文档或现有实现。
评论
支持 Markdown