- 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>
12 KiB
12 KiB
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ónvector_manager.py: semantic search + filtros de duración (evita canciones completas)role_matcher.py: validación de samples por rol con thresholds y penalizacionessample_selector.py: selección de samples con compatibilidad BPM/keyaudio_resampler.py: resample layers y análisisserver.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_pathsenserver.pytiene glob patterns que ignoran el filtro devector_manager - Fix: Reindexar la librería con
reindex_libraryy verificar que_find_library_filerechaza archivos dondesoundfilelanza 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.jsonno 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 --fixy revisar los F821 manualmente - Archivos:
server.py,song_generator.py
BF-05: soundfile excepción silenciosa permite archivos inválidos
- Problema: Si
soundfilefalla al leer un archivo, se asignaduration = -1pero el archivo igual puede ser insertado en escenarios de fallback - Fix: En
_find_library_file,duration < 0debe ser rechazado explícitamente también en el branch de fallback deglob - 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:
'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_basslinegenera 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_PROGRESSIONSensong_generator.pyno 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:
GENRE_SEARCH_TERMS = { 'tech-house': ['groovy', 'driving', 'punchy', 'jackin', 'swinging', 'hypnotic'], 'house': ['deep', 'soulful', 'warm', 'classic'], ... } - Archivo:
vector_manager.pyoserver.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 ensuggest_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_locatorde 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_ACTIVITYcon 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_PROFILEStiene "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
.jsoncon timestamp enlibrerias/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_PALETTESy 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_memorypero 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_setexiste pero no se llama automáticamente al generar - Cambio: Al terminar
generate_track, llamar automáticamente adetect_common_issuesy mostrar resumen con numero de errores/warnings - Archivo:
server.py→generate_track
NTH-07: howto.md actualizado para Tech House
- Qué: El
howto.mddocumenta 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
- BPM default: cambiar
default_bpmdetech-housede 125 a 126 (sweet spot del género actual) - Key pool: priorizar
Am,Fm,Dm→ más oscuras y groovy que las opciones actuales - Swing: el swing del 8% actual en hats es insuficiente. Tech House moderno usa 12-16%
- 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
- 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