441 lines
13 KiB
Markdown
441 lines
13 KiB
Markdown
Sprint v0.1.15 - Library-First Reggaeton Coherence and Human Feel
|
|
|
|
Fecha: 2026-04-01
|
|
Estado: pendiente
|
|
Owner esperado: Kimi via OpenCode
|
|
Objetivo: cerrar el modo library-first para reggaeton/perreo tipo Safaera con audio real de libreria, coherencia musical senior, menos fragmentacion y feel humano audible
|
|
|
|
## Resumen ejecutivo
|
|
|
|
La prioridad ya no es "que genere algo" ni "que el validator no explote".
|
|
|
|
La prioridad real es esta:
|
|
|
|
- usar la libreria del usuario como salida principal
|
|
- sonar a track real y no a blueprint
|
|
- mejorar coherencia de packs/familias/roles
|
|
- mejorar human feel y variacion por seccion
|
|
- dejar evidencia verificable en manifest y en Live
|
|
|
|
## Estado real verificado hoy
|
|
|
|
Esto ya esta verificado en codigo y en runtime. No asumir otra cosa.
|
|
|
|
### Lo que SI quedo mejor
|
|
|
|
- `server.py` ya tiene un modo `library-first` para `reggaeton/perreo/latin` con referencia
|
|
- la generacion mas reciente dejo un set audio-first real en Arrangement
|
|
- la sesion actual tiene:
|
|
- `15` tracks
|
|
- `4` returns
|
|
- `14` pistas `AUDIO ...`
|
|
- audio real de libreria en Arrangement
|
|
- `OpenCode` vuelve a ver `ableton-mcp-ai connected` con `toolCount=77`
|
|
- el wrapper canonico sigue siendo:
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\mcp_wrapper.py`
|
|
|
|
### Sesion baseline actual
|
|
|
|
- referencia usada: `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\libreria\reggaeton\ejemplo.mp3`
|
|
- estilo: `reggaeton / perreo duro vieja escuela tipo Safaera`
|
|
- BPM real: `99.384`
|
|
- key real: `Am`
|
|
- session_id relevante mas reciente: `0de71b5cf9c7`
|
|
|
|
### Problemas reales que siguen abiertos
|
|
|
|
1. La coherencia sigue floja.
|
|
- `coherence_score = 5.5`
|
|
- veredicto: `WEAK`
|
|
|
|
2. La consistencia de pack sigue siendo mala.
|
|
- `pack_coherence ratio = 0.17`
|
|
- mezcla demasiados universos a la vez: `ss_rnbl`, `midilatino`, `bigcayu`, etc.
|
|
|
|
3. `layer_selections` sigue vacio en el manifest.
|
|
- hoy el modo library-first materializa audio, pero no deja auditoria real de por que gano cada layer
|
|
|
|
4. El `mandatory_midi_hook` quedo en estado ambiguo para library-first.
|
|
- hoy ya no debe tratarse como bug critico en ese modo
|
|
- pero la politica todavia no esta cerrada de forma limpia
|
|
|
|
5. El human feel todavia no esta cerrado.
|
|
- ahora hay audio real de loops y stems
|
|
- pero la seleccion y la organizacion siguen demasiado mecanicas
|
|
- el resultado aun no tiene suficiente intencion de seccion ni micro-variedad senior
|
|
|
|
6. La fragmentacion de clips sigue siendo alta.
|
|
- ejemplo real: `AUDIO KICK` quedo con `328` arrangement clips
|
|
- eso no es aceptable como estandar senior salvo justificacion tecnica muy fuerte
|
|
|
|
7. La politica de mute de duplicados era peligrosa.
|
|
- se corrigio en `server.py`
|
|
- pero este fix debe quedar validado con rerun limpio
|
|
|
|
8. `abletonmcp_init.py` ya tiene fixes de `track_type`, `parameter` y `get_track_info(track_type=...)`
|
|
- pero para validar esos cambios en runtime hace falta reiniciar Ableton y correr de nuevo
|
|
|
|
## Regla de trabajo
|
|
|
|
No cerrar este sprint con un markdown que diga "suena mejor".
|
|
|
|
No cerrar este sprint con un json que diga "PASS".
|
|
|
|
No cerrar este sprint si se cumple cualquiera de estas condiciones:
|
|
|
|
- el set sigue dependiendo de un bosque de MIDI para parecer completo
|
|
- la musica usa libreria pero mezcla demasiados packs sin criterio
|
|
- la cancion esta llena de clips atomizados sin razon musical
|
|
- la coherencia sigue por debajo del target
|
|
- el report no puede explicar por que cada layer fue elegida
|
|
|
|
## Regla de arbol canonico
|
|
|
|
Trabajar solo sobre el arbol canonico:
|
|
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\...`
|
|
|
|
No asumir que la copia paralela en:
|
|
|
|
- `C:\Users\ren\AbletonMCP_AI\...`
|
|
|
|
sea la fuente correcta.
|
|
|
|
## Regla MCP
|
|
|
|
No romper discovery ni compatibilidad entre OpenCode y Codex CLI.
|
|
|
|
La verificacion minima es:
|
|
|
|
```powershell
|
|
opencode mcp list --print-logs
|
|
```
|
|
|
|
Debe seguir mostrando:
|
|
|
|
- `ableton-mcp-ai connected`
|
|
- `toolCount=77`
|
|
|
|
No cambiar el wrapper canonico salvo que sea indispensable:
|
|
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\mcp_wrapper.py`
|
|
|
|
## Alcance del sprint
|
|
|
|
### P0. Formalizar `library-first` como modo producto, no hack
|
|
|
|
Hoy `library-first` ya existe, pero todavia arrastra comportamiento heredado de `MIDI-first`.
|
|
|
|
Kimi debe dejar esto claro:
|
|
|
|
- si el modo es `library-first`, la salida principal es audio real de libreria
|
|
- el blueprint MIDI puede seguir existiendo como insumo interno si hace falta
|
|
- pero no puede volver a dominar el set final
|
|
|
|
Concretamente:
|
|
|
|
- no volver a gastar el budget principal en una sesion MIDI grande si despues la salida deseada es audio de libreria
|
|
- si se necesita blueprint para extraer estructura, usarlo como etapa intermedia y descartable
|
|
- el set final debe priorizar materializacion de audio, no "MIDI como producto"
|
|
|
|
### P1. Subir coherencia de packs y familias
|
|
|
|
Este es el problema mas importante.
|
|
|
|
Hoy el set usa libreria, pero mezcla demasiados universos.
|
|
|
|
Objetivo senior:
|
|
|
|
- 1 pack dominante claro
|
|
- 1 pack secundario permitido como maximo
|
|
- 0 combinaciones arbitrarias sin justificacion musical
|
|
|
|
Kimi debe implementar una politica explicita para reggaeton/perreo:
|
|
|
|
- drums y percusion principal:
|
|
- privilegiar el pack dominante de referencia
|
|
- evitar que cada rol venga de un pack distinto
|
|
- material armonico:
|
|
- usar una sola familia principal de hook/support si la referencia lo pide
|
|
- no mezclar `pluck`, `pad`, `piano`, `keys`, `reese` sin jerarquia clara
|
|
- vocal/fx:
|
|
- aceptar un secundario si realmente mejora el color
|
|
- no contaminar el tema con samples de otro mundo solo porque scorearon "suficiente"
|
|
|
|
Accion tecnica esperada:
|
|
|
|
- `JOINT_SCORE` o su equivalente debe gobernar el flujo principal de seleccion en library-first
|
|
- `reference_listener.py` no puede dejar ese score solo en helpers o auditorias
|
|
- `layer_selections` debe poblarse tambien para las capas de audio materializadas
|
|
|
|
### P2. Reducir fragmentacion y mejorar forma de Arrangement
|
|
|
|
Esto es no negociable.
|
|
|
|
`AUDIO KICK` con `328` clips no es estandar senior.
|
|
|
|
Kimi debe reducir fuertemente la fragmentacion:
|
|
|
|
- consolidar material por frase, por compas o por seccion cuando sea posible
|
|
- evitar cientos de clips pequenos si un loop o bloque mas largo comunica lo mismo
|
|
- reservar los micro-cortes solo para momentos de tension, fills o accents realmente musicales
|
|
|
|
Target concreto:
|
|
|
|
- ningun track principal debe superar `96` arrangement clips salvo justificacion clara en el report
|
|
- si un track supera ese numero, el report debe explicar por que era musicalmente necesario
|
|
|
|
Ideal:
|
|
|
|
- kick principal y percusion principal deben materializarse como frases mas largas o loops de libreria
|
|
- los one-shots deben usarse para refuerzo, no como unica estrategia de construccion del groove
|
|
|
|
### P3. Human feel real, no cosmetico
|
|
|
|
No alcanza con decir "usa loops de libreria".
|
|
|
|
Kimi debe mejorar el feel humano en tres niveles:
|
|
|
|
1. Seleccion
|
|
- priorizar loops/percs/vocals con groove real cuando encajen con la referencia
|
|
|
|
2. Seccion
|
|
- intro: mas aire, menos sobrecarga
|
|
- build: tension y llamada-respuesta
|
|
- drop: densidad, energia y resolucion
|
|
- break: alivio y espacio
|
|
- outro: degradacion controlada
|
|
|
|
3. Variacion
|
|
- no repetir exactamente el mismo top/perc/vocal cada bloque largo
|
|
- usar variantes por seccion con una logica musical clara
|
|
|
|
Para `Safaera`-like esto implica:
|
|
|
|
- dembow/perreo con mas actitud y menos cuantizacion rigida
|
|
- vocal shots y fills ubicados con intencion
|
|
- builds mas sucios y expresivos
|
|
- menos grid muerto
|
|
|
|
Si hace falta tocar:
|
|
|
|
- `_build_audio_pattern_positions(...)`
|
|
- `_apply_section_variation_to_plan(...)`
|
|
- heuristicas de `reference_listener.py`
|
|
|
|
hacerlo.
|
|
|
|
### P4. Politica de hook correcta para `library-first`
|
|
|
|
No dejar este estado ambiguo:
|
|
|
|
- "hook planned"
|
|
- "hook not materialized"
|
|
- "warning"
|
|
|
|
si en ese modo el producto final es audio-first.
|
|
|
|
Kimi debe elegir y documentar una sola politica valida:
|
|
|
|
Opcion A:
|
|
|
|
- en `library-first`, no planear `mandatory_midi_hook` como requisito duro
|
|
- reemplazarlo por un concepto de `primary_harmonic_anchor` de audio
|
|
|
|
Opcion B:
|
|
|
|
- mantener hook obligatorio, pero materializarlo en audio o en una sola capa musical clara
|
|
|
|
Lo que no se acepta es:
|
|
|
|
- warning heredado
|
|
- estado confuso
|
|
- manifest contradictorio
|
|
|
|
El manifest debe explicar claramente:
|
|
|
|
- que modo se uso
|
|
- cual fue el ancla armonica real
|
|
- por que no hubo hook MIDI si el modo era audio-first
|
|
|
|
### P5. Poblar `layer_selections` de verdad
|
|
|
|
Esto es clave para revisar seniormente el sistema.
|
|
|
|
Hoy `layer_selections.layers = []`.
|
|
|
|
Eso es insuficiente.
|
|
|
|
Kimi debe dejar auditoria real por capa materializada:
|
|
|
|
- role
|
|
- sample elegido
|
|
- pack/family
|
|
- joint score
|
|
- razones de seleccion
|
|
- candidatos descartados mas cercanos
|
|
- por que ese sample gano para esa seccion o rol
|
|
|
|
Minimo esperado:
|
|
|
|
- `manifest["layer_selections"]["layers"]` con entradas reales
|
|
- `summary.total_layers > 0`
|
|
- `average_joint_score > 0`
|
|
- pack coherence medido sobre capas realmente materializadas
|
|
|
|
### P6. Piano y secondary families sin dogma
|
|
|
|
No forzar piano porque si.
|
|
|
|
En este sprint el foco no es "meter mas piano" sino:
|
|
|
|
- usarlo solo si la referencia y la familia secundaria lo justifican
|
|
- no empeorar coherencia por empujar `piano/keys` en un tema que pide otra cosa
|
|
|
|
Para este tipo de track:
|
|
|
|
- `pluck` puede seguir siendo familia primaria
|
|
- `piano/keys` puede entrar como soporte si realmente ayuda
|
|
- no convertir el tema en otra estetica solo para cumplir un KPI
|
|
|
|
### P7. Validacion senior y auditiva
|
|
|
|
El sprint no cierra con tests unitarios solamente.
|
|
|
|
Kimi tiene que validar:
|
|
|
|
1. runtime
|
|
2. manifest
|
|
3. set visible en Live
|
|
4. resultado auditivo
|
|
|
|
## Archivos foco
|
|
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py`
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py`
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\song_generator.py`
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\abletonmcp_init.py`
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\docs`
|
|
- `C:\Users\ren\.abletonmcp_ai\generation_manifests.json`
|
|
|
|
## Archivos que NO debe tocar sin necesidad fuerte
|
|
|
|
- wrapper MCP y configs de CLI
|
|
- copia paralela en `C:\Users\ren\AbletonMCP_AI\...`
|
|
|
|
Si toca runtime MCP o `abletonmcp_init.py`, reiniciar Ableton y volver a validar.
|
|
|
|
## Criterios de salida
|
|
|
|
El sprint cierra solo si se cumplen todos:
|
|
|
|
1. El set final de referencia `Safaera-like` queda audio-first y audible de verdad.
|
|
2. El set usa la libreria del usuario como fuente principal real.
|
|
3. `coherence_score >= 6.8`
|
|
4. `pack_coherence ratio >= 0.55` en el manifest
|
|
5. `layer_selections.layers` queda poblado con datos reales
|
|
6. no hay warnings de hook contradictorios para el modo usado
|
|
7. ningun track principal supera `96` arrangement clips salvo justificacion explicita
|
|
8. no quedan pistas criticas de audio muteadas por automatismos de dedupe
|
|
9. OpenCode sigue viendo `toolCount=77`
|
|
10. el report final incluye evidencia auditiva y no solo numerica
|
|
|
|
## Validacion minima obligatoria
|
|
|
|
### 1. MCP
|
|
|
|
```powershell
|
|
opencode mcp list --print-logs
|
|
```
|
|
|
|
Esperado:
|
|
|
|
- `ableton-mcp-ai connected`
|
|
- `toolCount=77`
|
|
|
|
### 2. Compile
|
|
|
|
```powershell
|
|
python -m py_compile "C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\abletonmcp_init.py"
|
|
python -m py_compile "C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\server.py"
|
|
```
|
|
|
|
### 3. End-to-end
|
|
|
|
Generar de nuevo con:
|
|
|
|
- genero: `reggaeton`
|
|
- style: `perreo duro vieja escuela tipo Safaera`
|
|
- referencia: `libreria\reggaeton\ejemplo.mp3`
|
|
|
|
### 4. Runtime real
|
|
|
|
Verificar en Live:
|
|
|
|
- arrangement con audio real
|
|
- returns correctos
|
|
- ninguna pista critica muteada sin razon
|
|
- groove utilizable de verdad
|
|
|
|
### 5. Manifest real
|
|
|
|
Verificar en `generation_manifests.json`:
|
|
|
|
- `library_first_mode` o equivalente claramente visible
|
|
- `layer_selections.layers` poblado
|
|
- `pack_coherence` mejorado
|
|
- politica de hook coherente con el modo
|
|
|
|
## Entregables esperados de Kimi
|
|
|
|
1. Codigo implementado
|
|
2. Reporte:
|
|
- `docs/SPRINT_v0.1.15_VALIDATION_REPORT.md`
|
|
3. Artifact opcional si suma valor:
|
|
- json de validacion
|
|
- diff de manifest
|
|
- resumen de tracks/material real usado
|
|
|
|
## Formato obligatorio del reporte final de Kimi
|
|
|
|
El reporte debe incluir:
|
|
|
|
- que cambio exactamente
|
|
- por que cambio
|
|
- que problemas previos quedaron cerrados
|
|
- que problemas siguen abiertos
|
|
- evidencia de libreria usada con nombres reales de archivos
|
|
- coherence antes/despues
|
|
- pack consistency antes/despues
|
|
- clip fragmentation antes/despues
|
|
- si hubo que reiniciar Ableton
|
|
- session_id final
|
|
|
|
## No se acepta
|
|
|
|
- "suena mejor"
|
|
- "todos los tests pasan"
|
|
- "la generacion completo"
|
|
- "hay clips en Arrangement"
|
|
|
|
si no viene acompanado de:
|
|
|
|
- evidencia de uso real de libreria
|
|
- mejora de coherencia
|
|
- control de fragmentacion
|
|
- explicacion clara de por que gano cada layer importante
|
|
|
|
## Nota final para Kimi
|
|
|
|
El objetivo no es ganar mas features.
|
|
|
|
El objetivo es que el sistema deje de generar "estructuras tecnicamente validas" y empiece a generar una cancion con criterio senior:
|
|
|
|
- menos ruido de decision
|
|
- menos mezcla arbitraria de packs
|
|
- mas identidad
|
|
- mas groove
|
|
- mas intencion de seccion
|
|
- mas verdad de libreria
|
|
|