██╗  ██╗██╗███╗   ███╗ ██████╗ ██╗     ██╗███████╗███████╗██████╗
██║ ██╔╝██║████╗ ████║██╔═══██╗██║     ██║╚══███╔╝██╔════╝██╔══██╗
█████╔╝ ██║██╔████╔██║██║   ██║██║     ██║  ███╔╝ █████╗  ██████╔╝
██╔═██╗ ██║██║╚██╔╝██║██║   ██║██║     ██║ ███╔╝  ██╔══╝  ██╔══██╗
██║  ██╗██║██║ ╚═╝ ██║╚██████╔╝███████╗██║███████╗███████╗██║  ██║
╚═╝  ╚═╝╚═╝╚═╝     ╚═╝ ╚═════╝ ╚══════╝╚═╝╚══════╝╚══════╝╚═╝  ╚═╝
                 
                 ░▒▓█ V E R S I O N  4 . 2 █▓▒░
         ☆゚.*・。゚  "Q-ENGINE FRENCHCORE EDITION"  。゚.*・。゚
                   aka "quien ese duro mono"
════════════════════════════════════════════════════════════════════

K I M O L I Z E R 4.2

WEB AUDIO API • BUFFER CACHE • 10-BAND EQ • LOWER THIRD

Win10/11MacLinux PoponiaOSMerlo Place v4.1

📦 RELEASE INFO

                 [ PEPE.REDURA PROUDLY PRESENTS ]
        ╔═══════════════════════════════════════════╗
        ║   K I M O L I Z E R   4 . 2    FINAL      ║
        ║   Web Audio Visualizer + Audio Engine     ║
        ╚═══════════════════════════════════════════╝
             ☆゚.*・。゚ CODER.....: Pepe Redura 。゚.*・。゚
            ·.¸¸.-> CRACKER...: Blacker Flit <-.¸¸.
             XxX_PACKAGER..: Pocho Peloponeso_XxX
     †... ENGINE....: QW-Core v4.2 (Web Audio API + Butterchurn) ...†
                 °o.O PROTECTION: Ninguna. . O.o°
               【ツ】 DATE....: Julio 2026 【ツ】
   ஐ εїз ORIGIN..: 1 dev + Q-Core en un tupper en Bajo Ayolas ஐ

🚀 NOVEDADES 4.2 (EL SALTO CUÁNTICO)

  • 🎧 WEB AUDIO API NATIVE Core
    BufferSourceNode con cacheo de buffers. Canción actual + siguiente precargadas. Seek instantáneo. Crossfade configurable (0-10s) para transiciones suaves. ahi lo mandamos AAdespacito
  • 🎛️ ECUALIZADOR 10 BANDAS Nuevo
    Faders verticales estilo Winamp con presets (Rock, Pop, Jazz, Club, Vocal, Bass, Classical). Persistencia en localStorage.
  • 📺 LOWER THIRD Nuevo
    Superposición de información de la canción (Título, Artista, Portada). Disparo manual, automático (inicio/X segundos/antes del final). Colores, fuente y tamaño configurables.
  • 📡 RADAR DE INPUTS Nuevo
    Visualización en tiempo real de niveles de audio (Mic, Línea, Master) con barras de nivel y dB. Tenes toda la cabina con chetos en camisa que te tiran un mumm con speed arriba de los cables y no suena nada no sabes ni si esta enchufado algo que mete ruido o que sucede vos apretas aca. Modal con atajo de teclado I.
  • 📜 PLAYLIST DE PRESETS CON DURACIÓN INDIVIDUAL Playlist
    Cada preset en la playlist puede tener su propia duración (2-600s). Duplicar presets, reordenar por arrastre. Crossfade entre presets.
  • 🖼️ LOGO PERSONALIZADO Branding
    PNG/SVG con posición, tamaño, opacidad y efectos (Scanlines, Glitch, Pulse, RGB Split, Viñeta).
  • 🖥️ TERMINAL DE LOGS UI/UX
    Consola visual en tiempo real. Timestamps, categorías, todo logueado. Exportar logs al portapapeles.
  • 📊 INFO PANEL SIEMPRE VISIBLE HUD
    FPS, preset actual, audio input, estado de buffer, crossfade.
  • 🔧 PANEL DE OPCIONES DINÁMICO Contextual
    Controles por pestaña: Presets, Playlist, Música, Logo, Escenas, LT. Todo a mano.
  • 🎯 MODULARIZACIÓN COMPLETA Arquitectura
    Código dividido en módulos ES6: `core.js`, `audio.js`, `visuals.js`, `scenes.js`, `id3.js`, `lower-third.js`, `lt-control.js`, `playlist-presets.js`, `audio-inputs.js`.
  • FIXES CLAVE: Crossfade real con GainNodes. Cacheo de buffers. ID3 tags con portada. Fullscreen oculta terminal. Mic/Line con toggle real.

