13/6/26

Harto de Minimax / El proyecto de la Radio IA de Tecnología

Se me ocurrió la idea de crear una emisora de radio basada 100% en IA, que tomara noticias de tecnología y las emitiera de forma continua, actualizando sus guiones y emitiéndolos. Algo más que posible porque algo muy parecido ya hace Openclaw cada mañana al mandarme un boletín de noticias en audio con una voz de Azure que funciona de fábula. Es una especie de podcast emitido sólo para mí, estoy muy satisfecho del resultado y del contenido que me ofrece así que ¿por qué no hacer eso mismo pero con una emisora online? La IA ha eliminado las limitaciones técnicas, ahora sólo tengo que dar la orden y esa máquina misteriosa se ocupara de montarlo, solucionar los problemas y ejecutarlo. Así de sencillo, al fin y al cabo funcionaba con DeepSeek, y con Codex ni os digo. Y bueno, MiniMax no es el más listo de su clase pero se defiende, así que no debería salir mal, ¿no? Minimax hasta ahora se ha defendido en tareas menores, es sobresaliente creando audios y canciones, pero cuando le he pedido una tarea como la de montar una radio basada en IA, ha cometido tantos errores que ha tardado muchísimo y el resultado ha sido lamentable, noticias repetidas, audios con noticias repetidas... terrible.

Cuando la cuota de las 5 horas se agotó y pasé a GPT 5.5 en unos pocos minutos solucionó los problemas y levantó la radio. Sencillo, eficaz. Seguro que Deepseek también lo hubiera hecho bien. Ya he desactivado la renovación automática, pasaré a usar Ollama Cloud con su cuota de 20 Euros, seguro que otros modelos lo hacen mejor que MiniMax. Para tareas menores aunque da algunos palos de ciego, termina haciendo lo que le pido, pero no tenía nada que ver con el funcionamiento de DeepSeek. Agur, Sayonara, hasta nunca amigo. Toca probar nuevas aventuras, o quemar Tokens como si fuera rico. Es la fiebre de la IA. Y por supuesto, toca echar mano de Codex, eficiente, competente, y con buenos límites. 

Si mañana esto sigue dando guerra, pasaré a Codex. 

OS COMPARTO LA DOCUMENTACIÓN DEL PROYECTO DE LA "RADIO IA"

==========================================================================

  RADIO IA - DOCUMENTACION DEL PROYECTO

==========================================================================

  Fecha:     13 junio 2026

  Creado por: Jane (asistente OpenClaw de Julio)

  Proposito: Documentar el proyecto para que cualquier modelo futuro pueda

             entenderlo, mantenerlo y ampliarlo sin partir de cero.

==========================================================================

ÍNDICE

  1. QUÉ ES RADIO IA

  2. ARQUITECTURA GENERAL

  3. TECNOLOGÍAS Y DEPENDENCIAS

  4. ESTRUCTURA DE DIRECTORIOS

  5. FLUJO DE TRABAJO COMPLETO

     5.1. Scraping (obtener noticias)

     5.2. Generación de guiones (LLM)

     5.3. Traducción (si aplica)

     5.4. Síntesis de voz (TTS)

     5.5. Empaquetado y emisión

  6. JERARQUÍA DE LLM

  7. JERARQUÍA DE TTS

  8. ESTADO ACTUAL (13 JUN 2026)

  9. PROBLEMAS CONOCIDOS Y WORKAROUNDS

  10. TRABAJO REALIZADO

      10.1. Histórico (primeras tandas)

      10.2. Trabajo de Jane (12-13 Jun 2026)

  11. COMANDOS ÚTILES

  12. CREDENCIALES (referencia, sin tokens)

  13. NOTAS PARA EL PRÓXIMO MODELO


==========================================================================

1. QUÉ ES RADIO IA

==========================================================================

Radio IA es una emisora de radio online autónoma que:

  - Extrae noticias tecnológicas de ~40 fuentes RSS y NewsAPI

  - Genera guiones de locución con modelos de lenguaje (LLM)

  - Convierte los guiones a audio mediante síntesis de voz (TTS)

  - Emite en bucle via Icecast en http://localhost:8000/radioia


Creada por Julio, inicialmente con XTTS (voz clonada de Samuel), después

