m4l-project について
m4l-projectは、LLMによるMax for Liveデバイス作成を支援するスキルです。パッチ構造、MIDIやトランスポートのタイミング、パッケージング、検証の実務チェックに重点を置きます。
主な機能
- 01生成元と成果物の整合性
- 02Max for LiveのデバイスとUI規則
- 03MIDIとトランスポートのタイミング確認
- 04AMXDのパッケージ要件
- 05スクリプトとパッチの検証
活用シーン
- 01スクリプトからのMax for Liveデバイス作成
- 02UIの範囲とMIDI動作の確認
- 03AMXDリリースの準備と検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ philtzjp/ skills --skill m4l-projectインストール後、Claude Code で/m4l-projectを入力して読み込まれたか確認します。
詳細
プロジェクトの README よりM4L Project
このスキルは、Max for LiveデバイスをLLMが作るときに必要な実務ルールだけを残した統合スキルである。網羅的なリファレンスではなく、壊れやすい判断を避けるためのチェックリストとして使う。
基本方針
- 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:
.amxdを.maxpatのリネームで作らない。 - 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: visible UI object は
presentation: 1と整数presentation_rectを持つ。 - MUST: 全visible UI objectは
x + w <= devicewidthかつy + h <= 169を満たす。 - SHOULD: 画像、JS、外部依存を使う
.amxdは単体ロードできるように依存ファイルを同梱する。
UI / Presentation
- MUST: Max for Liveデバイスの高さは
169px固定として設計する。 - MUST: UIを変更したら、Presentation boundsを機械的に検査する。
- MUST: 背景panelを使う場合は、操作UIを覆わない重なり順にする。
- SHOULD:
live.*UIはLiveテーマとの整合性を優先し、必要以上に色を上書きしない。 - SHOULD: 固定サイズの入力欄、アイコン、キャンバス、ロゴは安定した
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のtransport/tempo-relative clockなど、Live transportに同期するMax側の仕組みを使う。
- MUST: 重い処理でscheduler tickが飛んだとき、過去イベントを現在時刻にまとめて発音するcatch-up実装にしない。遅れた過去音は捨てるか、明示した別モードにする。
- MUST: 同じtransport位置・同じdegree・同じtickが複数回来ても、同じイベントを再発音しない。
- SHOULD: Freeze/Exportで問題が出る場合は、JS内の発音スケジューリングよりもMax標準オブジェクト (
makenote,pipe,flush,midiformatなど) へ逃がすことを検討する。
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 boundsとpatchline endpointを検査する。 - SHOULD:
.amxd生成後に、デバイスタイプ、同梱依存、主要JS文字列が入っていることを検査する。 - SHOULD: Liveでの挙動確認が必要な場合は、Max Console / Open Max Windowのエラー有無を確認する。
削減した旧スキルの扱い
旧構成では、overview、maxpat format、amxd conversion、presentation layout、live api、javascript、gen、debugging、py2maxを別skillに分けていた。しかし実作業では、必要な判断が分断され、Live APIをクロックに使うなど局所知識に引っ張られるリスクがあった。
今後はこの統合スキルを入口にし、詳細な公式ドキュメントや既存実装は必要になった時点で個別に確認する。
コメント
Markdown 対応