🎛️ EQ vs VizEq: DOS HERRAMIENTAS, DOS PROPOSITOS

⭐ CARACTERÍSTICA ÚNICA: Kimolizer 4.2 incluye dos sistemas de ecualización que cumplen funciones distintas. Ningún otro visualizador web hace esto.

🔊 EQ DE 10 BANDAS

Es como el ecualizador de una consola de mezcla. Subís o bajás frecuencias y el sonido cambia. Lo escuchás en los parlantes, lo sentís en el cuerpo.

🎨 VIZEQ — SENSIBILIDAD POR FRECUENCIA

Es como ajustar la lente de una cámara. No cambia el sonido, cambia cómo el visualizador interpreta ese sonido para dibujar los gráficos. Podés hacer que los graves muevan más la imagen, o que los agudos sean más sutiles.

💡 EN RESUMEN: El EQ modifica lo que escuchás. El VizEq modifica lo que ves. Ambos trabajan juntos, pero cumplen roles distintos.

🥛 CARGA DE PRESETS MILK (EXPERIMENTAL)

⚠️ ESTADO ACTUAL: La carga de archivos .MILK externos es EXPERIMENTAL y puede no funcionar en todas las versiones de butterchurn.

📖 ¿QUÉ SON LOS PRESETS MILK?

Los presets MilkDrop son archivos de texto con extensión .milk que contienen:

  • Variables de configuración (ej: fRating=3.0, fGamma=0.5)
  • Shaders de warp (transformaciones de la imagen) en secciones [warp0], [warp1], etc.
  • Shaders de composite (efectos de superposición) en secciones [comp0], [comp1], etc.
  • Comentarios con // o #

🔧 ¿CÓMO FUNCIONA LA CARGA EN KIMOLIZER?

Kimolizer 4.2 incluye un parser de archivos .MILK que extrae:

  • Variables: Todas las variables del preset en un objeto vars
  • Warp Shaders: Cada sección [warpN] se guarda como string
  • Composite Shaders: Cada sección [compN] se guarda como string
// Estructura del objeto que butterchurn espera { name: "Nombre del preset", vars: { fRating: 3.0, fGamma: 0.5, warp: 1.0, // ... todas las variables del .milk }, warpShaders: [ "// código GLSL del warp 0", "// código GLSL del warp 1" ], compositeShaders: [ "// código GLSL del composite 0" ] }

⚠️ LIMITACIONES ACTUALES

  • Butterchurn parsePreset no disponible: Esta versión de butterchurn no expone el método parsePreset() públicamente
  • loadPresetUrl no disponible: No se puede cargar directamente desde URL
  • overrideDefaultVars: El error Cannot convert undefined or null to object ocurre cuando las variables no tienen el formato exacto que butterchurn espera
  • Formato interno: Butterchurn tiene un formato interno muy específico para los presets que no coincide exactamente con el parseo manual

🔬 DIAGNÓSTICO DEL ERROR

TypeError: Cannot convert undefined or null to object at hasOwnProperty (<anonymous>) at butterchurn.js:12387:43 at Array.forEach (<anonymous>) at Visualizer.overrideDefaultVars (butterchurn.js:12386:35) at Visualizer.loadPreset (butterchurn.js:12521:34)

Este error ocurre en overrideDefaultVars cuando butterchurn intenta iterar sobre las variables del preset y encuentra undefined o null. La causa raíz es que el objeto pasado a loadPreset() no tiene la estructura exacta que butterchurn espera.

📋 MÉTODOS PARA DEPURAR

En la consola del navegador, ejecutá estos comandos para inspeccionar la estructura esperada:

// 1. Ver el preset que SÍ funciona (cargado por defecto) const workingPreset = state.visualizer.getPreset(); console.log('Preset que funciona:', workingPreset); console.log('Keys:', Object.keys(workingPreset)); // 2. Ver métodos disponibles console.log('Métodos:', Object.getOwnPropertyNames(state.visualizer) .filter(p => typeof state.visualizer[p] === 'function')); // 3. Ver la estructura de vars console.log('vars:', workingPreset.vars); console.log('warpShaders:', workingPreset.warpShaders); console.log('compositeShaders:', workingPreset.compositeShaders);