ampliada con Azure TTS (voz Beatriz), MiniMax TTS y edge-tts (Microsoft).


2. ARQUITECTURA GENERAL


  [RSS Feeds + NewsAPI]

         |

    scraper.py (extrae artículos)

         |

    guion.py (LLM genera guion de locución en español)

         |

    tts_xtts.py / azure_tts.py / minimax_tts.py (síntesis de voz)

         |

    Ficheros MP3 en audios/noticias/

         |

    emision.py (construye playlist y la envía a Icecast via ffmpeg)

         |

    Icecast server (localhost:8000/radioia)

         |

    Oyente (navegador, VLC, reproductor HTTP)



3. TECNOLOGÍAS Y DEPENDENCIAS

  - Python         3.12+ (coqui-tts necesita 3.12) / 3.14 también presente

  - Icecast        2.4.4 (servidor de streaming, binario en icecast/)

  - ffmpeg         Para concat de audios y streaming a Icecast

  - edge-tts       Síntesis de voz Microsoft (gratis, sin API key)

  - coqui-tts      XTTS v2 local con fine-tune de voz Samuel

  - Azure Speech   TTS cognitivo de Microsoft (2h/día gratis, necesita key)

  - MiniMax TTS    TTS de MiniMax (Spanish_SereneWoman, necesita key)

  - Ollama         LLM local (qwen3:14b, gemma4:12b) - último recurso

  - OpenRouter     API para LLM (nemotron-nano-9b-v2:free)

  - NewsAPI        API agregadora de noticias (30 llamadas/día)

  - pydub          Para combinar audios (intros + noticias + promos)



4. ESTRUCTURA DE DIRECTORIOS


  C:\Python313\Radio IA\

  ├── audios/

  │   ├── noticias/        MP3 generados (noticias individuales y bloques)

  │   ├── noticias/rechazados_xtts/  Audios fallados de XTTS

  │   ├── relleno/         Audios de transición

  │   └── jingles/         Cabeceras/cierres (sintonías)

  ├── bin/

  │   ├── radioia.cmd      CLI unificado (punto de entrada recomendado)

  │   ├── arrancar_icecast.ps1 / arrancar_radioia.ps1

  │   ├── estado_radioia.ps1

  │   └── parar_radioia.ps1

  ├── data/

  │   ├── playlist.txt     Playlist activa en formato ffmpeg concat

  │   ├── manifest_*.json  Manifiestos de tandas de producción

  │   ├── azure_tts_usage.json  Control de cuota diaria Azure TTS

  │   ├── newsapi_usage.json    Control de cuota diaria NewsAPI

  │   └── edge_ollama_*.json   Manifiestos de edge-tts

  ├── guiones/

  │   ├── *.jsonl          Guiones en formato JSONL (id, title, source, script)

  │   └── *.md             Guiones en Markdown (legible)

  ├── logs/

  │   ├── *.log            Logs de producción y errores

  │   ├── *.out.log        Salida estándar

  │   └── *.err.log        Errores

  ├── icecast/

  │   ├── icecast.xml      Configuración de Icecast

  │   └── icecast/         Binarios de Icecast (extraídos)

  ├── src/

  │   ├── scraper.py       Extrae artículos de RSS y NewsAPI

  │   ├── guion.py         Genera guiones de locución con LLM

  │   ├── tts_xtts.py      Síntesis XTTS local y edge-tts

  │   ├── azure_tts.py     Síntesis Azure Speech

  │   ├── minimax_tts.py   Síntesis MiniMax TTS

  │   ├── producir.py      Orquesta 1 bloque o buffer N horas

  │   └── emision.py       Construye playlist, arranca Icecast, streamea

  ├── config.py            Configuración global (rutas, keys, parámetros)

  ├── generar_audios_edge_desde_guiones.py  Script autónomo edge-tts desde JSONL

  ├── generar_guiones_ollama_5000.py        Script autónomo generación masiva

  ├── producir_3h_v3.py    Script autónomo producción 3h con jerarquía TTS

  ├── traducir_titulares_guiones.py         Traduce títulos de guiones a español

  ├── DOCUMENTACION_PROYECTO.txt  ESTE ARCHIVO

  └── README.md            Documentación rápida


