Files
AbletonMCP_AI/AGENTS.md
2026-04-12 22:14:35 -03:00

343 lines
12 KiB
Markdown

# AGENTS.md - AbletonMCP_AI
## Project
MCP-based system that lets AI agents control Ableton Live 12 Suite via TCP socket.
> **Note:** This project uses the **Senior Architecture (v3.0)**. See below for migration details.
## Critical Rules
1. **NEVER touch `libreria/` or `librerias/`** — user's 511 sample library
2. **Overwrite files, never delete+create** — prevents accidental data loss
3. **No debug .md files in project root** — all go to `AbletonMCP_AI/docs/`
4. **Compile after every change**: `python -m py_compile "<absolute_path>"`
5. **Restart Ableton Live** after changes to `__init__.py` (no hot-reload)
## Commands
```powershell
# Compile check (always after edits)
python -m py_compile "C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\__init__.py"
python -m py_compile "C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\mcp_server\server.py"
# Verify Ableton is listening
netstat -an | findstr 9877
# Test MCP server directly
python "C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\mcp_wrapper.py"
```
## Skills Reference
### Skill 1: Reinicio Correcto de Ableton
**File:** `AbletonMCP_AI/docs/skill_reinicio_ableton.md`
Proceso de 3 pasos para reiniciar Ableton limpiamente:
1. **Kill processes** (Live, Index, Push)
2. **Delete recovery files** (`CrashDetection.cfg`, `CrashRecoveryInfo.cfg`, `Undo.cfg`)
3. **Start Ableton** + verify TCP 9877
**When to use:** After modifying `__init__.py`, when changes don't reflect, after crashes.
---
### Skill 2: Producción Senior de Audio
**File:** `AbletonMCP_AI/docs/skill_produccion_audio.md`
Flujo profesional completo para producción con inyección automática:
**5 Métodos Automáticos:**
- M1: `track.insert_arrangement_clip()` (Live 12+ direct)
- M2: `track.create_audio_clip()` (Live 11+ direct)
- M3: `arrangement_clips.add_new_clip()` (Live 12+ API)
- M4: Session → `duplicate_clip_to_arrangement` (legacy)
- M5: Session → Recording (universal fallback)
**Zero configuración manual** - Sistema elige automáticamente.
**Usage:**
```python
ableton-live-mcp_create_arrangement_audio_pattern(
track_index=3,
file_path="C:\\...\\kick 1.wav",
positions=[0, 4, 8, 12],
name="KickPattern"
)
```
**Workflow:** Health check → Library scan → Create tracks → Inject audio → Verify arrangement.
---
**Critical:** Always use Skill 1 (restart) before starting production with Skill 2 if `__init__.py` was modified.
## Architecture
### Legacy Architecture (v2.x - Deprecated)
The original architecture focused on Session View as the primary workflow:
```
AbletonMCP_AI/
├── __init__.py # Remote Script — ALL Live API code here (~300 lines)
├── README.md # Project documentation
├── docs/ # Sprints and project docs only
└── mcp_server/
├── server.py # FastMCP server over stdio (~300 lines)
└── engines/ # Music logic (sample_selector, song_generator)
mcp_wrapper.py # Launcher for OpenCode
```
**Legacy workflow:**
1. **Ableton** loads `__init__.py` as a Control Surface → starts TCP server on port 9877
2. **MCP Server** (`server.py`) runs via `mcp_wrapper.py` (stdio transport)
3. Each MCP tool opens a **new TCP connection** to Ableton, sends JSON command, gets response, closes
4. Mutations to Live are queued in `_pending_tasks` and drained by `update_display()`
---
## Senior Architecture (v3.0)
### Overview
The Senior Architecture represents a complete redesign of AbletonMCP_AI with:
- Arrangement View as primary workflow (not Session View)
- SQLite-based metadata store (no numpy required for production)
- Robust state machine for arrangement recording
- LiveBridge for real execution of engine configurations
- Explicit API design without ambiguous names
### Key Principles
1. **No Placeholders**: Every component does exactly what it claims
2. **No Silent Failures**: Errors are explicit and actionable
3. **Arrangement-First**: All high-level tools create in Arrangement View by default
4. **Dependency Isolation**: Production workflow doesn't require numpy/librosa
5. **Musical Timing**: All timing uses bars/beats, not wall-clock
### New Components
#### 1. Metadata Store (metadata_store.py)
SQLite database storing pre-analyzed sample features:
- 511 samples analyzed once, reused forever
- 0 runtime dependency on numpy/librosa for queries
- Fast BPM/key/spectral feature lookups
#### 2. Hybrid Extractor (abstract_analyzer.py)
Abstract feature extraction with multiple implementations:
- `LibrosaExtractor`: Full analysis (requires numpy)
- `DatabaseExtractor`: Fast lookups (no dependencies)
- `HybridExtractor`: Cache-first with fallback analysis
#### 3. Arrangement Recorder (arrangement_recorder.py)
Robust state machine for Session→Arrangement recording:
- 7 states: IDLE → ARMED → PRE_ROLL → RECORDING → COOLDOWN → COMPLETED/FAILED
- Musical quantization (waits for bar boundaries)
- Verification: Compares before/after clip sets
- Progress callbacks and error handling
#### 4. LiveBridge (live_bridge.py)
Direct Ableton Live API execution:
- Applies mixing_engine configurations for real
- Writes automation envelopes to clips
- Creates Arrangement clips directly
- Bus/return routing with actual track modifications
#### 5. Integration Coordinator (integration.py)
Central coordinator wiring all components:
- Dependency detection and auto-configuration
- High-level operations (build_timeline, record_session)
- Graceful degradation with clear mode reporting
### API Changes
#### Deprecated (Session-View-First)
- `produce_with_library()` - Old: Creates Session, optional Arrangement
- `produce_reggaeton()` - Old: Session View only
- `build_arrangement_structure()` - Old: Actually builds Session scenes
#### New (Arrangement-First)
- `build_arrangement_timeline()` - Creates clips directly at bar positions
- `create_section_at_bar()` - Places intro/verse/chorus at specific bars
- `create_arrangement_track()` - Timeline-ready track creation
- `arrange_record_start()` - Robust recording with state machine
### Migration Guide
#### For Users
1. Run migration: `python migrate_to_senior.py --analyze full`
2. Update workflow: Use `build_arrangement_timeline()` instead of `produce_with_library()`
3. Verify: Run `get_arrangement_status()` to confirm clips appear
#### For Developers
1. Use `HybridExtractor` for sample analysis (cache-first)
2. Use `ArrangementRecorder` for any recording operations
3. Use `LiveBridge` to execute engine configs
4. Query `SampleMetadataStore` for sample features (no numpy)
### File Structure Changes
```
AbletonMCP_AI/
├── mcp_server/
│ ├── engines/
│ │ ├── __init__.py (updated exports)
│ │ ├── metadata_store.py (NEW)
│ │ ├── abstract_analyzer.py (NEW)
│ │ ├── arrangement_recorder.py (NEW)
│ │ ├── live_bridge.py (NEW)
│ │ ├── sample_selector.py (updated)
│ │ └── ...
│ ├── integration.py (NEW)
│ ├── migrate_library.py (NEW)
│ ├── migrate_to_senior.py (NEW)
│ ├── test_arrangement.py (NEW)
│ └── server.py (updated)
├── __init__.py (updated)
└── AGENTS.md (this file)
```
### Testing
Run verification:
```python
python -m test_arrangement --test-all
```
Expected results:
- ✓ Arrangement clips created directly (no Session intermediate)
- ✓ No numpy required for sample queries
- ✓ Recording uses musical timing (bars/beats)
- ✓ Post-recording verification confirms clips exist
---
### Backward Compatibility
The Senior Architecture maintains backward compatibility with existing workflows:
- **Old tools still work**: `produce_with_library()`, `produce_reggaeton()`, etc. continue to function
- **Session View not removed**: Clips can still be created and fired in Session View
- **Gradual migration**: Users can mix old and new API calls during transition
**However, old tools are deprecated and will be removed in v4.0:**
- They may have reduced performance compared to new Arrangement-first tools
- They won't benefit from new features like the metadata store
- Documentation and examples will focus on new API
**Recommended approach:**
1. Continue using existing projects without changes
2. For new projects, use `build_arrangement_timeline()` and related new tools
3. Migrate critical existing projects when convenient
### Current Status
**Completed:**
- ✅ SQLite metadata store
- ✅ Hybrid extractor architecture
- ✅ ArrangementRecorder state machine
- ✅ LiveBridge implementation
- ✅ New Arrangement-first API tools
- ✅ Integration coordinator
- ✅ Migration tools
- ✅ Extended EQ and Compressor presets (Agente 10)
**In Progress:**
- 🔄 Comprehensive testing
- 🔄 Performance optimization
**Migration Path:**
1. Immediate: Use `build_arrangement_timeline()` for new projects
2. Short-term: Update existing scripts to use new API
3. Long-term: Deprecate Session-View-first tools
---
## Extended EQ and Compressor Presets (Agente 10)
### EQ Presets
**Drum Presets:**
- `kick` - Standard kick drum EQ
- `kick_sub` - Sub-bass emphasis at 60Hz (for heavy kicks)
- `kick_punch` - Beater punch at 3kHz (for clicky kicks)
- `snare` - Standard snare EQ
- `snare_body` - Body emphasis at 200Hz (full snare)
- `snare_crack` - Crack at 5kHz (snappy snare)
**Bass Presets:**
- `bass` - Standard bass EQ
- `bass_clean` - Clean bass with controlled mids
- `bass_dirty` - Bass with midrange grit
**Synth & Melodic Presets:**
- `synth` - Standard synth EQ
- `synth_air` - 10kHz air boost (bright synths)
- `pad_warm` - Low shelf boost (warm pads)
- `vocal_presence` - 3-5kHz presence boost (vocals/adlibs)
**Master Presets:**
- `master` - Standard master EQ
- `master_tame` - High shelf taming (for bright mixes)
### Compressor Presets
**Drum Presets:**
- `kick_punch` - Punchy kick compression
- `parallel_drum` - Fast attack, auto release (for parallel processing)
**Bass Presets:**
- `bass_glue` - Glue bass compression
**Vocal Presets:**
- `aggressive_vocal` - Medium attack, fast release
**Bus/Group Presets:**
- `buss_glue` - Standard buss glue
- `buss_tight` - Slow attack, medium release (tight groups)
- `glue_light` - Subtle cohesion
- `glue_heavy` - Strong cohesion
**Master Presets:**
- `master_loud` - Loud master compression
**Special Effects:**
- `pumping_sidechain` - Aggressive pumping effect
- `transparent_leveling` - Subtle, natural dynamics
### Usage Example
```python
# Configure EQ using extended preset
eq_config = EQConfiguration(device_manager)
eq_config.configure_eq_eight(track_index=0, settings={"preset": "kick_sub"})
# Configure compressor using extended preset
comp_settings = CompressionSettings(device_manager)
comp_settings.configure_compressor(track_index=0, preset="parallel_drum")
```
---
## Legacy Design Decisions (v2.x)
- `__init__.py` is all-in-one — Ableton's discovery only reads this file
- One TCP connection per command — no persistent state, no thread queue bugs
- No `request_refresh()` in `update_display()` — causes CPU loop that blocks Ableton
## Workflow
**Kimi** codes features → **Qwen** verifies/compiles/debugs/assigns next sprint
All sprints saved to `AbletonMCP_AI/docs/sprint_N_description.md`
## What NOT to modify
- `libreria/` — user samples (read-only)
- `librerias/` — organized samples (read-only)
- `_Framework/`, `_APC/`, `_Komplete_Kontrol/`, etc. — Ableton's built-in scripts
- Any directory not under `AbletonMCP_AI/`
## OpenCode config
MCP server configured in `~/.config/opencode/opencode.json` pointing to `mcp_wrapper.py`.