🔄 ALTERNATIVAS

  • Usar presets incluidos: Butterchurn ya incluye cientos de presets pre-compilados. Usá state.visualizer.loadPreset(index, 0)
  • Esperar Kimolizer 5: El próximo release migrará a un sistema de shaders propio, abandonando MilkDrop
  • Contribuir: Si querés que funcione la carga de .MILK, se necesita implementar un parser completo que genere el objeto exacto que butterchurn espera

💡 KIMOLIZER 5: Estamos trabajando en un sistema de shaders GLSL nativos que reemplazará completamente MilkDrop. Esto permitirá:

  • Shaders personalizados sin dependencias externas
  • Mejor rendimiento y control
  • Compatibilidad con WebGL 2.0
  • Efectos en tiempo real con parámetros ajustables desde la UI

🎛️ ECUALIZADOR VISUAL 10 BANDAS

⭐ CARACTERÍSTICA ÚNICA: Kimolizer 4.2 incluye un ecualizador gráfico de 10 bandas con faders verticales estilo Winamp, algo que no se ve en ningún otro visualizador web.

📊 ESPECIFICACIONES TÉCNICAS

  • 10 Bandas: 31, 62, 125, 250, 500, 1k, 2k, 4k, 8k, 16k Hz
  • Rango: -12dB a +12dB (paso 0.5dB)
  • Presets incluidos: Rock, Pop, Jazz, Club, Vocal, Bass Boost, Classical
  • Persistencia: Los valores se guardan en localStorage
  • Visualización: Faders verticales con thumb personalizado, valor numérico y etiqueta de frecuencia

🔧 ¿CÓMO FUNCIONA?

El ecualizador utiliza BiquadFilterNode de Web Audio API, que son filtros de audio en tiempo real:

// Cada banda es un BiquadFilterNode en cascada const frequencies = [31, 62, 125, 250, 500, 1000, 2000, 4000, 8000, 16000]; frequencies.forEach((freq, i) => { const filter = audioContext.createBiquadFilter(); filter.type = 'peaking'; filter.frequency.value = freq; filter.Q.value = 1.0; filter.gain.value = gains[i]; // -12 a +12 dB // Conectar en cascada });

🎯 PRESETS DISPONIBLES

🎸 Rock

Bajos y agudos reforzados, medios recortados. Ideal para guitarra y batería.

🎤 Pop

Medios y agudos ligeramente elevados. Voces claras y definidas.

🎷 Jazz

Bajos suaves, medios cálidos. Sonido natural y acogedor.

🪩 Club

Bajos potentes y agudos brillantes. Perfecto para música electrónica.

🎵 Vocal

Medios elevados para resaltar la voz. Ideal para podcasts y voces.

🔊 Bass Boost

Bajos extremos. Para sentir el subwoofer en todo su esplendor.

🎻 Classical

Respuesta plana con ligero realce en agudos. Para música orquestal.

🎛️ Custom

Configuración manual. Tus ajustes se guardan automáticamente.

🖥️ INTERFAZ

  • Faders verticales: Arrastrá hacia arriba/abajo para ajustar cada banda
  • Valor numérico: Muestra el nivel exacto en dB
  • Etiquetas: Frecuencia en Hz debajo de cada fader
  • Presets: Seleccioná un preset y aplicálo con un click
  • Reset: Volvé todos los faders a 0dB

💡 POR QUÉ ES ÚNICO: La mayoría de los visualizadores web usan el ecualizador solo para visualización (gráficos de barras). Kimolizer 4.2 modifica el audio en tiempo real, permitiendo ecualizar la señal antes de que llegue al visualizador. Esto es clave para DJs y músicos que necesitan control total del sonido.

🏗️ ARQUITECTURA 4.2

