
Lo mencioné hace tiempo, pero es un tema recurrente para mí, así que debo repetirlo. Tengo una ligera obsesión con el manejo de fotos. No con capturarlas, sino con organizarlas.
Llevo años explorando la manera ideal de gestionarlas sin depender de Google Photos, y hace más de un año encontré una opción que se ajustaba perfectamente a mis necesidades después de un extenso y educativo proceso de búsqueda.
Se trata de la aplicación de código abierto Immich, que cualquiera puede instalar en su PC o servidor/NAS para crear un “Google Photos autohospedado” y evitar la dependencia de servicios en la nube.
Immich destaca en muchos aspectos, pero si tuviera que señalar una limitación, sería que no está diseñada para televisores. En realidad, pocas apps lo están, pero un gestor de fotos, destinado a disfrutar de las imágenes, debería considerar mejor esa funcionalidad.
En Immich, esto no ocurre. Existen versiones fáciles de instalar para Docker Compose, Portainer, Unraid (la que utilizo en mi NAS) o TrueNAS Scale. Además, hay apps móviles para Android e iOS que permiten conectarse desde el teléfono al servidor Immich y ver fotos y videos en esos dispositivos.
Sin embargo, no hay una app oficial para Android TV / Google TV, ni para tvOS. No poseo un Apple TV, pero sí me interesaba tener esas versiones para Android TV. Aquí entra un proyecto paralelo llamado Immich-Android-TV, mantenido por un desarrollador con el alias giejay en GitHub, activo desde hace unos años.
Al descubrir este proyecto, pensé que finalmente podría ver las fotos cómodamente en el televisor del salón con mis hijos, pero la emoción inicial se transformó en decepción. Aunque la app permite visualizar las fotos, encontré varias restricciones.
La principal es la dificultad para acceder a fotos antiguas. En Immich y en Immich-Android-TV, las fotos se muestran en orden cronológico inverso: primero las más recientes, luego las más antiguas.
En la versión web, Android e iOS, el cliente de Immich incluye una línea de tiempo, una barra en el lado derecho de la interfaz que facilita seleccionar fotos por día, mes y año. En el cliente para Android TV, eso no existe.
Si deseaba ver fotos recientes, no había problema, pero no había una forma rápida de acceder a imágenes de hace una década. Tenía que desplazarme hacia abajo en la cuadrícula de fotos hasta llegar a esas fechas. Con pocas fotos, eso podría ser sencillo, pero en mi biblioteca actual tengo unas 155.000 fotos y unos 23.000 videos. Desplazarme hasta 2015 probablemente me habría tomado horas presionando el botón “abajo” en el control remoto de mi dispositivo Google TV.
Había otras limitaciones significativas, y el desafío de depender de un proyecto de código abierto como este es que a menudo solo hay una persona detrás. Esa persona suele hacerlo por hobby, lo que implica una dedicación limitada. Puedes solicitar características, pero podrían no ser prioritarias para el desarrollador, o si lo son, podrían tardar en implementarse. Y si llegan, podrían diferir de lo esperado.
Eso era antes.
Porque ahora, muchas personas —no diré que prácticamente cualquiera, pero sí muchas— pueden tomar cualquier idea para una app y hacerla realidad.
La capacidad es aún mayor cuando se parte de proyectos de código abierto: allí está todo el código base, por lo que gran parte del trabajo ya está hecho; solo hay que modificarlo según se prefiera.
Eso es exactamente lo que hice con Immich-Android-TV.
Hace aproximadamente dos semanas, tomé unos días de vacaciones pendientes, pero no viajé a ningún lugar. Ya había experimentado programando con IA, pero aquello —un contador de puntos para el juego de cartas de la “pocha”— fue algo menor.
Esto iba mucho más allá. Quería tomar el código de Immich-Android-TV y adaptarlo para que hiciera todo lo que deseaba y de la forma que quería. Así que, una mañana de esos días, se me ocurrió intentar algo loco. Sin expectativas. Sin esperanza.
Qué equivocado estaba.
Advertencia breve: esta sección podría resultar algo más técnica, pero puedes saltarla si prefieres ir a la siguiente. Para mí es clave describir el proceso de “vibe coding”, en el que básicamente conversas con una IA para que programe por ti.
En mi caso, abrí una terminal en mi Mac mini M4. Por otro lado, en el navegador, creé un fork del proyecto de giejay en GitHub. Luego, cloné el repositorio en mi Mac con un “git clone” y ejecuté Droid, una herramienta que estaba probando casi como un juguete. Es similar a Claude Code, Codex o Gemini CLI, y permite usar claves para acceder a APIs de varias plataformas de IA como las mencionadas.
Al lanzarlo, Droid —configurado con una clave API de gpt-5.1— detectó mi directorio y presentó una caja de texto para que le indicara lo que quería. Eso hice: le expliqué (en inglés, aunque luego pasé al español, sin diferencia) qué era el proyecto Immich-Android-TV y qué buscaba lograr.
En esencia, una opción “Línea de tiempo” (Timeline) que permitiera navegar por meses y años rápidamente para ver fotos de un mes y año específicos. Era algo inexistente en el proyecto oficial y que deseaba desde que lo descubrí.
A partir de ahí, Droid/gpt-5.1 elaboró un plan de acción, y tras unos tres o cuatro minutos, creó una hoja de ruta detallada dividida en fases. Tras leer el plan, solo dije “go ahead” (“adelante”) y esperé.
Terminó de modificar el código poco después. No sabía qué hacer luego, ¿cómo probarlo? Una vez más, bastó con preguntar. La IA me indicó instalar Android Studio y lanzar un emulador de Smart TV con Android TV en resolución 1080p.
Una vez hecho, pude probar mi fork tras compilar el código Kotlin (./gradlew installDebug), que instalaba directamente el paquete APK en el emulador vía ADB. Comenzó entonces un proceso de depuración sorprendente: la compilación fallaba, copiaba la salida del comando, se la pasaba a Droid, y él detectaba el problema, intentaba corregirlo y me pedía probar de nuevo. Cuando finalmente compiló bien y lo probé, la opción estaba allí, pero no funcionaba.
Para saber por qué, bastó preguntar, siendo proactivo. A la consulta, agregué algo como “dime qué puedo hacer y qué necesitas para detectar el problema”. La IA indicó ejecutar un comando y copiar la salida. Tras varios mensajes, el chatbot no resolvía, y el Timeline devolvía un error 400 que gpt-5.1 no podía solventar en mi prueba.
Fue entonces cuando cambié a Gemini 3 Pro, disponible gratuitamente en modos Fast y Thinking en el sitio web oficial de Gemini. Primero, pedí a Droid generar un archivo txt con un prompt detallando el objetivo, el problema y los archivos involucrados. Ese archivo era un prompt claro de todo el proceso, y al cargarlo en Gemini, el modelo trabajó en la solución.
Ahí continuó la conversación previa con Droid, pero en la web. Esta forma de vibe coding no es ideal, porque el usuario debe informar constantemente a la IA de lo que ocurre, pasando tiempo copiando y pegando texto, además de dar instrucciones. Eso es algo tedioso, pero tiene la ventaja de hacerte consciente de lo que hace la IA en cada paso. Hay herramientas como Claude Code o Gemini CLI que automatizan más, y aunque las probé después, esta fase inicial la hice en modo “copia-pega”.
El proceso con Gemini 3 Pro fue similar, pero la sorpresa fue que la IA avanzó y corrigió tanto el problema inicial como los subsiguientes. No recuerdo exactamente el tiempo total, pero fueron menos de cuatro horas, y al final, obtuve lo deseado: un Immich-Android-TV con Timeline.
La interfaz no era perfecta, pero eso no importaba mucho. Lo clave era que funcionaba. Si quería ver fotos de mis hijos de hace una década, no necesitaba presionar “abajo” durante horas. Bastaba buscar el año y mes e ingresar en ese período.
La sensación de lograrlo es difícil de describir. Lo es porque nunca pensé que podría hacerlo (aunque en realidad no lo hice yo). Estudié ingeniería superior en informática, pero hace mucho tiempo y nunca me atrajo programar mucho. Si dedico tiempo, puedo entender cierto código, la base y estructura, pero me cuesta esfuerzo.
Crear código, especialmente en algunos lenguajes, sería imposible para mí.