5. FLUJO DE TRABAJO COMPLETO


5.1. SCRAPING (obtener noticias)

  Archivo: src/scraper.py

  - Lee ~40 feeds RSS de tecnología (config.RSS_FEEDS)

  - Opcionalmente consulta NewsAPI (máx 30/día, config.NEWSAPI_DAILY_LIMIT)

  - Devuelve lista de artículos con título, descripción, fuente

  - Feeds en inglés y español; se marcan con idioma en la tupla (url, nombre, "en"/"es")


5.2. GENERACIÓN DE GUIONES (LLM)

  Archivo: src/guion.py

  - Toma cada artículo y genera un guion de locución (~80-110 palabras)

  - Jerarquía de modelos (ver sección 6)

  - Si el artículo está en inglés, el prompt pide al LLM que genere el guion

    en español directamente (traducción implícita)

  - Devuelve lista de {"id":..., "title":..., "source":..., "script":..., "word_count":...}

  - Los guiones se guardan en guiones/*.jsonl y guiones/*.md


5.3. TRADUCCIÓN EXPLÍCITA (alternativa)

  Archivo: traducir_titulares_guiones.py

  - Toma un JSONL existente con títulos en inglés y traduce títulos y guiones

  - Usa Ollama local (gemma4:12b)

  - Crea un nuevo JSONL con "titulares en español"


5.4. SÍNTESIS DE VOZ (TTS)

  Ver jerarquía completa en sección 7.

  - El script principal es src/tts_xtts.py (también maneja edge-tts)

  - Scripts autónomos:

    * generar_audios_edge_desde_guiones.py → edge-tts, agrupa en bloques

    * generar_audios_minimax_desde_guiones.py → MiniMax TTS

    * generar_audios_xtts_desde_guiones.py → XTTS local

  - Los MP3 se guardan en audios/noticias/

  - Los bloques combinados (intros + noticias + promos) se llaman

    BLOQUE_{BACKEND}_OLLAMA_{RUN_ID}_{BLOQUE_NUM}.mp3


5.5. EMPAQUETADO Y EMISIÓN

  Archivo: src/emision.py

  - Función list_news_audios(): prioriza bloques MiniMax > edge-tts > XTTS

  - Función build_playlist(): combina noticias propias + boletines viejos + podcasts

  - save_playlist(): guarda en formato ffmpeg concat (data/playlist.txt)

  - stream_to_icecast(): lanza ffmpeg que lee la playlist y envía a Icecast

  - Icecast sirve en http://localhost:8000/radioia



6. JERARQUÍA DE LLM (para generar guiones)

  Orden de preferencia:

    1. OpenRouter - nvidia/nemotron-nano-9b-v2:free  (gratis, funcional)

    2. MiniMax - MiniMax-M3  (key da 2049 "invalid" actualmente, histórico)

    3. DeepSeek - deepseek-chat  (key bloqueada por "governor", $8 saldo)

    4. Ollama local - qwen3:14b (siempre disponible)

    5. Ollama local - gemma4:12b (fallback)


  La selección está en src/guion.py.



7. JERARQUÍA DE TTS (para síntesis de voz)


  Orden de preferencia (configurado en config.py y producir_3h_v3.py):

    1. Azure TTS - es-MX-BeatrizNeural (2h/día gratis, necesita key y cuota)

         → Rápido (~2s por audio)

         → Voz preferida de Julio para todo (conversaciones, boletín, radio)

         → Config: estilo friendly, rate 0%, pitch 0%

         → Fichero: src/azure_tts.py

         → Límite diario: config.AZURE_TTS_DAILY_BUDGET_S = 7200s (2h)

         → ⚠️ El 12-13 Jun 2026 se agotó la cuota diaria

    2. MiniMax TTS - Spanish_SereneWoman  (~3s/audio, buena calidad)

         → Fichero: src/minimax_tts.py

         → Daba 2049 "invalid api key" en este período

    3. edge-tts - Microsoft Edge TTS (gratis, sin key)

         → Voces disponibles: es-ES-AlvaroNeural (usado), es-ES-ElviraNeural,

           es-MX-JorgeNeural, es-MX-DaliaNeural

         → Fichero: generar_audios_edge_desde_guiones.py

         → Se usó como respaldo principal cuando Azure y MiniMax fallaron

    4. XTTS local - Voz de Samuel (fine-tune del 26 May 2026)

         → Lento (~50s por chunk), calidad variable

         → Fichero: src/tts_xtts.py

         → Último recurso, a veces balbucea


==============================================================================

8. ESTADO ACTUAL (13 JUN 2026, 01:00)

==============================================================================

  - Icecast: ARRANCADO en localhost:8000

  - Playlist activa: 85 bloques ~228 min (~3,8 horas) de contenido variado

    (mezcla de bloques de producción anterior + relleno)

  - ffmpeg emitiendo en bucle a /radioia

  - Stream accesible: http://127.0.0.1:8000/radioia

  - Admin Icecast: http://127.0.0.1:8000/admin/ (pass: ***)


  Última producción (Jane, 13 Jun 00:48):

  - 43 noticias limpias (ver sección 10.2)

  - Edge TTS con voz es-ES-AlvaroNeural

  - 43 audios individuales (~26 min brutos)

  - 9 bloques compuestos con intros y promos (~31 min totales)

  - Manifest: data/edge_ollama_20260613_004801.json


  Estado de APIs:

  - OpenRouter: FUNCIONANDO (nemotron-nano-9b-v2:free)

  - Azure TTS: CUOTA DIARIA AGOTADA (12 Jun 2026)

  - MiniMax: Key con error 2049 (no funcional)

  - DeepSeek: Key bloqueada por governor

  - Ollama local: Siempre disponible

  - NewsAPI: Sin usar hoy (ahorrando llamadas)

  - Edge TTS: Funcionando perfectamente


==============================================================================

9. PROBLEMAS CONOCIDOS Y WORKAROUNDS

==============================================================================


9.1. TTS: Azure agotado a diario

  - Azure da 2h de TTS gratis al día

  - Si se necesita más, usar edge-tts

  - Workaround: repartir producción entre Azure (rápido) y edge-tts (lento)


9.2. XTTS balbucea

  - A veces XTTS repite sílabas o produce audios ininteligibles

  - Workaround: emision.py tiene RADIOIA_ALLOW_BAD_XTTS=0 por defecto,

    ignora audios XTTS a menos que se fuerce con variable de entorno


9.3. MiniMax key "invalid" (2049)

  - La key de pago por uso de MiniMax da 2049 "invalid api key"

  - Workaround: no usar MiniMax, saltar a edge-tts


9.4. Edge TTS caracteres especiales

  - Algunos caracteres Unicode (superíndices, ×, etc.) se leen mal

  - Workaround: sanitizar el texto antes de enviarlo a edge-tts

  - Ver reglas TTS pitfall en MEMORY.md de Julio


9.5. Noticias repetidas entre tandas

  - El LLM tiende a generar guiones sobre los mismos temas (SpaceX IPO,

    Google demanda china, etc.) aunque los artículos sean distintos

  - Workaround: filtro manual de duplicados temáticos (ver sección 10.2)


9.6. Caracteres rotos en guiones (codificación)

  - Al traducir títulos puede haber '?' donde deberían ir tildes

  - Workaround: pasar un script de fix antes de generar audios


9.7. PowerShell problemas de encoding

  - PowerShell usa CP1252 por defecto, rompe UTF-8

  - Workaround: usar Python para todo I/O de archivos, no Set-Content


==============================================================================

10. TRABAJO REALIZADO

==============================================================================


10.1. HISTÓRICO (primeras tandas - antes de Jane)

  - 12 Jun 2026, ~18:00-22:00: Producción 3h v2 (MiniMax TTS principalmente)

    * ~234 KB de log, varios bloques generados con voz SereneWoman

  - 12 Jun 2026, ~23:00-23:50: Generación masiva de guiones con Ollama

    * Script: generar_guiones_ollama_5000.py

    * 4 tandas de guiones (234441, 234520, 234944, 235351)

    * Cada tanda: archivos .jsonl + .md

  - 12 Jun 2026, ~23:53: Traducción de titulares a español

    * Script: traducir_titulares_guiones.py

    * Crea archivo 235351 con títulos en español

  - 13 Jun 2026, ~00:00-00:30: Producción MiniMax TTS desde guiones

    * Script: generar_audios_minimax_desde_guiones.py

    * Logs: minimax_ollama.out.log (~15 KB)

  - 13 Jun 2026, ~00:25: Producción XTTS (falló? solo 429 bytes de log)

  - 13 Jun 2026, ~00:30: Producción edge-tts

    * Script: generar_audios_edge_desde_guiones.py

    * Primer intento con el JSONL original (235351)

  - 13 Jun 2026, ~00:36: Icecast arrancado y emitiendo


10.2. TRABAJO DE JANE (12-13 Jun 2026, ~00:44-00:51)

  Julio pidió: revisar que los guiones estén en español y sin repetidos,

  luego pasarlos a audio con edge-tts.


  Pasos realizados:

  1. ANÁLISIS del archivo guiones/ollama_5000_20260612_235351.jsonl (56 guiones)

  2. FILTRADO:

     - 6 noticias NO tecnológicas eliminadas:

       * UFC en Casa Blanca

       * Macroplanta biomasa León

       * Padrón telefonía México

       * Funcionarios teletrabajo Catalunya

       * Google TV Copa del Mundo

       * Playa Cerdeña sombrillas

     - 7 DUPLICADOS TEMÁTICOS eliminados:

       * SpaceX IPO: se quedó la principal (ollama-007), se quitaron 5 versiones extra

       * Google demanda china: se quedó la principal (ollama-005), se quitó duplicado

  3. LIMPIEZA de caracteres rotos:

     - 12 guiones con '?' en lugar de tildes (codificación): corregidos

  4. REASIGNACIÓN de IDs: ollama-XXX → noticia-001 a noticia-043

  5. SÍNTESIS edge-tts con es-ES-AlvaroNeural:

     - 43 audios individuales generados (~26 min total)

     - 9 bloques compuestos con intros/promos de Vidas en Red (~31 min total)

     - Manifest JSON guardado en data/edge_ollama_20260613_004801.json

  6. CREACIÓN de DOCUMENTACION_PROYECTO.txt (este archivo)


  Archivos generados por Jane:

  - guiones/ollama_5000_20260612_235351_LIMPIO.jsonl (43 guiones limpios)

  - audios/noticias/EDGE_OLLAMA_noticia-001_20260613_004801.mp3 (y 42 más)

  - audios/noticias/BLOQUE_EDGE_OLLAMA_20260613_004801_01.mp3 (y 8 más)

  - data/edge_ollama_20260613_004801.json (manifest)

  - DOCUMENTACION_PROYECTO.txt (este archivo)


==============================================================================

11. COMANDOS ÚTILES

==============================================================================

  NOTA: todos los comandos asumen C:\Python313\Radio IA como directorio actual.

  Usar: cd /d C:\Python313\Radio IA (cmd) o Set-Location (PowerShell).


  --- CLI principal (radioia.cmd) ---

  radioia test                Detecta backends TTS disponibles

  radioia produce             Genera 1 bloque de noticias (~5 min)

  radioia buffer 3            Pre-graba 3 horas de audio

  radioia playlist            Construye playlist con todos los audios

  radioia icecast             Arranca Icecast en localhost:8000

  radioia stream              Manda playlist a Icecast

  radioia start               Arranca todo (Icecast + emisión)

  radioia stop                Para todo

  radioia status              Muestra estado actual


  --- Desde Python directamente ---

  python -m src.producir --block

  python -m src.producir --buffer 3

  python -m src.emision --build-playlist

  python -m src.emision --start-icecast

  python -m src.emision --stream


  --- Scripts autónomos ---

  python generar_audios_edge_desde_guiones.py [jsonl_path] [limite]

  python generar_audios_minimax_desde_guiones.py [jsonl_path] [limite]

  python generar_guiones_ollama_5000.py


  --- Verificación del stream ---

  curl.exe http://127.0.0.1:8000/radioia          (Windows)

  curl http://127.0.0.1:8000/status-json.xsl      (JSON de estado)

  Abrir http://127.0.0.1:8000/ en navegador


==============================================================================

12. CREDENCIALES (referencia - los tokens reales están en config.py)

==============================================================================

  OpenRouter:     config.OPENROUTER_API_KEY (sk-or-...)

  Azure Speech:  config.AZURE_SPEECH_KEY y REGION

  MiniMax:       config.MINIMAX_API_KEY (sk-cp-...)

  DeepSeek:      config.DEEPSEEK_API_KEY (sk-...)

  NewsAPI:       config.NEWSAPI_KEY (cdb1f0...)

  Ollama:        localhost:11434 (sin key)

  Edge TTS:      sin key (gratis de Microsoft)

  Icecast admin: admin / *** (en icecast.xml y config.py)


  ⚠️ Los tokens de OpenRouter, Azure y NewsAPI son los únicos funcionales

  a día de hoy. MiniMax y DeepSeek están caídos.


==============================================================================

13. NOTAS PARA EL PRÓXIMO MODELO

==============================================================================

  - Si te piden continuar este proyecto, LEE PRIMERO este documento y

    DOCUMENTACION_PROYECTO.txt.

  - Visita http://127.0.0.1:8000/ para ver si Icecast sigue activo.

  - El flujo más fiable ahora mismo es:

      generar_guiones_ollama_5000.py → (usar Ollama local)

      generar_audios_edge_desde_guiones.py → (usar edge-tts, gratis)

      src/emision.py --build-playlist → (construir playlist)

      src/emision.py --stream → (emitir)

  - Si Azure TTS tiene cuota disponible, usarlo primero (más rápido y mejor

    calidad de voz, con es-MX-BeatrizNeural).

  - Los guiones limpios están en ..._LIMPIO.jsonl. Usar SIEMPRE ese.

  - Si el próximo modelo ve caracteres raros en los títulos o scripts:

    es doble encoding UTF-8→CP1252→UTF-8. NO retraducir, aplicar fix

    de reversión de encoding.

  - Para más contexto sobre preferencias de Julio (voz, estilo, reglas):

    leer MEMORY.md y TOOLS.md en C:\Users\julio\.

  - Los logs de producción están en logs/. Los más relevantes:

    * produccion_3h_v2.log (234 KB) - la tanda grande del 12 Jun

    * produccion_v3_b.log (138 KB) - tanda más reciente con MiniMax

    * minimax_ollama.out.log - producción MiniMax TTS

    * edge_ollama.out.log - producción edge-tts de Jane


==========================================================================

  FIN DE DOCUMENTACIÓN

  Guardado: C:\Python313\Radio IA\DOCUMENTACION_PROYECTO.txt

  Creado por: Jane (OpenClaw) el 13 Junio 2026

==========================================================================


10/6/26

Reclamaciones usando la IA: el Corte Inglés y cómo pedirles ayuda

Hace unas semanas, en el mes de febrero, cometí dos errores de manual. El primero fue acercarme a la mesa de seguros de un gran centro comercial mientras compraba un obsequio para mi madre. El segundo, creer en la palabra de la comercial que me atendió. Me ofrecieron lo que, según ellos, era una simple "propuesta de seguro de hogar y auto sin compromiso". Me aseguraron que bajo ningún concepto aquello implicaba una contratación. Semanas después, tras analizar los precios y rechazar la oferta, mi banco me notificó el cargo de una póliza que yo jamás había firmado.

Tras devolver el recibo, reclamar por los canales oficiales y verme obligado a firmar un documento donde yo "rechazaba" un servicio que nunca había solicitado, el gigante comercial volvió a la carga este mes de junio intentando cobrarme de nuevo la póliza. Ante mi insistencia, la surrealista respuesta de una operadora fue que "el simple hecho de pedir precio de algo ya implica su contratación". Para rematar el despropósito, la única solución que me ofrecieron fue que cogiera mi coche, me desplazara físicamente a su centro comercial y esperara pacientemente mi turno para cancelarlo.

Mi respuesta fue clara: yo no iba a perder mi tiempo por un error fraudulento de su organización. Es ahí donde decidí que la tecnología y la inteligencia artificial debían equilibrar la balanza.


La doctrina "Andy Dufresne" y la parábola de la insistencia


Quienes llevamos años en esto de la soberanía digital sabemos que el ciudadano de a pie a menudo se encuentra indefenso ante los laberintos burocráticos de las grandes corporaciones. En España somos muy dados a gritar y montar un espectáculo en el momento, pero carecemos de la paciencia necesaria para la queja formal y persistente. Da pereza, consume tiempo y rara vez parece surtir efecto.

Sin embargo, siempre he creído en la insistencia brutal. En la película Cadena Perpetua (basada en la novela corta de Stephen King), el protagonista, Andy Dufresne, consigue dotar de libros a la precaria biblioteca de la cárcel enviando cartas semanales sin parar al parlamento. Tras años de insistencia, le envían una partida de libros y un cheque pensando que así se callaría; su respuesta fue empezar a enviar dos cartas por semana.

El ser humano suele ceder ante el insistente simplemente para que deje de ser un pesado. Si no tienes poder, ni influencia, ni dinero, a veces tu única arma es tu santísima insistencia.

Ya utilicé esta estrategia hace años contra un Foster's Hollywood que se negaba a facilitar hojas de reclamaciones, recurriendo a Consumo hasta que fueron sancionados. También contra una junta municipal madrileña para lograr la correcta señalización e iluminación de una zona pública, inundando a correos no solo al responsable directo, sino también a la oposición, a la Comunidad de Madrid y a departamentos colaterales. Si consigues cansar a los que rodean al culpable, sus propios compañeros le dirán: "Oye, atiende a este hombre, que nos está dando la paliza a todos".


Automatizando la justicia con Gemini y Codex


Para esta ocasión, decidí elevar el listón y automatizar el proceso para no consumir mi propio tiempo. Si ellos pretenden desgastarme a mí, yo voy a saturar sus bandejas de entrada utilizando herramientas de Inteligencia Artificial.

El flujo de trabajo ha sido el siguiente:

  • Fase de investigación (Deep Research): Utilicé Gemini para realizar una búsqueda profunda en la red de todas las cuentas de correo electrónico corporativas vinculadas al grupo empresarial y sus asociados. No me limité a atención al cliente: recopilé direcciones de facturación, protección de datos, inversores, delegaciones técnicas e incluso sucursales en Portugal.

  • Gestión de datos: Volqué toda esta lista de direcciones en un documento de Google Sheets.

  • Automatización del envío con Codex: Utilizando Codex (OpenAI), programé un script para automatizar el envío masivo e individualizado. El sistema redactó el correo de queja, adjuntó las pruebas digitalizadas (los cargos del banco, las comunicaciones previas) y ejecutó el envío uno a uno, registrando en el propio documento el estado del envío, la fecha y la hora exacta.

En el tiempo en que me ha tomado preparar este artículo, el script ha enviado con éxito 37 correos electrónicos formalizados a los puntos neurálgicos de la compañía. Mientras escribo esto, mi bandeja de entrada ya está recibiendo las primeras respuestas automatizadas y rebotes de servidores que confirman que la reclamación está indexada en sus sistemas.


El siguiente paso: Vías legales y soberanía del consumidor


El "derecho al pataleo" digital es útil para visibilizar el problema y generar fricción en la empresa, pero debe acompañarse de medidas legales. El siguiente paso en mi hoja de ruta es acudir a la Agencia Española de Protección de Datos (AEPD) utilizando mi certificado digital para denunciar un uso fraudulento y no consentido de mis datos personales, además de formalizar la correspondiente reclamación en la oficina de Consumo.

La moraleja de esta historia es que no debemos conformarnos ni asumir los abusos corporativos como "pequeños inconvenientes" de la vida moderna. Hoy en día, gracias a los modelos de lenguaje y la automatización, los ciudadanos tenemos herramientas para defendernos de manera eficiente, elegante y, sobre todo, implacable.

Os mantendré informados de los avances en los próximos podcasts de Vidas en Red. Como siempre, si os habéis visto en una situación similar con grandes superficies o servicios de reformas subcontratados, os leo en los comentarios.


Enlaces de interés y referencias:


 

6/6/26

MiniMax agotado: un resumen muy breve del dia con Jane

Escucha "Gemma 4 no es para tanto (audio del video)" en Spreaker.

Resumen rapidísimo del día (06/06/2026): Jane ha estado ajustando el sistema de OpenClaw, comparando y probando modelos, dejando WebUI/Ollama listo para consultas locales, documentando el trabajo en el diario y preparando la cascada de modelos para seguir funcionando aunque uno falle.

La anécdota técnica del día: he agotado el cupo de 5 horas de MiniMax. La captura muestra el uso del plan: el consumo de tokens se disparó estos días, así que durante un rato toca tirar de OpenAI, DeepSeek o modelos locales hasta que vuelva a estar disponible.

MiniMax Subscription Plan Usage Details con 55.85M tokens ayer y 182.70M en los ultimos 7 dias
MiniMax ha trabajado hoy como un campeón, pero el cupo de 5 horas ya está consumido.

Seguimos afinando la pequeña infraestructura personal de IA: nube cuando conviene, local cuando interesa, y siempre con plan B.

En cuanto a Gemma 4: no es para tanto, pequeñas tareas en local.... tengo pendiente probarlo en serio para Open WebUI para consultar en la abundante documentación que tengo en mi equipo. También quiero probarlo con OpenCode, pero no nos hagamos ilusiones, Gemma 4 no es, mi de lejos, lo que los modelos "de frontera" son. Lo bueno: siguen mejorando, y ahora tenemos modelos que hace un año o dos eran modelos de frontera. ¿Y por qué lo pruebo? Quiero ver hasta dónde llega para ahorrarme todo lo posible el consumo de (caros) tokens en los modelos de pago. 

21/5/26

Una isla para Vidas en Red - Montando un VPS con Jane

🏝️ Una isla para Vidas en Red — Montando un VPS

Nuevo episodio de Vidas en Red donde os cuento cómo Jane, mi asistente digital, me ayudó a montar un servidor VPS para la webapp de la iglesia (SuanzesApp) desde cero.

Y no solo eso — Jane se ha convertido en mi gestora personal de todo:

  • 🗄️ Registra mis gastos en Notion — desde repostajes del coche hasta compras del súper
  • ⚖️ Controla mi peso y datos de salud
  • 🔐 Gestiona contraseñas y accesos (VPS, NAS, webapp)
  • 🗓️ Recordatorios en mi calendario
  • 📝 Diario detallado de todo lo que hacemos juntos
  • 🚗 Analiza informes de combustible del coche
  • 📦 Backups automáticos a mi NAS Synology cada noche

Todo contabilizado, organizado y accesible desde un solo chat. Una auténtica isla de orden en medio del caos digital.

🎧 Escucha el episodio completo:

▶️ Escuchar en Spreaker


🔗 Enlaces


📱 Promoción Simyo

Patrocinado por Simyo — la operadora que te da lo que necesitas sin pagar de más. Llámame rojo, llámame naranja… mejor llámame Simyo.

🛒 Ir a Simyo

Gracias por tu apoyo! 🙌

19/5/26

OpenClaw - Todo lo que he conseguido hacer

🔥 OpenClaw — Todo lo que he conseguido hacer

Nuevo episodio de Vidas en Red donde os cuento mi experiencia con OpenClaw, mi agente de IA personal al que he llamado Jane.

¿Te imaginas tener a tu propio Jarvis en Telegram? Pues esto es exactamente lo que he conseguido.


🤖 Integraciones que ya funcionan

  • 📧 Gmail — Leer, resumir y enviar correos
  • 📅 Google Calendar — Consultar y crear eventos al instante
  • 💬 Telegram + WhatsApp — Controlarlo todo desde un solo chat
  • 📓 Obsidian — Anotaciones, ideas y documentación automática
  • 📊 Notion — Registro de gastos y peso corporal
  • 🖥️ NAS por SSH — Descargar películas y archivos
  • 🎙️ Spreaker — Publicar episodios del podcast
  • 📝 Rellenar PDFs automáticamente con datos de mi bóveda
  • 🎵 Mezclar audio con música de fondo y sintonía
  • 🐦 X / Twitter — Publicar tweets
  • 📝 Blogger — Publicar en el blog
  • 💰 Categorización inteligente de gastos

Y esto solo es el principio... cada día aprendo algo nuevo 🚀


🎧 Escucha el episodio completo:

▶️ Escuchar en Spreaker


💚 Apoya Vidas en Red

Consigue tu SIM de datos Simyo y tanto tú como yo recibiremos saldo:

📱 Promoción Simyo

Gracias por tu apoyo! 🙌