🎵 AUDIO INPUT (File/Mic/Line) ──► 🎛️ AudioContext / BufferSourceNode
                                      ├─ Buffer Cache (Current + Next)
                                      ├─ GainNode (Vol + Crossfade)
                                      ├─ BiquadFilterNode (EQ 10 Bandas)  ← NUEVO
                                      ├─ AnalyserNode (Radar + Visualización)
                                      └─ Butterchurn (Visualizador)
                                      ▼
                                  📊 LOG TERMINAL + 📊 INFO PANEL
                                      ▼
                                  🎛️ MODE MANAGER (Hot-Swap)
                                      ▼
                          ┌───────────┼───────────┐
                          ▼           ▼           ▼
                      🎨 Canvas2D  🌆 Shaders  🥛 Butterchurn
                          │           │           │
                          └───────────┼───────────┘
                                      ▼
                                  ✨ PANTALLA

📥 INSTALACIÓN

OPCIÓN A - PYTHON

python3 -m http.server 8080

OPCIÓN B - NODE.JS

npx serve . -p 3000

⚠️ DOBLE CLICK: NO FUNCIONA por CORS/ES6. Usá servidor local o PISO LA BOLSA.

🕹️ CONTROLES

  • ← / → ──► Preset anterior / siguiente
  • Espacio ──► Play/Pause música
  • F ──► Pantalla completa
  • M ──► Activar/Desactivar micrófono
  • I ──► Abrir/Cerrar Radar de Inputs
  • H ──► Ayuda en pantalla
  • Click en 🎛️ EQ ──► Abrir ecualizador 10 bandas
  • Panel Opciones ──► Ajustar crossfade, reactividad, logo, blend, LT

🆘 TROUBLESHOOTING (CUANDO TROTRONÓ)

  • PANTALLA NEGRA / NO SE VE: Abrí servidor local. Probá URL directa. Si sigue igual, TROTRONÓ en Gulubú.
  • URL NO FUNCA: Verificá que sea enlace directo a MP3. Dropbox usa `?dl=1`. Si NWANDA NARA DE NADA, PISA EL TRIPLE.
  • MICRÓFONO NO ANDA: Necesitás HTTPS o localhost. Dale permisos. Si tu vieja en tanga te mira por la cámara, cerrá la app.
  • FPS BAJO / SE TRABA: Usá Canvas2D. Cerrá pestañas. En móviles: olvidate de WebGL. PISO LA BOLSA en un pentium 2 si intentás 4K. Dale un poco de fierro y camina bien pero dale un poco. .
  • EQ NO SE ESCUCHA: Verificá que la canción esté sonando. Los faders verticales se ajustan en tiempo real. Si no hay cambio, revisá que los nodos de audio estén conectados.
  • LOWER THIRD NO APARECE: Verificá que esté activado en la pestaña LT. Probá el disparo manual. Si el ID3 no tiene datos, usá texto personalizado.
  • CROSSFADE SE SALTA: Revisá la duración. Asegurate de que el buffer precargó. Si falla, reiniciá. No es magia, es ingeniería de Bodornia.
  • CARGA DE .MILK FALLA: Es esperado. El parser es experimental. Usá los presets incluidos en butterchurn. En Kimolizer 5 migramos a shaders nativos.
  • LOGS EXPLOTAN: Normal. Copialos y exportalos. Si colgás Chetoslovaquia, reiniciá el panel.

👥 CREDITS & SHOUTS

TEAM: Pepe Redura (Lead), Blacker Flit (Crack), Pocho Peloponeso (Pack), Feto Warez (QA), QW-Core
SHOUTS: Winamp, Milkdrop, Demoscene 90s, BBS Argentina, Charly García, Merlo Place, Bajo Ayolas
SPECIAL: Perón (por la organización del código), Luther Blissett (por el mito), James Brown (por el groove), El 10 del Milan (por el pase), Chocolate Voley, Thchami, Tony Medina.
ADVERTENCIA: Si borrás esto, tu código solo andará en IE6. Tu abuela te ve en 4K. Tu ex encuentra tu LinkedIn.

📜 ESTATUTO DE LA LIMPIEZA (LEY 70.014 - v4.2)

ART. 1: Software GRATIS. Si te lo vendieron, te cagaron.
ART. 2: Comentar es ley. El que suba código sin documentar: picará COBOL en Bodornia. Jugando la promoción sin irse a la B. Con IE6. En Vista. Sin Stack Overflow. Y tu hermana te invitó a comer guiso para siempre.
ART. 3: Si hay bug, hacé PR o callate. (Mentira, reportalo, no soy forro)
ART. 4: Licencia MIT. Copiá, modificá, vendé. NO borrés créditos. Suscribite al canal inexistente.
ART. 5: Si usás `eval()` en producción y el crossfade TROTRONA, merecés la trotrona eterna en Merlo Place.