| name | patch-guidelines |
| description | Guidelines for creating Max/MSP patches with MaxMCP. Use this skill when:
- Creating new Max patches via MaxMCP
- Adding Max objects with add_max_object
- Connecting objects with connect_max_objects or managing patchcords
- Planning patch layout and organization
- Building audio/MIDI processing patches
- Designing presentation mode UI (panels, colors, object visibility)
- Setting varnames or naming conventions for Max objects
- Asking about MaxMCP patch creation best practices
|
| user-invocable | true |
MaxMCP Patch Creation Guidelines
This skill provides comprehensive guidelines for creating well-organized, maintainable Max/MSP patches using MaxMCP's MCP tools.
Pre-Creation Checklist
Before creating a patch, verify:
- MaxMCP Connection: Ensure maxmcp agent is running and connected
- Target Patch: Use
get_frontmost_patch or list_active_patches to identify the target
- Existing Objects: Use
get_objects_in_patch to understand current state
- Layout Planning: Plan object positions before creation
Core Principles
1. Signal Flow Direction
Always follow the top-to-bottom, left-to-right signal flow convention:
flowchart TD
src["Input Sources<br/>(Top of patch)"] --> proc["Processing<br/>(Middle)"]
proc --> out["Output / Display<br/>(Bottom of patch)"]
2. Object Placement Strategy
Use get_avoid_rect_position to find safe positions that don't overlap existing objects:
const result = await mcp.get_avoid_rect_position({
patch_id: "...",
near_x: 100,
near_y: 200,
width: 80,
height: 20
});
3. Grid-Based Layout
Align objects to a consistent grid:
- Horizontal spacing: 100-120 pixels between columns
- Vertical spacing: 40-60 pixels between rows
- Section gaps: 80-100 pixels between logical sections
æŽåã»åé
ã»nub åããã¯æèšç®ããªãã座æšãæç®ããã®ã§ã¯ãªããå°çšããŒã«ã«ä»»ããïŒããããèªã¿åãå°çšã§æšå¥š patching_rect ãè¿ãã ããªã®ã§ãset_object_attribute ã§é©çšããïŒ:
| ããããããš | 䜿ãããŒã« |
|---|
| è€æ°ãªããžã§ã¯ãã®ç«¯ïŒäžå¿ãæãããééãåçåãã | align_objectsïŒalign_left/align_hcenter/distribute_v ãªã©ïŒ |
| ãããã³ãŒããåçŽäžçŽç·ã«ãªãããçæ¹ã®å¹
ã»äœçœ®ã決ãã | suggest_alignmentïŒanchor ã® nub ã« target ã® nub ãåãããïŒ |
| inlet/outlet ã®å®ãã¯ã»ã«äœçœ®ãç¥ã | get_io_positionïŒMax ã®çééã«ãŒã«ã§ nub äžå¿ãç®åºïŒ |
ããã㯠Max ã® nub é
眮ïŒç«¯ã€ã³ã»ããã»çééïŒããµãŒãåŽã®å®å¯žã§èšç®ãããããæèšç®ããéãæ£ç¢ºã詳现㯠organize-patch ã¹ãã«åç
§ã
4. Section Organization
Group related objects into functional sections:
- Input section: Top area for external inputs (adc~, midiin, etc.)
- Processing section: Middle area for signal processing
- Control section: Parameters, UI elements
- Output section: Bottom area for outputs (dac~, midiout, etc.)
Patching Workflow
ãããã¯ã»ã¯ã·ã§ã³åäœã§æ®µéçã«æ§ç¯ãããå
šäœãäžåºŠã«äœããã5ãã§ãŒãºã§é²ããã
Phase 0: èšèšïŒã¹ãã«ã®ã«ãŒã«ãèšèšå¶çŽãšããŠé©çšïŒ
å®è£
ãéå§ããåã«ãã¹ãã«ã®ã«ãŒã«ããã©ã³ã®èšèšå¶çŽãšããŠçµã¿èŸŒãã
â Phase 0 ãé£ã°ããå Žå: èšè𿮵éã§ã«ãŒã«ãé©çšããªããšãå®è£
åŸã« trigger ã® outlet é åºã®ééããUI ãªããžã§ã¯ãã®é
眮ãã¹ïŒpatching_rect ã§ UI åªå
é
眮 â é·è·é¢ã»äžåãæ¥ç¶ã®å€§éçºçïŒã_parameter_order ã®äŸåãã§ãŒã³äžæŽåãªã©ãçºèŠãããããå
šäœã®åæ§ç¯ãå¿
èŠã«ãªãã
-
ä¿¡å·ãããŒèšèš: å
šã»ã¯ã·ã§ã³ã®äŸåé¢ä¿ãæããäžâäžãããŒã確ä¿
- patching_rect ã¯æ¥ç¶æ§é åªå
ã§é
眮ããïŒPresentation Layout ã® Dual-Mode Design åç
§ïŒ
- UI ãªããžã§ã¯ãã¯åŠçãã§ãŒã³ã®è¿ãã«é
眮ïŒpresentation_rect ã§èŠãç®ã¯å¥éå¶åŸ¡ïŒ
-
æ¥ç¶èšèš: trigger ã® outlet é åºãšäžæµã® hot/cold inlet ã®æŽåæ§ãèšèš
- Execution Model ã® Connection Design Flow ã«åŸã
pack / pak ã«æ¥ç¶ãã trigger ã¯ãcold inlet â å³ outletãhot inlet â å·Š outlet
-
ãã©ã¡ãŒã¿åŸ©å
é åºèšèš: _parameter_order ã埩å
äŸåãã§ãŒã³å
šäœã§èšèš
- cold inlet ã«æ¥ç¶ãããã©ã¡ãŒã¿ â å°ãã orderïŒå
ã«åŸ©å
ïŒ
- hot inlet ã«æ¥ç¶ãããã©ã¡ãŒã¿ â 倧ãã orderïŒåŸã«åŸ©å
â çºç«ïŒ
_parameter_range ãèšå®ãããã§ãŒã³ â ç¯å²å
ã§å€ã埩å
ãããã©ã¡ãŒã¿ããå
-
ã¢ããªãã¥ãŒãèšç»: åãªããžã§ã¯ãã«å¿
èŠãªã¢ããªãã¥ãŒãã MCP Notes ã®ãã³ãã¬ãŒãã§äºåã«åæ
-
é¢é£ã¹ãã«ã®åç
§: äœæ¥å
容ã«å¿ããŠä»¥äžã®ã¹ãã«ãããŒãããèšèšå¶çŽãšããŠé©çšãã
| ã¹ãã« | æ¡ä»¶ | åç
§ãã¹ãã«ãŒã« |
|---|
m4l-techniques | M4L ããã€ã¹éçºæïŒåžžæïŒ | live.observer ãã¿ãŒã³ãpattr æ°žç¶åãnamespace ã«ãŒã«ã_parameter_order èšèš |
max-techniques | poly~, pattr, signal åŠçç | pattr range å¶éãcascading init |
max-resources | ãªããžã§ã¯ãã® outlet/inlet æ§é ãäžæãªæ | ãªãã¡ã¬ã³ã¹ããŒãžã§ç¢ºèªããŠããèšèš |
Why Phase 0 ãå¿
èŠ: ãã©ã³ãæ¿èªãããåŸã«ã«ãŒã«ãé©çšããŠããèšèšèªäœãééã£ãŠããã°å€§éã®ææ»ããçºçããã
Phase 1: ã»ã¯ã·ã§ã³éçºïŒåã»ã¯ã·ã§ã³ã®ãµã€ãºç¢ºå®ïŒ
åææ¡ä»¶: Phase 0 ã®èšèšãå®äºããŠããããšïŒä¿¡å·ãããŒèšèšãæ¥ç¶èšèšã_parameter_order èšèšãã¢ããªãã¥ãŒãèšç»ïŒã
åã»ã¯ã·ã§ã³ãç¬ç«ããŠå®æããããã»ã¯ã·ã§ã³éã®æ¥ç¶ã¯ãã®ãã§ãŒãºã§ã¯è¡ããªãã
â ã»ã¯ã·ã§ã³åäœãé£ã°ããŠå
šäœãäžæ¬æ§ç¯ããå Žå: Phase 8 æ€èšŒïŒéè€ã»äº€å·®ã»äžåãæ€åºïŒã§å
šãªããžã§ã¯ãã»å
šãããã³ãŒãã察象ã«ç¢ºèªãå¿
èŠã«ãªããã»ã¯ã·ã§ã³åäœã§ããã°æ€èšŒå¯Ÿè±¡ã¯ã»ã¯ã·ã§ã³å
ã®ãªããžã§ã¯ãã®ã¿ã§æžãããäžæ¬æ§ç¯ã§ã¯å€æŽã®ãã³ã«ãããå
šäœã®å€§éã®ãªããžã§ã¯ããå確èªããããšã«ãªããããŒã¯ã³æ¶è²»ãšäœæ¥éãççºããã
- ã»ã¯ã·ã§ã³ãèšç»: ãããå
šäœãæ©èœã»ã¯ã·ã§ã³ïŒInput, Processing, Output çïŒã«åå²
- 1ã»ã¯ã·ã§ã³ãã€æ§ç¯:
- ðŽ ãã®ã»ã¯ã·ã§ã³ã§äœ¿ã LOM/ç¹æ®ãªããžã§ã¯ãã® reference ã
Read ã§å
ã«ååŸïŒm4l-techniques ã® MUST åç
§ã«ãŒã«ïŒãäŒè©±å±¥æŽãé·ããŠããåã»ã¯ã·ã§ã³éå§æã«å¿
ãå Read ãã
- ãªããžã§ã¯ã远å ïŒOperation Checklists ã®ãadd_max_object ã®åŸããå®è¡ïŒ
- ã»ã¯ã·ã§ã³å
æ¥ç¶ïŒOperation Checklists ã®ãconnect_max_objects ã®åããå®è¡ïŒ
organize-patchïŒã»ã¯ã·ã§ã³å
ã¢ãŒãïŒã§ã¬ã€ã¢ãŠãæŽç
- Phase 8 æ€èšŒãå®è¡ïŒ
validate_layout ã§äžåãæ¥ç¶ã»ãªããžã§ã¯ãéè€ã»ãããã³ãŒãäº€å·®ãæ©æ¢°å€å® â error ãè§£æ¶ïŒ
- ã»ã¯ã·ã§ã³ã®ãµã€ãºïŒå¹
ã»é«ãïŒã確å®ãã
- 次ã®ã»ã¯ã·ã§ã³ãž: çŸã»ã¯ã·ã§ã³ã確å®ããŠããæ¬¡ã«çæ
ãã®ãã§ãŒãºå®äºæç¹ã§ãåã»ã¯ã·ã§ã³ã¯å
éšã¬ã€ã¢ãŠãã宿ãããµã€ãºãåºå®ãããã
Phase 2: ã»ã¯ã·ã§ã³é
眮ïŒã»ã¯ã·ã§ã³éã®äœçœ®æé©åïŒ
åææ¡ä»¶:
- â¡ Phase 1 ã§å
šã»ã¯ã·ã§ã³ã®å
éšã¬ã€ã¢ãŠãã確å®ããŠãããïŒ
- â¡ åã»ã¯ã·ã§ã³ã§
validate_layout ãå®è¡ããerror ãè§£æ¶ãããïŒæ®ã upward warning ã¯æŽåœ¢ã»èšé²æžã¿ã®æå³çåºéã®ã¿ïŒïŒ
â æªå®äºãªã Phase 2 ã«é²ãŸãªã
â Phase 1 æªå®äºã§ Phase 2 ã«é²ãã å Žå: ã»ã¯ã·ã§ã³åäœã§ãŸãšããŠããã°ã°ã«ãŒããšããŠç§»åããã ãã§æžãããã»ã¯ã·ã§ã³ãæªç¢ºå®ã ãšåã
ã®ãªããžã§ã¯ãã®åº§æšã1ã€ãã€èšç®ã»ç§»åããããšã«ãªããã»ã¯ã·ã§ã³ã¯ç°¡æãªã°ã«ãŒãåã§ããããããé£ã°ããšã¬ã€ã¢ãŠãäœæ¥ã®è€éããççºããã
確å®ããåã»ã¯ã·ã§ã³ããã»ã¯ã·ã§ã³éæ¥ç¶ãèæ
®ããŠåççãªäœçœ®ã«é
眮ããã
- æ¥ç¶èšç»: ã©ã®ã»ã¯ã·ã§ã³ã®ã©ã®ãªããžã§ã¯ããä»ã»ã¯ã·ã§ã³ãšæ¥ç¶ãããææ¡
- é
眮ãã¿ãŒã³æ±ºå®: ã»ã¯ã·ã§ã³éã®äŸåé¢ä¿ã«å¿ããŠçŽåã»äžŠåãéžæ
- ã»ã¯ã·ã§ã³åäœã§ç§»å: æ¥ç¶å
ãšæ¥ç¶å
ãè¿ããªããããã»ã¯ã·ã§ã³ããšãããã¯ç§»å
- ã»ã¯ã·ã§ã³å
ã®ãªããžã§ã¯ãéã®çžå¯Ÿäœçœ®ã¯å€ããªã
- ã»ã¯ã·ã§ã³éã®ã®ã£ãããç¶æïŒçŽå: 瞊 80-100pxã䞊å: 暪 80-100pxïŒ
- æ¥ç¶çµè·¯ã®äºæž¬: patchcord ãåççãªçµè·¯ãåããäœçœ®é¢ä¿ã«ãªã£ãŠããã確èª
é
眮ãã¿ãŒã³:
çŽåé
眮(é æ¬¡äŸå):
flowchart TD
a["Section A"] -- "+80-100px gap" --> b["Section B"]
b -- "+80-100px gap" --> c["Section C"]
䞊åé
眮(åæµåäŸå):
flowchart TD
a["Section A"] --> c["Section C"]
b["Section B"] --> c
- çŽå: A â B â C ã®ããã«é 次äŸåããå Žåã瞊ã«é
眮
- 䞊å: A ãš B ãç¬ç«ããŠåäœããC ãäž¡æ¹ã®çµæãå¿
èŠãšããå ŽåãA ãš B ãæšªã«äžŠã¹ãŠé
眮ããC ãäžã«é
眮
Phase 3: ã»ã¯ã·ã§ã³éæ¥ç¶
åææ¡ä»¶:
- â¡ Phase 2 ã§ã»ã¯ã·ã§ã³é
眮ã確å®ããŠãããïŒ
- â¡ æ¥ç¶çµè·¯ã®äºæž¬ã§ãpatchcord ãåççãªçµè·¯ãåããäœçœ®é¢ä¿ã«ãªã£ãŠãããïŒ
â æªå®äºãªã Phase 3 ã«é²ãŸãªã
â Phase 2 æªå®äºã§ Phase 3 ã«é²ãã å Žå: ã»ã¯ã·ã§ã³äœçœ®ã確å®ããŠããªãç¶æ
ã§ patchcord ãæ¥ç¶ãããšãã«ãªã¹ãªãããã³ãŒãã倧éçç£ãããããã®ç¶æ
ã§ãããã³ãŒãã®æŽçã詊ã¿ãŠããããè€éãªã¹ãã²ããã£ãçãã ãã§åæããªãã
ã»ã¯ã·ã§ã³é
眮ã確å®ããåŸãã»ã¯ã·ã§ã³éã® patchcord ãæ¥ç¶ããã
- ã»ã¯ã·ã§ã³éæ¥ç¶ãå®è¡:
connect_max_objects ã§ã»ã¯ã·ã§ã³éã® patchcord ã远å
- midpoints èšå®: å¿
èŠã«å¿ããŠ
set_patchline_midpoints ã§çµè·¯ãæé©å
- æçµæ€èšŒ:
validate_layoutïŒPhase 8 æ€èšŒïŒã§éè€ã»äº€å·®ã»äžåããæ©æ¢°å€å®ããerror ãè§£æ¶
Phase 4: 宿æ€èšŒ
åææ¡ä»¶:
- â¡ Phase 3 ã§ã»ã¯ã·ã§ã³éæ¥ç¶ãå®äºããŠãããïŒ
- â¡ Phase 3 ã®æçµæ€èšŒã§
validate_layout ãå®è¡ããerror ãè§£æ¶ãããïŒ
â æªå®äºãªã Phase 4 ã«é²ãŸãªã
â Phase 4 ãé£ã°ããå Žå: çææã®ãã§ãã¯ãªã¹ãïŒadd_max_object ã®åŸïŒã¯åã
ã®ãªããžã§ã¯ãã察象ãšããããããããå
šäœã§ã®äžè²«æ§ïŒãã¢éã®èšå®æŽåã_parameter_order ã®äŸåãã§ãŒã³æŽåïŒã¯æ€åºã§ããªãããããã®åé¡ã¯ãŠãŒã¶ãŒãå®éã«ä¿åã»åŸ©å
ã詊ããŸã§çºèŠãããåå ã®ç¹å®ã極ããŠå°é£ã«ãªãã
ãããå
šäœã察象ãšããäžæ¬æ€èšŒãè¡ãã
4-1. ãã©ã¡ãŒã¿èšå®ã®äžæ¬æ€èšŒ
å
š live.* UI ãªããžã§ã¯ããšå
š pattr ã®èšå®ã get_object_attribute ã§èªã¿æ»ãã以äžã確èª:
live. UI ãªããžã§ã¯ã*:
_parameter_initial_enable ã 1 ã
_parameter_initial ãèšå®ãããŠããã
_parameter_type ãš _parameter_unitstyle ã®æŽåæ§ïŒFloat(0) â Float(1)ïŒ
pattr:
parameter_enable 1, _parameter_invisible 1, _parameter_modmode 0, parameter_mappable 0 ãèšå®ãããŠããã
_parameter_initial_enable ã 1 ã
_parameter_range ãããŒã¿åã«å¿ããé©åãªç¯å²ã
4-2. ãã¢/ã°ã«ãŒãæŽåæ§ãã§ãã¯
察ã«ãªããªããžã§ã¯ããåäžã°ã«ãŒãã®ãªããžã§ã¯ããåãèšå®ãã¿ãŒã³ãæã€ã確èª:
- min/max ãã¢:
_parameter_type, _parameter_unitstyle, _parameter_initial_enable, _parameter_range ãäžèŽããã
- pattr ã°ã«ãŒã:
parameter_enable, _parameter_invisible, _parameter_modmode, parameter_mappable ãåããã¿ãŒã³ã
- èšå®ã®éå¯Ÿç§°ãæ€åºããå Žå: æå³çãªå·®ç°ã§ãªãéããèšå®æŒããšããŠä¿®æ£
4-3. _parameter_order ã®èªã¿æ»ãæ€èšŒ
å
šãã©ã¡ãŒã¿ã® _parameter_order ã get_object_attribute ã§èªã¿æ»ãã以äžãæ€èšŒ:
- order ã®é£çªç¢ºèª: æãã»éè€ããªãã
- äŸåãã§ãŒã³ãšã®ç
§å:
- cold inlet ã«æ¥ç¶ãããã©ã¡ãŒã¿ããåããªããžã§ã¯ãã® hot inlet ã«æ¥ç¶ãããã©ã¡ãŒã¿ããå°ãã order ãæã€ã
_parameter_range ãèšå®ãããã§ãŒã³ïŒpattr â pack â prepend â UIïŒããç¯å²å
ã§å€ã埩å
ãã UI ãªããžã§ã¯ãããå
ã
scale / pak / pack çã®è€æ° inlet ãªããžã§ã¯ãã§ãhot inlet (0) ã«æ¥ç¶ãããã©ã¡ãŒã¿ãæåŸã«åŸ©å
ãããã
- åé¡ãæ€åºããå Žå: order ãä¿®æ£ããå床èªã¿æ»ããŠç¢ºèª
4-4. ã¬ã€ã¢ãŠãæçµæ€èšŒïŒPhase 8ïŒ
ãããå
šäœã察象㫠validate_layout({patch_id}) ãå®è¡ããerrorïŒäžåãæ¥ç¶ã»ãªããžã§ã¯ãéè€ã»ãããã³ãŒããšãªããžã§ã¯ãã®äº€å·®ïŒãå
šãŠè§£æ¶ãããæ®ã upward warning 㯠U åã«æŽåœ¢æžã¿ïŒ comment ã§èšé²ãããæå³çåºéã®ã¿èš±å®¹ããïŒPhase 8 æ€èšŒ ã®å®äºæ¡ä»¶ã«åŸãïŒãpresentation ã䜿ãããã㯠mode: "presentation" ã§ãå®è¡ããã
ïŒPhase 1 ã®åã»ã¯ã·ã§ã³ã§å®æœæžã¿ã®æ€èšŒãããããå
šäœã§å床å®è¡ïŒ
Phase 5: å®ä¿¡å·æ€èšŒïŒEmpirical VerificationïŒ
åææ¡ä»¶:
- â¡ Phase 4 宿æ€èšŒå®äº
- â¡ å
šãã©ã¡ãŒã¿ã»æ¥ç¶ã®æ§é çæ€èšŒå®äº
â æªå®äºãªã Phase 5 ã«é²ãŸãªã
â Phase 5 ãé£ã°ããå Žå: æ§é çã«æ£ãããŠã åæåããªã¬æŒã ã å¿çãã©ãŒãããæšæž¬ãã¹ ã§åäœããªãããããã宿ããšããŠå ±åããããå
žåäŸ:
live.path ã live.observer ã«çŽçµããã load æã«çºç«ãããobserver ãæ°žä¹
ã«æ²é»
live.observer ã®åºå圢åŒãæšæž¬ã㊠route èšèšããããå®åœ¢åŒãç°ãªãå
šåå²ã«è©²åœããé»ã£ãŠæ¶ãã
pattr (autorestore=0) ã§åæå€ãå
¥ãããäŸåãã UI ãåæè¡šç€ºã§ããªã
ãããã¯æ§é æ€æ»ã§ã¯æ€åºäžå¯èœã§ããŠãŒã¶ãŒã Live ã«ããŒãããŠåããŠçºèŠãããåå ç¹å®ã«èšå€§ãªæéãèŠããã
5-1. åæåãã§ãŒã³ã®ååšç¢ºèª
get_objects_in_patch ã§ä»¥äžã®ãªããžã§ã¯ãã®ååšã確èªããåã
ã«èµ·åçµè·¯ãããããã§ãã¯:
| ãªããžã§ã¯ã | èµ·åçµè·¯ã«å¿
é ãªãã® |
|---|
live.path | loadbang / live.thisdevice / sel outlet bang ã®ãããã |
live.observer | inlet 1 ãžã® id äŸçµŠ + inlet 0 ãžã® property èšå®ã®äž¡æ¹ |
live.thisdevice | ïŒèªèº«ãèµ·ç¹ãªã®ã§äžèŠããã ãäžæµãã§ãŒã³ãç¹ãã£ãŠããã確èªïŒ |
pattr (autorestore=0) | æç€ºçãªåŸ©å
ãã³ |
loadmess / loadbang | åºåå
ãåŠçéå§ã®èµ·ç¹ã«ãªã£ãŠããã |
äžè¶³ããŠããã° Phase 0 èšèšã«æ»ããèµ·åçµè·¯ã远å ããŠãã Phase 5 ãåå®è¡ã
5-2. ãããŒãã«ããåºå圢åŒå®èšŒç¢ºèª
ããŒã¿åœ¢åŒããreference ã«æèšãããŠããªãããŸãã¯ãæšæž¬ã«åºã¥ããç®æã«ã¯å¿
ã print ãããŒããäžææ¿å
¥ããã
æ¿å
¥å¯Ÿè±¡:
live.observer outlet 0 çŽåŸïŒproperty å€ã®å®ãã©ãŒããã確èªïŒ
live.object outlet 0 çŽåŸïŒget å¿çã®å®ãã©ãŒããã確èªïŒ
- è€éãª
route ã®ååŸïŒåå²ãæå³éããïŒ
zl.ecils / unpack çã® list æäœåŸ
æ€èšŒæé :
add_max_object ã§ print <varname>_probe ãæ¿å
¥ãã察象 outlet ãšæ¥ç¶
- ãŠãŒã¶ãŒã«å®æ©ããªã¬ãäŸé ŒïŒãLearn ãã¿ã³ãæŒããŠãã ããããLive ã®ãã©ã¡ãŒã¿ãåãããŠãã ãããçïŒ
get_console_log ã§å®åºåãååŸ
- ååŸåœ¢åŒãäžæµã®
route / unpack èšèšãšäžèŽãããç
§å
- äžäžèŽãªã Phase 0 èšèšãä¿®æ£ããŠåæ§ç¯
- æ€èšŒå®äºåŸããããŒããåé€ïŒãŸãã¯
comment ã«ç¢ºèªæžã¿åœ¢åŒãã¡ã¢ïŒ
5-3. æ€èšŒçµæã®ããã¥ã¡ã³ãå
確èªããåºå圢åŒã»ããªã¬ä»æ§ã comment ãªããžã§ã¯ãã§ãããå
ã«èšé²:
// observer (selected_parameter) outputs: "id N" (id 0 = no selection, verified 2026-05-08)
// route id passes N. sel 0 filters zero.
// live.path needs bang from t_capture to refire on each Learn enable.
ããã«ããæ¬¡åã®äœæ¥æïŒãŸãã¯å¥ã® Claude ã»ãã·ã§ã³ïŒã§åæšæž¬ãäžèŠã«ãªãã
Phase 5 å®äºåºæº
Why This Order Matters
- Phase 0 ã§èšèšå¶çŽãçµã¿èŸŒããããå®è£
段éã§ã®ææ»ããæå°åããã
- Phase 1 ã§ã»ã¯ã·ã§ã³ãµã€ãºã確å®ãããããPhase 2 ã§æ£ç¢ºãªé
眮èšç®ãã§ãã
- Phase 2 ã§ã»ã¯ã·ã§ã³äœçœ®ã確å®ãããããPhase 3 ã§ patchcord çµè·¯ãå®å®ãã
- Phase 4 ã§ãããå
šäœã®æ§é çäžè²«æ§ãæ€èšŒãããããèšå®æŒããé åºãããåºè·åã«æ€åºããã
- Phase 5 ã§ããŒã¿ãå®éã«æµããããšãå®èšŒãããããåæåæŒããåœ¢åŒæšæž¬ãã¹ã Live ããŒãåã«æ€åºããã
- åŸãã§ãŒãºã§ã®ææ»ããæå°åããã
Operation Checklists
å MCP æäœã®ååŸã«å®è¡ãã¹ã確èªäºé
ãã¹ãã«ã®ååãæäœã¬ãã«ã§é©çšããããã®ãã§ãã¯ãªã¹ãã
add_max_object ã®åïŒäºåã«ãŒã«ïŒ
ðŽ obj_type ã«ã¯çç¥åœ¢ãæž¡ãïŒObject Text Conventions Section 1ïŒ:
| éå | æ£è§£ |
|---|
obj_type="trigger" | obj_type="t" |
obj_type="select" | obj_type="sel" |
obj_type="bangbang" | obj_type="b" |
obj_type="int" | obj_type="i" |
obj_type="float" | obj_type="f" |
obj_type="send" | obj_type="s" |
obj_type="receive" | obj_type="r" |
ðŽ obj_type="message" ã¯åºå®å€ã§äœ¿ããªã:
åºå®å€ã¯ obj_type="t" / prepend / zl.reg ã®ããããã䜿ããå€å®ã¯ Execution Model & Messaging åé ã® Decision Tree ã«åŸãã
ðŽ Float ã³ã³ããã¹ãã§ã¯åŒæ°ã Float ãªãã©ã«ã«:
pak, pack, scale, +, -, *, /, pow, expr, change çã§ Float ãæ±ãå ŽåãåŒæ° [0., 0.] ã®ããã« . ãå¿
ãä»ãã
- éåäŸ:
obj_type="pak", arguments=[0, 0] â text ã "pak 0 0" ã«ãªã Int ã¢ãŒãå
add_max_object ã®åŸ
â ãã®ãã§ãã¯ãªã¹ããé£ã°ããå Žå: åŸå·¥çšã§ã®ä¿®æ£ä»¥åã«ãèšå®ãå¿ãã«ãããã°ã倧éçºçããããã©ã¡ãŒã¿åãããã©ã«ãïŒ"live.numbox[1]"ïŒã®ãŸãŸãpresentation ã 1 ã®ãŸãŸã_parameter_initial_enable ã 0 ã®ãŸãŸçãåå ç¹å®ã«èšå€§ãªæéãšåŽåãè²»ããã®ã¯ Claude èªèº«ãçæçŽåŸã«ç¢ºèªããã°æ°ç§ã§æžãäœæ¥ããåŸããæ¢ããšäœåããããã
-
get_objects_in_patch ã§ãªããžã§ã¯ãã®ããã¹ãã確èªãã以äžãæ©æ¢°çã«æ€èšŒ:
@ æ§æã®ã¢ããªãã¥ãŒããåæ ãããŠããã
- text ã«
trigger / select / bangbang / bangbang / åç¬ã® int / åç¬ã® float / send / receive ãå«ãŸããŠããªãã â å«ãŸããŠããã° replace_object_text ã§çç¥åœ¢ã«ä¿®æ£ïŒäŸ: trigger b b b b l â t b b b b lïŒ
- maxclass ã
message ã®ãªããžã§ã¯ããæ°èŠè¿œå ãããŠããªãã â 远å ãããŠããå Žåãåºå®å€ãåçæ§ç¯ãå€å®:
- åºå®å€ã®å Žå: Execution Model & Messaging åé ã® Decision Tree ã«åŸã£ãŠ
t / prepend / zl.reg ã«çœ®æïŒremove_max_object + add_max_object ã§åæ§ç¯ïŒ
- åçæ§ç¯ïŒãŠãŒã¶ãŒå
¥åããã®ãŸãŸæµãçïŒã®å Žå: 容èªãããããã®çç±ã
comment ã§æ®ã
- Float ã³ã³ããã¹ãã®
pak 0 0 / pack 0 0 / scale 0 1 ... ã®ãã㪠Int ã¢ãŒãåŒæ°ããªãã â ããã° replace_object_text ã§ pak 0. 0. çã«ä¿®æ£
- pattr ã®å Žåã第äžåŒæ°ã§ varname ã匷å¶äžæžããããŠããªãã â
pattr <name> ã§çæãããš varname ã <name> ã«ãªããåŸç¶ã® set_object_attribute ã¯å® varname ã䜿ãå¿
èŠããã
-
ããžãã¯çšãªããžã§ã¯ãïŒtrigger, prepend, route, zl, gate, live.object, live.path, pattr, pack, scale çïŒã¯ set_object_attribute ã§ presentation 0 ãèšå®
-
live.* UI ãªããžã§ã¯ãã®å Žå:
_parameter_longname ã varname ã«åãããŠèšå®
_parameter_initial_enable 1 ãèšå®
_parameter_initial ãèšå®
get_object_attribute ã§ _parameter_type, _parameter_unitstyle, _parameter_range ãæå³éãã確èª
-
live.text ã®å Žå: text / texton ã©ãã«ãèšå®
-
live.comment ã®å Žå: replace_object_text ã§ããã¹ããèšå®
-
pattr ã®å Žå:
parameter_enable 1, _parameter_invisible 1, _parameter_modmode 0, parameter_mappable 0 ãèšå®
_parameter_range ãããŒã¿ã«å¿ããç¯å²ã«èšå®ïŒFloat: [-100000, 100000] çïŒ
_parameter_type ãããŒã¿åã«å¿ããŠèšå®ïŒFloat: 0, blob: 3 çïŒ
_parameter_initial_enable 1 ãèšå®
- pattr ã¯ç¬¬äžåŒæ°ã§ varname ã匷å¶äžæžãããã:
add_max_object ã®æ»ãå€ã® varname ã確èªããŠããåŸç¶æäœã宿œïŒäŸ: pattr param_min ãäœããš varname=param_min ã«ãªãããªã¯ãšã¹ããã varname ã¯ç Žæ£ãããïŒ
-
LOM ç³»ãªããžã§ã¯ãïŒlive.path / live.object / live.observer / live.thisdeviceïŒã®å Žå:
- ðŽ m4l-techniques ã® MUST åç
§ã«ãŒã« ã«åŸããé¢é£ reference ã Read ã§å
ã«ååŸ ããŠããæ¥ç¶èšèšã«å
¥ã
live.path / live.observer ã远å ããå Žåãèµ·åããªã¬çµè·¯ïŒloadbang / live.thisdevice / sel bang çïŒã Phase 0 èšèšã«å«ãŸããŠãããå³åº§ã«ç¢ºèªããªããã° Phase 0 ã«æ»ã
- åºåãã©ãŒãããã reference ã«æèšãããŠããªã property ãæ±ãå Žåã
print <varname>_probe ãåæã«è¿œå ããPhase 5 ã§å®æ©ç¢ºèªããæšãã¡ã¢
- èªããã€ã¹ã®ãã©ã¡ãŒã¿æäœã䌎ãå ŽåïŒLearn ç³»ïŒã
live.thisdevice + canonical_parent ãã£ã«ã¿èšç»ãããã Phase 0 èšèšãšç
§å
connect_max_objects ã®å
â ãã®ãã§ãã¯ãªã¹ããé£ã°ããå Žå: outlet/inlet ã®åœ¹å²ãæšæž¬ã§æ¥ç¶ããåäœããªãæ¥ç¶ãäœæããããŠãŒã¶ãŒã«ææãããŠåæâãªãã¡ã¬ã³ã¹ç¢ºèªâ忥ç¶ã®ãµã€ã¯ã«ãçºçãã1åã®ç¢ºèªã§æžãäœæ¥ã3å以äžã®ããåãã«ãªããtrigger ã® outlet é åºãééãããšãhot/cold ã®å®è¡é åºãé転ããå€ãæ ŒçŽãããåã« pack ãçºç«ããçã®ããžãã¯äžå
·åãçºçããã
get_object_io_info ã§æ¥ç¶å
ã® outlet æ°ãšæ¥ç¶å
ã® inlet æ°ã確èª
- æ¥ç¶å
ã® inlet ã hot (å·Š) ã cold (ãã®ä») ãã確èªïŒExecution Model åç
§ïŒ
trigger ããæ¥ç¶ããå Žå:
- å³âå·Šã®å®è¡é åºã確èª
- cold inlet ã«æ¥ç¶ããå€ãå³åŽ outlet ã«é
眮ïŒå
ã«çºç« â æ ŒçŽïŒ
- hot inlet ã«æ¥ç¶ããå€ãå·ŠåŽ outlet ã«é
çœ®ïŒæåŸã«çºç« â åŠçéå§ïŒ
pattr ããæ¥ç¶ããå Žå:
- outlet 0 (å·Š) = å€åºåãoutlet 1 (äžå€®) = bindtoïŒUIãã€ã³ãïŒãoutlet 2 (å³) = dumpout
- å€ãäžæµã«éãå Žå㯠outlet 0ãUI ã«ãã€ã³ãããå Žå㯠outlet 1
- outlet/inlet ã®åœ¹å²ãäžæãªãªããžã§ã¯ãã¯ãæšæž¬ã§æ¥ç¶ãã
max-resources ã¹ãã«ã§ãªãã¡ã¬ã³ã¹ãå¿
ã確èªãããæšæž¬ã«ããæ¥ç¶ã¯ææ»ãã®æå€§ã®åå ãšãªã
ã¬ã€ã¢ãŠã倿Žã®åŸïŒPhase 8 æ€èšŒïŒ
â ãã®æ€èšŒãé£ã°ããïŒæèšç®ã§ä»£æ¿ããå Žå: äžåãæ¥ç¶ããªããžã§ã¯ãéè€ããããã³ãŒããšãªããžã§ã¯ãã®äº€å·®ããŠãŒã¶ãŒã®ç®èŠç¢ºèªãŸã§æ€åºãããªããããã« get_objects_in_patch / get_patchlines ã®åº§æšãèªãã§ç©åœ¢äº€å·®ãæç®ããã®ã¯çŠæ¢ââæèšç®ã¯å®ã¬ã³ããªã³ã°å¯žæ³ãåæ ã§ãã誀å€å®ãããå®äŸ: comment ã®å®é«ãã¯æå®ãã 20px ã§ã¯ãªãçŽ 33pxïŒãã©ã³ãåã ãèãé«ãïŒã«ãªããäžç«¯ãæ³å®å€ãŸã§äŒžã³ãŠé£æ¥ãªããžã§ã¯ããšæ° px éãªãããé«ãïŒæå®å€ããåæã«ããæç®ã§ã¯ãã®çš®ã®éãªããæ§é çã«èŠéããããã㯠validate_layout ããµãŒãåŽã®å®å¯žã§æ©æ¢°å€å®ããçš®é¡ã®åé¡ã§ããã
äžé£ã®ã¬ã€ã¢ãŠãæäœãå®äºããåŸã«å¿
ã validate_layout ãåŒã¶ãããããã®ãããžã§ã¯ãã®ã¬ã€ã¢ãŠãæ€èšŒã®å¯äžã®æ£èŠææ®µã§ãããPhase 8 æ€èšŒãã®ãã®ã§ããã
validate_layout({patch_id}) ãåŒã¶ïŒã»ã¯ã·ã§ã³å
æ€èšŒã¯ scope_varnames ã«å¯Ÿè±¡ varname ãæž¡ããŠç¯å²éå®ïŒ
findings ã type ãš severity ã«å¿ããŠä¿®æ£ãã:
upwardïŒäžåãæ¥ç¶ïŒ: severity: errorïŒããããã€ã³ãç¡ãã®çŽç·äžåãïŒã¯äºæ
ãšã¿ãªãããªããžã§ã¯ãç§»åã§è§£æ¶ããã U åããããã€ã³ãã§å€åŽã¬ãŒã³ãžéãããseverity: warningïŒããããã€ã³ãä»ãïŒã¯è¿åæå³ããã®åºéãªã®ã§ãæå³éãã確èªãã
overlapïŒãªããžã§ã¯ãéè€ïŒ: ãããããç§»åïŒãªãµã€ãºããŠåé¢
cord_objectïŒãããã³ãŒãããªããžã§ã¯ããæšªåãïŒ: 暪åããããªããžã§ã¯ããç§»åïŒåªå
ïŒãŸãã¯ããããã€ã³ãã§è¿å
cord_cordïŒãããã³ãŒãå士ã®éè€ïŒ: äžæ¹ã®ããããã€ã³ãã 5px 以äžããã
validate_layout ãåå®è¡ããerror ãå
šãŠè§£æ¶ãããŸã§ã«ãŒããããpresentation ã䜿ãããã㯠validate_layout({patch_id, mode: "presentation"}) ãå®è¡ããïŒpresentation_rect ã®éè€ã®ã¿å€å®ããããã³ãŒãé¢é£ã¯ã¹ãããïŒ
å®äºæ¡ä»¶: clean: true ãç®æãããã ãäžèšã®ãæå³çãªäžåãæ¥ç¶ãã¯äŸå€ã§ãæŽåœ¢ã»èšé²æžã¿ã§ããã°æ®ã£ãŠããã
æå³çãªäžåãæ¥ç¶ïŒãã£ãŒãããã¯ã«ãŒãçïŒ
ç®çã¯ãäžåãããŒãã«ãããããšã§ã¯ãªããäºæ
ã®äžåããç¡ãããæå³çãªäžåãã¯ãããšåããåœ¢ã«æŽãããããšããã£ãŒãããã¯ã«ãŒãã®ããã«æ§é äžã©ãããŠãäžåãã«ãªãæ¥ç¶ã¯ã以äžã®ããã«æ±ã:
- U åããããã€ã³ãïŒ4 ç¹ïŒã§å€åŽã¬ãŒã³ãéããçŽç·ã®äºæ
äžåãïŒ
errorïŒãšèŠèŠçã«åºå¥ã§ããvalidate_layout äžã warning ã«èœã¡ããçµè·¯ã®äœãæ¹ã¯ Layout Rules ã®ãPattern 2: U-Shape (4 midpoints)ãã«åŸã:
- ã¢ãŠãã¬ããã® 10ã17px äž ã« 1 ç¹ïŒ
source_y + 10~17ïŒ
- ã€ã³ã¬ããã® 11ã15px äž ã« 1 ç¹ïŒ
dest_y - 11~15ïŒ
- æ®ã 2 ç¹ã§å€åŽã¬ãŒã³ïŒè² ã® XããŸãã¯æå³ãªããžã§ã¯ã +20pxïŒãäžäžã«éã
- ã€ã³ã¬ãã/ã¢ãŠãã¬ããã®ããé£ã« 2 ç¹ã ã眮ããšèŠã¥ããã®ã§ãå¿
ããã®äžäžã¯ãªã¢ã©ã³ã¹ãå«ã 4 ç¹ã«ãã
- è¿ãã«
comment ã§æå³ãæèšããïŒäŸ: // feedback: filt_out â delay_inïŒæå³çïŒïŒã次åã»ãã·ã§ã³ã§èª€ã£ãŠãçŽã察象ããšå€å®ãããã®ãé²ã
- ããããæºããã
warning ã¯è§£æ¶å¯Ÿè±¡ããå€ããPhase 8 ã®å®äºæ¡ä»¶ã¯ãerror ãå
šãŠè§£æ¶ããæ®ã upward warning 㯠U åã«æŽåœ¢æžã¿ïŒ comment ã§èšé²ãããæå³çãªåºéã ããã§ãã
è£è¶³ïŒã¬ã€ã¢ãŠãå€ã®æ³šæïŒ: MSP ã®é³å£°ãã£ãŒãããã¯ã¯ã¬ã€ã¢ãŠã以åã«ã1 ãµã³ãã«é
å»¶ïŒtapin~/tapout~ãsend~/receive~ãgen~ çïŒãæãŸãªããš Max ãã«ãŒããåãïŒãšã©ãŒã«ãªããä¿¡å·èšèšé¢ã¯ max-techniquesïŒfeedback loop preventionïŒãåç
§ããã
_parameter_order ã®èšèš
â äŸåãã§ãŒã³ãèæ
®ããåå¥ã« order ãèšå®ããå Žå: pack ã ãã§ãªããå€ãã®ãªããžã§ã¯ãã® cold inlet ã«å¿
èŠãªå€ã代å
¥ãããªããŸãŸãªããžã§ã¯ããåäœïŒèª€åäœïŒãããã¡ãã»ãŒãžã®é åºã«èµ·å ãããã°ã¯åå ãéåžžã«åããã¥ãããç¹å®ãšä¿®æ£ã«èšå€§ãªæéãšåŽåãè²»ããããšã«ãªãã_parameter_range ãèšå®ãããåã«å€ã埩å
ãããšãããã©ã«ãç¯å² [0, 127] ã§ã¯ã©ã³ããããä¿åããå€ã倱ãããã
ãã©ã¡ãŒã¿ãèšå®ããåã«ã埩å
äŸåãã§ãŒã³å
šäœãèšèšãã:
pack / pak ã® hot/cold inlet æ§é ãç¹å®
scale çã®è€æ° inlet ãªããžã§ã¯ãã§ãhot inlet (0) ãš cold inlet ã®äŸåé¢ä¿ãç¹å®
- cold inlet ã«æ¥ç¶ãããã©ã¡ãŒã¿ã«å°ãã order ãå²ãåœãŠïŒå
ã«åŸ©å
â æ ŒçŽïŒ
- hot inlet ã«æ¥ç¶ãããã©ã¡ãŒã¿ã«å€§ãã order ãå²ãåœãŠïŒåŸã«åŸ©å
â çºç«ïŒ
_parameter_range ãèšå®ãããã§ãŒã³ãå
ã«åŸ©å
- ç¬ç«ãã©ã¡ãŒã¿ã¯æåŸã® order ã«é
眮
- èšå®åŸã®èªã¿æ»ãæ€èšŒ: å
šãã©ã¡ãŒã¿ã®
_parameter_order ã get_object_attribute ã§èªã¿æ»ããäŸåãã§ãŒã³ãšã®æŽåæ§ã確èªãPhase 4ïŒå®ææ€èšŒïŒã§ãåæ€èšŒãã
Object Creation Best Practices
Varname Conventions
Always provide meaningful varnames for important objects:
await mcp.add_max_object({
patch_id: "...",
obj_type: "cycle~",
arguments: [440],
varname: "osc_main",
position: [100, 200]
});
Naming patterns:
osc_* for oscillators
filt_* for filters
env_* for envelopes
gain_* for gain controls
ctrl_* for UI controls
in_* / out_* for I/O
Connection Guidelines
Connect objects using their varnames:
await mcp.connect_max_objects({
patch_id: "...",
src_varname: "osc_main",
outlet: 0,
dst_varname: "gain_master",
inlet: 0
});
Connection rules:
- Connect signal outlets (0) to signal inlets
- Verify inlet/outlet indices before connecting
- Use
get_patch_info to check object connections
Common Patterns
Audio Signal Chain
cycle~ â *~ â dac~
- Create oscillator at top
- Create gain control (*~) below
- Create dac~ at bottom
- Connect in order
MIDI Processing
midiin â midiparse â [processing] â noteout
Subpatcher Organization
For complex patches, use subpatchers (p object):
- Group related functionality
- Use send/receive for communication
- Document inputs/outputs
Reference Documentation
Execution Model & Messaging Patterns (MUST READ)
Max ã®å®è¡ã¢ãã«ïŒhot/cold inletïŒãšå®å
šãªã¡ãã»ãŒãžåºåãã¿ãŒã³ãå
šãŠã®ãããäœæ¥ã®åæç¥èã
Key topics:
- Hot (leftmost) vs cold (other) inlets â Max ã®åºæ¬å®è¡ã¢ãã«
- Why
trigger outputs right-to-left
pack vs pak (controlled vs any-inlet triggering)
- Avoiding
message boxes â use trigger, prepend, append instead
trigger as the safest constant parameter source
zl.reg for safe list storage, pack / pak for list construction
See Execution Model & Messaging Reference
Object Text Conventions (MUST READ)
ãªããžã§ã¯ãããã¹ãã®èšè¿°èŠåãšå¹ççãªã³ãŒãã£ã³ã°ãã¿ãŒã³ã
Key topics:
- Use abbreviations (
trigger â t, int â i, etc.)
- Explicit type via arguments (
scale 0. 1. not scale 0 1)
scale exponent argument for integrated curve mapping (replacing pow + scale)
- Multiplication filter pattern (
*) as a compact alternative to gate + i
See Object Text Conventions Reference
Layout & Visual Design
MCP Tools Quick Reference
| Tool | Purpose |
|---|
list_active_patches | List registered patches |
get_frontmost_patch | Get currently focused patch |
get_objects_in_patch | List objects in a patch (use mode: "layout" for position/size only, mode: "identity" for naming/inspection â reduces token usage) |
get_patch_info | Get patch metadata |
add_max_object | Create a new object |
set_object_attribute | Modify object properties |
get_object_value | Get current value (number, slider, etc.) |
connect_max_objects | Create patchcord |
disconnect_max_objects | Remove patchcord |
get_patchlines | List all patchcords (use mode: "geometry" for layout work without color/hidden, mode: "connections" for topology-only when inspecting an existing patch â reduces token usage) |
set_patchline_midpoints | Add/remove midpoints to fold patchcords |
remove_max_object | Delete an object |
get_avoid_rect_position | Find safe position |
validate_layout | Phase 8 æ€èšŒ: éè€ã»äº€å·®ã»äžåãã»presentation éè€ãå®å¯žã§æ©æ¢°å€å®ïŒæèšç®ã®ä»£æ¿ãerror ã clean ãŸã§è§£æ¶ïŒ |
align_objects | è€æ°ãªããžã§ã¯ãã®ç«¯ïŒäžå¿æãã»ééåçåã® patching_rect ãç®åºïŒæèšç®ã®ä»£æ¿ïŒ |
suggest_alignment | ãããã³ãŒããåçŽäžçŽç·ã«ãªã patching_rect ãç®åºïŒnub åããã®ä»£æ¿ïŒ |
get_io_position | inlet/outlet ã®å®ãã¯ã»ã«äžå¿ãç®åºïŒnub x ã®æèšç®ã®ä»£æ¿ïŒ |
get_console_log | Retrieve Max console messages |