diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f815a87..e7228e3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,9 +13,9 @@ git clone https://github.com/RJNY/Obtainium-Emulation-Pack.git cd Obtainium-Emulation-Pack -# Make your changes to src/applications.json (or use just add-app) -just test # verify configs resolve to real APKs -just build # test, validate, normalize, and generate all output files +just add-app # interactive CLI to add a new app +just test --verbose --apks # verify configs resolve to real APKs (with full details) +just build # test, validate, normalize, and generate all output files ``` ## Project Structure @@ -36,6 +36,7 @@ scripts/ generate-readme.py # Stitches markdown files into README minify-json.py # Creates release JSON files normalize-json.py # Normalize key order and backfill defaults + process-test-results.py # Processes scheduled test results, manages GitHub issues release.py # Automated release workflow (tag, push, gh release) pages/ header.md # README header/intro @@ -89,12 +90,17 @@ Open `src/applications.json` and add your app to the `apps` array: "author": "example", "name": "Example Emulator", "preferredApkIndex": 0, - "additionalSettings": "{...}", + "additionalSettings": { + "apkFilterRegEx": "arm64", + "about": "Example emulator description" + }, "categories": ["Emulator"], "overrideSource": "GitHub" } ``` +> **Note:** `additionalSettings` is a **sparse JSON object** - only include values that differ from the defaults. The full settings are hydrated automatically at export time. See `scripts/constants.py` for the schema and default values. + #### Step 3: Add meta fields (optional) Add a `meta` object to customize how the app appears: @@ -106,7 +112,10 @@ Add a `meta` object to customize how the app appears: "author": "example", "name": "Example Emulator", "preferredApkIndex": 0, - "additionalSettings": "{...}", + "additionalSettings": { + "apkFilterRegEx": "arm64", + "about": "Example emulator description" + }, "categories": ["Emulator"], "overrideSource": "GitHub", "meta": { @@ -119,14 +128,16 @@ Add a `meta` object to customize how the app appears: #### Step 4: Validate, test, and regenerate ```bash -just validate # check for structural errors -just test # verify your app config resolves to a real APK -just build # test, validate, normalize, and generate all output files +just test AppName --verbose --apks # verify your app config resolves to a real APK +just validate # check for structural errors +just build # test, validate, normalize, and generate all output files ``` ## CI -Pull requests and pushes to `main` are checked by GitHub Actions (single job): +### Pull request / push checks + +Pull requests and pushes to `main` are checked by GitHub Actions (`ci.yml`, single job): 1. **Validate** - structural checks, regex syntax, source types 2. **Test** - verifies all app configs resolve to real APKs @@ -135,6 +146,10 @@ Pull requests and pushes to `main` are checked by GitHub Actions (single job): All steps must pass before merging. +### Scheduled tests + +A separate workflow (`scheduled-test.yml`) runs daily at ~6 AM Central. It live-tests every app config and automatically creates GitHub issues for any failures. When a previously failing app starts passing again, the issue is auto-closed. You can dry-run this locally with `just test-cron`. + ## Pre-Commit Checklist Before committing, run `just build`, then verify: @@ -151,18 +166,22 @@ Before committing, run `just build`, then verify: Run `just` to see all available commands. Recipes with `*args` accept `-h` for help. -| Command | Description | -| ----------------------- | ----------------------------------------------------------- | -| `just add-app` | Interactive CLI to add a new app | -| `just validate` | Validate applications.json (structure, regex, source types) | -| `just normalize` | Normalize key order and backfill defaults | -| `just test` | Live-test all app configs resolve to downloadable APKs | -| `just test AppName` | Live-test a single app by name (partial match) | -| `just test --verbose` | Live-test all apps with APK URL details | -| `just generate` | Generate all output files (README, release JSONs) | -| `just generate table` | Generate the README table only | -| `just build` | Test, validate, normalize, and generate all output files | -| `just release` | Tag, push, and create a GitHub release | +| Command | Description | +| ----------------------------- | ----------------------------------------------------------- | +| `just add-app` | Interactive CLI to add a new app | +| `just validate` | Validate applications.json (structure, regex, source types) | +| `just normalize` | Normalize key order and backfill defaults | +| `just test` | Live-test all app configs resolve to downloadable APKs | +| `just test AppName` | Live-test a single app by name (partial match) | +| `just test --verbose --apks` | Live-test all apps with full APK URL details | +| `just test-cron` | Dry-run the scheduled test workflow (no issues created) | +| `just generate` | Generate all output files (README, release JSONs) | +| `just generate table` | Generate the README table only | +| `just generate readme` | Generate README (includes table) | +| `just generate standard` | Generate standard release JSON only | +| `just generate dual-screen` | Generate dual-screen release JSON only | +| `just build` | Test, validate, normalize, and generate all output files | +| `just release` | Tag, push, and create a GitHub release | ## Meta Field Reference @@ -197,7 +216,7 @@ An app can belong to multiple categories. The pack supports two variants: - **Standard** (`obtainium-emulation-pack-latest.json`): For regular Android devices -- **Dual-Screen** (`obtainium-emulation-pack-dual-screen-latest.json`): For dual-screen devices like LG V60/Velvet +- **Dual-Screen** (`obtainium-emulation-pack-dual-screen-latest.json`): For dual-screen devices (AYN Thor, Anbernic RG DS, etc.) Some apps have dual-screen-specific forks (e.g., Cemu, MelonDS). Use the `includeInStandard` and `includeInDualScreen` flags to control which variant(s) include each app. @@ -220,7 +239,7 @@ Example: Standard Cemu excluded from dual-screen, dual-screen fork excluded from "id": "info.cemu.cemu", "name": "Cemu", "url": "https://github.com/SapphireRhodonite/Cemu", - "categories": ["Dual Screen"], + "categories": ["Emulator"], "meta": { "includeInStandard": false } } ``` diff --git a/README.md b/README.md index 7d87f9b..404acaa 100644 --- a/README.md +++ b/README.md @@ -1,67 +1,68 @@ +
+ # Obtainium Emulation Pack -An [Obtainium](https://github.com/ImranR98/Obtainium) import file that adds popular Android -emulation applications to Obtainium. +A curated collection of Android emulators and gaming utilities for [Obtainium](https://github.com/ImranR98/Obtainium). +
Import the pack and get automatic updates for every emulator on your device. -The maintainer of Obtainium also hosts a collection of Crowdsourced app configurations. -[apps.obtainium.imranr.dev](https://apps.obtainium.imranr.dev) +[![GitHub Release](https://img.shields.io/github/v/release/RJNY/Obtainium-Emulation-Pack?label=latest%20release)](https://github.com/RJNY/Obtainium-Emulation-Pack/releases/latest) +[![Tests](https://img.shields.io/github/actions/workflow/status/RJNY/Obtainium-Emulation-Pack/scheduled-test.yml?label=daily%20tests)](https://github.com/RJNY/Obtainium-Emulation-Pack/actions/workflows/scheduled-test.yml) -## Prerequisite +The Obtainium maintainer also hosts a broader collection of crowdsourced app configs at apps.obtainium.imranr.dev -> [!TIP] -> Which APK you need to download will depend on your device. -> If you're unsure, you can download `app-release.apk` +
-Download and Install the [latest release of Obtainium](https://github.com/ImranR98/Obtainium/releases/latest) +--- -## Setup +## Getting Started -### Option 1. Import Method +### 1. Install Obtainium -> [!TIP] -> This is recommended installation method for beginners and/or new devices +Download the [latest release of Obtainium](https://github.com/ImranR98/Obtainium/releases/latest) and install it on your device. If you're unsure which APK to grab, use `app-release.apk`. -1. On your android emulation device, navigate to the [latest release](https://github.com/RJNY/Obtainium-Emulation-Pack/releases/latest) of the Obtainium Emulation Pack. -1. Download the file titled `obtainium-emulation-pack-vX.X.X.json` to your device. -1. Open Obtainium. -1. Navigate to Import/Export. -1. Select `Obtainium Import` and open `obtainium-emulation-pack-vX.X.X.json` -1. You should see packages imported to your obtainium. +### 2. Import the Pack -### Option 2. Click-to-Install Method +This is the easiest way to get started, especially on a new device. -1. Visit this page on your android emulation device -1. Click the "Add to Obtainium!" links of the emulators you wish to track +1. On your device, go to the [latest release](https://github.com/RJNY/Obtainium-Emulation-Pack/releases/latest). +2. Download the JSON for your device: + - **Standard** (`obtainium-emulation-pack-vX.X.X.json`) - most devices + - **Dual-Screen** (`obtainium-emulation-pack-dual-screen-vX.X.X.json`) - dual-screen devices (AYN Thor, Anbernic RG DS, etc.) +3. In Obtainium, go to **Import/Export** > **Obtainium Import** and select the file. -## Applications +Obtainium will now track and update all included apps. + +## What's in the Pack + +Don't want the whole pack? Browse the tables below on your device and tap the **Add to Obtainium!** links for just the apps you want. ### Emulator -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | aPS3e | Add to Obtainium! | ✅ | ✅ | | ARMSX2 | Add to Obtainium! | ✅ | ✅ | | Azahar | Add to Obtainium! | ✅ | ✅ | -| Cemu | Add to Obtainium! | ✅ | ❌ | -| Cemu (Dual-Screen) | Add to Obtainium! | ❌ | ✅ | +| Cemu | Add to Obtainium! | ✅ | - | +| Cemu (Dual-Screen) | Add to Obtainium! | - | ✅ | | Citra MMJ | Add to Obtainium! | ✅ | ✅ | | Dolphin Emulator | Add to Obtainium! | ✅ | ✅ | -| Dolphin Emulator (Dev build) | Add to Obtainium! | ❌ | ❌ | -| Dolphin-MMJR2-VBI | Add to Obtainium! | ❌ | ❌ | +| Dolphin Emulator (Dev build) | Add to Obtainium! | - | - | +| Dolphin-MMJR2-VBI | Add to Obtainium! | - | - | | DuckStation | Add to Obtainium! | ✅ | ✅ | | Eden | Add to Obtainium! | ✅ | ✅ | -| Eden Nightly | Add to Obtainium! | ❌ | ❌ | +| Eden Nightly | Add to Obtainium! | - | - | | Flycast | Add to Obtainium! | ✅ | ✅ | | MelonDS | Add to Obtainium! | ✅ | ✅ | | MelonDS Nightly | Add to Obtainium! | ✅ | ✅ | | MelonDualDS | Add to Obtainium! | ✅ | ✅ | -| NetherSX2-Classic | Add to Obtainium! | ❌ | ❌ | +| NetherSX2-Classic | Add to Obtainium! | - | - | | NetherSX2-Patch | Add to Obtainium! | ✅ | ✅ | | Pico8 Android | Add to Obtainium! | ✅ | ✅ | | Play! | Add to Obtainium! | ✅ | ✅ | | PPSSPP | Add to Obtainium! | ✅ | ✅ | | RetroArch (AArch64) | Add to Obtainium! | ✅ | ✅ | -| RetroArch Nightly (AArch64) | Add to Obtainium! | ❌ | ❌ | +| RetroArch Nightly (AArch64) | Add to Obtainium! | - | - | | RPCSX | Add to Obtainium! | ✅ | ✅ | | ScummVM | Add to Obtainium! | ✅ | ✅ | | Vita3K | Add to Obtainium! | ✅ | ✅ | @@ -69,8 +70,8 @@ Download and Install the [latest release of Obtainium](https://github.com/ImranR ### Frontend -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | Argosy | Add to Obtainium! | ✅ | ✅ | | Cocoon FE | Add to Obtainium! | ✅ | ✅ | | Daijishō | Add to Obtainium! | ✅ | ✅ | @@ -79,10 +80,10 @@ Download and Install the [latest release of Obtainium](https://github.com/ImranR ### PC Emulation -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | GameHub Lite | Add to Obtainium! | ✅ | ✅ | -| GameHub Lite (pre-release) | Add to Obtainium! | ❌ | ❌ | +| GameHub Lite (pre-release) | Add to Obtainium! | - | - | | GameNative | Add to Obtainium! | ✅ | ✅ | | Winlator | Add to Obtainium! | ✅ | ✅ | | Winlator CMod | Add to Obtainium! | ✅ | ✅ | @@ -90,16 +91,16 @@ Download and Install the [latest release of Obtainium](https://github.com/ImranR ### Streaming -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | Artemis | Add to Obtainium! | ✅ | ✅ | | Moonlight | Add to Obtainium! | ✅ | ✅ | -| PXPlay | Add to Obtainium! | ❌ | ❌ | +| PXPlay | Add to Obtainium! | - | - | ### Track Only -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | AdrenoToolsDrivers | Add to Obtainium! | ✅ | ✅ | | ES-DE Custom Systems | Add to Obtainium! | ✅ | ✅ | | Mr. Purple Turnip Drivers | Add to Obtainium! | ✅ | ✅ | @@ -107,69 +108,81 @@ Download and Install the [latest release of Obtainium](https://github.com/ImranR ### Utilities -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | Bifrost | Add to Obtainium! | ✅ | ✅ | | CHDroid | Add to Obtainium! | ✅ | ✅ | | EmuReady Lite | Add to Obtainium! | ✅ | ✅ | | ES-DE Android Apps | Add to Obtainium! | ✅ | ✅ | -| ES-DE Companion | Add to Obtainium! | ❌ | ✅ | -| Jarngreipr | Add to Obtainium! | ❌ | ✅ | -| Mjolnir | Add to Obtainium! | ❌ | ✅ | -| O2P Tweaks | Add to Obtainium! | ❌ | ❌ | +| ES-DE Companion | Add to Obtainium! | - | ✅ | +| Jarngreipr | Add to Obtainium! | - | ✅ | +| Mjolnir | Add to Obtainium! | - | ✅ | +| O2P Tweaks | Add to Obtainium! | - | - | | OdinTools | Add to Obtainium! | ✅ | ✅ | | PixelGuide | Add to Obtainium! | ✅ | ✅ | | Syncthing-Fork | Add to Obtainium! | ✅ | ✅ | ## FAQ -### A note about stable, beta, nightly and canary versions of the same app +
+Can I install both stable and nightly versions of the same app? +
+No. Android only allows one app per package ID. You must choose between stable and nightly for apps like RetroArch, MelonDS, Eden, etc. The pack includes stable versions by default - use the individual "Add to Obtainium!" links above to switch to a nightly if you prefer. +
-You cannot install more than one version of the same app. For example: You must choose between RetroArch (stable) or RetroArch (nightly). You cannot have both. +
+How do I update the pack? +
+Same as the initial install. Re-import the latest JSON and it will update existing configs without removing any apps you've added separately. +
-To make things easier for beginners, I've omitted nightly, beta and canary versions where a stable -one exists. +
+What are the two JSON variants? +
+Some emulators have dual-screen forks (Cemu, MelonDS) that share the same Android package ID as the standard version. Since Obtainium can't have two apps with the same ID, the pack ships two variants: +

-You can manually add beta/nightly applications by using the links in the README +- **Standard** - for AYN Odin, Retroid Pocket, and most Android devices +- **Dual-Screen** - for AYN Thor, Anbernic RG DS, and other dual-screen devices, with dual-screen forks swapped in plus dual-screen utilities -### How do I update Obtainium Emulation Pack? - -Same as install method. It'll update existing resources. -It will not remove any other resources you've added. - -### Why do some applications say TRACK ONLY? +
+
+Why do some applications say TRACK ONLY? +
As the name implies, these application versions are only tracked, not pulled. -This was done because we _can't_ pull these resources, but you may still care to know when these -resources have updates so you can pull them manually. For example: NetherSX2 can't provide an APK -for legal reasons, but you'll get update notifications so you don't have to manually check or be -stuck with outdated resources. - -### How do I use TRACK ONLY resources? +This was done because we can't pull these resources, but you may still care to know when these +resources have updates so you can pull them manually. For example: GPU driver repos don't publish +APKs, but you'll get update notifications so you don't have to manually check for new releases. +
+
+How do I use TRACK ONLY resources? +
When you get notified of an update to your track only resource: +

- visit the link to your resource - download it manually - in obtainium > click resource > click "Mark Updated" -### Can this break? +
-Yes. Absolutely it can. -Any of the scrapers that use regex can break if the application maintainers break convention. -The applications pulling from GitHub are more stable and less likely to break. +
+Can configs break? +
+Yes. Apps sourced from websites (HTML scraping) can break if the site changes its layout. GitHub-sourced apps are more stable. The pack is tested daily and broken configs are flagged automatically. +
## Contributing -Want to add an app or fix a config? See the [Contributing Guide](CONTRIBUTING.md) for setup instructions, how to add apps, and the pre-commit checklist. - -Quick version: +Want to add an app or fix a config? See the [Contributing Guide](CONTRIBUTING.md). ```bash git clone https://github.com/RJNY/Obtainium-Emulation-Pack.git cd Obtainium-Emulation-Pack -# Add or edit apps in src/applications.json (or use just add-app) -just test # verify configs resolve to real APKs -just build # test, validate, normalize, and generate all output files +just add-app # interactive CLI to add a new app +just test --verbose --apks # verify configs resolve to real APKs +just build # test, validate, normalize, and generate all output files ``` diff --git a/justfile b/justfile index 6a4860e..0a635e8 100644 --- a/justfile +++ b/justfile @@ -10,9 +10,9 @@ default: add-app: @python scripts/add-app.py -# Test, validate, normalize, and generate all output files +# Validate, normalize, and generate all output files [group('Release')] -build: test validate normalize generate +build: validate normalize generate # Tag, push, and create a GitHub release [group('Release')] @@ -30,6 +30,7 @@ normalize: @python scripts/normalize-json.py src/applications.json # Live-test app configs +[group('Release')] test *args: @python scripts/test-apps.py {{ args }} diff --git a/pages/faq.md b/pages/faq.md index 213b9db..7ba3580 100644 --- a/pages/faq.md +++ b/pages/faq.md @@ -1,37 +1,51 @@ ## FAQ -### A note about stable, beta, nightly and canary versions of the same app +
+Can I install both stable and nightly versions of the same app? +
+No. Android only allows one app per package ID. You must choose between stable and nightly for apps like RetroArch, MelonDS, Eden, etc. The pack includes stable versions by default - use the individual "Add to Obtainium!" links above to switch to a nightly if you prefer. +
-You cannot install more than one version of the same app. For example: You must choose between RetroArch (stable) or RetroArch (nightly). You cannot have both. +
+How do I update the pack? +
+Same as the initial install. Re-import the latest JSON and it will update existing configs without removing any apps you've added separately. +
-To make things easier for beginners, I've omitted nightly, beta and canary versions where a stable -one exists. +
+What are the two JSON variants? +
+Some emulators have dual-screen forks (Cemu, MelonDS) that share the same Android package ID as the standard version. Since Obtainium can't have two apps with the same ID, the pack ships two variants: +

-You can manually add beta/nightly applications by using the links in the README +- **Standard** - for AYN Odin, Retroid Pocket, and most Android devices +- **Dual-Screen** - for AYN Thor, Anbernic RG DS, and other dual-screen devices, with dual-screen forks swapped in plus dual-screen utilities -### How do I update Obtainium Emulation Pack? - -Same as install method. It'll update existing resources. -It will not remove any other resources you've added. - -### Why do some applications say TRACK ONLY? +
+
+Why do some applications say TRACK ONLY? +
As the name implies, these application versions are only tracked, not pulled. -This was done because we _can't_ pull these resources, but you may still care to know when these -resources have updates so you can pull them manually. For example: NetherSX2 can't provide an APK -for legal reasons, but you'll get update notifications so you don't have to manually check or be -stuck with outdated resources. - -### How do I use TRACK ONLY resources? +This was done because we can't pull these resources, but you may still care to know when these +resources have updates so you can pull them manually. For example: GPU driver repos don't publish +APKs, but you'll get update notifications so you don't have to manually check for new releases. +
+
+How do I use TRACK ONLY resources? +
When you get notified of an update to your track only resource: +

- visit the link to your resource - download it manually - in obtainium > click resource > click "Mark Updated" -### Can this break? +
-Yes. Absolutely it can. -Any of the scrapers that use regex can break if the application maintainers break convention. -The applications pulling from GitHub are more stable and less likely to break. +
+Can configs break? +
+Yes. Apps sourced from websites (HTML scraping) can break if the site changes its layout. GitHub-sourced apps are more stable. The pack is tested daily and broken configs are flagged automatically. +
\ No newline at end of file diff --git a/pages/footer.md b/pages/footer.md index fd982ea..b37ecbe 100644 --- a/pages/footer.md +++ b/pages/footer.md @@ -1,14 +1,12 @@ ## Contributing -Want to add an app or fix a config? See the [Contributing Guide](CONTRIBUTING.md) for setup instructions, how to add apps, and the pre-commit checklist. - -Quick version: +Want to add an app or fix a config? See the [Contributing Guide](CONTRIBUTING.md). ```bash git clone https://github.com/RJNY/Obtainium-Emulation-Pack.git cd Obtainium-Emulation-Pack -# Add or edit apps in src/applications.json (or use just add-app) -just test # verify configs resolve to real APKs -just build # test, validate, normalize, and generate all output files -``` +just add-app # interactive CLI to add a new app +just test --verbose --apks # verify configs resolve to real APKs +just build # test, validate, normalize, and generate all output files +``` \ No newline at end of file diff --git a/pages/header.md b/pages/header.md index c320c82..787999f 100644 --- a/pages/header.md +++ b/pages/header.md @@ -1,34 +1,33 @@ +
+ # Obtainium Emulation Pack -An [Obtainium](https://github.com/ImranR98/Obtainium) import file that adds popular Android -emulation applications to Obtainium. +A curated collection of Android emulators and gaming utilities for [Obtainium](https://github.com/ImranR98/Obtainium). +
Import the pack and get automatic updates for every emulator on your device. -The maintainer of Obtainium also hosts a collection of Crowdsourced app configurations. -[apps.obtainium.imranr.dev](https://apps.obtainium.imranr.dev) +[![GitHub Release](https://img.shields.io/github/v/release/RJNY/Obtainium-Emulation-Pack?label=latest%20release)](https://github.com/RJNY/Obtainium-Emulation-Pack/releases/latest) +[![Tests](https://img.shields.io/github/actions/workflow/status/RJNY/Obtainium-Emulation-Pack/scheduled-test.yml?label=daily%20tests)](https://github.com/RJNY/Obtainium-Emulation-Pack/actions/workflows/scheduled-test.yml) -## Prerequisite +The Obtainium maintainer also hosts a broader collection of crowdsourced app configs at apps.obtainium.imranr.dev -> [!TIP] -> Which APK you need to download will depend on your device. -> If you're unsure, you can download `app-release.apk` +
-Download and Install the [latest release of Obtainium](https://github.com/ImranR98/Obtainium/releases/latest) +--- -## Setup +## Getting Started -### Option 1. Import Method +### 1. Install Obtainium -> [!TIP] -> This is recommended installation method for beginners and/or new devices +Download the [latest release of Obtainium](https://github.com/ImranR98/Obtainium/releases/latest) and install it on your device. If you're unsure which APK to grab, use `app-release.apk`. -1. On your android emulation device, navigate to the [latest release](https://github.com/RJNY/Obtainium-Emulation-Pack/releases/latest) of the Obtainium Emulation Pack. -1. Download the file titled `obtainium-emulation-pack-vX.X.X.json` to your device. -1. Open Obtainium. -1. Navigate to Import/Export. -1. Select `Obtainium Import` and open `obtainium-emulation-pack-vX.X.X.json` -1. You should see packages imported to your obtainium. +### 2. Import the Pack -### Option 2. Click-to-Install Method +This is the easiest way to get started, especially on a new device. -1. Visit this page on your android emulation device -1. Click the "Add to Obtainium!" links of the emulators you wish to track +1. On your device, go to the [latest release](https://github.com/RJNY/Obtainium-Emulation-Pack/releases/latest). +2. Download the JSON for your device: + - **Standard** (`obtainium-emulation-pack-vX.X.X.json`) - most devices + - **Dual-Screen** (`obtainium-emulation-pack-dual-screen-vX.X.X.json`) - dual-screen devices (AYN Thor, Anbernic RG DS, etc.) +3. In Obtainium, go to **Import/Export** > **Obtainium Import** and select the file. + +Obtainium will now track and update all included apps. diff --git a/pages/table.md b/pages/table.md index e20c29b..d81928a 100644 --- a/pages/table.md +++ b/pages/table.md @@ -1,32 +1,34 @@ -## Applications +## What's in the Pack + +Don't want the whole pack? Browse the tables below on your device and tap the **Add to Obtainium!** links for just the apps you want. ### Emulator -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | aPS3e | Add to Obtainium! | ✅ | ✅ | | ARMSX2 | Add to Obtainium! | ✅ | ✅ | | Azahar | Add to Obtainium! | ✅ | ✅ | -| Cemu | Add to Obtainium! | ✅ | ❌ | -| Cemu (Dual-Screen) | Add to Obtainium! | ❌ | ✅ | +| Cemu | Add to Obtainium! | ✅ | - | +| Cemu (Dual-Screen) | Add to Obtainium! | - | ✅ | | Citra MMJ | Add to Obtainium! | ✅ | ✅ | | Dolphin Emulator | Add to Obtainium! | ✅ | ✅ | -| Dolphin Emulator (Dev build) | Add to Obtainium! | ❌ | ❌ | -| Dolphin-MMJR2-VBI | Add to Obtainium! | ❌ | ❌ | +| Dolphin Emulator (Dev build) | Add to Obtainium! | - | - | +| Dolphin-MMJR2-VBI | Add to Obtainium! | - | - | | DuckStation | Add to Obtainium! | ✅ | ✅ | | Eden | Add to Obtainium! | ✅ | ✅ | -| Eden Nightly | Add to Obtainium! | ❌ | ❌ | +| Eden Nightly | Add to Obtainium! | - | - | | Flycast | Add to Obtainium! | ✅ | ✅ | | MelonDS | Add to Obtainium! | ✅ | ✅ | | MelonDS Nightly | Add to Obtainium! | ✅ | ✅ | | MelonDualDS | Add to Obtainium! | ✅ | ✅ | -| NetherSX2-Classic | Add to Obtainium! | ❌ | ❌ | +| NetherSX2-Classic | Add to Obtainium! | - | - | | NetherSX2-Patch | Add to Obtainium! | ✅ | ✅ | | Pico8 Android | Add to Obtainium! | ✅ | ✅ | | Play! | Add to Obtainium! | ✅ | ✅ | | PPSSPP | Add to Obtainium! | ✅ | ✅ | | RetroArch (AArch64) | Add to Obtainium! | ✅ | ✅ | -| RetroArch Nightly (AArch64) | Add to Obtainium! | ❌ | ❌ | +| RetroArch Nightly (AArch64) | Add to Obtainium! | - | - | | RPCSX | Add to Obtainium! | ✅ | ✅ | | ScummVM | Add to Obtainium! | ✅ | ✅ | | Vita3K | Add to Obtainium! | ✅ | ✅ | @@ -34,8 +36,8 @@ ### Frontend -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | Argosy | Add to Obtainium! | ✅ | ✅ | | Cocoon FE | Add to Obtainium! | ✅ | ✅ | | Daijishō | Add to Obtainium! | ✅ | ✅ | @@ -44,10 +46,10 @@ ### PC Emulation -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | GameHub Lite | Add to Obtainium! | ✅ | ✅ | -| GameHub Lite (pre-release) | Add to Obtainium! | ❌ | ❌ | +| GameHub Lite (pre-release) | Add to Obtainium! | - | - | | GameNative | Add to Obtainium! | ✅ | ✅ | | Winlator | Add to Obtainium! | ✅ | ✅ | | Winlator CMod | Add to Obtainium! | ✅ | ✅ | @@ -55,16 +57,16 @@ ### Streaming -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | Artemis | Add to Obtainium! | ✅ | ✅ | | Moonlight | Add to Obtainium! | ✅ | ✅ | -| PXPlay | Add to Obtainium! | ❌ | ❌ | +| PXPlay | Add to Obtainium! | - | - | ### Track Only -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | AdrenoToolsDrivers | Add to Obtainium! | ✅ | ✅ | | ES-DE Custom Systems | Add to Obtainium! | ✅ | ✅ | | Mr. Purple Turnip Drivers | Add to Obtainium! | ✅ | ✅ | @@ -72,16 +74,16 @@ ### Utilities -| Application Name | Add to Obtainium | Included in export json? | Included in DS json? | -|------------------|------------------|---------------------------|----------------------| +| App | Add to Obtainium | Standard | Dual-Screen | +|-----|------------------|:--------:|:-----------:| | Bifrost | Add to Obtainium! | ✅ | ✅ | | CHDroid | Add to Obtainium! | ✅ | ✅ | | EmuReady Lite | Add to Obtainium! | ✅ | ✅ | | ES-DE Android Apps | Add to Obtainium! | ✅ | ✅ | -| ES-DE Companion | Add to Obtainium! | ❌ | ✅ | -| Jarngreipr | Add to Obtainium! | ❌ | ✅ | -| Mjolnir | Add to Obtainium! | ❌ | ✅ | -| O2P Tweaks | Add to Obtainium! | ❌ | ❌ | +| ES-DE Companion | Add to Obtainium! | - | ✅ | +| Jarngreipr | Add to Obtainium! | - | ✅ | +| Mjolnir | Add to Obtainium! | - | ✅ | +| O2P Tweaks | Add to Obtainium! | - | - | | OdinTools | Add to Obtainium! | ✅ | ✅ | | PixelGuide | Add to Obtainium! | ✅ | ✅ | | Syncthing-Fork | Add to Obtainium! | ✅ | ✅ | diff --git a/scripts/generate-table.py b/scripts/generate-table.py index 65e3622..c269cf4 100644 --- a/scripts/generate-table.py +++ b/scripts/generate-table.py @@ -15,15 +15,19 @@ def generate_category_tables(apps: list[dict[str, Any]]) -> str: for category in categories: categorized[category].append(app) - markdown_sections = ["## Applications\n"] + markdown_sections = [ + "## What's in the Pack\n", + "Don't want the whole pack? Browse the tables below on your device " + "and tap the **Add to Obtainium!** links for just the apps you want.\n", + ] for category in sorted(categorized.keys()): markdown_sections.append(f"### {category}\n") markdown_sections.append( - "| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |" + "| App | Add to Obtainium | Standard | Dual-Screen |" ) markdown_sections.append( - "|------------------|------------------|---------------------------|----------------------|" + "|-----|------------------|:--------:|:-----------:|" ) apps_in_category = sorted( @@ -40,9 +44,9 @@ def generate_category_tables(apps: list[dict[str, Any]]) -> str: ) obtainium_link = make_obtainium_link(app) badge_md = f'Add to Obtainium!' - include_standard = "✅" if should_include_app(app, "standard") else "❌" + include_standard = "✅" if should_include_app(app, "standard") else "-" include_dual_screen = ( - "✅" if should_include_app(app, "dual-screen") else "❌" + "✅" if should_include_app(app, "dual-screen") else "-" ) markdown_sections.append( diff --git a/scripts/release.py b/scripts/release.py index 1356659..0f8e23d 100644 --- a/scripts/release.py +++ b/scripts/release.py @@ -210,8 +210,8 @@ def make_app_table_row(app: dict[str, Any], change: str) -> str: install = "-" else: install = f"[Add to Obtainium!][{ref_key}]" - std = "✅" if should_include_app(app, "standard") else "❌" - ds = "✅" if should_include_app(app, "dual-screen") else "❌" + std = "✅" if should_include_app(app, "standard") else "-" + ds = "✅" if should_include_app(app, "dual-screen") else "-" return f"| {app_link} | {install} | {change} | {std} | {ds} |" @@ -222,8 +222,8 @@ def make_app_reference_link(app: dict[str, Any]) -> str: CHANGES_TABLE_HEADER = ( - "| Application | Add to Obtainium | Change | Standard | Dual-Screen |\n" - "|-------------|------------------|--------|----------|-------------|" + "| App | Add to Obtainium | Change | Standard | Dual-Screen |\n" + "|-----|------------------|--------|:--------:|:-----------:|" )