diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..187c8ae --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "romm/romm.wiki"] + path = romm/romm.wiki + url = https://github.com/rommapp/romm.wiki.git +[submodule "romm.wiki"] + path = romm.wiki + url = https://github.com/rommapp/romm.wiki.git diff --git a/romm/LICENSE b/LICENSE similarity index 100% rename from romm/LICENSE rename to LICENSE diff --git a/romm/README.md b/README.md similarity index 100% rename from romm/README.md rename to README.md diff --git a/romm.wiki b/romm.wiki new file mode 160000 index 0000000..c99aa90 --- /dev/null +++ b/romm.wiki @@ -0,0 +1 @@ +Subproject commit c99aa90737b2c6370d360529f25976c67e664dbd diff --git a/romm/Authentication.md b/romm/Authentication.md deleted file mode 100644 index e02ae88..0000000 --- a/romm/Authentication.md +++ /dev/null @@ -1,63 +0,0 @@ -RomM provides support for various forms of authentication, granting flexibility in securing access to its features. - -### Setup - -You'll want to set the following env variable before starting RomM: - -- `ROMM_AUTH_SECRET_KEY` is required and can be generated with `openssl rand -hex 32` - -### Sessions - -When the `/login` endpoint is called with valid credentials, a `session_id` is generated, stored as a cookie and sent to the browser. The same token is used to create a cache entry in Redis (or in-memory if Redis is disabled) which maps the token to the user. This way no sensitive information is stored on the client. - -### Roles - -A user can have one of the following roles: - -- VIEWER: Can view platforms and ROMs, download ROMs, and edit own profile -- EDITOR: Can create/edit/delete platforms and ROMs -- ADMIN: Can view all users, and create/edit/disable/delete users - -As permissions are additive, editors will have all permissions of the `viewer` role, and admins all those of the `editor` role. - -## Basic Authentication - -Requests can be made to protected API endpoints with an authorization header. The token is the base64 encoded value of `username:password`. - -Example using cURL: - -```bash -curl https://romm.local/api/platforms -H 'Authorization: Basic YWRtaW46aHVudGVyMg==' -``` - -## OAuth - -Along with the above forms of authentication, we've added an endpoint to generate expiring, scope-limited authentication tokens (`/api/token`). Successfully authenticating with that endpoint with return an `access_token` valid for 15 minutes, and a [`refresh_token`](https://oauth.net/2/grant-types/refresh-token/) valid for 2 weeks. The `refresh_token` can be used to generate a new `access_token` when needed. - -The `/api/token` endpoint requires a username, password, and a list of [scopes](https://oauth.net/2/scope/) in the format `read:roms write:roms read:platforms ...`. The list of scopes and endpoints are available to browse via Swagger UI or Redoc (see next section). - -**Note: As of now, only the legacy [password grant type](https://oauth.net/2/grant-types/password/) is supported.** We plan to eventually add support for [Client Credentials](https://oauth.net/2/grant-types/client-credentials/). - -### OpenAPI - -The API endpoints are fully documented and compliant with the OpenAPI specification. Explore the API endpoints using the Swagger UI interface at `/api/docs` and the Redoc interface at `/api/redoc`, or view the raw JSON at `/openapi.json`. - -For more information on OpenAPI, visit the [OpenAPI Specification](https://www.openapis.org/) website. - -## FAQ - -### Can I disable authentication? - -No, authentication is required and enabled by default. - -### I want to allow an EDITOR to edit ROMs but not delete them. Can I do that? - -At this time, fine-grain control over permissions within a role is not supported. This decision was taking in order to simplify user management in the client, and authentication/permission code on the server. - -### Is authentication safe/robust? Can I trust it? - -We've done our best to build an authentication system that is simple, clear and comprehensible. We have automated tests which verify that access is granted when it should be, and blocked when not (invalid credentials, missing permissions, expired access tokens, etc.). That being said, we welcome any reviews of our authentication and permission flows, PRs to fix issues, and new tests to cover edge cases. - -### I found an bug/issue with authentication. How do I report it? - -Please report bugs in our authentication/permission system privately by [submitting a vulnerability report](https://github.com/zurdi15/romm/security/advisories/new). \ No newline at end of file diff --git a/romm/Custom-Platforms.md b/romm/Custom-Platforms.md deleted file mode 100644 index 5aecd64..0000000 --- a/romm/Custom-Platforms.md +++ /dev/null @@ -1,9 +0,0 @@ -While RomM supports every platform listed in the [Supported Platforms page](https://github.com/zurdi15/romm/wiki/Supported-Platforms), the list is not exhaustive, and you may have ROMs in your library for other platforms. To load those files into RomM, place them in a folder for each platform, and give it a name that's **all lowercase**, with **`-` to separate words**, and with **no white spaces**. For example, `pocket-challenge-v2` would map to `Pocket Challenge V2`, and display the default platform icon in the app. - -Furthermore, only a portion of the supported platforms have custom icons built-in. If your library has platforms that aren't listed in [the platforms icons list](https://github.com/zurdi15/romm/tree/release/frontend/assets/platforms), RomM will display a default fallback icon. - -If you'd like to load your own custom icons for missing platforms, you can mount `/var/www/html/assets/platforms` to some local folder and place all of your custom **`.ico`** platform icons in there. You'll also want to download the ones [provided in this project](https://github.com/zurdi15/romm/tree/release/frontend/assets/platforms) and place them in the same folder. If you'd like to use your own icons for platforms already supported by RomM, just replace the file with another using the exact same name. - -**The name of the `.ico` file should match the slug of the platform on IGDB.** For example, the URL for the AmstradCPC is https://www.igdb.com/platforms/acpc, so the filename should be `acpc.ico`. - -Screenshot 2023-09-15 at 10 45 04 AM \ No newline at end of file diff --git a/romm/EmulatorJS-Player.md b/romm/EmulatorJS-Player.md deleted file mode 100644 index 19f5b3e..0000000 --- a/romm/EmulatorJS-Player.md +++ /dev/null @@ -1,43 +0,0 @@ -[EmulatorJS](https://emulatorjs.org/) is a web-based emulator for various system; that is, it allows you to run old games in your web browser. It's based on [Emscripten](https://emscripten.org/), which is a toolchain for compiling C and C++ code to WebAssembly. - -### Loading saves and states - -Our integration with EmulatorJS automates the process of loading and saving save files and save states. Before starting the game, select a save and/or state file to load (if one is available). Anytime you save the game (or create a save state), the save and state files stored with RomM will be updated, so there's no need to manually download or upload them. - -### Supported systems - -Note that only the following systems are currently supported: - -* 3DO -* Amiga -* Arcade/MAME -* Atari 2600 -* Atari 5200 -* Atari 7800 -* Atari Jaguar -* Atari Lynx -* Commodore 64 -* ColecoVision -* Neo Geo Pocket -* Neo Geo Pocket Color -* Nintendo 64 -* Nintendo Entertainment System (NES) -* Nintendo Family Computer (Famicom) -* Nintendo DS -* Game Boy -* Game Boy Color -* Game Boy Advance -* PC-FX -* PlayStation (PS) -* Sega 32X [currently disabled - broken](https://github.com/EmulatorJS/EmulatorJS/issues/579) -* Sega CD -* Sega Game Gear -* Sega Master System -* Sega Genesis/Megadrive -* Sega Saturn -* Super Nintendo Entertainment System (SNES) -* Super Famicom -* TurboGraphx-16/PC Engine -* Virtual Boy -* WonderSwan -* WonderSwan Color \ No newline at end of file diff --git a/romm/Environment-Variables.md b/romm/Environment-Variables.md deleted file mode 100644 index a290ce5..0000000 --- a/romm/Environment-Variables.md +++ /dev/null @@ -1,27 +0,0 @@ -This is a complete list of available environment variables; required variables are marked with a `✓`. - -|Variable|Description|Required|Default| -|---|---|:---:|---| -|IGDB_CLIENT_ID|Client ID for IGDB API||| -|IGDB_CLIENT_SECRET|Client secret for IGDB API||| -|MOBYGAMES_API_KEY|Mobygames secret API key||| -|STEAMGRIDDB_API_KEY|SteamGridDB secret API key||| -|DB_HOST|Host name of MariaDB instance|✓|`localhost`| -|DB_PORT|Port number of MariaDB instance||`3306`| -|DB_NAME|Should match MYSQL_DATABASE in mariadb||`romm`| -|DB_USER|Should match MYSQL_USER in mariadb|✓|| -|DB_PASSWD|Should match MYSQL_PASSWORD in mariadb|✓|| -|ROMM_AUTH_SECRET_KEY|Generate a key with `openssl rand -hex 32`|✓|| -|ROMM_HOST|Host name of ROMM instance||`localhost`| -|DISABLE_CSRF_PROTECTION|Disables [CSRF protection](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html) (not recommended)||`false`| -|DISABLE_DOWNLOAD_ENDPOINT_AUTH|Disable auth on download endpoint (WebRcade, Tinfoil)||`false`| -|SCAN_TIMEOUT|Timeout for the background scan/rescan tasks (in seconds)||`14400`| -|ENABLE_RESCAN_ON_FILESYSTEM_CHANGE|Enable rescanning of library when filesystem changes||`false`| -|RESCAN_ON_FILESYSTEM_CHANGE_DELAY|Delay in minutes before rescanning library when filesystem changes||`5`| -|ENABLE_SCHEDULED_RESCAN|Enable scheduled rescanning of library||`false`| -|SCHEDULED_RESCAN_CRON|Cron expression for scheduled rescanning||`"0 3 * * *"`| -|ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB|Enable scheduled updating of Switch TitleDB index||`false`| -|SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON|Cron expression for scheduled updating of Switch TitleDB||`"0 4 * * *"`| -|ENABLE_SCHEDULED_UPDATE_MAME_XML|Enable scheduled updating of MAME XML index||`false`| -|SCHEDULED_UPDATE_MAME_XML_CRON|Cron expression for scheduled updating of MAME XML||`"0 5 * * *"`| -|TZ|Sets the timezone||`UTC`| \ No newline at end of file diff --git a/romm/Generate-API-Keys.md b/romm/Generate-API-Keys.md deleted file mode 100644 index 180494f..0000000 --- a/romm/Generate-API-Keys.md +++ /dev/null @@ -1,28 +0,0 @@ -## SteamGridDB - -To access the SteamGridDB API, create an account by linking your Steam account, and head to your [API Preferences page](https://www.steamgriddb.com/profile/preferences/api). Copy (or generate) the API key and use it to set `STEAMGRIDDB_API_KEY`. - -## Mobygames - -To access the Mobygames API, [create a MobyGames account](https://www.mobygames.com/user/register/) and then visit your profile page. Click the 'API' link under your user name to sign up for an API key. Copy the key shown and use it to set `MOBYGAMES_API_KEY`. - -## IGDB - -To access the IGDB API you'll need a Twitch account and a valid phone number for 2FA verification. Up-to-date instructions are available in the [IGDB API documentation](https://api-docs.igdb.com/#account-creation). When registering your application in the Twitch Developer Portal, fill out the form like so: - -* Name: Something **unique or random** like `correct-horse-battery-staple` or `KVV8NDXMSRFJ2MRNPNRSL7GQT` -* OAuth Redirect URLs: `localhost` -* Category: `Application Integration` -* Client Type: `Confidential` - -> [!IMPORTANT] -> **The name you pick has to be unique! Picking an existing name will fail silently, with no error messages. We recommend using `romm-`, like `romm-3fca6fd7f94dea4a05d029f654c0c44b`** - -Note the client ID and secret that appear on screen, and use them to set `IGDB_CLIENT_ID` and `IGDB_CLIENT_SECRET` in your environment variables. - -|![IGDB_Creation](https://github.com/rommapp/romm/assets/3247106/7a93bf68-f6d9-46a5-ab72-719f2d5ec9d3)|![IGDB_Secret](https://github.com/rommapp/romm/assets/3247106/7a9dc056-52be-41c4-aec5-e2758aa520b5)| -|---|---| - -## SteamGridDB - -To access steamGridDB API, you need to login into their [website](https://www.steamgriddb.com/) with a [steam account](https://store.steampowered.com/join). Once logged in, go to your [API tab under the preferences page](https://www.steamgriddb.com/profile/preferences/api). Copy the key shown and use it to set `STEAMGRIDDB_API_KEY`. \ No newline at end of file diff --git a/romm/Home.md b/romm/Home.md deleted file mode 100644 index 03d91ae..0000000 --- a/romm/Home.md +++ /dev/null @@ -1,3 +0,0 @@ -![romm_banner_thin](https://github.com/rommapp/romm/assets/34356590/101d4dfc-6bf1-4ce3-80b1-fe2877d18b81) - -Official Website: https://romm.app diff --git a/romm/Quick-Start-Guide.md b/romm/Quick-Start-Guide.md deleted file mode 100644 index ccef506..0000000 --- a/romm/Quick-Start-Guide.md +++ /dev/null @@ -1,99 +0,0 @@ -This quick start guide will help you get a RomM instance up and running. It is split into 3 parts: - -- Prepare -- Build -- Configure - -## Prepare - -This guide will assume that you already have the following done, if not - stop here and come back when you do. - -* Docker and Docker Compose installed -* OpenSSL installed -* A Twitch account (optional) - * 2-factor authentication set up on your Twitch account - * *This is required to get a dev account and an IGDB key* -* A MobyGames account (optional) -* Your Roms organized in the correct format - -#### Twitch and MobyGames API Keys - -Head over to [API key docs](https://github.com/rommapp/romm/wiki/Generate-API-Keys) to get your Twitch and/or MobyGames keys, then come back here - -#### Generating Authentication Keys - -This step will generate a key that is used in the authorization of RomM. Without this, you will be unable to log in and use the platform - -Run the following command in a terminal: - -```sh -openssl rand -hex 32 -``` - -Then copy the output and save it to the `ROMM_AUTH_SECRET_KEY` variable in the docker-compose file. It should look like this: - -```sh -~$: openssl rand -hex 32 -03a054b6ca27e0107c5eed552ea66becd9f3a2a8a91e7595cd462a593f9ecd09 -``` - -## Build - -Now that we have everything gathered, we can begin getting your instance set up! - -1. Download a copy of the latest [docker-compose.example.yml](https://github.com/rommapp/romm/blob/release/examples/docker-compose.example.yml) file from GitHub -2. Edit the file and modify the following values to configure the database - * `MYSQL_ROOT_PASSWORD`: Sets the root password of the database. Use a unique and secure password (*use a password generator for simplicity*) - * `MYSQL_DATABASE`: Sets the database name for RomM. This can be modified - but it's not necessary - * `MYSQL_USER`: User to connect to the database with. This can be modified - but it's not necessary - * `MYSQL_PASSWORD`: Password for the user to connect to the database with. Use a unique and secure password (*use a password generator for simplicity*) -3. Modify the following values in the **environment** to configure the application. *-- Other values can be changed, but should not be done unless you know what you are doing, and are outside the scope of this guide* - * `DB_NAME`: Name of the database set in the database section - * `DB_USER`: Name of the user to connect to the database - * `DB_PASSWD`: Password of the user to connect to the database -4. Modify the following values in the **volumes** to configure the application - * `/path/to/library`: Path to the directory where your rom files will be stored - * `/path/to/assets`: Path to the directory where you will store your saves, etc - * `/path/to/config`: Path to the directory where you will store the config.yml -5. Save the file as *docker-compose.yml* instead of *docker-compose.example.yml*. It should look soomething like this: - -![336102458-386dbff4-85ca-4926-86e4-48dc47771451](https://github.com/user-attachments/assets/081f8991-92ae-4129-8923-124f8146ab5b) - -6. Open the terminal and navigate to the directory containing the docker-compose file -7. Run `docker compose up -d` to kick off the docker pull. You will see it pull the container and set up the volumes and network: - - - -8. Run `docker ps -f name=romm` to verify that the containers are running -9. Open a web browser and navigate to `http://localhost:8080`, where you should be greeted with the RomM setup page -10. Go through the setup wizard, setting your admin username and password -11. Log in with the credentials you set in the setup flow - -## Configure - -Now that the container is running, we will configure it by importing your roms - -#### Uploading Your Roms via Web Interface - -This method is certainly viable, but not recommended if you have a lot of roms and/or multiple platforms. It is good for adding after the fact as your collection grows, but wouldn't be recommended for the first set up, nor for multi-file roms - -1. Log into RomM with your user credentials -2. Navigate to *Library* -> *Upload roms* -3. Select the platform, then click *ADD ROMS* and select the roms you want to upload in the file selector that appears -4. Click *UPLOAD* to begin uploading the roms -5. Repeat for all the roms/platforms you have - - - -#### Importing Your Roms via Scanner - -This method is generally the fastest and recommended for first time setup - -1. Stop your RomM instance. `docker compose down` if you are in the terminal and directory containing the docker-compose file, otherwise `docker stop romm` -2. Go to the library folder created by RomM, set in the docker-compose file under *:/romm/library* and create a folder named `roms` -3. Copy your platform folders/rom files into the `roms` folder you created -4. Start the RomM instance back up. `docker compose up -d` if you are in the terminal and directory containing the docker-compose file, otherwise `docker start romm` -5. Log into RomM with your user credentials -6. Navigate to *Library* -> *Scan* -7. The system will now begin scanning the rom files and applying metadata to them. You can click on any of the items that it has tagged to see the metadata it pulled without having to stop the scan -8. After the scan completes, click the RomM logo to go back to the main screen. You should see the platforms and recent games it has scanned. You are now ready to rock and RomM! diff --git a/romm/Reverse-Proxy.md b/romm/Reverse-Proxy.md deleted file mode 100644 index 149c1ce..0000000 --- a/romm/Reverse-Proxy.md +++ /dev/null @@ -1,160 +0,0 @@ -Here are some basic configurations for popular reverse proxies. Some installations may require modifications to config options not listed below. - -## Caddy - -```caddyfile -http://romm.mysite.com { - reverse_proxy romm:8080 -} -``` - -### Caddy + TLS (HTTPS) - -```caddyfile -https://romm.mysite.com { - tls mysite.com.crt mysite.com.key # Certificate and key files - - encode zstd gzip - - header * { - Strict-Transport-Security "max-age=31536000;" - X-XSS-Protection "1; mode=block" - X-Frame-Options "SAMEORIGIN" - X-Robots-Tag "noindex, nofollow" - -Server - -X-Powered-By - } - - reverse_proxy romm:8080 -} -``` - -## Nginx - -```nginx -server { - listen 80 default_server; - server_name romm.mysite.com; - client_max_body_size 0; - - location / { - include /config/nginx/proxy.conf; - include /config/nginx/resolver.conf; - set $upstream_app romm; - set $upstream_port 8080; - set $upstream_proto http; - proxy_pass $upstream_proto://$upstream_app:$upstream_port; - } -} -``` - -### Nginx + TLS (HTTPS) - -```nginx -server { - listen 80 default_server; - server_name _; - return 301 https://$host$request_uri; -} - -server { - listen 443 ssl http2; - listen [::]:443 ssl http2; - - server_name romm.mysite.com; - include /config/nginx/ssl.conf; - client_max_body_size 0; - - location / { - include /config/nginx/proxy.conf; - include /config/nginx/resolver.conf; - set $upstream_app romm; - set $upstream_port 8080; - set $upstream_proto http; - proxy_pass $upstream_proto://$upstream_app:$upstream_port; - - # Hide version - server_tokens off; - - # Security headers - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-Content-Type-Options "nosniff" always; - add_header X-XSS-Protection "1; mode=block" always; - add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - add_header Referrer-Policy "no-referrer-when-downgrade" always; - } -} -``` - -## Nginx Proxy Manager - -Items marked with ❗ are important to set, as RomM may not correctly otherwise! - -#### ⚡ Details - -* Domain Names: `romm.mydomain.com` (replace mydomain with your own)* Scheme: `http` -* Forward Hostname/IP: (like 192.168.X.X) -* Forward Port: `8080` -* Cache Assets: `off` -* Block Common Exploits: `on` -* Websockets Support: `on` ❗ -* Access List: - - -#### 🛡️ SSL - -Strongly recommended, but only required if you plan to secure your site (use HTTPS) - -* SSL Certificate: "Request a new SSL Certificate" -* Force SSL: `on` -* HTTP/2 Support: `on` -* HSTS Enabled: `off` -* Email Address for Let's Encrypt: -* I Agree to the TOS: `on` - -#### ⚙️ Advanced - -Custom Nginx Confguration ❗ -``` -proxy_max_temp_file_size 0; -``` - -|Details|SSL|Advanced| -|---|---|---| -|![image](https://github.com/user-attachments/assets/e106a8e9-8b27-41ef-8ba2-d43c3b68b269)|![image2](https://github.com/user-attachments/assets/6c82c785-792a-410a-80f2-d95839cba47b)|![image3](https://github.com/user-attachments/assets/566ae834-99b5-42f3-b46b-306b8f73b5b4)| - -## Traefik - -### Using a configuration document - -```yml -http: - romsdomainse: - entryPoints: - - "https" - rule: "Host(`roms.domain.se`)" - middlewares: - - default-headers - - https-redirectscheme - tls: - certResolver: http - service: romsdomainse - -services: - romsdomainse: - loadBalancer: - servers: - - url: "http://192.168.1.100:8080" - passHostHeader: true -``` - -### Using labels in docker compose - -```yml -labels: - - "traefik.enable=true" - - "traefik.http.services.romm.loadbalancer.server.port=8080" - - "traefik.http.routers.romm.rule=Host(`romm.YOUR_DOMAIN.com`)" - - "traefik.http.routers.romm.entrypoints=websecure" - - 'traefik.http.routers.romm.tls=true' - - 'traefik.http.routers.romm.tls.certresolver=https' -``` \ No newline at end of file diff --git a/romm/Running-on-Unraid.md b/romm/Running-on-Unraid.md deleted file mode 100644 index 73a9fdc..0000000 --- a/romm/Running-on-Unraid.md +++ /dev/null @@ -1,63 +0,0 @@ -## Video tutorial - -[AlienTech42](https://www.youtube.com/@AlienTech42) has published [a great video](https://www.youtube.com/watch?v=ls5YcsFdwLQ) on installing and running RomM on Unraid. Check it out! - -[![IMAGE ALT TEXT HERE](https://img.youtube.com/vi/ls5YcsFdwLQ/0.jpg)](https://www.youtube.com/watch?v=ls5YcsFdwLQ) - - -## Prerequisites - -Before getting started, install the [Community Apps plugin](https://forums.unraid.net/topic/38582-plug-in-community-applications/) for Unraid. - -If you're planning to use MariaDB as your database, install it from the plugin registry. Both the [official](https://hub.docker.com/_/mariadb) and [linuxserver](https://github.com/linuxserver/docker-mariadb/pkgs/container/mariadb) versions are supported. - -|Official|Linuxserver| -|---|---| -|Screenshot 2023-08-07 at 12 38 48 PM|Screenshot 2023-08-07 at 12 38 44 PM| - -## Installation - -From the Unraid dashboard, click `APPS` in the navbar. In the search bar, search for `rommapp romm`; no results will appear, but that's normal. On the right side of the screen, click `Click Here To Get More Results From DockerHub`. - -![258859203-2582da70-dcae-4505-8463-23f8f2e6c64b](https://github.com/rommapp/romm/assets/3247106/cd7c3eb0-2b12-4836-94e7-f485c64e51a4) - -One of the first results should be `romm` by `rommapp`. Once you find it, click `Install`. - -![258859891-6efb8696-d5d7-45dd-b1b3-d6365ee4ff07](https://github.com/rommapp/romm/assets/3247106/29c56fa4-a923-40e4-951a-0348f8551c86) - -If a confirmation window appears, click `YES` and CA will attempt to determine paths, ports and variables from the template. - -![258860339-5fc2c451-bfa9-4871-8bee-b04a72d602ca](https://github.com/rommapp/romm/assets/3247106/826890e1-4727-4638-acfd-b124806c5be5) - -Once the installation finishes, the configuration page will appear and should look something like this: - -![258861319-88c331d0-4586-444e-b922-d2465fd14c96](https://github.com/rommapp/romm/assets/3247106/4898e62c-6f76-43cf-a516-eed4d13ba46b) - - -## Configuration - -Configure the required environment variables, ports and paths as per the [example docker-compose.yml](https://github.com/rommapp/romm/blob/release/examples/docker-compose.example.yml) file. - -![258862729-c0e0ae7e-c3e2-46c8-91f8-2c5ca2a1039e](https://github.com/rommapp/romm/assets/3247106/427d9f98-ea34-4bf4-9acf-ee1a57c8a91d) - -### MariaDB - -To use the MariaDB container setup in #prerequisites, add config options for the environment variables. Descriptions of the config options and sensible defaults are listed in the [example docker-compose.yml](https://github.com/rommapp/romm/blob/release/examples/docker-compose.example.yml) file. - -- DB_HOST -- DB_PORT -- DB_USER -- DB_NAME -- DB_PASSWD - -## Troubleshooting - -[Open an issue](https://github.com/rommapp/romm/issues) if you're having trouble getting RomM to run. State that you're trying to run RomM in Unraid, be specific about the issue, and append screenshots of your configuration. - -### Updating - -To update to the latest version, select `force update` from the container list. **It's strongly recommended to backup the `appdata` folder (or mount it in a safe location) before updating, since tearing down the container will wipe the resources (covers, screenshots, etc.) - -## Shoutouts - -We want to give a special shoutout to @Smurre95 and @sfumat0 for their help documenting this process, and working towards getting RomM listed in CA. 🤝 \ No newline at end of file diff --git a/romm/Scheduled-Tasks.md b/romm/Scheduled-Tasks.md deleted file mode 100644 index 14b9d24..0000000 --- a/romm/Scheduled-Tasks.md +++ /dev/null @@ -1,43 +0,0 @@ -## Scheduled tasksa - -Scheduled tasks can be enabled and configured with the following environment variables: - -|Variable|Description|Value| -|---|---|:---:| -|ENABLE_SCHEDULED_RESCAN|Enable scheduled rescanning of library|`true`| -|SCHEDULED_RESCAN_CRON|Cron expression for scheduled rescanning|`"0 3 * * *"`| -|ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB|Enable scheduled updating of Switch TitleDB index|`true`| -|SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON|Cron expression for scheduled updating of Switch TitleDB|`"0 4 * * *"`| -|ENABLE_SCHEDULED_UPDATE_MAME_XML|Enable scheduled updating of MAME XML index|`true`| -|SCHEDULED_UPDATE_MAME_XML_CRON|Cron expression for scheduled updating of MAME XML|`"0 5 * * *"`| - -### Scheduled rescan - -Users can opt to enable scheduled rescans, and set the interval using cron notation. Not that the scan will **not completely rescan** every file, only catching those which have been added/updated. - -### Switch titleDB update - -Support was added for Nintendo Switch ROMs with filenames using the [titleid/programid format][titleid-program-id-url] (e.g. 0100000000010000.xci). If a file under the `switch` folder matches the regex, the scanner will use the index to attempt to match it to a game. If a match is found, the IGDB handler will use the matched name as the search term. - -The associated task updates the `/fixtures/switch_titledb.json` file at a regular interval to support new game releases. - -### MAME XML update - -Support was also added for MAME arcade games with shortcode names (e.g. `actionhw.zip` -> ACTION HOLLYWOOD), and works in the same way as the titleid matcher (without the regex). - -The associated task updates the `/fixtures/mame.xml` file at a regular interval to support updates to the library. - -## File system watcher - -RomM can also monitor the filesystem for events (files created/moved/deleted) and schedules a rescan of the platform (or entire library is a new platform was added). - -The watcher can be enabled and configured with the following environment variables: - -|Variable|Description|Value| -|---|---|:---: -|ENABLE_RESCAN_ON_FILESYSTEM_CHANGE|Enable rescanning of library when filesystem changes|`true` -|RESCAN_ON_FILESYSTEM_CHANGE_DELAY|Delay in minutes before rescanning library when filesystem changes|`5`| - -The watcher will monitor the `/library/roms` folder for changes to the filesystem, such as files being added, moved or deleted. It will ignore certain events (like modifying the file content or metadata), and will skip default OS files (like `.DS_Store` on mac). - -When a change is detected, a scan will be scheduled for sometime in the future (default 5 minutes). If other events are triggered between now and the time at which the scan starts, more platforms will be added to the scan list (or the scan may switch to a full scan). This is done to reduce the number of tasks scheduled when many big changes happen to the library (mass upload, new mount, etc.) \ No newline at end of file diff --git a/romm/Supported-Platforms.md b/romm/Supported-Platforms.md deleted file mode 100644 index bac291a..0000000 --- a/romm/Supported-Platforms.md +++ /dev/null @@ -1,411 +0,0 @@ -Below is a list of all supported platforms/systems/consoles and their respective folder names. **The folder name is case-sensitive and must be used exactly as it appears in the list below.** - - -|Platform Name|Folder Name|IGDB|Mobygames| -|---|---|---|---| -1292 Advanced Programmable Video System | `1292-advanced-programmable-video-system` | IGDB| Mobygames -3DO Interactive Multiplayer | `3do` | IGDB| Mobygames -ABC 80 | `abc-80` | | Mobygames -APF MP1000/Imagination Machine | `apf` | | Mobygames -AY-3-8500 | `ay-3-8500` | IGDB| | -AY-3-8603 | `ay-3-8603` | IGDB| | -AY-3-8605 | `ay-3-8605` | IGDB| | -AY-3-8606 | `ay-3-8606` | IGDB| | -AY-3-8607 | `ay-3-8607` | IGDB| | -AY-3-8610 | `ay-3-8610` | IGDB| | -AY-3-8710 | `ay-3-8710` | IGDB| | -AY-3-8760 | `ay-3-8760` | IGDB| | -Acorn Archimedes | `acorn-archimedes` | IGDB| Mobygames -Acorn Electron | `acorn-electron` | IGDB| Mobygames -Adventure Vision | `adventure-vision` | | Mobygames -AirConsole | `airconsole` | IGDB| Mobygames -Alice 32/90 | `alice-3290` | | Mobygames -Altair 680 | `altair-680` | | Mobygames -Altair 8800 | `altair-8800` | | Mobygames -Amazon Alexa | `amazon-alexa` | | Mobygames -Amazon Fire TV | `amazon-fire-tv` | IGDB| Mobygames -Amiga | `amiga` | IGDB| Mobygames -Amiga CD32 | `amiga-cd32` | IGDB| Mobygames -Amstrad CPC | `acpc` | IGDB| Mobygames -Amstrad PCW | `amstrad-pcw` | IGDB| Mobygames -Android | `android` | IGDB| Mobygames -Antstream | `antstream` | | Mobygames -Apple I | `apple-i` | | Mobygames -Apple II | `appleii` | IGDB| Mobygames -Apple IIGD | `apple2gs` | | Mobygames -Apple IIGS | `apple-iigs` | IGDB| Mobygames -Apple Pippin | `apple-pippin` | IGDB| | -Arcade | `arcade` | IGDB| Mobygames -Arcadia 2001 | `arcadia-2001` | IGDB| Mobygames -Arduboy | `arduboy` | IGDB| Mobygames -Astral 2000 | `astral-2000` | | Mobygames -Atari 2600 | `atari2600` | IGDB| Mobygames -Atari 5200 | `atari5200` | IGDB| Mobygames -Atari 7800 | `atari7800` | IGDB| Mobygames -Atari 8-bit | `atari8bit` | IGDB| Mobygames -Atari Jaguar | `jaguar` | IGDB| Mobygames -Atari Jaguar CD | `atari-jaguar-cd` | IGDB| | -Atari Lynx | `lynx` | IGDB| Mobygames -Atari ST/STE | `atari-st` | IGDB| Mobygames -Atari VCS | `atari-vcs` | | Mobygames -Atom | `atom` | | Mobygames -BBC Micro | `bbcmicro` | | Mobygames -BBC Microcomputer System | `bbcmicro` | IGDB| Mobygames -BREW | `brew` | | Mobygames -Bally Astrocade | `astrocade` | IGDB| Mobygames -BeOS | `beos` | | Mobygames -BlackBerry OS | `blackberry` | IGDB| Mobygames -Blacknut | `blacknut` | | Mobygames -Blu-ray Player | `blu-ray-player` | IGDB| Mobygames -Bubble | `bubble` | | Mobygames -CD-i | `philips-cd-i` | | Mobygames -CDC Cyber 70 | `cdccyber70` | IGDB| | -CDTV | `commodore-cdtv` | | Mobygames -COSMAC | `fred-cosmac` | | Mobygames -CP/M | `cpm` | | Mobygames -Call-A-Computer time-shared mainframe computer system | `call-a-computer` | IGDB| | -Camputers Lynx | `camputers-lynx` | | Mobygames -Casio Loopy | `casio-loopy` | IGDB| Mobygames -Casio PV-1000 | `casio-pv-1000` | | Mobygames -Casio Programmable Calculator | `casio-programmable-calculator` | | Mobygames -Champion 2711 | `champion-2711` | | Mobygames -Channel F | `fairchild-channel-f` | | Mobygames -ClickStart | `clickstart` | | Mobygames -Coleco Adam | `colecoadam` | | Mobygames -ColecoVision | `colecovision` | IGDB| Mobygames -Colour Genie | `colour-genie` | | Mobygames -Commodore 128 | `c128` | | Mobygames -Commodore 16 | `c16` | IGDB| Mobygames -Commodore C64/128/MAX | `c64` | IGDB| Mobygames -Commodore CDTV | `commodore-cdtv` | IGDB| Mobygames -Commodore PET | `cpet` | IGDB| Mobygames -Commodore PET/CBM | `cpet` | | Mobygames -Commodore Plus/4 | `c-plus-4` | IGDB| Mobygames -Commodore VIC-20 | `vic-20` | IGDB| Mobygames -Compal 80 | `compal-80` | | Mobygames -Compucolor I | `compucolor-i` | | Mobygames -Compucolor II | `compucolor-ii` | | Mobygames -Compucorp Programmable Calculator | `compucorp-programmable-calculator` | | Mobygames -CreatiVision | `creativision` | | Mobygames -Cybervision | `cybervision` | | Mobygames -DOS | `dos` | IGDB| Mobygames -DVD Player | `dvd-player` | IGDB| Mobygames -Danger OS | `danger-os` | | Mobygames -Dedicated console | `dedicated-console` | | Mobygames -Dedicated handheld | `dedicated-handheld` | | Mobygames -Didj | `didj` | | Mobygames -DoJa | `doja` | | Mobygames -Donner Model 30 | `donner30` | IGDB| | -Dragon 32/64 | `dragon-32-slash-64` | IGDB| Mobygames -Dreamcast | `dc` | IGDB| Mobygames -ECD Micromind | `ecd-micromind` | | Mobygames -EDSAC | `edsac--1` | IGDB| | -Electron | `acorn-electron` | | Mobygames -Enterprise | `enterprise` | | Mobygames -Epoch Cassette Vision | `epoch-cassette-vision` | IGDB| Mobygames -Epoch Game Pocket Computer | `epoch-game-pocket-computer` | | Mobygames -Epoch Super Cassette Vision | `epoch-super-cassette-vision` | IGDB| Mobygames -Evercade | `evercade` | IGDB| Mobygames -ExEn | `exen` | | Mobygames -Exelvision | `exelvision` | | Mobygames -Exidy Sorcerer | `exidy-sorcerer` | IGDB| Mobygames -FM Towns | `fm-towns` | IGDB| Mobygames -FM-7 | `fm-7` | IGDB| Mobygames -Fairchild Channel F | `fairchild-channel-f` | IGDB| Mobygames -Family Computer | `famicom` | IGDB| | -Family Computer Disk System | `fds` | IGDB| | -Feature phone | `mobile-custom` | | Mobygames -Ferranti Nimrod Computer | `nimrod` | IGDB| | -Fire TV | `amazon-fire-tv` | | Mobygames -Freebox | `freebox` | | Mobygames -G-cluster | `g-cluster` | | Mobygames -GIMINI | `gimini` | | Mobygames -GNEX | `gnex` | | Mobygames -GP2X | `gp2x` | | Mobygames -GP2X Wiz | `gp2x-wiz` | | Mobygames -GP32 | `gp32` | | Mobygames -GVM | `gvm` | | Mobygames -Galaksija | `galaksija` | | Mobygames -Gamate | `gamate` | IGDB| | -Game & Watch | `g-and-w` | IGDB| | -Game Boy | `gb` | IGDB| Mobygames -Game Boy Advance | `gba` | IGDB| Mobygames -Game Boy Color | `gbc` | IGDB| Mobygames -Game Gear | `gamegear` | | Mobygames -Game Wave | `game-wave` | | Mobygames -Game.Com | `game-dot-com` | | Mobygames -Game.com | `game-dot-com` | IGDB| Mobygames -GameCube | `ngc` | | Mobygames -GameStick | `gamestick` | | Mobygames -Gear VR | `gear-vr` | IGDB| | -Genesis/Mega Drive | `genesis-slash-megadrive` | | Mobygames -Gizmondo | `gizmondo` | IGDB| Mobygames -Gloud | `gloud` | | Mobygames -Glulx | `glulx` | | Mobygames -Google Stadia | `stadia` | IGDB| Mobygames -HD DVD Player | `hd-dvd-player` | | Mobygames -HP 2100 | `hp2100` | IGDB| | -HP 3000 | `hp3000` | IGDB| | -HP 9800 | `hp-9800` | | Mobygames -HP Programmable Calculator | `hp-programmable-calculator` | | Mobygames -Handheld Electronic LCD | `handheld-electronic-lcd` | IGDB| | -Heath/Zenith H8/H89 | `heathzenith` | | Mobygames -Heathkit H11 | `heathkit-h11` | | Mobygames -Hitachi S1 | `hitachi-s1` | | Mobygames -Hugo | `hugo` | | Mobygames -Hyper Neo Geo 64 | `hyper-neo-geo-64` | IGDB| | -HyperScan | `hyperscan` | IGDB| Mobygames -IBM 5100 | `ibm-5100` | | Mobygames -Ideal-Computer | `ideal-computer` | | Mobygames -Intel 8008 | `intel-8008` | | Mobygames -Intel 8080 | `intel-8080` | | Mobygames -Intel 8086 / 8088 | `intel-8086` | | Mobygames -Intellivision | `intellivision` | IGDB| Mobygames -Intellivision Amico | `intellivision-amico` | IGDB| | -Interact Model One | `interact-model-one` | | Mobygames -Interton Video 2000 | `interton-video-2000` | | Mobygames -Interton VC 4000 | `vc-4000` | IGDB| | -J2ME | `j2me` | | Mobygames -Jolt | `jolt` | | Mobygames -Jupiter Ace | `jupiter-ace` | | Mobygames -KIM-1 | `kim-1` | | Mobygames -KaiOS | `kaios` | | Mobygames -Kindle Classic | `kindle` | | Mobygames -Laser 200 | `laser200` | | Mobygames -LaserActive | `laseractive` | | Mobygames -LeapTV | `leaptv` | IGDB| Mobygames -Leapster | `leapster` | IGDB| Mobygames -Leapster Explorer/LeadPad Explorer | `leapster-explorer-slash-leadpad-explorer` | IGDB| Mobygames -Leapster Explorer/LeapPad Explorer | `leapster-explorer-slash-leadpad-explorer` | | Mobygames -Legacy Computer | `legacy-computer` | IGDB| | -Legacy Mobile Device | `mobile` | IGDB| | -Linux | `linux` | IGDB| Mobygames -Luna | `luna` | | Mobygames -MOS Technology 6502 | `mos-technology-6502` | | Mobygames -MRE | `mre` | | Mobygames -MSX | `msx` | IGDB| Mobygames -MSX2 | `msx2` | IGDB| | -Mac | `mac` | IGDB| Mobygames -Macintosh | `mac` | | Mobygames -Maemo | `maemo` | | Mobygames -Mainframe | `mainframe` | | Mobygames -Matsushita/Panasonic JR | `matsushitapanasonic-jr` | | Mobygames -Mattel Aquarius | `mattel-aquarius` | | Mobygames -MeeGo | `meego` | | Mobygames -Mega Duck/Cougar Boy | `mega-duck-slash-cougar-boy` | IGDB| | -Memotech MTX | `memotech-mtx` | | Mobygames -Meritum | `meritum` | | Mobygames -Meta Quest 2 | `meta-quest-2` | IGDB| | -Meta Quest 3 | `meta-quest-3` | IGDB| | -Microbee | `microbee` | | Mobygames -Microtan 65 | `microtan-65` | | Mobygames -Microvision | `microvision--1` | IGDB| Mobygames -Mophun | `mophun` | | Mobygames -Motorola 6800 | `motorola-6800` | | Mobygames -Motorola 68k | `motorola-68k` | | Mobygames -N-Gage | `ngage` | IGDB| Mobygames -N-Gage (service) | `ngage2` | | Mobygames -NEC PC-6000 Series | `nec-pc-6000-series` | IGDB| | -Nascom | `nascom` | | Mobygames -Neo Geo | `neogeoaes` | | Mobygames -Neo Geo AES | `neogeoaes` | IGDB| Mobygames -Neo Geo CD | `neo-geo-cd` | IGDB| Mobygames -Neo Geo MVS | `neogeomvs` | IGDB| Mobygames -Neo Geo Pocket | `neo-geo-pocket` | IGDB| Mobygames -Neo Geo Pocket Color | `neo-geo-pocket-color` | IGDB| Mobygames -Neo Geo X | `neo-geo-x` | | Mobygames -New Nintendo 3DS | `new-nintendo-3ds` | IGDB| Mobygames -NewBrain | `newbrain` | | Mobygames -Newton | `newton` | | Mobygames -Nintendo 3DS | `3ds` | IGDB| Mobygames -Nintendo 64 | `n64` | IGDB| Mobygames -Nintendo 64DD | `nintendo-64dd` | IGDB| | -Nintendo DS | `nds` | IGDB| Mobygames -Nintendo DSi | `nintendo-dsi` | IGDB| Mobygames -Nintendo Entertainment System | `nes` | IGDB| Mobygames -Nintendo GameCube | `ngc` | IGDB| Mobygames -Nintendo PlayStation | `nintendo-playstation` | IGDB| | -Nintendo Switch | `switch` | IGDB| Mobygames -North Star | `northstar` | | Mobygames -Noval 760 | `noval-760` | | Mobygames -Nuon | `nuon` | IGDB| Mobygames -OOParts | `ooparts` | IGDB| Mobygames -OS/2 | `os2` | | Mobygames -Oculus Go | `oculus-go` | IGDB| Mobygames -Oculus Quest | `oculus-quest` | IGDB| Mobygames -Oculus Rift | `oculus-rift` | IGDB| | -Odyssey | `odyssey--1` | IGDB| Mobygames -Odyssey 2/Videopac G7000 | `odyssey-2-slash-videopac-g7000` | IGDB| Mobygames -Ohio Scientific | `ohio-scientific` | | Mobygames -OnLive Game System | `onlive-game-system` | IGDB| Mobygames -Orao | `orao` | | Mobygames -Oric | `oric` | | Mobygames -Ouya | `ouya` | IGDB| Mobygames -PC (Microsoft Windows) | `win` | IGDB| Mobygames -PC Booter | `pc-booter` | | Mobygames -PC Engine SuperGrafx | `supergrafx` | IGDB| Mobygames -PC-50X Family | `pc-50x-family` | IGDB| | -PC-6001 | `pc-6001` | | Mobygames -PC-8000 | `pc-8000` | | Mobygames -PC-8800 Series | `pc-8800-series` | IGDB| Mobygames -PC-9800 Series | `pc-9800-series` | IGDB| Mobygames -PC-FX | `pc-fx` | IGDB| Mobygames -PDP-1 | `pdp1` | IGDB| | -PDP-10 | `pdp10` | IGDB| | -PDP-11 | `pdp11` | IGDB| | -PDP-8 | `pdp-8--1` | IGDB| | -PICO | `pico` | | Mobygames -PLATO | `plato--1` | IGDB| | -PS Vita | `psvita` | | Mobygames -Palm OS | `palm-os` | IGDB| Mobygames -Panasonic Jungle | `panasonic-jungle` | IGDB| | -Panasonic M2 | `panasonic-m2` | IGDB| | -Pandora | `pandora` | | Mobygames -Pebble | `pebble` | | Mobygames -Philips CD-i | `philips-cd-i` | IGDB| Mobygames -Philips VG 5000 | `philips-vg-5000` | | Mobygames -Photo CD | `photocd` | | Mobygames -Pippin | `pippin` | | Mobygames -PlayStation | `ps` | IGDB| Mobygames -PlayStation 2 | `ps2` | IGDB| Mobygames -PlayStation 3 | `ps3` | IGDB| Mobygames -PlayStation 4 | `ps4--1` | IGDB| Mobygames -PlayStation 5 | `ps5` | IGDB| Mobygames -PlayStation Now | `playstation-now` | | Mobygames -PlayStation Portable | `psp` | IGDB| Mobygames -PlayStation VR | `psvr` | IGDB| | -PlayStation VR2 | `psvr2` | IGDB| | -PlayStation Vita | `psvita` | IGDB| Mobygames -Playdate | `playdate` | IGDB| Mobygames -Playdia | `playdia` | IGDB| Mobygames -Plex Arcade | `plex-arcade` | | Mobygames -Plug & Play | `plug-and-play` | IGDB| | -PocketStation | `pocketstation` | IGDB| | -Pokitto | `pokitto` | | Mobygames -Pokémon mini | `pokemon-mini` | IGDB| Mobygames -Poly-88 | `poly-88` | | Mobygames -R-Zone | `r-zone` | IGDB| | -RCA Studio II | `rca-studio-ii` | | Mobygames -Research Machines 380Z | `research-machines-380z` | | Mobygames -Roku | `roku` | | Mobygames -SAM Coupé | `sam-coupe` | | Mobygames -SC/MP | `scmp` | | Mobygames -SD-200/270/290 | `sd-200270290` | | Mobygames -SDS Sigma 7 | `sdssigma7` | IGDB| | -SEGA 32X | `sega-32x` | | Mobygames -SEGA CD | `segacd` | | Mobygames -SEGA Master System | `sega-master-system` | | Mobygames -SEGA Saturn | `saturn` | | Mobygames -SG-1000 | `sg1000` | IGDB| | -SK-VM | `sk-vm` | | Mobygames -SMC-777 | `smc-777` | | Mobygames -SRI-500/1000 | `sri-5001000` | | Mobygames -SWTPC 6800 | `swtpc-6800` | | Mobygames -Satellaview | `satellaview` | IGDB| | -Sega 32X | `sega32` | IGDB| Mobygames -Sega CD | `segacd` | IGDB| Mobygames -Sega Game Gear | `gamegear` | IGDB| Mobygames -Sega Master System/Mark III | `sms` | IGDB| | -Sega Mega Drive/Genesis | `genesis-slash-megadrive` | IGDB| Mobygames -Sega Pico | `sega-pico` | IGDB| Mobygames -Sega Saturn | `saturn` | IGDB| Mobygames -Sharp MZ-2200 | `sharp-mz-2200` | IGDB| | -Sharp MZ-80B/2000/2500 | `sharp-mz-80b20002500` | | Mobygames -Sharp MZ-80K/700/800/1500 | `sharp-mz-80k7008001500` | | Mobygames -Sharp X1 | `x1` | IGDB| Mobygames -Sharp X68000 | `sharp-x68000` | IGDB| Mobygames -Sharp Zaurus | `sharp-zaurus` | | Mobygames -Signetics 2650 | `signetics-2650` | | Mobygames -Sinclair QL | `sinclair-ql` | IGDB| Mobygames -Sinclair ZX81 | `sinclair-zx81` | IGDB| Mobygames -Socrates | `socrates` | | Mobygames -Sol-20 | `sol-20` | IGDB| Mobygames -Sord M5 | `sord-m5` | | Mobygames -Spectravideo | `spectravideo` | | Mobygames -Super A'can | `super-acan` | | Mobygames -Super Famicom | `sfam` | IGDB| | -Super Nintendo Entertainment System | `snes` | IGDB| Mobygames -Super Vision 8000 | `super-vision-8000` | | Mobygames -Supervision | `supervision` | | Mobygames -Sure Shot HD | `sure-shot-hd` | | Mobygames -SwanCrystal | `swancrystal` | IGDB| | -Symbian | `symbian` | | Mobygames -TADS | `tads` | | Mobygames -TI Programmable Calculator | `ti-programmable-calculator` | | Mobygames -TI-99/4A | `ti-994a` | | Mobygames -TIM | `tim` | | Mobygames -TRS-80 | `trs-80` | IGDB| Mobygames -TRS-80 Color Computer | `trs-80-color-computer` | IGDB| Mobygames -TRS-80 MC-10 | `trs-80-mc-10` | | Mobygames -TRS-80 Model 100 | `trs-80-model-100` | | Mobygames -Taito X-55 | `taito-x-55` | | Mobygames -Tapwave Zodiac | `zod` | IGDB| | -Tatung Einstein | `tatung-einstein` | IGDB| Mobygames -Tektronix 4050 | `tektronix-4050` | | Mobygames -Tele-Spiel ES-2201 | `tele-spiel` | | Mobygames -Telstar Arcade | `telstar-arcade` | | Mobygames -Terebikko / See 'n Say Video Phone | `terebikko-slash-see-n-say-video-phone` | IGDB| | -Terminal | `terminal` | | Mobygames -Texas Instruments TI-99 | `ti-99` | IGDB| Mobygames -Thomson MO5 | `thomson-mo5` | IGDB| Mobygames -Thomson TO | `thomson-to` | | Mobygames -Tiki 100 | `tiki-100` | | Mobygames -Timex Sinclair 2068 | `timex-sinclair-2068` | | Mobygames -Tizen | `tizen` | | Mobygames -Tomahawk F1 | `tomahawk-f1` | | Mobygames -Tomy Tutor | `tomy-tutor` | | Mobygames -Triton | `triton` | | Mobygames -TurboGrafx CD | `turbografx-16-slash-pc-engine-cd` | | Mobygames -TurboGrafx-16 | `turbografx16--1` | | Mobygames -TurboGrafx-16/PC Engine | `turbografx16--1` | IGDB| Mobygames -Turbografx-16/PC Engine CD | `turbografx-16-slash-pc-engine-cd` | IGDB| Mobygames -V.Flash | `vflash` | | Mobygames -V.Smile | `vsmile` | IGDB| Mobygames -VIS | `vis` | | Mobygames -Vectrex | `vectrex` | IGDB| Mobygames -Versatile | `versatile` | | Mobygames -VideoBrain | `videobrain` | | Mobygames -Videopac+ G7400 | `videopac-g7400` | | Mobygames -Virtual Boy | `virtualboy` | IGDB| Mobygames -Virtual Console | `vc` | IGDB| | -Visual Memory Unit / Visual Memory System | `visual-memory-unit-slash-visual-memory-system` | IGDB| | -WIPI | `wipi` | | Mobygames -Wang 2200 | `wang2200` | | Mobygames -Watara/QuickShot Supervision | `watara-slash-quickshot-supervision` | IGDB| | -Web browser | `browser` | IGDB| Mobygames -Wii | `wii` | IGDB| Mobygames -Wii U | `wiiu` | IGDB| Mobygames -Windows | `win` | | Mobygames -Windows 3.x | `win3x` | | Mobygames -Windows Apps | `windows-apps` | | Mobygames -Windows Mobile | `windows-mobile` | IGDB| Mobygames -Windows Phone | `winphone` | IGDB| Mobygames -WonderSwan | `wonderswan` | IGDB| Mobygames -WonderSwan Color | `wonderswan-color` | IGDB| Mobygames -XaviXPORT | `xavixport` | | Mobygames -Xbox | `xbox` | IGDB| Mobygames -Xbox 360 | `xbox360` | IGDB| Mobygames -Xbox Cloud Gaming | `xboxcloudgaming` | | Mobygames -Xbox One | `xboxone` | IGDB| Mobygames -Xbox Series X | `series-x` | IGDB| Mobygames -Xerox Alto | `xerox-alto` | | Mobygames -Z-machine | `z-machine` | | Mobygames -ZX Spectrum | `zxs` | IGDB| | -ZX Spectrum Next | `zx-spectrum-next` | | Mobygames -ZX80 | `zx80` | | Mobygames -ZX81 | `sinclair-zx81` | | Mobygames -Zeebo | `zeebo` | IGDB| Mobygames -Zilog Z80 | `z80` | | Mobygames -Zilog Z8000 | `zilog-z8000` | | Mobygames -Zodiac | `zodiac` | | Mobygames -Zune | `zune` | | Mobygames -bada | `bada` | | Mobygames -digiBlast | `digiblast` | | Mobygames -iOS | `ios` | IGDB| Mobygames -iPad | `ipad` | | Mobygames -iPod Classic | `ipod-classic` | | Mobygames -iiRcade | `iircade` | | Mobygames -tvOS | `tvos` | | Mobygames -visionOS | `visionos` | IGDB| | -watchOS | `watchos` | | Mobygames -webOS | `webos` | | Mobygames \ No newline at end of file diff --git a/romm/Troubleshooting.md b/romm/Troubleshooting.md deleted file mode 100644 index 70410b6..0000000 --- a/romm/Troubleshooting.md +++ /dev/null @@ -1,53 +0,0 @@ -## Scanning - -### Scan is skipping all platforms/ends instantly - -There are a few common reasons why a scan may end instantly/without scanning platforms - -* Badly mounted library: verify that you mounted your roms folder at `/romm/library` -* Incorrect permissions: the app needs to read the files and folders in your library, check their permissions with `ls -lh` -* Invalid folder structure: verify that your folder structure matches the one in the [README](https://github.com/zurdi15/romm#-folder-structure) - -### Roms not found for platform X, check romm folder structure - -This is the same issue as the one above, and can be quickly solved by verifying your folder structure. RomM expects a library with a folder named `roms` in it, for example: -- `/server/media/library:/romm/library` -- `/server/media/games/roms:/romm/library/roms` - -### Scan does not recognize a platform - -When scanning the folders mounted in `/library/roms`, the scanner tries to match the folder name with the platform's slug in IGDB. If you notice that the scanner isn't detecting a platform, verify that the folder name matches the slug in the url of the [platform in IGDB](https://www.igdb.com/platforms). For example, the Nintendo 64DD has the URL https://www.igdb.com/platforms/nintendo-64dd, so the folder should be named `nintendo-64dd`. - -### Scan times out after ~4 hours - -The background scan task times out after 4 hours, which can happen if you have a very large library. The easiest work around is to keep running scans every 4 hours, **without** checking the "Complete rescan" option. - -## Authentication - -### Error: `403 Forbidden` - -When authentication is enabled, most endpoints will return a `403 Forbidden` response if you're not authenticated, or if your sessions is in a broken state. The session key can be reset by [clearing your cookies](https://support.google.com/accounts/answer/32050). - -CSRF protection is also enabled, which helps to mitigates [CSRF attacks](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html) (useful if your instance is public). If you encounter a `Forbidden (403) CSRF verification failed` error, simply reloading your browser should force it to fetch a fresh CSRF cookie. - -### Error: `Unable to login: CSRF token verification failed` - -This error is known to happen on Chrome, but could happen in other browsers; manually clear your cookies (specifically one called `csrftoken`) and hard reload your browser window (CMD+SHIFT+R on macOS, CTRL+F5 on Windows). - -### Error: `400 Bad Request` on the Websocket endpoint - -If you're running RomM behind a reverse-proxy (Caddy, NGINX, etc.), ensure that websockets are supported and enabled. This may vary depending on the reverse proxy solution being used. In the case of Nginx Proxy Manager, enable the "Websockets Support" toggle when editing the proxy host. - -## Miscellaneous - -### Restarting the container when using SQLite drops all the data/requires a full re-scan - -Verify that the database is mapped to a persistent storage volume in your docker compose or Unraid template. - -``` - "/path/to/database:/romm/database" # [Optional] Only needed if ROMM_DB_DRIVER=sqlite or not set -``` - -### Error: `Could not get twitch auth token: check client_id and client_secret` - -This is likely due to misconfigured environment variables; verify that `CLIENT_ID` and `CLIENT_SECRET` are set correctly, and that both match the values in IGDB. diff --git a/romm/Upgrading-to-3.0.md b/romm/Upgrading-to-3.0.md deleted file mode 100644 index 9ad2370..0000000 --- a/romm/Upgrading-to-3.0.md +++ /dev/null @@ -1,59 +0,0 @@ -Version 3.0 of RomM introduces a number of breaking changes aimed at improving performance and usability, which will require some users to make specific changes before upgrading to ensure compatibility and to take full advantage of the new features. - -All of the following changes are reflected in the [example docker-compose.yml file](https://github.com/zurdi15/romm/blob/master/examples/docker-compose.example.yml), which has been simplified greatly. **Please read this entire file carefully, as failing to do so may cause RomM to become inaccessible or unresponsive.** - -## Dropped support for SQLite - -We're removed support for SQLite as we've faced a number of engineering issues with it in the past, and MariaDB has proven more stable and robust. If you currently use SQLite, we'll automatically migrate your data from SQLite to MariaDB, but you'll **first need to make the following changes before upgrading to the latest image.** - -In your env variables, change `ROMM_DB_DRIVER` to `mariadb` (or remove it completely as it's no longer needed). You'll then want to add the following env variables: - -``` -- DB_HOST=mariadb -- DB_PORT=3306 -- DB_NAME=romm # Should match MYSQL_DATABASE in mariadb -- DB_USER=romm-user # Should match MYSQL_USER in mariadb -- DB_PASSWD= # Should match MYSQL_PASSWORD in mariadb -``` - -To setup a new MariaDB container, have a look at the [example docker-compose.yml file](https://github.com/zurdi15/romm/blob/master/examples/docker-compose.example.yml). - -## Authentication as standard - -To support new features like EmulatorJS and saves/states management, we've decided to require authentication for all users. Anyone currently running RomM with authentication disabled will need to remove the `ROMM_AUTH_ENABLED` env variable and add the following ones: - -``` -- ROMM_AUTH_SECRET_KEY= # Generate a key with `openssl rand -hex 32` -``` - -We understand that this requirement for authentication might conflict with the way some users currently share their collection with others (unrestricted access for all). However, given the exciting new features we've built, and the ones we're looking to build in the near future, we feel this is the right decision for the project. - -## Redis is now built-in - -As Redis is [required for authentication](https://github.com/zurdi15/romm/wiki/Authentication) to work, we've integrated it directly into the docker image. If you're currently running the experimental Redis container, you can remove it, along with these environment variables: - -``` -- ENABLE_EXPERIMENTAL_REDIS -- REDIS_HOST -- REDIS_PORT -``` - -## Configuration folder - -Mounting the `config.yml` file is now done by mounting a `config` folder.. Place your existing ``config.yml`` file inside a folder and bind it to `/romm/config`: - -``` -- /path/to/config:/romm/config -``` - -Updated [config.example.yml](https://github.com/zurdi15/romm/blob/master/examples/config.example.yml) - -## Support for saves, states and screenshots - -This version introduces preliminary support for uploading/downloading saves, states and screenshots (read more about it in the 3.0 release notes). We've added a new volume mapping for these types of files called `assets`, which you'll want to bind to a local folder (or volume) so they'll persist. In your volumes section, add the following mapping, where `/path/to/assets/` is some folder where you'll want to store these assets (and make sure that folder exists): - -``` -- /path/to/assets:/romm/assets -``` - -We recommend creating a folder next to your `library`/the one mapped to `/romm/library` in order to keep all your RomM files in the same place. \ No newline at end of file diff --git a/romm/WebRcade-Integration-[DEPRECATED].md b/romm/WebRcade-Integration-[DEPRECATED].md deleted file mode 100644 index 66f483d..0000000 --- a/romm/WebRcade-Integration-[DEPRECATED].md +++ /dev/null @@ -1,47 +0,0 @@ -## ⚠️ Support for webRcade will be removed in version 3.0 in favor the built-in [EmulatorJS player](https://github.com/zurdi15/romm/wiki/EmulatorJS-Player) ⚠️ - -[WebRcade](https://github.com/webrcade/webrcade) is a platform that enables playing games entirely within the context of the browser across a [wide variety of platforms](https://docs.webrcade.com/platforms/), with support for game pads (Bluetooth and USB) for both front-end navigation and in-game. - -RomM exposes an API endpoint that serves a compatible JSON feed of supported platforms and games. Since webRcade runs within the context of your browser, you RomM instances _does not_ need to be exposed to the web. Further documentation can be found in the [User Guide](https://docs.webrcade.com/userguide/). - -**IMPORTANT: You must set the `ROMM_HOST` environment variable to your host ip or domain name (including http(s)://, subdomain and port if needed).** - -**IMPORTANT: Due to limitations with webRcade, RomM authentication must be DISABLED for the integration to work.** - - -### Some notes and limitations before starting - -* Save & state files cannot be exported from webRcade -* The JSON feed does not currently support [BIOS files](https://docs.webrcade.com/apps/emulators/psx/#bios-files) -* [Local feeds](#customizing-the-feed) will not stay up-to-date with your RomM library -* A bug in the latest release causes the game covers not to load if RomM is not accessible to the internet - -### Loading the RomM feed - -Head to the [main page](https://play.webrcade.com/) and after hovering over "Categories" click "Show Feeds". Hit the "Add Feed" button at the bottom, select "URL" and paste the following URL, replacing `host` with the URL of your RomM instance: `https:///api/platforms/webrcade/feed`. - -|Home page|Feeds|Feed URL| -|---|---|---| -|Screenshot 2023-12-27 at 11 24 26 PM|Screenshot 2023-12-27 at 11 24 41 PM|Screenshot 2023-12-27 at 11 25 01 PM| - -At this point webRcade should automatically load your library; if it doesn't, head back to the Feeds list, select "RomM Feed" at the bottom and click "Load". - -### Customizing the feed - -WebRcade also boasts an [editor](https://editor.webrcade.com/) that can identify supported games and download custom assets. You can leverage this editor to enhance your RomM feed by loading content served by the API and saving the modified feed locally. In the editor, click "Import", paste the RomM feed URL (as above) and hit "Ok". The page should refresh with the contents of the RomM feed. - -|Editor|Import| -|---|---| -|Screenshot 2023-12-27 at 11 23 56 PM|Screenshot 2023-12-27 at 10 39 24 PM| - -Now select one of the platforms (or all of them) and, under the 3-dot menu, hit "Analyze". A window will appear displaying the progress of the analysis; webRcade is fetching assets from [webrcade-assets](https://github.com/webrcade-assets). - -|Analyze|Progress| -|---|---| -|Screenshot 2023-12-27 at 11 27 11 PM|Screenshot 2023-12-27 at 11 27 34 PM| - -When you've finished analyzing your library (and making any edits), hit "Save" in the sidebar. A local feed will then be created and stored in the browser's cache, which you can export with the "Export" option in the sidebar. Back in the [main window](https://play.webrcade.com), the local should now appear in your Feed list. - -### Screenshot - -Screenshot 2023-12-27 at 11 28 14 PM \ No newline at end of file diff --git a/romm/resources/romm_large_banner.svg b/romm/resources/romm_large_banner.svg deleted file mode 100644 index 26390d3..0000000 --- a/romm/resources/romm_large_banner.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file