diff --git a/.vale/config/vocabularies/romm/accept.txt b/.vale/config/vocabularies/romm/accept.txt index a663d3b2..07504595 100644 --- a/.vale/config/vocabularies/romm/accept.txt +++ b/.vale/config/vocabularies/romm/accept.txt @@ -25,3 +25,5 @@ UIDs URIs Websocket Websockets +ZimaOS +ZimaSpace diff --git a/docs/Navigation.md b/docs/Navigation.md index ef84c36d..c1a03c17 100644 --- a/docs/Navigation.md +++ b/docs/Navigation.md @@ -22,6 +22,7 @@ search: - [TrueNAS](install/truenas.md) - [Kubernetes](install/kubernetes.md) - [Railway](install/railway.md) + - [ZimaOS](install/zimaos.md) - [NixOS](install/nixos.md) - [Backup & Restore](install/backup-and-restore.md) - Administration diff --git a/docs/administration/scheduled-tasks.md b/docs/administration/scheduled-tasks.md index d2af3f5c..f3bfaf04 100644 --- a/docs/administration/scheduled-tasks.md +++ b/docs/administration/scheduled-tasks.md @@ -29,7 +29,9 @@ Set the env var and restart the container; the scheduler picks up the new schedu ## Enabling a scheduled task -Each task has an `ENABLE_*` environment variable, like `ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA=true` which enables the LaunchBox sync. Check the [env var reference](../reference/environment-variables.md) for the full list. Some tasks are enabled by default, others aren't. +Most tasks have an `ENABLE_*` environment variable, like `ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA=true` which enables the LaunchBox sync, and every one of them is off by default. Set both the enable var and its cron var, since a task with an empty cron string has nothing to schedule and stays unscheduled even when enabled. + +The housekeeping tasks (netplay cleanup, upload tmp cleanup, ZIP cache cleanup) are always on and have no env vars. Check the [env var reference](../reference/environment-variables.md) for the full list. ## Triggering a task manually diff --git a/docs/install/index.md b/docs/install/index.md index af5d0e96..31c35823 100644 --- a/docs/install/index.md +++ b/docs/install/index.md @@ -1,6 +1,6 @@ --- title: Install & Deploy -description: On Docker Compose, Unraid, Synology, TrueNAS, Kubernetes, Railway, or NixOS +description: On Docker Compose, Unraid, Synology, TrueNAS, Kubernetes, Railway, ZimaOS, or NixOS --- # Install & Deploy @@ -17,6 +17,7 @@ RomM is distributed as a Docker image. Every supported deployment runs the same | **TrueNAS** | [App Catalog or YAML install](truenas.md) | | **Kubernetes** | [Community charts and gotchas](kubernetes.md) | | **Railway** | [Community one-click template](railway.md) | +| **ZimaOS** | [One-click install from the App Store](zimaos.md) | If none of those match, start with [Docker Compose](../getting-started/quick-start.md) and adapt as needed. diff --git a/docs/install/zimaos.md b/docs/install/zimaos.md new file mode 100644 index 00000000..d38d412c --- /dev/null +++ b/docs/install/zimaos.md @@ -0,0 +1,53 @@ +--- +title: ZimaOS +description: Install on ZimaOS in one step from the built-in App Store +--- + +# ZimaOS + +[ZimaOS](https://www.zimaspace.com/zimaos) ships RomM in its App Store, so the install is a single click and no compose file or database setup is needed. + +## Prerequisites + +- A running ZimaOS installation +- Your library arranged in the expected [folder structure](../getting-started/folder-structure.md) + +## Install + +Open the **App Store** and search for `RomM`, then hit **Install**. + +![RomM in the ZimaOS App Store](../resources/zimaos/appstore.png) + +ZimaOS provisions the container along with its database and Valkey, and the app shows up on your home screen when it's ready. + +![RomM on the ZimaOS home screen](../resources/zimaos/apps-grid.png) + +Open it and the first-run Setup Wizard walks you through creating the first admin account. + +## Configuration + +The defaults work out of the box, so everything below is optional. + +To change container settings, use the options button in the upper-right corner of the app tile. ZimaOS offers both a form-based editor and a YAML editor for the underlying compose file, so you can set volumes, ports, and env vars either way. + +![The options button on the RomM app tile](../resources/zimaos/app-tile-options.png) + +![Editing RomM's volumes and environment variables](../resources/zimaos/edit-config.png) + +The env vars are the same ones documented in [Quick Start](../getting-started/quick-start.md) and the [Environment Variables reference](../reference/environment-variables.md). Two worth setting early: + +- **`ROMM_AUTH_SECRET_KEY`**: generate one with `openssl rand -hex 32`. Rotating it later invalidates every session and invite link. +- **Metadata provider credentials**: fill these in before your first scan (see [Metadata Providers](../getting-started/metadata-providers.md)). + +## Adding ROMs + +Open **Files** in ZimaOS, navigate to the directory you mapped to the library (`AppData/romm/library/roms` by default), and drag your files in to upload. Platform folder names inside `roms/` have to match the expected naming (see [Folder Structure](../getting-started/folder-structure.md)). + +Once the files land, run a scan from the app (see [Your First Scan](../getting-started/first-scan.md)). + +## Getting help + +For ZimaOS-specific problems, the [ZimaSpace Discord](https://discord.gg/f9nzbmpMtU) is the fastest route, since their team and community maintain the App Store entry. For issues with the app itself, try the [RomM Discord](https://discord.gg/P5HtHnhUDH) or: + +- [Scanning Troubleshooting](../troubleshooting/scanning.md) for matching and ingest problems +- [Authentication Troubleshooting](../troubleshooting/authentication.md) for login issues diff --git a/docs/resources/snippets/env-vars.md b/docs/resources/snippets/env-vars.md index 140b2632..6f9f0433 100644 --- a/docs/resources/snippets/env-vars.md +++ b/docs/resources/snippets/env-vars.md @@ -8,7 +8,7 @@ | `ROMM_TMP_PATH` | | | Custom temporary directory path | | `ROMM_BASE_URL` | `http://0.0.0.0` | | Public URL of this instance | | `ROMM_PORT` | `8080` | | Port on which the application listens | -| `KIOSK_MODE` | `false` | | Read-only mode for public displays or kiosks | +| `KIOSK_MODE` | `false` | | Let visitors browse without logging in (read-only) | ### Database @@ -25,14 +25,15 @@ ### Redis/Valkey -| Variable | Default | Required | Description | -| ---------------- | ----------- | :------: | ------------------------------------------------------ | -| `REDIS_HOST` | `127.0.0.1` | | Host name of the Redis/Valkey instance | -| `REDIS_PORT` | `6379` | | Port number of the Redis/Valkey instance | -| `REDIS_USERNAME` | | | Username for the Redis/Valkey instance | -| `REDIS_PASSWORD` | | | Password for the Redis/Valkey instance | -| `REDIS_DB` | `0` | | Database number for the Redis/Valkey instance | -| `REDIS_SSL` | `false` | | Enable SSL (rediss://) for the Redis/Valkey connection | +| Variable | Default | Required | Description | +| ------------------- | ----------- | :------: | ------------------------------------------------------------------------------------------------ | +| `REDIS_HOST` | `127.0.0.1` | | Host name of the Redis/Valkey instance | +| `REDIS_PORT` | `6379` | | Port number of the Redis/Valkey instance | +| `REDIS_USERNAME` | | | Username for the Redis/Valkey instance | +| `REDIS_PASSWORD` | | | Password for the Redis/Valkey instance | +| `REDIS_DB` | `0` | | Database number for the Redis/Valkey instance | +| `REDIS_SSL` | `false` | | Enable SSL (rediss://) for the Redis/Valkey connection | +| `REDIS_SAVE_POLICY` | `3600 1` | | Snapshot policy of the internal Valkey, as " " pairs (empty to never snapshot) | ### Authentication @@ -94,25 +95,27 @@ ### Scans & Tasks -| Variable | Default | Required | Description | -| -------------------------------------------------- | ----------- | :------: | ------------------------------------------------------------- | -| `SCAN_TIMEOUT` | `14400` | | Timeout for background scan/rescan tasks in seconds | -| `SCAN_WORKERS` | `2` | | Number of worker processes for scanning tasks | -| `TASK_TIMEOUT` | `300` | | Timeout for other background tasks in seconds | -| `TASK_RESULT_TTL` | `86400` | | How long to keep task results in Valkey in seconds | -| `SEVEN_ZIP_TIMEOUT` | `60` | | Timeout for 7-Zip operations in seconds | -| `ENABLE_RESCAN_ON_FILESYSTEM_CHANGE` | `false` | | Re-scan the library automatically when the filesystem changes | -| `RESCAN_ON_FILESYSTEM_CHANGE_DELAY` | `5` | | Delay in minutes before re-scanning after a filesystem change | -| `ENABLE_SCHEDULED_RESCAN` | `false` | | Enable scheduled library re-scans | -| `SCHEDULED_RESCAN_CRON` | `0 3 * * *` | | Cron expression for scheduled re-scans | -| `ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB` | `false` | | Enable scheduled Switch TitleDB index updates | -| `SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON` | `0 4 * * *` | | Cron expression for scheduled Switch TitleDB updates | -| `ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA` | `false` | | Enable scheduled LaunchBox metadata updates | -| `SCHEDULED_UPDATE_LAUNCHBOX_METADATA_CRON` | `0 4 * * *` | | Cron expression for scheduled LaunchBox metadata updates | -| `ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP` | `false` | | Enable scheduled conversion of images to WebP | -| `SCHEDULED_CONVERT_IMAGES_TO_WEBP_CRON` | `0 4 * * *` | | Cron expression for scheduled WebP conversion | -| `ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC` | `false` | | Enable scheduled RetroAchievements progress sync | -| `SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC_CRON` | `0 4 * * *` | | Cron expression for scheduled RetroAchievements sync | +| Variable | Default | Required | Description | +| -------------------------------------------------- | ----------- | :------: | ----------------------------------------------------------------------------------------- | +| `SCAN_TIMEOUT` | `14400` | | Timeout for background scan/rescan tasks in seconds | +| `SCAN_WORKERS` | `1` | | How many ROMs a scan processes at once | +| `TASK_TIMEOUT` | `300` | | Timeout for other background tasks in seconds | +| `TASK_RESULT_TTL` | `86400` | | How long to keep task results in Valkey in seconds | +| `SEVEN_ZIP_TIMEOUT` | `60` | | Timeout for 7-Zip operations in seconds | +| `ENABLE_RESCAN_ON_FILESYSTEM_CHANGE` | `false` | | Re-scan the library automatically when the filesystem changes | +| `RESCAN_ON_FILESYSTEM_CHANGE_DELAY` | `5` | | Delay in minutes before re-scanning after a filesystem change | +| `ENABLE_SCHEDULED_RESCAN` | `false` | | Enable scheduled library re-scans | +| `SCHEDULED_RESCAN_CRON` | `0 3 * * *` | | Cron expression for scheduled re-scans | +| `ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB` | `false` | | Enable scheduled Switch TitleDB index updates | +| `SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON` | `0 4 * * *` | | Cron expression for scheduled Switch TitleDB updates | +| `ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA` | `false` | | Enable scheduled LaunchBox metadata updates | +| `SCHEDULED_UPDATE_LAUNCHBOX_METADATA_CRON` | `0 4 * * *` | | Cron expression for scheduled LaunchBox metadata updates | +| `ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP` | `false` | | Enable scheduled conversion of images to WebP | +| `SCHEDULED_CONVERT_IMAGES_TO_WEBP_CRON` | `0 4 * * *` | | Cron expression for scheduled WebP conversion | +| `ENABLE_SCHEDULED_CLEANUP_ORPHANED_RESOURCES` | `false` | | Enable scheduled cleanup of orphaned resources (covers, screenshots) left by deleted ROMs | +| `SCHEDULED_CLEANUP_ORPHANED_RESOURCES_CRON` | `0 5 * * *` | | Cron expression for scheduled orphaned resource cleanup | +| `ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC` | `false` | | Enable scheduled RetroAchievements progress sync | +| `SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC_CRON` | `0 4 * * *` | | Cron expression for scheduled RetroAchievements sync | ### Sync @@ -158,7 +161,7 @@ | Variable | Default | Required | Description | | ---------------------------------- | ------- | :------: | ----------------------------------------------------------- | -| `WEB_SERVER_CONCURRENCY` | `3` | | Number of worker processes (recommended: 2 × CPU cores + 1) | +| `WEB_SERVER_CONCURRENCY` | `1` | | Number of worker processes (recommended: 2 × CPU cores + 1) | | `WEB_SERVER_TIMEOUT` | `300` | | Timeout for web server requests in seconds | | `WEB_SERVER_KEEPALIVE` | `2` | | Keep-Alive connection wait time in seconds | | `WEB_SERVER_MAX_REQUESTS` | `1000` | | Maximum requests a worker processes before restarting | diff --git a/docs/resources/snippets/scheduled-tasks.md b/docs/resources/snippets/scheduled-tasks.md index 5b3f6338..270e6b84 100644 --- a/docs/resources/snippets/scheduled-tasks.md +++ b/docs/resources/snippets/scheduled-tasks.md @@ -1,15 +1,19 @@ -| Task | Type | Default schedule | Env var | Purpose | -| -------------------------- | --------- | ---------------- | -------------------------------------- | ----------------------------------------------------------------------- | -| Folder Scan | Scheduled | `0 0 * * *` | `SCHEDULED_RESCAN_CRON` | Rescan ROM library for new or changed files. | -| Switch titleDB Fetch | Scheduled | `0 12 * * 0` | `SWITCH_TITLEDB_FETCH_INTERVAL_CRON` | Update Nintendo Switch game database used for matching. | -| LaunchBox Metadata Sync | Scheduled | `0 2 * * *` | `LAUNCHBOX_SYNC_INTERVAL_CRON` | Synchronize LaunchBox metadata cache. | -| Image Conversion | Scheduled | `0 3 * * *` | `IMAGE_CONVERSION_INTERVAL_CRON` | Convert media to WebP for serving. | -| RetroAchievements Sync | Scheduled | `0 4 * * *` | `RETROACHIEVEMENTS_SYNC_INTERVAL_CRON` | Sync per-user RetroAchievements progression data. | -| Netplay Cleanup | Scheduled | `*/30 * * * *` | `NETPLAY_CLEANUP_INTERVAL_CRON` | Remove orphaned netplay sessions. | -| Push-Pull Device Sync | Scheduled | `-` | `-` | Bidirectional save/state sync to registered devices (work in progress). | -| Cleanup Missing ROMs | Manual | `-` | `-` | Remove DB entries whose files are no longer on disk. | -| Cleanup Orphaned Resources | Manual | `-` | `-` | Delete cached media not referenced by any ROM. | -| Sync Folder Scan | Manual | `-` | `-` | On-demand library scan + sync. | -| Filesystem Watcher | Watcher | `-` | `WATCHER_ENABLED` | Live-watch the library folder and trigger quick scans on changes. | +| Task | Type | Default schedule | Enable var | Schedule/delay var | Purpose | +| ------------------------------- | --------- | ---------------- | -------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------- | +| Scheduled rescan | Scheduled | `0 3 * * *` | `ENABLE_SCHEDULED_RESCAN` | `SCHEDULED_RESCAN_CRON` | Rescan the entire ROM library for new or changed files. | +| Switch TitleDB update | Scheduled | `0 4 * * *` | `ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB` | `SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON` | Update the Nintendo Switch TitleDB index used for matching. | +| LaunchBox metadata update | Scheduled | `0 4 * * *` | `ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA` | `SCHEDULED_UPDATE_LAUNCHBOX_METADATA_CRON` | Refresh the LaunchBox metadata store. | +| Convert images to WebP | Scheduled | `0 4 * * *` | `ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP` | `SCHEDULED_CONVERT_IMAGES_TO_WEBP_CRON` | Convert existing PNG, JPG, BMP, TIFF and GIF media to WebP. | +| Cleanup orphaned resources | Scheduled | `0 5 * * *` | `ENABLE_SCHEDULED_CLEANUP_ORPHANED_RESOURCES` | `SCHEDULED_CLEANUP_ORPHANED_RESOURCES_CRON` | Delete covers, screenshots and other resources left behind by deleted ROMs. | +| RetroAchievements progress sync | Scheduled | `0 4 * * *` | `ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC` | `SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC_CRON` | Update RetroAchievements progress for all users. | +| Push-pull device sync | Scheduled | `*/30 * * * *` | `ENABLE_SYNC_PUSH_PULL` | `SYNC_PUSH_PULL_CRON` | Sync saves with registered devices over SSH/SFTP. | +| Netplay cleanup | Scheduled | `*/30 * * * *` | `-` | `-` | Clean up empty netplay rooms. Always on, not configurable. | +| Upload tmp cleanup | Scheduled | `0 * * * *` | `-` | `-` | Remove orphaned chunked-upload temp directories. Always on, not configurable. | +| ZIP cache cleanup | Scheduled | `0 4 * * *` | `-` | `-` | Remove stale cached ZIP files on a tiered TTL. Always on, not configurable. | +| Cleanup missing ROMs | Manual | `-` | `-` | `-` | Delete database entries for ROMs flagged as missing from the filesystem. | +| Recompute save content hashes | Manual | `-` | `-` | `-` | Recompute content hashes for stored saves. | +| Sync folder scan | Manual | `-` | `-` | `-` | Scan device sync folders for new save files. | +| Filesystem watcher | Watcher | `-` | `ENABLE_RESCAN_ON_FILESYSTEM_CHANGE` | `RESCAN_ON_FILESYSTEM_CHANGE_DELAY` | Watch the library folder and trigger a rescan on changes. | +| Sync folder watcher | Watcher | `-` | `ENABLE_SYNC_FOLDER_WATCHER` | `SYNC_FOLDER_SCAN_DELAY` | Watch the sync folder and trigger a scan on changes. | diff --git a/docs/resources/snippets/supported-platforms.md b/docs/resources/snippets/supported-platforms.md index 429fd6c3..2b0e1b83 100644 --- a/docs/resources/snippets/supported-platforms.md +++ b/docs/resources/snippets/supported-platforms.md @@ -117,6 +117,7 @@ | Digiblast | `digiblast` | igdb logo mobygames logo | | DoJa | `doja` | mobygames logo | | Donner Model 30 | `donner30` | igdb logo | +| Doom | `doom` | screenscraper logo hasheous logo libretro logo | | DOS | `dos` | igdb logo screenscraper logo mobygames logo launchbox logo hasheous logo libretro logo | | Dragon 32/64 | `dragon-32-slash-64` | igdb logo screenscraper logo mobygames logo launchbox logo | | Dreamcast | `dc` | igdb logo screenscraper logo mobygames logo launchbox logo hasheous logo retroachivements logo howlongtobeat logo libretro logo | @@ -135,7 +136,7 @@ | ExEn | `exen` | mobygames logo | | Exidy Sorcerer | `exidy-sorcerer` | igdb logo screenscraper logo mobygames logo launchbox logo | | Fairchild Channel F | `fairchild-channel-f` | igdb logo screenscraper logo mobygames logo launchbox logo hasheous logo retroachivements logo libretro logo | -| Family Computer | `famicom` | igdb logo screenscraper logo mobygames logo launchbox logo retroachivements logo libretro logo | +| Family Computer | `famicom` | igdb logo screenscraper logo mobygames logo launchbox logo hasheous logo retroachivements logo libretro logo | | Family Computer Disk System | `fds` | igdb logo screenscraper logo launchbox logo hasheous logo retroachivements logo libretro logo | | Feature phone | `mobile-custom` | mobygames logo | | Ferranti Nimrod Computer | `nimrod` | igdb logo | @@ -216,7 +217,7 @@ | Matsushita/Panasonic JR | `matsushitapanasonic-jr` | mobygames logo | | Mattel Aquarius | `aquarius` | mobygames logo launchbox logo hasheous logo | | MeeGo | `meego` | mobygames logo | -| Mega Duck/Cougar Boy | `mega-duck-slash-cougar-boy` | igdb logo launchbox logo retroachivements logo | +| Mega Duck/Cougar Boy | `mega-duck-slash-cougar-boy` | igdb logo screenscraper logo launchbox logo retroachivements logo | | Memotech MTX | `memotech-mtx` | mobygames logo | | Memotech MTX512 | `mtx512` | launchbox logo | | Meritum | `meritum` | mobygames logo | @@ -241,9 +242,9 @@ | Namco System 22 | `system-32` | screenscraper logo launchbox logo | | Nascom | `nascom` | mobygames logo | | NEC PC-6000 Series | `nec-pc-6000-series` | igdb logo hasheous logo | -| Neo Geo AES | `neogeoaes` | igdb logo screenscraper logo mobygames logo launchbox logo hasheous logo howlongtobeat logo libretro logo | +| Neo Geo AES | `neogeoaes` | igdb logo screenscraper logo mobygames logo launchbox logo hasheous logo retroachivements logo howlongtobeat logo libretro logo | | Neo Geo CD | `neo-geo-cd` | igdb logo screenscraper logo mobygames logo launchbox logo hasheous logo retroachivements logo howlongtobeat logo libretro logo | -| Neo Geo MVS | `neogeomvs` | igdb logo screenscraper logo mobygames logo launchbox logo libretro logo | +| Neo Geo MVS | `neogeomvs` | igdb logo screenscraper logo mobygames logo launchbox logo retroachivements logo libretro logo | | Neo Geo Pocket | `neo-geo-pocket` | igdb logo screenscraper logo mobygames logo launchbox logo hasheous logo retroachivements logo howlongtobeat logo libretro logo | | Neo Geo Pocket Color | `neo-geo-pocket-color` | igdb logo screenscraper logo mobygames logo launchbox logo hasheous logo retroachivements logo libretro logo | | Neo Geo X | `neo-geo-x` | mobygames logo | diff --git a/docs/resources/zimaos/app-tile-options.png b/docs/resources/zimaos/app-tile-options.png new file mode 100644 index 00000000..9f25e3bd Binary files /dev/null and b/docs/resources/zimaos/app-tile-options.png differ diff --git a/docs/resources/zimaos/apps-grid.png b/docs/resources/zimaos/apps-grid.png new file mode 100644 index 00000000..d46a86b0 Binary files /dev/null and b/docs/resources/zimaos/apps-grid.png differ diff --git a/docs/resources/zimaos/appstore.png b/docs/resources/zimaos/appstore.png new file mode 100644 index 00000000..4a8e27df Binary files /dev/null and b/docs/resources/zimaos/appstore.png differ diff --git a/docs/resources/zimaos/edit-config.png b/docs/resources/zimaos/edit-config.png new file mode 100644 index 00000000..02597c57 Binary files /dev/null and b/docs/resources/zimaos/edit-config.png differ diff --git a/scripts/gen_scheduled_tasks.py b/scripts/gen_scheduled_tasks.py index d6e72055..afa59c7c 100644 --- a/scripts/gen_scheduled_tasks.py +++ b/scripts/gen_scheduled_tasks.py @@ -13,84 +13,129 @@ from scripts._sources import write_snippet -# Sourced from rommapp/romm@master backend/tasks/* registration as of 4.8.x. +# Sourced from rommapp/romm backend/tasks/ at the ref pinned in sources.toml. +# Task titles, `enabled=` flags and `cron_string=` defaults come from each +# task's constructor; env var names are cross-checked against env.template. TASKS = [ { - "name": "Folder Scan", + "name": "Scheduled rescan", "type": "Scheduled", - "default_cron": "0 0 * * *", + "default_cron": "0 3 * * *", + "enable_var": "ENABLE_SCHEDULED_RESCAN", "env_var": "SCHEDULED_RESCAN_CRON", - "purpose": "Rescan ROM library for new or changed files.", + "purpose": "Rescan the entire ROM library for new or changed files.", }, { - "name": "Switch titleDB Fetch", + "name": "Switch TitleDB update", "type": "Scheduled", - "default_cron": "0 12 * * 0", - "env_var": "SWITCH_TITLEDB_FETCH_INTERVAL_CRON", - "purpose": "Update Nintendo Switch game database used for matching.", + "default_cron": "0 4 * * *", + "enable_var": "ENABLE_SCHEDULED_UPDATE_SWITCH_TITLEDB", + "env_var": "SCHEDULED_UPDATE_SWITCH_TITLEDB_CRON", + "purpose": "Update the Nintendo Switch TitleDB index used for matching.", }, { - "name": "LaunchBox Metadata Sync", + "name": "LaunchBox metadata update", "type": "Scheduled", - "default_cron": "0 2 * * *", - "env_var": "LAUNCHBOX_SYNC_INTERVAL_CRON", - "purpose": "Synchronize LaunchBox metadata cache.", + "default_cron": "0 4 * * *", + "enable_var": "ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA", + "env_var": "SCHEDULED_UPDATE_LAUNCHBOX_METADATA_CRON", + "purpose": "Refresh the LaunchBox metadata store.", }, { - "name": "Image Conversion", + "name": "Convert images to WebP", "type": "Scheduled", - "default_cron": "0 3 * * *", - "env_var": "IMAGE_CONVERSION_INTERVAL_CRON", - "purpose": "Convert media to WebP for serving.", + "default_cron": "0 4 * * *", + "enable_var": "ENABLE_SCHEDULED_CONVERT_IMAGES_TO_WEBP", + "env_var": "SCHEDULED_CONVERT_IMAGES_TO_WEBP_CRON", + "purpose": "Convert existing PNG, JPG, BMP, TIFF and GIF media to WebP.", + }, + { + "name": "Cleanup orphaned resources", + "type": "Scheduled", + "default_cron": "0 5 * * *", + "enable_var": "ENABLE_SCHEDULED_CLEANUP_ORPHANED_RESOURCES", + "env_var": "SCHEDULED_CLEANUP_ORPHANED_RESOURCES_CRON", + "purpose": "Delete covers, screenshots and other resources left behind by deleted ROMs.", }, { - "name": "RetroAchievements Sync", + "name": "RetroAchievements progress sync", "type": "Scheduled", "default_cron": "0 4 * * *", - "env_var": "RETROACHIEVEMENTS_SYNC_INTERVAL_CRON", - "purpose": "Sync per-user RetroAchievements progression data.", + "enable_var": "ENABLE_SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC", + "env_var": "SCHEDULED_RETROACHIEVEMENTS_PROGRESS_SYNC_CRON", + "purpose": "Update RetroAchievements progress for all users.", }, { - "name": "Netplay Cleanup", + "name": "Push-pull device sync", "type": "Scheduled", "default_cron": "*/30 * * * *", - "env_var": "NETPLAY_CLEANUP_INTERVAL_CRON", - "purpose": "Remove orphaned netplay sessions.", + "enable_var": "ENABLE_SYNC_PUSH_PULL", + "env_var": "SYNC_PUSH_PULL_CRON", + "purpose": "Sync saves with registered devices over SSH/SFTP.", }, { - "name": "Push-Pull Device Sync", + "name": "Netplay cleanup", "type": "Scheduled", - "default_cron": "-", + "default_cron": "*/30 * * * *", + "enable_var": "-", "env_var": "-", - "purpose": "Bidirectional save/state sync to registered devices (work in progress).", + "purpose": "Clean up empty netplay rooms. Always on, not configurable.", }, { - "name": "Cleanup Missing ROMs", + "name": "Upload tmp cleanup", + "type": "Scheduled", + "default_cron": "0 * * * *", + "enable_var": "-", + "env_var": "-", + "purpose": "Remove orphaned chunked-upload temp directories. Always on, not configurable.", + }, + { + "name": "ZIP cache cleanup", + "type": "Scheduled", + "default_cron": "0 4 * * *", + "enable_var": "-", + "env_var": "-", + "purpose": "Remove stale cached ZIP files on a tiered TTL. Always on, not configurable.", + }, + { + "name": "Cleanup missing ROMs", "type": "Manual", "default_cron": "-", + "enable_var": "-", "env_var": "-", - "purpose": "Remove DB entries whose files are no longer on disk.", + "purpose": "Delete database entries for ROMs flagged as missing from the filesystem.", }, { - "name": "Cleanup Orphaned Resources", + "name": "Recompute save content hashes", "type": "Manual", "default_cron": "-", + "enable_var": "-", "env_var": "-", - "purpose": "Delete cached media not referenced by any ROM.", + "purpose": "Recompute content hashes for stored saves.", }, { - "name": "Sync Folder Scan", + "name": "Sync folder scan", "type": "Manual", "default_cron": "-", + "enable_var": "-", "env_var": "-", - "purpose": "On-demand library scan + sync.", + "purpose": "Scan device sync folders for new save files.", + }, + { + "name": "Filesystem watcher", + "type": "Watcher", + "default_cron": "-", + "enable_var": "ENABLE_RESCAN_ON_FILESYSTEM_CHANGE", + "env_var": "RESCAN_ON_FILESYSTEM_CHANGE_DELAY", + "purpose": "Watch the library folder and trigger a rescan on changes.", }, { - "name": "Filesystem Watcher", + "name": "Sync folder watcher", "type": "Watcher", "default_cron": "-", - "env_var": "WATCHER_ENABLED", - "purpose": "Live-watch the library folder and trigger quick scans on changes.", + "enable_var": "ENABLE_SYNC_FOLDER_WATCHER", + "env_var": "SYNC_FOLDER_SCAN_DELAY", + "purpose": "Watch the sync folder and trigger a scan on changes.", }, ] @@ -99,12 +144,13 @@ def render() -> str: out = [ "", "", - "| Task | Type | Default schedule | Env var | Purpose |", - "| --- | --- | --- | --- | --- |", + "| Task | Type | Default schedule | Enable var | Schedule/delay var | Purpose |", + "| --- | --- | --- | --- | --- | --- |", ] for t in TASKS: out.append( - f"| {t['name']} | {t['type']} | `{t['default_cron']}` | `{t['env_var']}` | {t['purpose']} |" + f"| {t['name']} | {t['type']} | `{t['default_cron']}` " + f"| `{t['enable_var']}` | `{t['env_var']}` | {t['purpose']} |" ) out.append("") return "\n".join(out) diff --git a/scripts/sources.toml b/scripts/sources.toml index b3e9a8a8..7c141a45 100644 --- a/scripts/sources.toml +++ b/scripts/sources.toml @@ -7,4 +7,4 @@ repo = "rommapp/romm" # Set to a tag (e.g. "v5.0.0") or a full SHA. Generators fetch raw files # from raw.githubusercontent.com/${repo}/${ref}/... -ref = "5.1.0-beta.2" +ref = "5.2.0"