diff --git a/Makefile b/Makefile
index 7f3c31f..88e3ec0 100644
--- a/Makefile
+++ b/Makefile
@@ -5,13 +5,16 @@ help: # Show help for each of the makefile recipes.
@grep -E '^[a-zA-Z0-9 -]+:.*#' Makefile | sort | while read -r l; \
do printf "\033[1;32m$$(echo $$l | cut -f 1 -d':')\033[00m:$$(echo $$l | cut -f 2- -d'#')\n"; done
-release: readme minify # Run all Make targets related to cutting a release.
+release: readme minify minify-dual-screen # Run all Make targets related to cutting a release.
links: # Generate links for all obtainium packages
@python scripts/generate-obtainium-urls.py src/applications.json > scripts/links.md
-minify: # Obtainium historically expects a minified json. This allows humans to edit the readable and easily update the minified one.
- @python scripts/minify-json.py src/applications.json obtainium-emulation-pack-latest.json
+minify: # Generate standard release JSON
+ @python scripts/minify-json.py src/applications.json obtainium-emulation-pack-latest.json --variant standard
+
+minify-dual-screen: # Generate dual screen release JSON
+ @python scripts/minify-json.py src/applications.json obtainium-emulation-pack-dual-screen-latest.json --variant dual-screen
table: # Generate a table of obtainium links for the README.
@python scripts/generate-table.py src/applications.json ./pages/table.md
diff --git a/README.md b/README.md
index 8e70c80..9cc8464 100644
--- a/README.md
+++ b/README.md
@@ -37,81 +37,80 @@ Download and Install the [latest release of Obtainium](https://github.com/ImranR
### Dual Screen
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| Azahar | Add to Obtainium! | ❌ |
-| Cemu | Add to Obtainium! | ❌ |
-| MelonDS | Add to Obtainium! | ❌ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| Cemu | Add to Obtainium! | ❌ | ✅ |
+| MelonDS | Add to Obtainium! | ❌ | ✅ |
### Emulator
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| ARMSX2 | Add to Obtainium! | ✅ |
-| Azahar | Add to Obtainium! | ✅ |
-| Cemu | Add to Obtainium! | ✅ |
-| Citra MMJ | Add to Obtainium! | ✅ |
-| Citron | Add to Obtainium! | ✅ |
-| Citron Nightly | Add to Obtainium! | ❌ |
-| Dolphin Emulator | Add to Obtainium! | ✅ |
-| Dolphin Emulator (Dev build) | Add to Obtainium! | ❌ |
-| Dolphin-MMJR2-VBI | Add to Obtainium! | ❌ |
-| DuckStation (Beta) | Add to Obtainium! | ✅ |
-| Eden | Add to Obtainium! | ✅ |
-| Eden Nightly | Add to Obtainium! | ❌ |
-| Flycast | Add to Obtainium! | ✅ |
-| Kenji-NX | Add to Obtainium! | ❌ |
-| MelonDS | Add to Obtainium! | ✅ |
-| MelonDS Nightly | Add to Obtainium! | ❌ |
-| NetherSX2-Classic | Add to Obtainium! | ✅ |
-| NetherSX2-Patch | Add to Obtainium! | ❌ |
-| PPSSPP | Add to Obtainium! | ✅ |
-| RPCSX | Add to Obtainium! | ✅ |
-| RetroArch (AArch64) | Add to Obtainium! | ✅ |
-| RetroArch Nightly (AArch64) | Add to Obtainium! | ❌ |
-| ScummVM | Add to Obtainium! | ✅ |
-| Vita3K | Add to Obtainium! | ✅ |
-| Vita3K ZX | Add to Obtainium! | ✅ |
-| aPS3e | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| ARMSX2 | Add to Obtainium! | ✅ | ✅ |
+| Azahar | Add to Obtainium! | ✅ | ✅ |
+| Cemu | Add to Obtainium! | ✅ | ❌ |
+| Citra MMJ | Add to Obtainium! | ✅ | ✅ |
+| Citron | Add to Obtainium! | ✅ | ✅ |
+| Citron Nightly | Add to Obtainium! | ❌ | ❌ |
+| Dolphin Emulator | Add to Obtainium! | ✅ | ✅ |
+| Dolphin Emulator (Dev build) | Add to Obtainium! | ❌ | ❌ |
+| Dolphin-MMJR2-VBI | Add to Obtainium! | ❌ | ❌ |
+| DuckStation (Beta) | Add to Obtainium! | ✅ | ✅ |
+| Eden | Add to Obtainium! | ✅ | ✅ |
+| Eden Nightly | Add to Obtainium! | ❌ | ❌ |
+| Flycast | Add to Obtainium! | ✅ | ✅ |
+| Kenji-NX | Add to Obtainium! | ❌ | ❌ |
+| MelonDS | Add to Obtainium! | ✅ | ❌ |
+| MelonDS Nightly | Add to Obtainium! | ❌ | ❌ |
+| NetherSX2-Classic | Add to Obtainium! | ✅ | ✅ |
+| NetherSX2-Patch | Add to Obtainium! | ❌ | ❌ |
+| PPSSPP | Add to Obtainium! | ✅ | ✅ |
+| RPCSX | Add to Obtainium! | ✅ | ✅ |
+| RetroArch (AArch64) | Add to Obtainium! | ✅ | ✅ |
+| RetroArch Nightly (AArch64) | Add to Obtainium! | ❌ | ❌ |
+| ScummVM | Add to Obtainium! | ✅ | ✅ |
+| Vita3K | Add to Obtainium! | ✅ | ✅ |
+| Vita3K ZX | Add to Obtainium! | ✅ | ✅ |
+| aPS3e | Add to Obtainium! | ✅ | ✅ |
### Frontend
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| Daijishō | Add to Obtainium! | ✅ |
-| Pegasus | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| Daijishō | Add to Obtainium! | ✅ | ✅ |
+| Pegasus | Add to Obtainium! | ✅ | ✅ |
### PC Emulation
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| GameHub Lite | Add to Obtainium! | ✅ |
-| GameNative | Add to Obtainium! | ✅ |
-| Winlator | Add to Obtainium! | ✅ |
-| Winlator CMod | Add to Obtainium! | ✅ |
-| Winlator-Ludashi | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| GameHub Lite | Add to Obtainium! | ✅ | ✅ |
+| GameNative | Add to Obtainium! | ✅ | ✅ |
+| Winlator | Add to Obtainium! | ✅ | ✅ |
+| Winlator CMod | Add to Obtainium! | ✅ | ✅ |
+| Winlator-Ludashi | Add to Obtainium! | ✅ | ✅ |
### Streaming
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| Artemis | Add to Obtainium! | ✅ |
-| Moonlight | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| Artemis | Add to Obtainium! | ✅ | ✅ |
+| Moonlight | Add to Obtainium! | ✅ | ✅ |
### Track Only
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| AdrenoToolsDrivers | Add to Obtainium! | ✅ |
-| Obtainium Emulation Pack | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| AdrenoToolsDrivers | Add to Obtainium! | ✅ | ✅ |
+| Obtainium Emulation Pack | Add to Obtainium! | ✅ | ✅ |
### Utilities
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| ES-DE Android Apps | Add to Obtainium! | ✅ |
-| OdinTools | Add to Obtainium! | ✅ |
-| Syncthing-Fork | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| ES-DE Android Apps | Add to Obtainium! | ✅ | ✅ |
+| OdinTools | Add to Obtainium! | ✅ | ✅ |
+| Syncthing-Fork | Add to Obtainium! | ✅ | ✅ |
## FAQ
diff --git a/obtainium-emulation-pack-dual-screen-latest.json b/obtainium-emulation-pack-dual-screen-latest.json
new file mode 100644
index 0000000..1746ef9
--- /dev/null
+++ b/obtainium-emulation-pack-dual-screen-latest.json
@@ -0,0 +1 @@
+{"apps":[{"id":"aenu.aps3e","url":"https://github.com/aenu1/aps3e","author":"aenu1","name":"aPS3e","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false,\"includeZips\":false,\"zippedApkFilterRegEx\":\"\"}","categories":["Emulator"],"overrideSource":"GitHub","allowIdChange":false},{"id":"io.github.lime3ds.android","url":"https://github.com/azahar-emu/azahar","author":"azahar-emu","name":"Azahar","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Emulator"],"overrideSource":"GitHub"},{"id":"org.citra.emu","url":"https://github.com/weihuoya/citra","author":"weihuoya","name":"Citra","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"Citra MMJ\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false,\"includeZips\":false,\"zippedApkFilterRegEx\":\"\"}","categories":["Emulator"],"overrideSource":"GitHub","allowIdChange":false},{"id":"org.citron.citron_emu","url":"https://git.citron-emu.org/Citron/Emulator","author":"citron","name":"Citron","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":true,\"fallbackToOlderReleases\":true,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"app-mainline-release\\\\.apk$\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Emulator"],"overrideSource":"Codeberg","allowIdChange":false},{"id":"org.dolphinemu.dolphinemu","url":"https://dolphin-emu.org/download/?ref=btn","author":"dolphin-emu.org","name":"Dolphin Emulator","preferredApkIndex":0,"additionalSettings":"{\"intermediateLink\":[],\"customLinkFilterRegex\":\"https:\\\\/\\\\/dl.dolphin-emu.org\\\\/releases.+dolphin.+.apk\",\"filterByLinkText\":false,\"skipSort\":false,\"reverseSort\":false,\"sortByLastLinkSegment\":true,\"versionExtractWholePage\":false,\"requestHeader\":[{\"requestHeader\":\"User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36\"}],\"defaultPseudoVersioningMethod\":\"partialAPKHash\",\"trackOnly\":false,\"versionExtractionRegEx\":\"/releases/.+/dolphin-(.+).apk\",\"matchGroupToUse\":\"$1\",\"versionDetection\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"Dolphin Emulator\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Emulator"],"overrideSource":"HTML"},{"id":"com.github.stenzek.duckstation","url":"https://duckstation.rmacias.workers.dev","author":"downloads.duckstation.org","name":"DuckStation (Beta)","preferredApkIndex":0,"additionalSettings":"{\"intermediateLink\":[],\"customLinkFilterRegex\":\"https://downloads.duckstation.org/android/duckstation-(beta|android).apk\",\"filterByLinkText\":true,\"skipSort\":false,\"reverseSort\":false,\"sortByLastLinkSegment\":false,\"versionExtractWholePage\":true,\"requestHeader\":[{\"requestHeader\":\"User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36\"}],\"defaultPseudoVersioningMethod\":\"partialAPKHash\",\"trackOnly\":false,\"versionExtractionRegEx\":\"
[\\\\s\\\\S]*?- \\\\d{4}/\\\\d{2}/\\\\d{2} \\\\((\\\\d+\\\\.\\\\d+-\\\\d+)\\\\)\",\"matchGroupToUse\":\"1\",\"versionDetection\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Emulator"],"overrideSource":"HTML"},{"id":"dev.eden.eden_emulator","url":"https://github.com/eden-emulator/Releases","author":"eden-emulator","name":"Releases","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"Eden\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Emulator"],"overrideSource":"GitHub"},{"id":"com.flycast.emulator","url":"https://github.com/flyinghead/flycast","author":"flyinghead","name":"Flycast","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Emulator"],"overrideSource":"GitHub"},{"id":"org.ppsspp.ppsspp","url":"https://www.ppsspp.org/download","author":"www.ppsspp.org","name":"PPSSPP","preferredApkIndex":0,"additionalSettings":"{\"intermediateLink\":[],\"customLinkFilterRegex\":\"\\\\/[0-9]+(?:_[0-9]+){1,2}\\\\/ppsspp\\\\.apk$\",\"filterByLinkText\":false,\"skipSort\":false,\"reverseSort\":false,\"sortByLastLinkSegment\":false,\"versionExtractWholePage\":false,\"requestHeader\":[{\"requestHeader\":\"User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36\"}],\"defaultPseudoVersioningMethod\":\"APKLinkHash\",\"trackOnly\":false,\"versionExtractionRegEx\":\"\\\\/(?:(?:([0-9]+)_([0-9]+)\\\\/ppsspp\\\\.)|(?:([0-9]+)_([0-9]+)_([0-9]+)\\\\/ppsspp(\\\\.)))apk$\",\"matchGroupToUse\":\"$1$3.$2$4$6$5\",\"versionDetection\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"PPSSPP\",\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"PPSSPP is an open source, fast and portable PSP emulator\",\"supportFixedAPKURL\":false}","categories":["Emulator"],"overrideSource":"HTML"},{"id":"487343354","url":"https://buildbot.libretro.com/stable","author":"buildbot.libretro.com","name":"RetroArch (AArch64)","preferredApkIndex":0,"additionalSettings":"{\"intermediateLink\":[{\"customLinkFilterRegex\":\"/stable/\\\\d+.\\\\d+.\\\\d+/\",\"filterByLinkText\":false,\"skipSort\":false,\"reverseSort\":false,\"sortByLastLinkSegment\":false},{\"customLinkFilterRegex\":\"/stable/\\\\d+.\\\\d+.\\\\d+/android/\",\"filterByLinkText\":false,\"skipSort\":false,\"reverseSort\":false,\"sortByLastLinkSegment\":false}],\"customLinkFilterRegex\":\"/stable/\\\\d+.\\\\d+.\\\\d+/android/RetroArch_aarch64.apk\",\"filterByLinkText\":false,\"skipSort\":true,\"reverseSort\":false,\"sortByLastLinkSegment\":false,\"versionExtractWholePage\":false,\"requestHeader\":[{\"requestHeader\":\"User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36\"}],\"defaultPseudoVersioningMethod\":\"APKLinkHash\",\"trackOnly\":false,\"versionExtractionRegEx\":\"\\\\d+.\\\\d+.\\\\d+\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"RetroArch AArch64\",\"exemptFromBackgroundUpdates\":true,\"skipUpdateNotifications\":true,\"about\":\"Released less frequently. Better stability. \",\"supportFixedAPKURL\":false}","categories":["Emulator"],"overrideSource":"HTML"},{"id":"net.rpcsx","url":"https://github.com/RPCSX/rpcsx-ui-android","author":"RPCSX","name":"RPCSX","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Emulator"],"overrideSource":"GitHub"},{"id":"org.scummvm.scummvm","url":"https://downloads.scummvm.org/frs/scummvm/","author":"ScummVM","name":"ScummVM","preferredApkIndex":0,"additionalSettings":"{\"intermediateLink\":[{\"customLinkFilterRegex\":\"\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\"filterByLinkText\":false,\"skipSort\":false,\"reverseSort\":false,\"sortByLastLinkSegment\":false}],\"customLinkFilterRegex\":\"\",\"filterByLinkText\":false,\"skipSort\":false,\"reverseSort\":false,\"sortByLastLinkSegment\":false,\"versionExtractWholePage\":false,\"requestHeader\":[{\"requestHeader\":\"User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36\"}],\"defaultPseudoVersioningMethod\":\"APKLinkHash\",\"trackOnly\":false,\"versionExtractionRegEx\":\"\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\".*android-arm64-v8a.apk\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"A program which allows you to run certain classic graphical adventure and role-playing games, provided you already have their data files.\",\"supportFixedAPKURL\":false}","categories":["Emulator"],"overrideSource":"HTML"},{"id":"gamehub.lite","url":"https://github.com/Producdevity/gamehub-lite","author":"Producdevity","name":"GameHub Lite","preferredApkIndex":4,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":true,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false,\"includeZips\":false,\"zippedApkFilterRegEx\":\"\"}","categories":["PC Emulation"],"overrideSource":"GitHub","allowIdChange":false},{"id":"app.gamenative","url":"https://github.com/utkarshdalal/GameNative","author":"utkarshdalal","name":"GameNative","preferredApkIndex":3,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["PC Emulation"],"overrideSource":"GitHub"},{"id":"com.winlator","url":"https://github.com/brunodev85/winlator","author":"brunodev85","name":"Winlator","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"dontSortReleasesList\":false,\"useLatestAssetDateAsReleaseDate\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"shizukuPretendToBeGooglePlay\":false}","categories":["PC Emulation"]},{"id":"com.winlator.cmod","url":"https://github.com/coffincolors/winlator","author":"coffincolors","name":"winlator","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"Winlator Cmod\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["PC Emulation"],"overrideSource":"GitHub","allowIdChange":true},{"id":"com.miHoYo.GenshinImpact","url":"https://github.com/StevenMXZ/Winlator-Ludashi","author":"StevenMXZ","name":"Winlator-Ludashi","preferredApkIndex":2,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["PC Emulation"],"overrideSource":"GitHub","allowIdChange":false},{"id":"org.vita3k.emulator","url":"https://github.com/Vita3K/Vita3K-Android","author":"Vita3K","name":"Vita3K","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"dontSortReleasesList\":false,\"useLatestAssetDateAsReleaseDate\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\"}","categories":["Emulator"]},{"id":"org.vita3k.emulator.ikhoeyZX","url":"https://github.com/ikhoeyZX/Vita3K-Android","author":"ikhoeyZX","name":"Vita3K ZX","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Emulator"],"overrideSource":"GitHub"},{"id":"xyz.aethersx2.android","url":"https://github.com/Trixarian/NetherSX2-classic","author":"Trixarian","name":"NetherSX2 Classic","preferredApkIndex":1,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"NetherSX2-Classic\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Emulator"],"overrideSource":"GitHub"},{"id":"com.limelight.noir","url":"https://github.com/ClassicOldSong/moonlight-android","author":"ClassicOldSong","name":"Artemis","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Streaming"],"overrideSource":"GitHub"},{"id":"com.limelight","url":"https://github.com/moonlight-stream/moonlight-android","author":"moonlight-stream","name":"Moonlight","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Streaming"],"overrideSource":"GitHub"},{"id":"com.github.catfriend1.syncthingfork","url":"https://github.com/researchxxl/syncthing-android","author":"researchxxl","name":"Syncthing-Fork","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false,\"includeZips\":false,\"zippedApkFilterRegEx\":\"\"}","categories":["Utilities"],"overrideSource":"GitHub","allowIdChange":false},{"id":"com.quantumsoul.esde_android","url":"https://github.com/BinaryQuantumSoul/esde_android_apps","author":"BinaryQuantumSoul","name":"ES-DE Android Apps","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Utilities"],"overrideSource":"GitHub"},{"id":"476086958","url":"https://github.com/K11MCH1/AdrenoToolsDrivers","author":"K11MCH1","name":"AdrenoToolsDrivers","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"Turnip\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":true,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":false,\"appName\":\"Turnip Drivers\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false,\"github-creds\":\"\"}","categories":["Track Only"],"overrideSource":"GitHub"},{"id":"904332840","url":"https://github.com/RJNY/Obtainium-Emulation-Pack","author":"RJNY","name":"Obtainium Emulation Pack","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"dontSortReleasesList\":false,\"useLatestAssetDateAsReleaseDate\":false,\"trackOnly\":true,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"Obtainium Emulation Pack\",\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\"}","categories":["Track Only"]},{"id":"com.magneticchen.daijishou","url":"https://github.com/TapiocaFox/Daijishou","author":"TapiocaFox","name":"Daijishō","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Frontend"],"overrideSource":"GitHub"},{"id":"org.pegasus_frontend.android","url":"https://github.com/mmatyas/pegasus-frontend","author":"mmatyas","name":"Pegasus","preferredApkIndex":1,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Frontend"],"overrideSource":"GitHub"},{"id":"de.langerhans.odintools","url":"https://github.com/langerhans/OdinTools","author":"langerhans","name":"OdinTools","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Utilities"],"overrideSource":"GitHub"},{"id":"me.magnum.melonds","url":"https://github.com/SapphireRhodonite/melonDS-android","author":"SapphireRhodonite","name":"MelonDS","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"MelonDS (DS)\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false}","categories":["Dual Screen"],"overrideSource":"GitHub","allowIdChange":false},{"id":"info.cemu.cemu","url":"https://github.com/SapphireRhodonite/Cemu","author":"SapphireRhodonite","name":"Cemu","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"Cemu (DS)\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false,\"github-creds\":\"\"}","categories":["Dual Screen"],"overrideSource":"GitHub","allowIdChange":false},{"id":"come.nanodata.armsx2","url":"https://github.com/ARMSX2/ARMSX2","author":"ARMSX2","name":"ARMSX2","preferredApkIndex":0,"additionalSettings":"{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":false,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false,\"includeZips\":false,\"zippedApkFilterRegEx\":\"\"}","categories":["Emulator"],"overrideSource":"GitHub","allowIdChange":true}],"settings":{"categories":"{\"Emulator\":4292386421,\"Streaming\":4292056539,\"Utilities\":4292449237,\"Track Only\":4293103815,\"Frontend\":4291470692,\"PC Emulation\":4285381755,\"Dual Screen\":4290947422}","groupByCategory":true,"onlyCheckInstalledOrTrackOnlyApps":true}}
\ No newline at end of file
diff --git a/pages/table.md b/pages/table.md
index c64f073..0a23234 100644
--- a/pages/table.md
+++ b/pages/table.md
@@ -2,78 +2,77 @@
### Dual Screen
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| Azahar | Add to Obtainium! | ❌ |
-| Cemu | Add to Obtainium! | ❌ |
-| MelonDS | Add to Obtainium! | ❌ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| Cemu | Add to Obtainium! | ❌ | ✅ |
+| MelonDS | Add to Obtainium! | ❌ | ✅ |
### Emulator
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| ARMSX2 | Add to Obtainium! | ✅ |
-| Azahar | Add to Obtainium! | ✅ |
-| Cemu | Add to Obtainium! | ✅ |
-| Citra MMJ | Add to Obtainium! | ✅ |
-| Citron | Add to Obtainium! | ✅ |
-| Citron Nightly | Add to Obtainium! | ❌ |
-| Dolphin Emulator | Add to Obtainium! | ✅ |
-| Dolphin Emulator (Dev build) | Add to Obtainium! | ❌ |
-| Dolphin-MMJR2-VBI | Add to Obtainium! | ❌ |
-| DuckStation (Beta) | Add to Obtainium! | ✅ |
-| Eden | Add to Obtainium! | ✅ |
-| Eden Nightly | Add to Obtainium! | ❌ |
-| Flycast | Add to Obtainium! | ✅ |
-| Kenji-NX | Add to Obtainium! | ❌ |
-| MelonDS | Add to Obtainium! | ✅ |
-| MelonDS Nightly | Add to Obtainium! | ❌ |
-| NetherSX2-Classic | Add to Obtainium! | ✅ |
-| NetherSX2-Patch | Add to Obtainium! | ❌ |
-| PPSSPP | Add to Obtainium! | ✅ |
-| RPCSX | Add to Obtainium! | ✅ |
-| RetroArch (AArch64) | Add to Obtainium! | ✅ |
-| RetroArch Nightly (AArch64) | Add to Obtainium! | ❌ |
-| ScummVM | Add to Obtainium! | ✅ |
-| Vita3K | Add to Obtainium! | ✅ |
-| Vita3K ZX | Add to Obtainium! | ✅ |
-| aPS3e | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| ARMSX2 | Add to Obtainium! | ✅ | ✅ |
+| Azahar | Add to Obtainium! | ✅ | ✅ |
+| Cemu | Add to Obtainium! | ✅ | ❌ |
+| Citra MMJ | Add to Obtainium! | ✅ | ✅ |
+| Citron | Add to Obtainium! | ✅ | ✅ |
+| Citron Nightly | Add to Obtainium! | ❌ | ❌ |
+| Dolphin Emulator | Add to Obtainium! | ✅ | ✅ |
+| Dolphin Emulator (Dev build) | Add to Obtainium! | ❌ | ❌ |
+| Dolphin-MMJR2-VBI | Add to Obtainium! | ❌ | ❌ |
+| DuckStation (Beta) | Add to Obtainium! | ✅ | ✅ |
+| Eden | Add to Obtainium! | ✅ | ✅ |
+| Eden Nightly | Add to Obtainium! | ❌ | ❌ |
+| Flycast | Add to Obtainium! | ✅ | ✅ |
+| Kenji-NX | Add to Obtainium! | ❌ | ❌ |
+| MelonDS | Add to Obtainium! | ✅ | ❌ |
+| MelonDS Nightly | Add to Obtainium! | ❌ | ❌ |
+| NetherSX2-Classic | Add to Obtainium! | ✅ | ✅ |
+| NetherSX2-Patch | Add to Obtainium! | ❌ | ❌ |
+| PPSSPP | Add to Obtainium! | ✅ | ✅ |
+| RPCSX | Add to Obtainium! | ✅ | ✅ |
+| RetroArch (AArch64) | Add to Obtainium! | ✅ | ✅ |
+| RetroArch Nightly (AArch64) | Add to Obtainium! | ❌ | ❌ |
+| ScummVM | Add to Obtainium! | ✅ | ✅ |
+| Vita3K | Add to Obtainium! | ✅ | ✅ |
+| Vita3K ZX | Add to Obtainium! | ✅ | ✅ |
+| aPS3e | Add to Obtainium! | ✅ | ✅ |
### Frontend
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| Daijishō | Add to Obtainium! | ✅ |
-| Pegasus | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| Daijishō | Add to Obtainium! | ✅ | ✅ |
+| Pegasus | Add to Obtainium! | ✅ | ✅ |
### PC Emulation
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| GameHub Lite | Add to Obtainium! | ✅ |
-| GameNative | Add to Obtainium! | ✅ |
-| Winlator | Add to Obtainium! | ✅ |
-| Winlator CMod | Add to Obtainium! | ✅ |
-| Winlator-Ludashi | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| GameHub Lite | Add to Obtainium! | ✅ | ✅ |
+| GameNative | Add to Obtainium! | ✅ | ✅ |
+| Winlator | Add to Obtainium! | ✅ | ✅ |
+| Winlator CMod | Add to Obtainium! | ✅ | ✅ |
+| Winlator-Ludashi | Add to Obtainium! | ✅ | ✅ |
### Streaming
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| Artemis | Add to Obtainium! | ✅ |
-| Moonlight | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| Artemis | Add to Obtainium! | ✅ | ✅ |
+| Moonlight | Add to Obtainium! | ✅ | ✅ |
### Track Only
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| AdrenoToolsDrivers | Add to Obtainium! | ✅ |
-| Obtainium Emulation Pack | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| AdrenoToolsDrivers | Add to Obtainium! | ✅ | ✅ |
+| Obtainium Emulation Pack | Add to Obtainium! | ✅ | ✅ |
### Utilities
-| Application Name | Add to Obtainium | Included in export json? |
-|------------------|------------------|---------------------------|
-| ES-DE Android Apps | Add to Obtainium! | ✅ |
-| OdinTools | Add to Obtainium! | ✅ |
-| Syncthing-Fork | Add to Obtainium! | ✅ |
+| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |
+|------------------|------------------|---------------------------|----------------------|
+| ES-DE Android Apps | Add to Obtainium! | ✅ | ✅ |
+| OdinTools | Add to Obtainium! | ✅ | ✅ |
+| Syncthing-Fork | Add to Obtainium! | ✅ | ✅ |
diff --git a/scripts/generate-table.py b/scripts/generate-table.py
index f3e0479..3e52cb2 100644
--- a/scripts/generate-table.py
+++ b/scripts/generate-table.py
@@ -30,6 +30,25 @@ def get_application_url(app):
return app.get("meta", {}).get("urlOverride") or app.get("url", "")
+def should_include_app(app, variant):
+ """Determine if an app should be included based on variant and meta fields."""
+ meta = app.get("meta", {})
+
+ # HIGHEST PRIORITY: Global exclusion overrides everything
+ if meta.get("excludeFromExport", False):
+ return False
+
+ # SECOND PRIORITY: Variant-specific inclusion/exclusion
+ if variant == "standard":
+ # Default: include in standard
+ return meta.get("includeInStandard", True)
+ elif variant == "dual-screen":
+ # Default: include in dual screen
+ return meta.get("includeInDualScreen", True)
+
+ return True
+
+
def generate_category_tables(apps):
# Categorize apps
categorized = defaultdict(list)
@@ -43,10 +62,10 @@ def generate_category_tables(apps):
for category in sorted(categorized.keys()):
markdown_sections.append(f"### {category}\n")
markdown_sections.append(
- "| Application Name | Add to Obtainium | Included in export json? |"
+ "| Application Name | Add to Obtainium | Included in export json? | Included in DS json? |"
)
markdown_sections.append(
- "|------------------|------------------|---------------------------|"
+ "|------------------|------------------|---------------------------|----------------------|"
)
apps_in_category = sorted(categorized[category], key=get_display_name)
@@ -61,12 +80,13 @@ def generate_category_tables(apps):
)
obtainium_link = make_obtainium_link(app)
badge_md = f'Add to Obtainium!'
- include_json = (
- "❌" if app.get("meta", {}).get("excludeFromExport") else "✅"
+ include_standard = "✅" if should_include_app(app, "standard") else "❌"
+ include_dual_screen = (
+ "✅" if should_include_app(app, "dual-screen") else "❌"
)
markdown_sections.append(
- f"| {display_name} | {badge_md} | {include_json} |"
+ f"| {display_name} | {badge_md} | {include_standard} | {include_dual_screen} |"
)
markdown_sections.append("") # blank line between sections
diff --git a/scripts/minify-json.py b/scripts/minify-json.py
index f165582..f81f77b 100644
--- a/scripts/minify-json.py
+++ b/scripts/minify-json.py
@@ -1,36 +1,69 @@
import json
import sys
+import argparse
-def minify_json(input_file, output_file):
+def should_include_app(app, variant):
+ """Determine if an app should be included based on variant and meta fields."""
+ meta = app.get("meta", {})
+
+ # HIGHEST PRIORITY: Global exclusion overrides everything
+ if meta.get("excludeFromExport", False):
+ return False
+
+ # SECOND PRIORITY: Variant-specific inclusion/exclusion
+ if variant == "standard":
+ # Default: include in standard
+ return meta.get("includeInStandard", True)
+ elif variant == "dual-screen":
+ # Default: include in dual screen
+ return meta.get("includeInDualScreen", True)
+
+ return True
+
+
+def minify_json(input_file, output_file, variant="standard"):
try:
# Read JSON data from input file
with open(input_file, "r", encoding="utf-8") as f:
data = json.load(f)
- # Filter out apps with meta.exclude_from_json = true
+ # Filter apps based on variant
if "apps" in data:
filtered_apps = []
for app in data["apps"]:
- meta = app.get("meta", {})
- if not meta.get("excludeFromExport", False):
- app.pop("meta", None) # Exclude the 'meta' key from the export json
- filtered_apps.append(app)
+ if should_include_app(app, variant):
+ # Remove meta key from export
+ app_copy = app.copy()
+ app_copy.pop("meta", None)
+ filtered_apps.append(app_copy)
data["apps"] = filtered_apps
# Minify JSON and write to output file
with open(output_file, "w", encoding="utf-8") as f:
json.dump(data, f, separators=(",", ":"), ensure_ascii=False)
+ variant_label = f" ({variant})" if variant != "standard" else ""
print(
- f"Minified JSON saved to {output_file} ({len(data.get('apps', []))} apps included)"
+ f"Minified JSON{variant_label} saved to {output_file} ({len(data.get('apps', []))} apps included)"
)
except Exception as e:
print(f"Error: {e}")
+ sys.exit(1)
if __name__ == "__main__":
- if len(sys.argv) != 3:
- print("Usage: python minify_json.py input.json output.json")
- else:
- minify_json(sys.argv[1], sys.argv[2])
+ parser = argparse.ArgumentParser(
+ description="Minify and filter Obtainium JSON based on variant"
+ )
+ parser.add_argument("input", help="Input JSON file")
+ parser.add_argument("output", help="Output JSON file")
+ parser.add_argument(
+ "--variant",
+ choices=["standard", "dual-screen"],
+ default="standard",
+ help="Variant to build (default: standard)",
+ )
+
+ args = parser.parse_args()
+ minify_json(args.input, args.output, args.variant)
diff --git a/src/applications.json b/src/applications.json
index 91f9fd4..299046a 100644
--- a/src/applications.json
+++ b/src/applications.json
@@ -35,7 +35,10 @@
"categories": [
"Emulator"
],
- "overrideSource": "GitHub"
+ "overrideSource": "GitHub",
+ "meta": {
+ "includeInDualScreen": false
+ }
},
{
"id": "org.citra.emu",
@@ -196,7 +199,11 @@
"categories": [
"Emulator"
],
- "overrideSource": "GitHub"
+ "overrideSource": "GitHub",
+ "meta": {
+ "includeInStandard": true,
+ "includeInDualScreen": false
+ }
},
{
"id": "me.magnum.melonds.nightly",
@@ -528,21 +535,6 @@
],
"overrideSource": "GitHub"
},
- {
- "id": "io.github.lime3ds.android.debug",
- "url": "https://github.com/SapphireRhodonite/azahar",
- "author": "SapphireRhodonite",
- "name": "Azahar",
- "preferredApkIndex": 0,
- "additionalSettings": "{\"includePrereleases\":false,\"fallbackToOlderReleases\":true,\"filterReleaseTitlesByRegEx\":\"\",\"filterReleaseNotesByRegEx\":\"\",\"verifyLatestTag\":false,\"sortMethodChoice\":\"date\",\"useLatestAssetDateAsReleaseDate\":false,\"releaseTitleAsVersion\":false,\"trackOnly\":false,\"versionExtractionRegEx\":\"\",\"matchGroupToUse\":\"\",\"versionDetection\":true,\"releaseDateAsVersion\":false,\"useVersionCodeAsOSVersion\":false,\"apkFilterRegEx\":\"\",\"invertAPKFilter\":false,\"autoApkFilterByArch\":true,\"appName\":\"Azahar (DS)\",\"appAuthor\":\"\",\"shizukuPretendToBeGooglePlay\":false,\"allowInsecure\":false,\"exemptFromBackgroundUpdates\":false,\"skipUpdateNotifications\":false,\"about\":\"\",\"refreshBeforeDownload\":false,\"github-creds\":\"\"}",
- "categories": [
- "Dual Screen"
- ],
- "overrideSource": "GitHub",
- "meta": {
- "excludeFromExport": true
- }
- },
{
"id": "me.magnum.melonds",
"url": "https://github.com/SapphireRhodonite/melonDS-android",
@@ -556,7 +548,8 @@
"overrideSource": "GitHub",
"allowIdChange": false,
"meta": {
- "excludeFromExport": true
+ "includeInStandard": false,
+ "includeInDualScreen": true
}
},
{
@@ -572,7 +565,8 @@
"overrideSource": "GitHub",
"allowIdChange": false,
"meta": {
- "excludeFromExport": true
+ "includeInStandard": false,
+ "includeInDualScreen": true
}
},
{