artículos / Cada vez que le pedía a ChatGPT que me m...

Cada vez que le pedía a ChatGPT que me mostrara el mundo del libro, perdía lo que había generado el día anterior

AWONG 5 minutos de lectura 27 vistas

Construí Verso, un lector de worldbuilding que corre al lado del libro que estoy leyendo, porque ChatGPT perdía lo que generaba y no respetaba mi progreso de lectura.

Cada vez que le pedía a ChatGPT que me mostrara el mundo del libro, perdía lo que había generado el día anterior

Voy por El Archivo de las Tormentas, de Sanderson — un mundo enorme, con su propia física, su propia fauna, docenas de personajes que se cruzan a lo largo de miles de páginas. Leerlo así, a secas, ya es denso. Lo que quería no era leerlo más rápido: quería ver más de él mientras avanzaba. Cómo se ve un chull. Cómo se ve la armadura esquirlada. Expandir el mundo que el texto ya describe, en vez de imaginármelo solo con palabras.

Llevaba meses intentándolo a mano: el Kindle ocupando 3/4 de la pantalla de la tablet, ChatGPT en el cuarto que sobra, generando una imagen cada vez que quería visualizar algo. Fallaba de dos formas concretas. Lo que generaba un día se perdía en un hilo infinito que no quedaba archivado por capítulo — la próxima vez que quería ver esa imagen, ya no estaba, o estaba enterrada quince mensajes atrás, y tenía que volver a pedirla. Y ChatGPT no sabía en qué página iba: le preguntaba sobre un personaje que acababa de aparecer y me contestaba con todo lo que sabía de él en el libro entero, cosas que yo todavía no había leído.

Las dos fallas venían de lo mismo: cada vez que le pedía algo a ChatGPT, empezaba de cero. No acumulaba nada sobre mi lectura, no sabía dónde estaba, no guardaba lo de ayer para hoy. Quería lo contrario — que el mundo se fuera construyendo capítulo a capítulo, y que se quedara ahí.

Lo que estuve a punto de construir mal

Mi primer instinto fue el obvio: hacer lo mismo, pero mejor integrado — meter un chat de generación dentro de la app. Pido una imagen desde la tablet, se genera ahí mismo, en el momento que la necesito.

Me equivoqué, y me di cuenta a tiempo. Eso seguía siendo exactamente el mismo problema con mejor interfaz: cada imagen sigue siendo un evento aislado que no queda archivado, y el generador sigue sin saber dónde voy en la lectura.

Lo que necesitaba no era generar más rápido. Era tener el material ya ahí: curado capítulo por capítulo, generado con calma antes de leer, esperándome en el momento exacto en que lo alcanzo. Eso significó sacar la generación en vivo de la app por completo. Verso trae un asistente de IA, sí, pero es secundario a propósito — pantalla propia, nunca encima del contenido — y en la práctica casi no lo uso. El trabajo real de generación pasa antes de abrir la app, no dentro de ella.

El nombre

Elegí entre tres candidatos, todos sacados de la anatomía física de un libro: marginalia (las notas al margen), endpaper (las guardas, donde a veces el editor imprime el mapa del mundo), y verso — la página izquierda de un pliego, la que queda justo al lado de la que estás leyendo. Me quedé con Verso. Es literal: así es exactamente como vive en la tablet, al lado del Kindle.

El gate

Todo el diseño gira alrededor de una restricción: nada se me puede revelar antes de que el libro mismo lo revele. Eso significa dos capas de spoiler gate. La primera es de contenido: cada pieza — una entidad, una imagen, una nota — tiene un punto de la lectura donde se desbloquea, y antes de eso aparece sellada, contada pero no nombrada ("3 más sin revelar"). La segunda es del asistente, para el rato en que sí lo uso: mi progreso se le inyecta al system prompt, pero esa capa es frágil — el modelo conoce el libro entero y puede filtrar aunque se lo pida, así que sus respuestas quedan marcadas como no verificadas.

Automaticé una prueba que carga el pack real y revisa, en cada punto posible de lectura — listas, tarjetas, apariciones, buscador — que no se filtre nada posterior. Es la única prueba de esta app que no negocio. Un spoiler no tiene arreglo después de ocurrido.

Esa prueba encontró un bug real antes de que llegara al dispositivo: cinco entidades tenían su punto de revelación después de su primera mención en el texto — Kaladin se revelaba en el capítulo 2 cuando el capítulo 1 ya habla de él. La regla que quedó, ya escrita en el documento de arquitectura: el reveal de una entidad es su primera aparición, menciones incluidas. Si el texto la nombra, el lector ya la conoce, aunque la ficha no se le haya mostrado todavía.

Lo que solo se ve en el dispositivo de verdad

En Expo Go (la app oficial de Expo — expo.dev/go — para correr tu código directo en un celular real, sin compilar nada) todo funcionaba. En el APK (el instalador final de una app Android — el archivo que de verdad se pone en el teléfono, en vez de correr desde la app de Expo) de verdad aparecieron dos bugs invisibles hasta ese momento. El primero: el importador de packs usaba File.copy() para traer imágenes desde una carpeta compartida por Syncthing (sincronización de archivos entre dispositivos, sin nube — syncthing.net), y ese método no cruza de una URI content:// a una ruta file:// — "This method cannot be used with content URIs", y la importación moría en la primera imagen. El segundo: Android bloquea tráfico HTTP sin cifrar para cualquier app moderna, así que importar por URL local fallaba con "Network request failed" mientras la tablet le hacía ping perfecto a la laptop. Expo Go enmascara los dos — trae su propia excepción para el primero y no aplica la política del segundo. Los dos solo existían en el mundo real.

Verla funcionar de verdad

La probé primero con un pack de práctica de Drácula — dominio público, para no arriesgar nada mientras el motor no estaba probado. Cuando funcionó, cargué el pack real de El camino de los reyes y seguí leyendo con la app al lado, sin pensar en ella. La primera vez que se sintió terminada no fue viéndola en la laptop: fue de vacaciones, sin Metro, sin laptop prendida, la app corriendo sola en la tablet con el progreso marcado en el capítulo 14, avanzando en cadena con el botón LEÍDO — y el gate no me dejó saltarme nada.

Lo que me llevo

No construí un chat que genera imágenes de mi libro. Construí un lector donde el mundo ya está ahí, capítulo a capítulo, sin que nada se pierda de un día para otro y sin que nada se adelante a lo que todavía no sé. Es opensource — licencia MIT (una de las licencias de software libre menos restrictivas: casi cualquiera puede usar, copiar y modificar el código, incluso comercialmente — opensource.org/license/mit), github.com/andyeswong/verso — porque el motor no tiene nada de Sanderson adentro: es un formato de pack (JSON más una carpeta de media) que sirve para cualquier libro que alguien quiera curar así.

Cómo armar ese material — cómo le pedí a la IA que me ayudara a generar prompts de un mundo que yo no conocía a fondo, y todo lo que probé y descarté antes de llegar a las imágenes que usé — es la parte que de verdad tiene IA adentro, y va en los siguientes dos posts: uno sobre los packs, otro sobre las imágenes.

artículos_relacionados

posts_recientes