Initial commit: AbletonMCP-AI complete system
- MCP Server with audio fallback, sample management - Song generator with bus routing - Reference listener and audio resampler - Vector-based sample search - Master chain with limiter and calibration - Fix: Audio fallback now works without M4L - Fix: Full song detection in sample loader Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
215
AbletonMCP_AI_BAK_20260328_200801/roadmap.md
Normal file
215
AbletonMCP_AI_BAK_20260328_200801/roadmap.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# AbletonMCP-AI — Tech House Professional DJ Roadmap
|
||||
|
||||
> Repositorio: AbletonMCP_AI | Foco: **Tech House** (122–128 BPM)
|
||||
> Última actualización: 2026-03-28
|
||||
|
||||
---
|
||||
|
||||
## Estado actual del sistema
|
||||
|
||||
El sistema tiene una base sólida:
|
||||
- `song_generator.py` (~6k líneas): blueprints de secciones, perfiles de arrangement, bus system, gain calibration, device automation por sección
|
||||
- `vector_manager.py`: semantic search + filtros de duración (evita canciones completas)
|
||||
- `role_matcher.py`: validación de samples por rol con thresholds y penalizaciones
|
||||
- `sample_selector.py`: selección de samples con compatibilidad BPM/key
|
||||
- `audio_resampler.py`: resample layers y análisis
|
||||
- `server.py` (~7k líneas): herramientas MCP expuestas al AI
|
||||
|
||||
---
|
||||
|
||||
## 🔴 BUG FIXES — Prioridad crítica
|
||||
|
||||
### BF-01: Track "AUDIO ATMOS 2" con canción completa
|
||||
- **Problema**: El filtro de duración (max 45s) no se aplica consistentemente en todos los paths de carga
|
||||
- **Causa**: `_build_audio_fallback_sample_paths` en `server.py` tiene glob patterns que ignoran el filtro de `vector_manager`
|
||||
- **Fix**: Reindexar la librería con `reindex_library` y verificar que `_find_library_file` rechaza archivos donde `soundfile` lanza excepción (duración = -1)
|
||||
- **Archivo**: `server.py` → `_find_library_file`, `_build_audio_fallback_sample_paths`
|
||||
|
||||
### BF-02: Embeddings desactualizados post-cambios
|
||||
- **Problema**: Al agregar nuevos samples a la librería, el índice `.sample_embeddings.json` no se reconstruye automáticamente
|
||||
- **Fix**: Agregar un hash de fingerprint del directorio (mtime o conteo) al índice y validar en cada arranque
|
||||
- **Archivo**: `vector_manager.py` → `_load_or_build_index`
|
||||
|
||||
### BF-03: Colisión de nombres de track "AUDIO X 2"
|
||||
- **Problema**: Cuando se crea un segundo track con el mismo nombre, Ableton le agrega "2" automáticamente y luego el sistema no lo encuentra por nombre
|
||||
- **Fix**: Normalizar búsquedas de tracks usando índice numérico en vez de nombre como identificador primario
|
||||
- **Archivo**: `server.py` → `_mute_tracks_for_audio_layers`, `_normalize_track_name`
|
||||
|
||||
### BF-04: Linting errors restantes
|
||||
- **Problema**: Múltiples errores de ruff reportados en `ruff_errors.txt` (principalmente F821 undefined names, E501 line length)
|
||||
- **Fix**: Pasar `ruff check --fix` y revisar los F821 manualmente
|
||||
- **Archivos**: `server.py`, `song_generator.py`
|
||||
|
||||
### BF-05: `soundfile` excepción silenciosa permite archivos inválidos
|
||||
- **Problema**: Si `soundfile` falla al leer un archivo, se asigna `duration = -1` pero el archivo igual puede ser insertado en escenarios de fallback
|
||||
- **Fix**: En `_find_library_file`, `duration < 0` debe ser rechazado explícitamente también en el branch de fallback de `glob`
|
||||
- **Archivo**: `server.py` → `_find_library_file`
|
||||
|
||||
---
|
||||
|
||||
## 🟠 MEJORAS CORE — Tech House específico
|
||||
|
||||
### MJ-01: Blueprints de sección optimizados para Tech House DJ
|
||||
- **Qué**: Los blueprints actuales (`standard`, `extended`, `club`) son genéricos. Tech House DJ requiere intros/outros de 16-32 bars para beatmatching
|
||||
- **Cambio**:
|
||||
```python
|
||||
'tech-house-dj': [
|
||||
('INTRO DJ', 32, 8, 'intro', 1), # 32 bars solo kick+bass para mezcla
|
||||
('GROOVE A', 16, 16, 'build', 2),
|
||||
('VOX TEASE', 8, 20, 'build', 3),
|
||||
('DROP A', 32, 30, 'drop', 5),
|
||||
('BREAK', 8, 22, 'break', 1),
|
||||
('BUILD', 8, 24, 'build', 3),
|
||||
('DROP B', 32, 32, 'drop', 5),
|
||||
('OUTRO DJ', 32, 8, 'outro', 1), # 32 bars solo kick+bass para salida
|
||||
]
|
||||
```
|
||||
- **Archivo**: `song_generator.py` → `SECTION_BLUEPRINTS`
|
||||
|
||||
### MJ-02: Patrones rítmicos tech house propios
|
||||
- **Qué**: Los patrones de kick/hat/perc están en `create_drum_pattern` (server.py) como presets genéricos. Tech House usa swing, offbeat hats, y kicks con ghost notes
|
||||
- **Cambio**: Agregar presets `'tech-house-swing'`, `'tech-house-jackin'`, `'tech-house-minimal'` con:
|
||||
- Kick en 1 y 3 con variaciones en 2.5 y 3.5
|
||||
- Hi-hat con swing 16% y offbeats en 1/8
|
||||
- Clap/snare en 2 y 4 con ghost notes
|
||||
- **Archivo**: `server.py` → `create_drum_pattern`
|
||||
|
||||
### MJ-03: Bass lines tech house
|
||||
- **Qué**: `create_bassline` genera 4 estilos genéricos. Tech House requiere basslines sincopadas y groovy
|
||||
- **Cambio**: Agregar estilo `'tech-house'` con notas en posiciones off-beat, slides, y variaciones de velocidad para groove
|
||||
- **Archivo**: `server.py` → `create_bassline`
|
||||
|
||||
### MJ-04: Chord progressions tech house
|
||||
- **Qué**: `CHORD_PROGRESSIONS` en `song_generator.py` no tiene entradas específicas para tech house
|
||||
- **Cambio**: Agregar progressiones:
|
||||
- Am → Fm → Gm (oscura, hipnótica)
|
||||
- Dm → Am → Dm (loop de dos acordes para drop)
|
||||
- Cm → Gm (minimalista con tensión)
|
||||
- **Archivo**: `song_generator.py` → `CHORD_PROGRESSIONS`
|
||||
|
||||
### MJ-05: Estilo Latin Tech House
|
||||
- **Qué**: El sistema tiene menciones de `latin-industrial` (Eli Brown) pero no tiene patrones de percusión latina implementados
|
||||
- **Cambio**: Agregar preset `'latin-tech-house'` con:
|
||||
- Conga / bongo patterns como perc layer
|
||||
- Bass con notas sincopadas al estilo afro-percusivo
|
||||
- Vocal shots ("ey", "come on") en offbeats
|
||||
- **Archivo**: `song_generator.py`, `server.py`
|
||||
|
||||
### MJ-06: Genre keyword expansion en VectorManager
|
||||
- **Qué**: Las búsquedas semánticas usan strings genéricos. Tech house tiene vocabulario específico
|
||||
- **Cambio**: Agregar diccionario de términos preferidos por género que enriquecen el query:
|
||||
```python
|
||||
GENRE_SEARCH_TERMS = {
|
||||
'tech-house': ['groovy', 'driving', 'punchy', 'jackin', 'swinging', 'hypnotic'],
|
||||
'house': ['deep', 'soulful', 'warm', 'classic'],
|
||||
...
|
||||
}
|
||||
```
|
||||
- **Archivo**: `vector_manager.py` o `server.py`
|
||||
|
||||
### MJ-07: Reindex automático al detectar cambios en librería
|
||||
- **Qué**: El índice de embeddings solo se reconstruye manualmente. Si el usuario agrega samples, no se detectan
|
||||
- **Cambio**: Al iniciar `VectorManager`, comparar el conteo de archivos actual vs el del índice. Si difieren, rebuild automático
|
||||
- **Archivo**: `vector_manager.py` → `_load_or_build_index`
|
||||
|
||||
---
|
||||
|
||||
## 🟡 MEJORAS DJ PRO — Funcionalidades de DJ profesional
|
||||
|
||||
### DJ-01: Track Stems export / bus routing visible
|
||||
- **Qué**: Un DJ profesional necesita poder exportar stems (kick, bass, music, fx) separados
|
||||
- **Cambio**: Agregar herramienta `export_stems_config()` que configura los buses para exportación de stems individual, nombrando y coloreando cada bus consistentemente
|
||||
- **Archivo**: `server.py` (nuevo tool)
|
||||
|
||||
### DJ-02: Harmonic mixing — Camelot wheel
|
||||
- **Qué**: El sistema elige keys pero no verifica compatibilidad con Camelot wheel para mezcla armónica
|
||||
- **Cambio**: Agregar función `get_compatible_keys(current_key)` que devuelve keys compatibles en la rueda de Camelot (±1 tono, relativo mayor/menor). Usar en `suggest_key_change`
|
||||
- **Archivo**: `server.py` → `suggest_key_change`
|
||||
|
||||
### DJ-03: BPM grid automático — Sync markers
|
||||
- **Qué**: Al generar una canción con intro DJ de 32 bars, colocar marcadores de Ableton (`locators`) en los puntos exactos de cada sección para que el DJ pueda saltar entre puntos
|
||||
- **Cambio**: Usar el comando `create_arrangement_locator` de Ableton API para marcar cada sección
|
||||
- **Archivo**: `server.py`, `Remote_Script.py` (agregar comando de socket)
|
||||
|
||||
### DJ-04: Loop regions automáticas
|
||||
- **Qué**: Marcar los drops como loop regions en Ableton para que el DJ pueda activar el loop con un botón
|
||||
- **Cambio**: Al generar la canción, colocar punch-in / punch-out en los drops principales
|
||||
- **Archivo**: `server.py`
|
||||
|
||||
### DJ-05: Energy curve explícita
|
||||
- **Qué**: El sistema tiene `ROLE_ACTIVITY` con valores de energía por sección pero no hay una curva visible para el usuario
|
||||
- **Cambio**: Al terminar la generación, imprimir (en el manifest) la curva de energía sección a sección: `[INTRO: 25%] → [BUILD: 70%] → [DROP: 100%]...`
|
||||
- **Archivo**: `server.py` → manifest / `get_generation_manifest`
|
||||
|
||||
### DJ-06: Referencia de track real — Eli Brown style
|
||||
- **Qué**: `REFERENCE_TRACK_PROFILES` tiene "Eli Brown - Me Gusta" definido pero no se puede cargar automáticamente una referencia para análisis A/B
|
||||
- **Cambio**: Hacer funcional el sistema de referencia: si el usuario pone un archivo en `librerias/reference/`, que sea analizable e influya en BPM, key, y energy curve de la generación
|
||||
- **Archivo**: `server.py`, `audio_resampler.py`, `reference_listener.py`
|
||||
|
||||
---
|
||||
|
||||
## 🟢 NICE TO HAVE — Calidad de vida
|
||||
|
||||
### NTH-01: Preview de canción antes de generar
|
||||
- **Qué**: El sistema genera todo de golpe sin preview. Poder ver primero el "blueprint" (qué tracks, qué samples, qué estructura) antes de ejecutar
|
||||
- **Cambio**: Agregar `preview_generation(genre, style, key, bpm)` que devuelve el manifest sin crear nada en Ableton
|
||||
- **Archivo**: `server.py`, `song_generator.py`
|
||||
|
||||
### NTH-02: Regeneración selectiva de secciones
|
||||
- **Qué**: Si el drop no quedó bien, hay que regenerar todo. Debería poder regenerarse solo el drop
|
||||
- **Cambio**: Agregar `regenerate_section(section_name)` que borra los clips de esa sección y los regenera
|
||||
- **Archivo**: `server.py`
|
||||
|
||||
### NTH-03: Historial de generaciones
|
||||
- **Qué**: Solo se guarda el último manifest. Debería haber un historial de las últimas 5 generaciones
|
||||
- **Cambio**: Guardar manifests en archivos `.json` con timestamp en `librerias/generations/`
|
||||
- **Archivo**: `server.py` → `_store_generation_manifest`
|
||||
|
||||
### NTH-04: Color coding consistente por género
|
||||
- **Qué**: Los colores de tracks son estáticos. Tech House podría tener paleta propia (naranja, azul oscuro)
|
||||
- **Cambio**: Agregar `GENRE_COLOR_PALETTES` y aplicar al generar tracks
|
||||
- **Archivo**: `song_generator.py` → `TRACK_COLORS`
|
||||
|
||||
### NTH-05: Sample diversity mejorada
|
||||
- **Qué**: Si la librería tiene 3 kicks, el sistema puede usar el mismo kick en 2 generaciones seguidas
|
||||
- **Cambio**: Existe `reset_diversity_memory` pero no hay persistencia entre sesiones. Guardar el historial de samples usados en un JSON local
|
||||
- **Archivo**: `sample_selector.py`
|
||||
|
||||
### NTH-06: Validación de routing en tiempo real
|
||||
- **Qué**: `validate_set` existe pero no se llama automáticamente al generar
|
||||
- **Cambio**: Al terminar `generate_track`, llamar automáticamente a `detect_common_issues` y mostrar resumen con numero de errores/warnings
|
||||
- **Archivo**: `server.py` → `generate_track`
|
||||
|
||||
### NTH-07: howto.md actualizado para Tech House
|
||||
- **Qué**: El `howto.md` documenta el sistema genérico. Agregar sección específica de "Cómo generar Tech House profesional" con ejemplos de prompts, flujos de trabajo DJ, y settings recomendados
|
||||
- **Archivo**: `howto.md`
|
||||
|
||||
---
|
||||
|
||||
## Orden de ejecución recomendado
|
||||
|
||||
| Prioridad | ID | Nombre | Esfuerzo |
|
||||
|---|---|---|---|
|
||||
| 1 | BF-01 | Full song en ATMOS track | 1h |
|
||||
| 2 | BF-02 | Embeddings auto-rebuild | 2h |
|
||||
| 3 | BF-03 | Colisión de nombres | 2h |
|
||||
| 4 | MJ-01 | Blueprints DJ 32-bar intro/outro | 1h |
|
||||
| 5 | MJ-02 | Drum patterns tech house | 2h |
|
||||
| 6 | DJ-02 | Camelot wheel | 2h |
|
||||
| 7 | MJ-03 | Bassline tech house | 1h |
|
||||
| 8 | MJ-05 | Latin tech house preset | 3h |
|
||||
| 9 | DJ-03 | BPM locators automáticos | 4h |
|
||||
| 10 | DJ-06 | Referencia de track real | 4h |
|
||||
| 11 | NTH-01 | Preview pre-generación | 3h |
|
||||
| 12 | NTH-06 | Auto-validación post-generación | 1h |
|
||||
| 13 | BF-04 | Linting cleanup | 2h |
|
||||
|
||||
---
|
||||
|
||||
## Notas arquitectónicas para el salto a Tech House
|
||||
|
||||
1. **BPM default**: cambiar `default_bpm` de `tech-house` de 125 a **126** (sweet spot del género actual)
|
||||
2. **Key pool**: priorizar `Am`, `Fm`, `Dm` → más oscuras y groovy que las opciones actuales
|
||||
3. **Swing**: el swing del 8% actual en hats es insuficiente. Tech House moderno usa 12-16%
|
||||
4. **Sidechain pump**: el threshold actual de -22dB en bass bus es correcto, pero el release de 0.12s es lento. Bajar a 0.08-0.10s para más pump
|
||||
5. **Atmos tracks**: el vol de 0.50 en `ROLE_MIX['atmos']` es correcto, pero usar filtros HPF altos (>1kHz) para que no compitan con el sub
|
||||
Reference in New Issue
Block a user