{"id":49560689,"url":"https://github.com/dark574/retromind","last_synced_at":"2026-06-01T16:00:45.643Z","repository":{"id":331340450,"uuid":"1110400360","full_name":"Dark574/Retromind","owner":"Dark574","description":"Linux-first, portable media manager for games, movies, books \u0026 more. Built with C# + Avalonia. Built by human creativity, powered by artificial intelligence","archived":false,"fork":false,"pushed_at":"2026-05-26T18:58:39.000Z","size":19017,"stargazers_count":11,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-26T20:24:04.787Z","etag":null,"topics":["appimage","avalonia","csharp","launcher","linux","mediacenter","retrogaming","wine"],"latest_commit_sha":null,"homepage":"https://dark574.github.io/Retromind/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dark574.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-05T06:17:03.000Z","updated_at":"2026-05-26T18:58:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Dark574/Retromind","commit_stats":null,"previous_names":["dark574/retromind"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/Dark574/Retromind","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dark574%2FRetromind","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dark574%2FRetromind/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dark574%2FRetromind/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dark574%2FRetromind/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dark574","download_url":"https://codeload.github.com/Dark574/Retromind/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dark574%2FRetromind/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33782317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appimage","avalonia","csharp","launcher","linux","mediacenter","retrogaming","wine"],"created_at":"2026-05-03T08:13:07.488Z","updated_at":"2026-06-01T16:00:45.635Z","avatar_url":"https://github.com/Dark574.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Retromind\n\nBuilt by human creativity, powered by artificial intelligence.\nDedicated to the digital spark that helped compile this reality.\n\n \nRetromind is a Linux-first, portable media manager for organizing and launching your media library\n(games, movies, books, comics, ...).\n\nBuilt with **C#** + **Avalonia**.\n\n## Website\n\nProject homepage (GitHub Pages):\n\n- \u003chttps://dark574.github.io/Retromind/\u003e\n\n## Status\nIMPORTANT:\n\nRetromind is early alpha. Data formats (retromind_tree.json, app_settings.json) can change between releases without a migration path. Therefore, use this version more for testing than for a large, long-term library.\n\nWork in progress. Expect breaking changes while features and data formats evolve.\nSee `docs/CHANGELOG.md` for version history.\n\n## Key features (high-level)\n- Library tree (areas/categories) on the left\n- Cover/grid view in the center\n- Details view on the right\n- Drag \u0026 drop categories in the tree to reorder or move between parents (merge prompt on conflicts)\n- Global search with classic title search plus optional metadata power-query mode\n- Metadata scraping (depends on your API keys)\n- Optional BigMode / controller-friendly UI with runtime themes\n- Per-item manuals/documents\n- Flexible launch configuration with wrappers, environment variables, and per-item arguments\n- Portable library layout with relative paths (USB/external drive friendly)\n- Optional AppImage portable HOME/XDG mode for Retromind runtime, with per-emulator overrides for child processes\n\n## Screenshots\n\n\u003e Note: The screenshots are for demonstration purposes only.  \n\u003e All product names, logos, and brands shown are property of their respective owners.\n\n### Main library view\n\n![Retromind main view](./docs/images/retromind-main.png)\n\n- Library tree on the left (areas / categories)\n- Cover grid in the center\n- Details panel on the right\n\n### BigMode (controller-friendly UI)\n\n![Retromind BigMode](./docs/images/retromind-bigmode-default.png)\n![Retromind BigMode](./docs/images/retromind-bigmode-arcade.png)\n\n- Large, readable layout for couch / TV usage\n- Gamepad input support\n- you can design and add your own theme through axaml files\n\n## Requirements\n- Linux (primary target)\n- .NET SDK 10.0\n- LibVLC runtime (required for this build; AppImage bundles it)\n\n## Build AppImage (portable release, includes VLC)\nThis project ships a build script that creates a portable **AppImage** containing:\n- a self-contained .NET build (no system .NET required)\n- bundled **LibVLC + plugins** (video playback required)\n- helper/runtime libraries exported from a Debian 12 (bookworm) build container\n\nNote: When using the AppImage, you do not need a system-wide VLC installation because LibVLC is bundled.\nThe Wayland/X11 note below still applies because it affects how video is embedded into the Avalonia window.\n\n### Requirements (host)\n- Docker (for the full reproducible bookworm build pipeline)\n- `curl` (to download `appimagetool` if missing)\n\n### Build\n```\nchmod +x build/AppRun build/build-appimage.sh \n./build/build-appimage.sh\n```\n\nThe resulting AppImage will be created at:\n- `dist/Retromind-x86_64.AppImage`\n\n## Build \u0026 Run\n### Rider\n\nOpen `Retromind.sln` and run the default configuration.\n\n### CLI\n```bash\ndotnet restore\ndotnet run --project Retromind.csproj\n```\n\nStart directly in BigMode:\n```bash\ndotnet run --project Retromind.csproj -- --bigmode\n```\n\nOr (if you run the built app directly):\n```bash\n./Retromind --bigmode\n```\n\n## Getting started (first run)\n1. Build and run once (see “Build \u0026 Run”). Retromind will create `app_settings.json` under the portable data root (see below).\n2. If you want to preconfigure settings, copy `app_settings.sample.json` to `app_settings.json` and adjust values.\n3. For metadata scraping, configure API keys (see “API keys / Secrets”).\n\n## Configuration (portable)\nRetromind stores data under its portable data root for portability:\n- AppImage: directory of the AppImage file (ENV: `APPIMAGE`)\n- Otherwise: app base directory (build output folder)\n\nMake sure the folder is writable.\n\nIgnored runtime files (not committed):\n- `Library/`\n- `app_settings.json`\n- `retromind_tree.json` (+ `.bak` / `.tmp`)\n\nA sample settings file is provided:\n- `app_settings.sample.json`\n\n### LibVLC hardware decoding (BigMode previews)\n\nRetromind uses **LibVLC** for video previews in BigMode.  \nThe hardware decoding mode is configurable via `app_settings.json`:\n\n```jsonc\n\"VlcHardwareDecodeMode\": \"none\" // or \"auto\", \"vaapi\"\n```\n\nSupported values (depend on the host system / VLC build):\n\n- `\"none\"`  \n  Always use software decoding.  \n  Safest default for unknown systems and portable AppImage builds.\n\n- `\"auto\"`  \n  Let VLC/FFmpeg pick a suitable hardware backend if available.  \n  Good compromise on well-configured desktop systems.\n\n- `\"vaapi\"`  \n  Force VAAPI hardware decoding on compatible Linux systems (Intel/AMD iGPU).  \n  Can noticeably reduce CPU usage and make high-resolution videos smoother,\n  but may fail on systems with broken/incomplete VAAPI setups.\n\nIf the value is missing or invalid, Retromind falls back to `\"none\"`.\n\nFor the **AppImage**, `\"none\"` is recommended as default for maximum compatibility.  \nOn your own machine you can set `\"vaapi\"` in `app_settings.json` if VAAPI works\nwell (e.g. smoother BigMode videos, lower CPU load).\n\n### AppImage portable HOME/XDG mode\n\nRetromind can optionally redirect `HOME` and the `XDG_*` paths into a local\n`Home/` folder next to the AppImage.\n\nImportant behavior:\n- This setting affects the **Retromind AppImage process** itself.\n- External launches (native apps, emulators, scripts, Steam/UMU/Proton wrappers) default to **host HOME/XDG** for compatibility.\n- If you want portable child-process storage, set emulator/item overrides (`XDG_*`, optional `HOME`) explicitly.\n- Portable mode is therefore **two-step**:\n  1) Retromind itself is portable via `UsePortableHomeInAppImage`\n  2) each launched tool/app is portable via emulator/item `XDG_*`/`HOME` overrides\n\nEnable in `app_settings.json`:\n\n```json\n\"UsePortableHomeInAppImage\": true\n```\n\nNotes:\n- Only applies when running as **AppImage**.\n- Requires a **restart** to take effect.\n- Existing `HOME`/`XDG_*` environment variables are not overridden if already set (unless forced mode is enabled).\n- New emulator profiles default to **Host** XDG context for compatibility.\n- In emulator settings, you can use presets to quickly set portable `XDG_*` (and optional `HOME`) per profile.\n\nSwitching back to normal mode:\n- Set `\"UsePortableHomeInAppImage\": false` and restart Retromind.\n- Retromind and external launches will use the host defaults again (unless you set explicit per-emulator/per-item overrides).\n- Existing files under `Retromind/Home/` are kept as-is; they are not deleted automatically.\n\n### Portable layout on USB sticks / external drives\n\nRetromind is designed to work well from a single portable folder (e.g. on a USB stick)\ntogether with your ROMs and native games. The core idea:\n\n- The directory that contains the Retromind binary/AppImage is treated as the **portable data root**.\n- Any files *inside* this directory (or subdirectories) are stored as **relative paths** in the library.\n- On another Linux system, as long as you copy/mount the entire directory tree, Retromind will\n  resolve these relative paths correctly, regardless of the exact mountpoint or user name.\n\nTo enable relative launch paths, turn on **Prefer portable launch paths** in settings.\nThis will:\n- store new imports under the data root as `LibraryRelative` paths\n- migrate existing item launch paths during library saves\n- normalize emulator settings paths (emulator executable, `XDG_*`, and known path-like env vars such as `HOME`/`DOTNET_CLI_HOME`/`PROTONPATH`) to data-root-relative values when possible\n\nYou can also trigger a one-time migration from the settings dialog.\n\nA practical layout might look like this:\n```text\nRetromind/ Retromind-x86_64.AppImage Library/ ROMs/ SNES/ PSX/ NativeGames/ MyPortedGame/ Prefixes/ 123e4567-..._Some_Wine_Game/ Themes/\n```\n\nIf you add ROMs or native games from anywhere *inside* the `Retromind/` folder:\n\n- Retromind will detect that their absolute paths are under the portable root,\n- convert them once to **library-relative** paths in the JSON database,\n- and resolve them at runtime against the current AppImage directory.\n\nThis means:\n\n- Moving the entire `Retromind/` folder to another machine or mounting it under a different path\n  will **not** break those entries.\n- Only data stored outside of `Retromind/` (e.g. `/home/user/Downloads/…`) is saved as an absolute path\n  and depends on the original mountpoint.\n\n### Wine prefixes and portability\n\nWhen launching items that use Wine/Proton/UMU, Retromind can automatically create and\nremember a **per-item Wine prefix** in the library:\n\n- Prefixes are stored under `Library/Prefixes/…` (inside the portable root).\n- The stored prefix path is **relative** to the library root.\n- On another system, as long as the whole `Retromind/` folder moves together,\n  the same prefixes will be reused.\n\nNote:\n\n- The prefix itself is portable within Retromind’s folder.\n- Game saves/configs remain host-user specific by default.\n- If needed, you can override `XDG_*` (and optionally `HOME`) per emulator/item.\n- Even with overrides, full portability is launcher-dependent; some tools still rely on host state.\n\n### Wine/Proton runner version management\n\nRetromind supports managed Wine/Proton runtime versions and lets you select them on:\n\n- emulator level (default for all items using that emulator)\n- item level (optional override)\n\n#### 1) Configure available runner versions\n\nIn **Settings -\u003e Runner** you can:\n\n- add external Wine/Proton directories manually\n- download/install GE-Proton releases (stored under `Emulators/ProtonVersions` in the portable root)\n- remove versions (with replacement selection when still in use)\n\nGE-Proton source:\n\n- Repository: https://github.com/GloriousEggroll/proton-ge-custom\n- Releases API used by Retromind: https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases\n\nRetromind does not claim ownership of GE-Proton. Names, trademarks, and licenses remain with their respective owners.\nThanks to GloriousEggroll and all contributors for maintaining and publishing GE-Proton.\n\n#### 2) Set emulator default runner\n\nIn **Settings -\u003e Emulators -\u003e Advanced**:\n\n- enable **UseWinePrefix** for the emulator profile\n- set **Runner type** (`Auto`, `UmuProton`, `Wine`, `Generic`)\n- choose **Default runner version**\n\nNotes:\n\n- If `UseWinePrefix` is disabled, emulator-level default runner selection is disabled.\n- `Auto` keeps compatibility heuristics; explicit types (`UmuProton`/`Wine`) are recommended for fixed setups.\n\n#### 3) Optional item-level override\n\nIn **Edit Item -\u003e Prefix (Wine/Proton/UMU)**:\n\n- select a per-item **Wine/Proton version** to override the emulator default\n- leave it on **None** to inherit the emulator default\n- the dialog shows which runner is currently inherited from the emulator\n\nEffective priority:\n\n1. Item runner version (if set)\n2. Emulator default runner version\n3. No explicit runner version (launcher/env behavior only)\n\n### Native games on the stick\n\nNative games that live under the `Retromind/` directory tree (e.g. `Retromind/NativeGames/MyGame/...`)\nare resolved the same way as ROMs:\n\n- Internally, Retromind stores their launch paths relative to the portable root.\n- On a different Linux system, launching still works as long as:\n  - the game files remain in the same relative position under `Retromind/`,\n  - system-level dependencies (e.g. libraries, drivers) required by the game are available.\n\nGame-specific saves/configs stored under the user’s home directory are not moved automatically;\nthey will behave like any regular native Linux game when run on a different machine.\n\n## Launch arguments placeholders\n\nWhen configuring emulator profiles or per-item launch arguments, Retromind supports a few simple placeholders that are expanded at launch time:\n\n- `{file}`  \n  Full path to the primary launch file (quoted when needed).\n- `{fileDir}`  \n  Directory of the primary launch file (no trailing slash).\n- `{fileName}`  \n  File name including extension (e.g. `cabal.zip`).\n- `{fileBase}`  \n  File name without extension (e.g. `cabal`).\n\nThese placeholders can be used in both:\n\n- **Emulator profile arguments** (`EmulatorConfig.Arguments`)\n- **Per-item arguments** (`MediaItem.LauncherArgs`), which are combined with the profile arguments.\n\n### Example: Flatpak MAME via emulator profile\n\nTo launch the Flatpak MAME build using ROM short names derived from the file path:\n\n- **Executable path**:  \n  `flatpak`\n- **Default arguments**:  \n  `run org.mamedev.MAME {fileBase}`\n\nWith a ROM stored as:\n```text\n/run/media/…/MAME/NameOfROM.zip\n```\n\nRetromind expands `{fileBase}` to `NameOfROM` and starts:\n```bash\nflatpak run org.mamedev.MAME NameOfROM\n```\n\nMake sure the ROM directory is part of MAME’s `rompath`, or pass it explicitly:\n```text\nrun org.mamedev.MAME -rompath \"{fileDir}\" {fileBase}\n```\n\nwhich yields, for the example above:\n```bash\nflatpak run org.mamedev.MAME -rompath \"/run/media/…/MAME\" NameOfROM \n```\n\n### Example: Wine / UMU wrappers\n\nFor Wine-based games (e.g. via UMU) you can keep most logic in the emulator profile:\n```text\numu-run --some-default-options {file} \n```\n\nand use per-item arguments only for game-specific flags, e.g.:\n```text\n--use-special-mode \n```\n\nRetromind combines profile + item arguments into a single command line while expanding the placeholders as described above.\n\n## API keys / Secrets (Scrapers)\nRetromind does **not** use any bundled default keys at runtime.  \nAll scraper providers (TMDB, IGDB, TheGamesDB, Google Books, …) read their API credentials\nfrom the scraper configuration (e.g. via the settings dialog). If no key is\nconfigured, the corresponding scraper simply cannot be used.\n\nSecrets are not stored in plain text. The app persists only encrypted fields\n(e.g. `EncryptedApiKey`).\n\nA template is provided for local development experiments:\n- `Helpers/ApiSecretsTemplate.cs`\n\n\u003e NOTE: The main Retromind application does **not** use `ApiSecrets` for\n\u003e scraping. This template is only for custom tools or debugging scenarios.\n\n### Scraper metadata coverage\n\nThe table below shows which metadata fields are currently populated by each provider.\n`Source` is populated for all providers.\n\n| Provider | Description | ReleaseDate | Rating | Developer | Genre | Platform | Publisher | Series | ReleaseType | SortTitle | PlayMode | MaxPlayers | CustomFields |\n|---|---|---|---|---|---|---|---|---|---|---|---|---|---|\n| IGDB | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | - | `IGDB.Slug` |\n| TheGamesDB | yes | yes | yes | yes | yes | yes | yes | - | - | - | - | yes | - |\n| TMDB | yes | yes | yes | - | - | - | - | - | yes | yes | - | - | - |\n| OpenLibrary | - | yes | - | - | - | - | yes | yes | yes | yes | - | - | - |\n| Google Books | yes | yes | - | - | - | - | yes | - | yes | yes | - | - | - |\n| ComicVine | yes | - | - | - | - | - | yes | yes | yes | yes | - | - | `IssueNumber`, `StartYear` |\nNotes:\n- `CustomFields` are provider-specific key/value pairs and may vary by API response quality.\n- Missing values are normal when the upstream provider does not return that field for a specific item.\n- EmuMovies is currently not listed here because its API is being reworked.\n\n### Where to get API keys\n\nYou need to create your own API keys on the respective provider pages:\n\n- **TMDB (The Movie Database)**  \n  Create a free account at:  \n  https://www.themoviedb.org/  \n  Then go to *Settings → API* in your profile and request an API key (v3 auth).\n  Enter this key in the TMDB scraper configuration in Retromind.\n\n- **IGDB (via Twitch Developer)**\n  1. Create a Twitch Developer account:  \n     https://dev.twitch.tv/\n  2. In the Developer Console, create an application to obtain:\n    - `Client ID`\n    - `Client Secret`\n  3. Enter both values in the IGDB scraper configuration in Retromind.\n\n- **TheGamesDB**\n  1. Create an account at:\n     https://thegamesdb.net/\n  2. Generate an API key in your account settings / API page.\n  3. Enter the key in the TheGamesDB scraper configuration in Retromind.\n\n- **Google Books (optional)**  \n  The Google Books API can be used without a key in many cases, but you may\n  configure an API key to raise limits:  \n  https://console.cloud.google.com/apis/library/books.googleapis.com  \n  Create a project, enable the Books API, and create an API key. Enter it in\n  the Google Books scraper configuration in Retromind.\n\nEach user is responsible for their own API keys and must comply with the\nrespective provider terms of service.\n\n## Wayland / X11 note (VLC video embedding)\nWayland is currently **fully disabled** in Retromind on Linux.\n\nAt startup, Retromind forces `AVALONIA_PLATFORM=x11` to keep VLC embedding and embedded authentication stable.\n\nIf you pass `--avalonia-platform=wayland` or `--avalonia-platform=auto`, it is ignored for now and Retromind still runs on X11.\n\nWhy this is currently disabled:\n\n- As of **April 20, 2026**, Avalonia's official platform matrix states Linux desktop targets **X11** and that Wayland is in **private preview**.\n  Source: https://docs.avaloniaui.net/docs/overview/supported-platforms\n- Retromind's Linux runtime depends on stable native integration for both **LibVLC embedding** and **embedded OAuth/WebView**. In our AppImage testing, Wayland paths caused native instability (including process-level crashes), which cannot be handled safely in managed code.\n- Until Avalonia ships generally available, production-grade Wayland support for this stack, Retromind keeps Linux on X11 by policy.\n\nUse:\n\n```bash\ndotnet run --project Retromind.csproj -- --avalonia-platform=x11\n```\n\n## SortTitle\n- Retromind sorts media entries by `SortTitle` attribute if it is set.\n- If `SortTitle` is empty, Retromind falls back to `Title`.\n- This is useful for series ordering (for example: `Series 001 - ...`, `Series 002 - ...`).\n\n## Search (Power Query)\n- Available in both search fields: global search and local node search.\n- Plain text terms search title by default.\n- Field terms: `key:value` or `key=value`.\n- Metadata completeness terms: `has:\u003cfield\u003e` and `missing:\u003cfield\u003e`.\n- Year comparisons: `year:\u003e=YYYY`, `year:\u003eYYYY`, `year:\u003c=YYYY`, `year:\u003cYYYY` (or exact `year:YYYY` / `year=YYYY`).\n- Logical operators: `AND`, `OR`, `NOT`, and parentheses `(` `)`.\n- Space between terms is treated as `AND`.\n- In mixed queries, plain terms still search title (example: `zelda AND platform:switch`).\n- Use quotes for values with spaces (example: `developer:\"Treasure Co. Ltd.\"`).\n\nSupported keys (aliases included):\n- `title`, `sorttitle`, `description`/`notes`, `developer`, `publisher`, `platform`, `source`\n- `genre`, `series`, `releasetype`, `playmode`, `players`/`maxplayers`\n- `status`/`state`, `year`, `date`/`released`, `tag`/`tags`, `id`, `favorite`\n- Custom fields:\n  - `cf:\u003ctext\u003e` searches custom field keys and values.\n  - `cfk:\u003ctext\u003e` searches only custom field keys.\n  - `cfv:\u003ctext\u003e` searches only custom field values.\n  - `cf.\u003cfieldname\u003e:\u003ctext\u003e` searches a specific custom field key (example: `cf.rating:5`).\n\nExamples:\n- `zelda` -\u003e title-only search\n- `platform:snes AND developer:nintendo`\n- `maxplayers:2 AND status:completed`\n- `year=1998 favorite=true`\n- `year:\u003e=1995 AND year:\u003c2000`\n- `missing:genre OR missing:developer`\n- `has:genre AND NOT genre:unknown`\n- `(genre:platformer OR genre:metroidvania) AND NOT missing:rating`\n- `cf.rating:5`\n- `zelda AND platform:switch`\n\n## GOG (Experimental)\n\nThe native GOG integration is currently **experimental**.\nPlease test it carefully and expect rough edges or breaking behavior between alpha releases.\n\n### Requirements\n\n- Linux desktop session with X11 runtime path (Retromind currently forces `AVALONIA_PLATFORM=x11`).\n- Secret store support:\n  - preferred: Secret Service (`secret-tool`, GNOME Keyring/KWallet/libsecret backend)\n  - fallback: in-memory session storage (non-persistent)\n- For embedded OAuth login dialogs: host `libwebkit2gtk` runtime available.\n  - If embedded OAuth is unavailable, Retromind falls back to system browser login with manual callback URL input.\n\n### Usage\n\n- Import full GOG library into a dedicated node:\n  1. Create a new node.\n  2. Open node settings and mark it as a GOG node (`StoreProviderId = gog`).\n  3. Run **Add GOG media** on that node.\n  4. Retromind syncs owned GOG titles additively into that node.\n\n- Add individual GOG items into any node:\n  1. Run **Add GOG media** on any target node.\n  2. Use the picker dialog and select only the titles you want to add.\n\n### Update workflow (Experimental baseline)\n\n- Update checks are only performed for installed GOG-linked items.\n- Checks are triggered automatically:\n  - when selecting an installed GOG item in the UI\n  - and by a background sweep (currently every 24 hours)\n- If an update is detected, Retromind shows:\n  - an update badge in the media details\n  - an **Update** action button (same panel as install/reinstall actions)\n- Running **Update** reuses the existing installer flow (download + install) and then refreshes the stored install fingerprint metadata.\n- Important baseline note:\n  - reliable version/signature comparison requires an install fingerprint from Retromind.\n  - If a title was installed outside Retromind or before this metadata existed, run one reinstall via Retromind to establish the baseline.\n\n## Architecture\nSee [`docs/architecture.md`](docs/architecture.md).\nFor native GOG provider status and design notes, see [`docs/gog-provider.md`](docs/gog-provider.md).\n\n## Contributing\n\nContributions are welcome!  \nBefore opening issues or pull requests, please have a look at:\n\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) – contribution guidelines\n- [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) – expected behavior in the project community\n\n## License\nGPL-3.0-only (see `COPYING`).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdark574%2Fretromind","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdark574%2Fretromind","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdark574%2Fretromind/lists"}