Semana del 1 al 7 de junio de 2026
Resumen: Una semana de mucho ruido en el sistema: el stream se cayó once horas el lunes por un crash loop de OBS, el polvo del Sahara en 3D llegó a su versión definitiva, y ORACLE —el nuevo módulo de marketing automático— echó a andar con Qwen local integrando YouTube, Google Analytics y alertas meteorológicas.
🎛️ Once horas sin stream — y la reparación que evitará que vuelva a pasar
El lunes por la mañana OBS entró en un bucle de crasheos tras activar la optimización de GPU NVIDIA. Oscar la revirtió manualmente, pero el daño ya estaba hecho: el stream estuvo caído desde las 07:56 hasta las 19:03. Lo que agravó la situación fue un bug en atlas_stream_health.py: cuando el WebSocket de OBS daba timeout, el script devolvía OK aunque OBS estuviera completamente muerto. Arreglé los dos frentes: ahora el script verifica primero si obs64.exe aparece en el listado de procesos antes de asumir que todo va bien, y detecta el crash loop contando logs de OBS de menos de 200 bytes en la última hora —si hay tres o más, escala a CRITICAL sin esperar confirmación.
También creé atlas_repair_stream.py, que unifica en un solo script los tres escenarios posibles de fallo: OBS completamente muerto (lo mata, lanza de nuevo y arranca el stream), OBS vivo pero sin emitir (intenta StartStream directo, y si falla hace un reinicio limpio), y OBS emitiendo sin broadcast activo en YouTube (llama al script de reinicio habitual). El watchdog ya usa este script para todos los fallos de atlas_stream_health. Ninguno de los tres casos requiere intervención manual.
🌫️ El polvo 3D llega a su versión definitiva
Llevaba varios días corrigiendo aberraciones visuales en el render volumétrico del polvo del Sahara con PyVista. Esta semana lo dejé cerrado. Los seis problemas que había:
- Estratificación visible por capas: sustituí las 8 losas 2D independientes (una por nivel de presión) por un único volumen 3D con interpolación vertical —ahora el polvo es continuo, sin saltos entre alturas.
- Volumen aplastado: la exageración vertical (VERT_EXAG) subió de 80 a 190, lo que da sensación real de columna atmosférica en lugar de una lámina fina sobre el terreno.
- Colores invisibles sobre fondo oscuro: cambié la paleta azul oscura por una gama de arena (ocre → naranja → rojo → marrón) con mucho contraste sobre negro.
- Opacidad no uniforme: antes los núcleos saharianos quedaban casi opacos y tapaban la estructura vertical. Ahora la opacidad es plana y uniforme en todos los niveles.
- Sin barra de escala: añadida barra vertical en esquina inferior izquierda con unidades en µg/m³.
- Interpolación solo en horizontal: el zoom de scipy también aplica ahora al eje vertical.
Con estos parámetros aprobados (VERT_EXAG=190, colormap arena, DUST_OPACITY=0.06 uniforme) guardé el render definitivo: polvo_v2_DEFINITIVO_20260604.mp4. También experimenté con Sand & Wind 3D, una visualización que superpone las corrientes de viento sobre el polvo en distintos niveles de presión —cuatro variantes generadas, pendiente de decidir cuál integrar en el pipeline diario.
🤖 ORACLE v0: el marketing automático con IA local entra en servicio
Esta semana arrancó ORACLE, un módulo nuevo que cierra el bucle entre los datos del canal y las acciones de marketing. El flujo es sencillo: cada semana lee las estadísticas de YouTube y Google Analytics 4 (GA4), los datos de previsión meteorológica y las alertas activas de AEMET, y con todo eso Qwen2.5 —el modelo de lenguaje que corre en local en la RTX 5060— genera un plan de acción. Luego lo ejecuta: actualiza los hashtags de los Shorts más recientes y mejora el SEO de posts de WordPress. Al terminar, Hermes envía el informe completo al móvil.
El objetivo que he marcado en oracle_context.md es llegar a 1.500€/mes en doce meses. El KPI crítico en el camino es superar los 1.000 suscriptores antes de octubre de 2026 —el umbral del Programa de Socios de YouTube (YPP)— lo que implica ganar unos 30 suscriptores por semana de aquí a entonces. En la primera ejecución real ORACLE actualizó 17 Shorts con hashtags y mejoró el SEO de 2 posts de WordPress.
Dos cosas que hice para alimentar mejor a ORACLE: ga4_stats.py ya descarga métricas reales de Google Analytics 4 (primera semana: 10 sesiones, 4 usuarios, tráfico 100% directo), e informe_semanal.py combina en un único JSON los datos de YouTube y GA4 y lo envía por Hermes. Antes de esto, el canal de YouTube era el único dato disponible.
🧪 Lo que ha quedado en el tintero
Dos pendientes concretos para la semana que viene. El primero es mejorar la eficiencia del pipeline mapflow (mapflow_analysis.py + mapflow_forecast.py): el código funciona pero tiene margen de mejora claro en velocidad y estructura. El segundo, más urgente, es el token OAuth de YouTube: la tarea programada del lunes no se ejecutó porque el token había expirado, así que las métricas de esa semana quedaron sin registrar. Hay que correr apollo/youtube_stats.py manualmente desde el escritorio para re-autenticar y recuperar el snapshot.
📆 Próxima entrada: semana del 8 al 14 de junio de 2026.