====== RomM ======
Aplicación web para la gestión de colecciones de juegos, especialmente ROMs. También permite jugar a esas ROMs desde el propio navegador.
* [[https://romm.app/|Sitio web]]
* [[https://github.com/rommapp/romm|Repositorio de código]]
* [[https://docs.romm.app/latest/|Documentación]]
{{ https://raw.githubusercontent.com/rommapp/romm/master/.github/resources/screenshots/preview-desktop.webp |}}
===== Características =====
* Gestiona tu biblioteca de juegos: escanea tus ROMs, agrégales etiquetas, carátulas y metadatos automáticamente con fuentes como IGDB o MobyGames.
* Soporte para [[https://docs.romm.app/latest/Platforms-and-Players/Supported-Platforms/|más de 400 plataformas]] (consolas, micro ordenadores, etc)
* Juega directamente desde el navegador: gracias a [[https://emulatorjs.org/|EmulatorJS]], juega sin instalar nada adicional.
* Self-hosted y abierto: tú mismo alojas la aplicación (por ejemplo con Docker), mantienes el control de tus datos y puedes extenderlo o integrarlo con otras herramientas.
* Aplicaciones nativas e integraciones para jugar desde donde queramos: Playnite (Windows), Argosy Launcher (Android) o consolas portátiles con CFW (como TrimUI).
===== Instalación =====
==== Docker ====
Ejemplo de fichero Docker Compose:
version: "3"
volumes:
mysql_data:
romm_resources:
romm_redis_data:
services:
romm:
image: rommapp/romm:latest
container_name: romm
restart: unless-stopped
environment:
- DB_HOST=romm-db
- DB_NAME=romm # Should match MARIADB_DATABASE in mariadb
- DB_USER=romm-user # Should match MARIADB_USER in mariadb
- DB_PASSWD= # Should match MARIADB_PASSWORD in mariadb
- ROMM_AUTH_SECRET_KEY= # Generate a key with `openssl rand -hex 32`
- SCREENSCRAPER_USER= # These are the recommended metadata providers
- SCREENSCRAPER_PASSWORD= # https://docs.romm.app/latest/Getting-Started/Metadata-Providers/#screenscraper
- RETROACHIEVEMENTS_API_KEY= # https://docs.romm.app/latest/Getting-Started/Metadata-Providers/#retroachievements
- STEAMGRIDDB_API_KEY= # https://docs.romm.app/latest/Getting-Started/Metadata-Providers/#steamgriddb
- HASHEOUS_API_ENABLED=true # https://docs.romm.app/latest/Getting-Started/Metadata-Providers/#hasheous
volumes:
- romm_resources:/romm/resources # Resources fetched from IGDB (covers, screenshots, etc.)
- romm_redis_data:/redis-data # Cached data for background tasks
- /path/to/library:/romm/library # Your game library. Check https://docs.romm.app/latest/Getting-Started/Folder-Structure/ for more details.
- /path/to/assets:/romm/assets # Uploaded saves, states, etc.
- /path/to/config:/romm/config # (Optional) Path where config.yml is stored
ports:
- 80:8080
depends_on:
romm-db:
condition: service_healthy
restart: true
romm-db:
image: mariadb:latest
container_name: romm-db
restart: unless-stopped
environment:
- MARIADB_ROOT_PASSWORD= # Use a unique, secure password
- MARIADB_DATABASE=romm
- MARIADB_USER=romm-user
- MARIADB_PASSWORD=
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
start_period: 30s
start_interval: 10s
interval: 10s
timeout: 5s
retries: 5
* [[https://github.com/rommapp/romm/blob/master/examples/config.example.yml|Ejemplo de fichero "config.yml"]]
===== Estructura de directorios =====
Si queremos que RomM detecte automáticamente nuestra bibilioteca de ROMs, podemos optar por dos organizaciones:
* Estructura A
* Estructura B
Si no existe ninguna estructura de directorios, los ficheros se pueden subir desde la interfaz web de RomM y la aplicación automáticamente creará la **Estructura A**.
==== Estructura A ====
La recomendada. Tanto ROMs como BIOS tienen sus directorios dedicados.
* ''/roms//''
* ''/bios//''
Ejemplo:
library/
├─ roms/
│ ├─ gbc/
│ │ ├─ game_1.gbc
│ │ └─ game_2.gbc
│ │
│ ├─ gba/
│ │ ├─ game_3.gba
│ │ └─ game_4/
│ │ ├─ game_4.gba
│ │ ├─ dlc
│ │ │ ├─ game_4_dlc_1.7z
│ │ │ └─ game_4_dlc_2.7z
│ │ ├─ hack
│ │ │ └─ game_4_hardmode.rar
│ │ ├─ manual
│ │ │ └─ game_4_manual.pdf
│ │ ├─ mod
│ │ │ └─ game_4_crazy_mode.zip
│ │ ├─ patch
│ │ │ └─ game_4_patch_v1.1.zip
│ │ ├─ update
│ │ ├─ demo
│ │ ├─ translation
│ │ └─ prototype
│ │
│ └─ ps/
│ ├─ game_5/
│ │ ├─ game_5_cd_1.iso
│ │ └─ game_5_cd_2.iso
│ │
│ └─ game_6.iso
│
└─ bios/
├─ gba/
│ └─ gba_bios.bin
│
└─ ps/
├─ scph1001.bin
├─ scph5501.bin
└─ scph5502.bin
==== Estructura B ====
Cada plataforma tiene su propia carpeta donde se almacenan tanto las ROMs como las BIOS:
* ''//roms''
* ''//bios''
Ejemplo:
library/
├─ gbc/
│ └─ roms/
│ ├─ game_1.gbc
│ └─ game_2.gbc
│
├─ gba/
│ ├─ roms/
│ │ ├─ game_3.gba
│ │ └─ game_4/
│ │ ├─ game_4.gba
│ │ ├─ dlc
│ │ │ ├─ game_4_dlc_1.7z
│ │ │ └─ game_4_dlc_2.7z
│ │ ├─ hack
│ │ │ └─ game_4_hardmode.rar
│ │ ├─ manual
│ │ │ └─ game_4_manual.pdf
│ │ ├─ mod
│ │ │ └─ game_4_crazy_mode.zip
│ │ ├─ patch
│ │ │ └─ game_4_patch_v1.1.zip
│ │ ├─ update
│ │ ├─ demo
│ │ ├─ translation
│ │ └─ prototype
│ │
│ └─ bios/
│ └─ gba_bios.bin
│
└─ ps/
├─ roms/
│ ├─ game_5/
│ │ ├─ game_5_cd_1.iso
│ │ └─ game_5_cd_2.iso
│ │
│ └─ game_6.iso
│
└─ bios/
├─ scph1001.bin
├─ scph5501.bin
└─ scph5502.bin
===== Configuración inicial =====
Al entrar por primera vez a http://localhost:8080 (o la IP y puerto que hayamos configurado), se nos presentará un asistente para elegir:
* Estructura de la biblioteca de roms (ver sección más abajo)
* Creación del usuario administrador.
* Orígenes de metadatos para completar automáticamente información sobre nuestras roms.
===== Subir roms =====