Por
Dekuwa
Ownfoil es un gestor de librerías para Nintendo Switch que convierte tu colección en una tienda Tinfoil (Tinfoil Shop) autoalojada y totalmente personalizable.
El objetivo de este proyecto es gestionar tu librería, identificar cualquier contenido faltante (DLC o actualizaciones) y proporcionar una forma sencilla de explorar tu contenido. Algunas de las características incluyen:
Autenticación multiusuario
Interfaz web para configuración
Interfaz web para explorar la librería
Identificación de contenido mediante descifrado o nombre de archivo
Personalización de la tienda Tinfoil
El proyecto aún está en desarrollo, por lo que es de esperar que algunas cosas fallen o cambien sin previo aviso.
Instalación
Usando Docker
Docker run Al ejecutar este comando, la tienda se iniciará en el puerto 8465 con la librería en /tu/directorio/de/juegos:
docker run -d -p 8465:8465 \
-v /tu/directorio/de/juegos:/games \
-v /tu/directorio/de/configuracion:/app/config \
-v /tu/directorio/de/datos:/app/data \
--name ownfoil \
luketanti/ownfoil:latest
La tienda será accesible con la IP de tu ordenador/servidor y el puerto, por ejemplo, http://localhost:8465 desde el mismo equipo o http://192.168.1.100:8465 desde un dispositivo de tu red.
Docker compose Crea un archivo llamado docker-compose.yml con el siguiente contenido:
version: "3"
services:
ownfoil:
container_name: ownfoil
image: luketanti/ownfoil:latest
# environment:
# # Para permisos de escritura en el directorio de configuración
# - PUID=1000
# - PGID=1000
# # Para crear/actualizar un usuario administrador al inicio
# - USER_ADMIN_NAME=admin
# - USER_ADMIN_PASSWORD=contraseña_admin
# # Para crear/actualizar un usuario regular al inicio
# - USER_GUEST_NAME=invitado
# - USER_GUEST_PASSWORD=contraseña_invitado
volumes:
- /tu/directorio/de/juegos:/games
- ./config:/app/config
- ./data:/app/data
ports:
- "8465:8465"
Nota: Puedes controlar el UID y GID del usuario que ejecuta la aplicación en el contenedor con las variables de entorno PUID y PGID. Por defecto, el usuario se crea con 1000:1000. Si quieres tener la misma propiedad para los directorios montados, necesitas configurar esas variables con el UID y GID devueltos por el comando id.
Luego puedes crear e iniciar el contenedor con el comando (ejecutado en el mismo directorio que el archivo docker-compose):
docker-compose up -d
Esto es útil si no quieres recordar el comando docker run y deseas tener una configuración de contenedor persistente y reproducible.
Usando Python
Clona el repositorio usando git, instala las dependencias y ya estarás listo:
$ git clone https://github.com/luketanti/ownfoil
$ cd ownfoil
$ pip install -r requirements.txt
$ python app/app.py
Para actualizar la aplicación, necesitarás descargar (pull) los últimos commits.
Configuración de CyberFoil
En CyberFoil, configura la URL de la eShop de Ownfoil en Ajustes:
URL: http://<ip-del-servidor>:8465 (o https:// si usas un proxy inverso con SSL)
Usuario: nombre de usuario creado en los ajustes de Ownfoil (si la tienda es Privada)
Contraseña: contraseña creada en los ajustes de Ownfoil (si la tienda es Privada)
Uso
Una vez que Ownfoil esté en ejecución, puedes acceder a la interfaz web de la tienda navegando a http://<IP del ordenador/servidor>:8465.
Administración de usuarios
Ownfoil requiere la creación de un usuario admin para habilitar la autenticación en tu tienda. Ve a Ajustes (Settings) para crear el primer usuario con derechos de administrador. Después, puedes añadir más usuarios a tu tienda de la misma manera.
Administración de la librería
En la sección Librería (Library) de la página de Ajustes, puedes añadir directorios que contengan tu contenido. Luego puedes activar manualmente el escaneo de la librería: Ownfoil escaneará el contenido de los directorios e intentará identificar cada archivo compatible (actualmente nsp, nsz, xci, xcz).
Hay un sistema de vigilancia (watchdog) para todos los directorios añadidos: los archivos movidos, renombrados, añadidos o eliminados se reflejarán directamente en tu librería.
Gestión de la librería
En la página Gestionar (Manage), puedes organizar la estructura de tu librería, eliminar archivos de actualización antiguos y convertir nsp/xci a nsz.
Interfaz del explorador de la librería
Vista de tarjetas: los iconos de estado de Base/Actualización/DLC se muestran sobre los botones de acción.
Vista de iconos: el botón de Información del juego se muestra superpuesto sobre la miniatura del juego.
Información del juego (TitleDB)
El modal de información del juego utiliza metadatos de TitleDB (no extraídos de la web de Nintendo):
Descripción: se muestra como resumen del juego.
Capturas de pantalla: se muestran en una cuadrícula; haz clic en una captura para ampliarla. Ownfoil descargará el conjunto de datos de descripciones/capturas de TitleDB bajo demanda en ./data/titledb/US.en.json (ruta Docker: /app/data/titledb/US.en.json).
Detalles de conversión:
Utiliza la herramienta nsz incluida en el directorio ./nsz (con salida de progreso).
Utiliza el mismo archivo keys.txt subido en la página de Ajustes.
Muestra el estado en vivo, el progreso por archivo y el nombre del archivo actual.
Filtra los archivos menores de 50 MB en el menú desplegable de conversión manual.
La casilla Verbose muestra la salida detallada de la tarea; de lo contrario, la salida se mantiene limpia.
Descargas automáticas de actualizaciones (Prowlarr + Cliente Torrent)
Ownfoil puede buscar automáticamente actualizaciones faltantes usando Prowlarr, enviar las coincidencias a un cliente torrent (qBittorrent o Transmission) e integrar las descargas completadas de nuevo en la librería. La interfaz está basada en aplicaciones como Sonarr/Radarr con pruebas de conexión explícitas.
Configuración
Abre la página de Ajustes y ve a la sección Descargas.
Activa las Descargas automáticas y configura:
Intervalo de búsqueda (minutos): cada cuánto tiempo Ownfoil buscará actualizaciones faltantes.
Seeders mínimos: descarta resultados con baja disponibilidad.
Términos requeridos / Lista negra: ajusta las coincidencias de búsqueda (separados por comas).
Categoría/etiqueta de torrent: usada para etiquetar descargas en el cliente (por defecto ownfoil).
Configura Prowlarr:
URL de Prowlarr (ej. http://localhost:9696)
Clave API
IDs de indexadores (opcional, separados por comas). Si se configuran, Ownfoil limitará las búsquedas a estos indexadores.
Usa Test Prowlarr para validar la conectividad.
Configura el Cliente Torrent:
Cliente: qBittorrent o Transmission.
URL del cliente y credenciales.
Ruta de descarga (opcional): si se establece, Ownfoil avisará si no existe o no tiene permisos de escritura.
Usa Test torrent client para validar la conectividad.
Títulos y personalización
Configuración de títulos
En la sección Títulos de los Ajustes se especifica el idioma de tu tienda (actualmente el mismo para todos los usuarios). Aquí también puedes subir tu archivo de claves de la consola (keys.txt) para permitir la identificación de contenido mediante descifrado, en lugar de usar solo nombres de archivo. Si no proporcionas las claves, Ownfoil espera que los archivos se llamen [APP_ID][vVERSION].
Personalización de la tienda
En la sección Tienda de los Ajustes puedes personalizar aspectos como el mensaje que aparece al acceder con éxito desde Tinfoil o si la tienda es pública o privada. La opción Cifrar tienda (Encrypt shop) solo afecta al payload de Tinfoil; la interfaz web y la de administración siguen siendo accesibles normalmente. El cifrado utiliza la clave pública de Tinfoil y AES, y requiere la dependencia pycryptodome.
Notas de despliegue
Volúmenes recomendados: /games, /app/config y /app/data.
Mapea el puerto 8465 del contenedor a cualquier puerto del host que prefieras.
Para crear una cuenta de administrador inicial, configura USER_ADMIN_NAME y USER_ADMIN_PASSWORD al iniciar el contenedor.
Actualiza el contenedor con docker pull luketanti/ownfoil:latest y reinícialo.
Proxy inverso: IP real del cliente
Si ejecutas Ownfoil detrás de un proxy inverso (como Nginx Proxy Manager), Ownfoil solo confiará en X-Forwarded-For si se configura explícitamente en config/settings.json:
{
"security": {
"trust_proxy_headers": true,
"trusted_proxies": ["172.16.0.0/12", "192.168.0.0/16"]
}
}
Configura trusted_proxies con la(s) IP(s) de tu proxy y/o la subred de tu red Docker para que la página de Actividad muestre la IP WAN/cliente en lugar de la IP LAN del proxy.
Fuentes y descargas de TitleDB
Los artefactos de TitleDB se descargan por separado del conjunto de metadatos.
El conjunto de descripciones/capturas (US.en.json) se descarga en /app/data/titledb/US.en.json y no forma parte del archivo zip de artefactos de TitleDB.
El archivo zip de artefactos de TitleDB puede ser muy grande (varios GB) dependiendo de la salida del flujo de trabajo de origen.
Ownfoil es un proyecto encabezado por luketanti.