- Crash fix — Download button can no longer be re-enabled by table row clicks or incoming search results while a depot history fetch is already in progress. All three re-enable paths are now guarded by a
_fetchingflag, preventing a second fetch thread from starting concurrently. - All historical manifest IDs now fetched — Cache freshness check now requires at least one non-Steam-CM source entry (GitHub mirror or SteamDB). Previously a cache containing only the current Steam CM manifest would be served as "fresh" indefinitely, hiding all historical manifests from the version picker.
- Force Refresh button — New button next to Download bypasses both the disk cache and the in-memory session cache entirely. Use it when version history looks incomplete or you want to force a fresh SteamDB scrape.
- SteamDB batch scraper timeouts improved —
uc_open_with_reconnectincreased 4→5 s,wait_for_element3→7 s, fallback sleep 1→3 s, retry sleep 3→5 s. Greatly reduces Cloudflare challenge failures during multi-depot batch scraping. - asyncio loop fix —
_fetch_steamdb_layer1(curl_cffi fast path) now usesasyncio.new_event_loop()+run_until_complete()instead ofasyncio.run(), fixing silent failures on Windows when called inside a QThread. - Chrome download progress — Status label now shows "Downloading Chrome for Testing (~300 MB, one-time setup)…" during the one-time Chrome for Testing download instead of appearing to hang silently.
- "Logs" button in menu bar — New button to the right of Help opens a floating, non-modal log viewer showing all Python
loggingoutput from every part of the app (Fix Game, Store, Tools, and everything else). Supports DEBUG / INFO / WARNING / ERROR level filter, Clear, and Copy All. Closing the window hides it; it can be re-opened at any time.
- Updated Windows GBE fork DLLs —
steam_api.dll,steam_api64.dll,steamclient.dll,steamclient64.dll,GameOverlayRenderer.dll,GameOverlayRenderer64.dllnow use the experimental builds (~19 MB) which include full overlay support. - Fixed DLL extraction bug — Goldberg auto-updater now correctly extracts experimental DLLs instead of the smaller regular builds. Full archive path is matched first before filename-only fallback.
- Added Linux
steamclient.so—steamclient.so(x64) andsteamclient32.so(x32) are now downloaded and deployed for Linux native games that load steamclient directly.
- Achievements now always generated — Fix Game pipeline now automatically uses the saved/default Steam Web API key if none is explicitly provided. Achievements were silently skipped before.
- Per-game
configs.main.ininow written —steam_settings/configs.main.iniis generated for each game withallow_unknown_stats=1so stats work even without a fullstats.json. - Stats format fixed —
stats.jsonnow uses the correct GBE fork field names (name,type,default,global) instead of raw Steam API fields. - Achievement
hiddenfield fixed —achievements.jsonhiddenfield is now always a string ("0"or"1") as required by GBE fork. - Overlay config updated —
configs.overlay.ininow includes 4 new options from the latest GBE fork release:overlay_always_show_user_info,overlay_always_show_fps,overlay_always_show_frametime,overlay_always_show_playtime.
- GBE Token Generator pre-fills API key — Steam Web API key is now auto-filled from saved settings (or default key) on startup. Generation no longer aborts if the field is empty — uses default key as fallback. Key is saved to settings after successful generation.
- Fix Game tab decluttered — checkboxes grouped into logical rows: Goldberg update + Launch.bat in one row; SteamStub + Experimental in one row. Reduces vertical space.
- Steam launch "Access Denied" fix — SteaMidra now checks if it is already running as administrator. If it is, it launches Steam directly instead of requesting elevation again (which caused an "Access Denied" error on Windows 11).
- Auto-updater fixed for Windows EXE builds — now downloads the release ZIP, extracts it next to the EXE, replaces the
_internal/folder via a batch script, and relaunches automatically. No more aria2c or manual steps. - Auto-updater fixed for Linux AppImage builds — downloads the release ZIP, extracts it, then runs
steamidra_install.shin your terminal automatically.
- Windows EXE is now distributed as a ZIP folder (
SteaMidra-5.3.0-windows.zip). Extract once anywhere, runSteaMidra_GUI.exefrom the extracted folder. This replaces the single-file EXE. - No more temp folder extraction on startup — files are pre-extracted into
_internal/at install time. Startup is faster and antivirus false positives are greatly reduced.
- GUI now shows a warning dialog when your AppList reaches 130 or more App IDs, reminding you to create a new AppList profile before adding more games. The popup appears once per session after any action completes. The CLI has always printed a warning at the same threshold — this extends it to the GUI.
all_games.txtcrash fix —choices.pyandcloud_saves.pyboth read/wroteall_games.txtusingsys._MEIPASSor the bareroot_folder()path, which points to the read-only squashfs inside an AppImage. Fixed to useroot_folder(outside_internal=True)(writable user data dir~/.local/share/SteaMidra/) for both read and write.- Flatpak LD_AUDIT path fixed —
slssteam.pypatch_steam_sh()constructed the FlatpakLD_AUDITpath with an erroneous/data/Steamsegment (resulting in a non-existent path). Fixed:flatpak_baseis now~/.var/app/com.valvesoftware.Steamwith no extra segment. - Flatpak default
.sopaths fixed —steam_process.pydefault path lists forSLSsteam.soandlibrary-inject.socontained the same/data/Steamerror. Fixed to match the correct Flatpak layout. - 7z exit-code tolerance —
install_from_github()now tolerates non-zero 7z exit codes caused by symlink warnings (common withSLSsteam-Any.7z). Ifsetup.shis found in the extracted directory despite the non-zero code, extraction continues with a warning instead of aborting. extract_dir.mkdir()added — the extraction directory is now created explicitly before the 7z call, preventingFileNotFoundErroron first install.- Config template from extracted archive — new
_setup_config_from_extracted()copiesres/config.yamlfrom the freshly downloaded archive to~/.config/SLSsteam/config.yaml(only if the user config doesn't exist). Previously the bundled copy was used, which could be stale. updates.yamlURL corrected — wasmain/updates.yaml, nowrefs/heads/main/res/updates.yamlto match the actual repo structure.- Hash parsing fixed — replaced broken regex approach with YAML
SafeModeHashesparsing socheck_steamclient_hash()correctly validates the hash against all known entries. - Flatpak
.socopy — new_copy_so_to_flatpak()copies installed.sofiles to the Flatpak Steam path after install, so Flatpak Steam can find them. get_installed_version()+check_update_available()— new functions to track and check the installed SLSsteam version against the latest GitHub release.- GitHub-only install — removed the bundled install option from
handle_linux_setup(). SLSsteam is now always installed from the latest GitHub release. - Update check menu — when SLSsteam is already installed, a 3-way menu now appears: check for updates / reinstall from GitHub / skip. The update check shows installed vs latest version and prompts to install if an update is found.
- Removed all references to CreamAPI Multiplayer Fix from
README.md,USER_GUIDE.md,QUICK_REFERENCE.md, andMULTIPLAYER_FIX.md(feature was removed in 4.9.1). - Removed broken
CREAMAPI_FIX.mdlink fromMULTIPLAYER_FIX.md. - Removed "Fast SteamDB manifest history" from
README.mdfeatures list. - Clarified download methods in
README.mdandFEATURE_USAGE_GUIDE.md: Main tab "Download Game" = latest version via Steam-native download (fast, no .NET); Store tab = older/specific versions via DepotDownloaderMod (.NET 9 required, slower). - Fixed false claim in
README.mdthat SteaMidra "reminds you" at 130 IDs — it now accurately says a popup dialog appears.
- ACF
InstalledDepotsnow uses the latest manifest GIDs from the Steam API (not the Lua IDs). Steam compares these IDs against CDN on startup; writing the latest GIDs means Steam sees the game as fully up-to-date and shows Play instead of Update. - ACF
buildidis now fetched from the Steam API (depots.branches.public.buildid) and written correctly, matching the installed version Steam expects. - ACF
LastUpdatedis now set to the current Unix timestamp on every write. - Depotcache cleanup: manifest files are pre-downloaded for DepotDownloaderMod authentication, then deleted from
depotcacheimmediately after the download completes. The Store tab no longer leaves stale.manifestfiles in your Steam depotcache folder. - Linux:
buildidis also fetched from the Steam API in the Linux download path.
- Download game files directly from the Store tab version picker via DepotDownloaderMod. Previously the Store tab only set up Lua/manifests and left the actual game download to you; now it downloads the full game automatically.
- Full pipeline: Lua fetch → decryption keys written → manifest pre-download → DepotDownloaderMod download → ACF written → Steam library registered.
- Parallel manifest download support — respects the
USE_PARALLEL_DOWNLOADSsetting. - Real
SizeOnDiskcalculated from the downloaded files and written into the ACF. - Linux: same pipeline available via
handle_linux_downloadwithacf_writer.create_acf.
- SeleniumBase UC mode — Cloudflare bypass + ad blocking built-in. No more manual Chrome setup.
- 3-layer ad popup prevention — extracts the uploads URL directly from the game page before clicking (Layer 1); falls back to smart 15s polling that closes only confirmed ad tabs and preserves the uploads tab (Layer 2); final page-source re-scan fallback (Layer 3).
- Smart file server navigation — automatically enters subfolders (
Fix Repair/,Generic/,Steam/,Patch/) before scanning for archives. - OFME exclusion — files containing "OFME" in the name (full game packages, typically 800 MB+) are completely excluded from download candidates.
- 401 error handling — proactive browser refresh after initial navigation + up to 3 in-loop refresh retries when the file server returns 401, resolving transient nginx authentication failures automatically.
- Re-apply fix replaces files — applying the fix a second time now replaces existing fix files directly. The original
.bakof the game's own DLL is preserved; no redundant second-level backups are created.
- CreamAPI Multiplayer Fix — "Apply CreamAPI Multiplayer Fix" and "Restore CreamAPI Multiplayer Fix" menu items removed. The bundled CreamAPI DLLs remain in
third_party/online_fix/for potential future use.
- Apply CreamAPI Multiplayer Fix — new menu item. Installs bundled CreamAPI v5.3.0.0 (nonlog build) to spoof your game as Spacewar (AppID 480) for online multiplayer. No credentials, no browser, no external downloads required.
- Restore CreamAPI Multiplayer Fix — new menu item to undo the fix and restore original DLLs.
- Classic mode (default): replaces
steam_api.dll/steam_api64.dllin-place;cream_api.iniplaced next to the DLL. - Proxy mode (anti-cheat fallback): CreamAPI installed as
winmm.dll; original Steam API DLLs untouched. - Anti-cheat detection: automatically scans for EasyAntiCheat and BattlEye folders/files; suggests Proxy mode if found.
- Linux platform selection: on Linux, user chooses Proton/Wine (Windows .dll) or Native Linux (.so). ELF bitness is read from the header to select x64 vs x86
.soautomatically. - Spacewar auto-check: reads all Steam library ACF files to detect if Spacewar (AppID 480) is already installed. If not, shows a one-time
steam://install/480prompt and stores a marker file so the user is never prompted again after the first time. - Existing online-fix.me button unchanged — both methods coexist in the menu.
- Version bump: 4.8.4 → 4.9.0
- Linux GBE files now fully bundled —
third_party/gbe_fork_linux/shipslibsteam_api.so(x64),libsteam_api32.so(x32), andgenerate_interfaces_x64/x32. No internet needed on first run. - Fixed archive path resolution — x64 vs x32
libsteam_api.soare now correctly distinguished by their full archive path, not filename (both have the same name in the release archive). - Linux generate_emu_config bundled —
third_party/gbe_fork_tools_linux/ships the Linux ELF binary. Works without Wine or any external tool. - GSE tool updater: Linux support —
gse_tool_updater.pynow finds and runs the bundled Linux binary, with optional update checking againstDetanup01/gbe_fork_toolson GitHub. - GSE tool updater: Windows bundled fallback — if GitHub is unreachable, the Windows
generate_emu_config.exebundled inthird_party/gbe_fork_tools/is now used as an offline fallback. - Fix Game tab: Linux native checkbox — new "Linux native game" checkbox (visible on Linux only, checked by default). Uncheck for Proton/Wine mode.
- Bundled Goldberg used on first launch — previously, if "Check for updates" was unchecked and the cache was empty, the pipeline would abort. Now it automatically copies from
third_party/on first run. - XDG_DATA_HOME support — GSE Saves root on Linux respects
$XDG_DATA_HOMEper the official gbe_fork README. - Steamless via Wine —
steamstub_unpacker.pynow runsSteamless.CLI.exevia Wine on Linux if Wine is available. - Platform-aware launch scripts —
launch.shfor native Linux,launch_wine.sh+LUTRIS_SETUP.txtfor Proton/Wine mode. - Cache path XDG-compliant — cache directory on Linux uses
~/.local/share/SteaMidra/fix_game_cache/.
- SteamDB 3-layer scraping — dramatically faster manifest history loading. Layer 1 uses
curl_cffiChrome impersonation (no browser, ~80% hit rate). Layer 2 reuses a cachedcf_clearancecookie (25-min disk cache, no browser). Layer 3 falls back to SeleniumBase and automatically saves the cookie for the next run. Warm runs typically complete in 10–35s vs 2–4 min previously. - DLC depot completeness — manifest history now includes depots from DLC apps. The Steam CM fetcher reads
extended.listofdlcand pulls depot manifests from each DLC app, so games with DLC show their full depot history. - Linux: SLSSteam ID management — "Manage SLSSteam IDs" menu option now works on Linux. Fully functional Add IDs and View/Delete IDs from the SLSSteam config.
- MIDI player rewrite — playlist support, dynamic
.mid/.sf2file scanning from thec/folder, COM-thread safety fix, andIsFinished()polling so tracks don't restart on loop. - Settings applied live — editing or deleting a setting in the GUI now takes effect immediately without restarting.
- ACF writing reverted —
write_acfrestored toStateFlags=4withSizeOnDisk=0,BytesToDownload=0,BytesDownloaded=0. Previously usedStateFlags=6+buildid=0which caused Steam to show "Play" instead of "Update" for new installs. _patch_acf_error_statecleaned — removed problematicbuildid=0andInstalledDepots/MountedDepotsdeletion that caused game state corruption. Now only clears safe flags:UpdateResult,FullValidateAfterNextUpdate,ScheduledAutoUpdate, byte counters, and the LockedStateFlagsbit.- AppList depot completeness —
add_ids()now adds every unique depot/DLC ID fromLuaParsedInfo.depots, not just the baseapp_id. Previously only the base app ID was added, causing GreenLuma to miss depot authentication and Steam to skip downloading large chunks of games (e.g., RE9 only downloading 1 GB instead of 76 GB). - Code formatting cleanup — removed excessive double-spacing and blank lines across all Python files while preserving copyright headers.
- Linux MIDI library path —
MidiFiles.MIDI_PLAYER_DLLnow resolves to.dllon Windows and.soon Linux. Previously always pointed to.dll, silently skipping music on Linux even if the.sowas compiled. - Linux applist menu stub removed —
applist_menu()previously printed "Functionality for linux will be implemented soon." and returned immediately. It now routes correctly toSLSManageron Linux. ManifestContextTypeError —autofield in theManifestContextdataclass was missing its type annotation, causingTypeError: __init__() got an unexpected keyword argument 'auto'when downloading manifests with auto-fetch enabled.
- Added
curl_cffi>=0.7— required for SteamDB Layer 1 Chrome impersonation.
- MIDI player integration: background playback thread, channel muting, soundfont support.
- Live settings apply for GUI.
- AppList profiles: create, switch, save, delete, rename.
- Cloud Saves: backup and restore Steam userdata saves.
- VDF Key Extractor: pull depot decryption keys from Steam's config.vdf.
- GBE Token Generator: generate full Goldberg emulator configs with achievements, DLCs, and stats.
- Fix Game pipeline: automate emulator application with SteamStub unpacking.
- Store browser with pagination.
- System tray icon.
- Multi-language GUI (English + Portuguese).
- 11+ themes.
- SteamAuto: One-click auto-crack via SteamAutoCrack for the selected game. In the GUI, select a Steam game or a folder for a game outside Steam, then click SteamAuto to run the full crack process. In the CLI, choose Steam or non-Steam, then pick the game or enter its path and App ID. Place the Steam-auto-crack repo in
third_party/SteamAutoCrackand optionally build its CLI intothird_party/SteamAutoCrack/cli/(or use the build script when the repo is present).
- AppList profiles: Work around GreenLuma's 130–134 ID limit by using multiple profiles. Create empty profiles, switch between them, save the current AppList to a profile, and delete or rename profiles. Each profile can hold up to 134 IDs (configurable in settings). When you reach 130 IDs, a message reminds you to create a new profile before adding more games.
- Embedded Workshop browser: Open Workshop from the GUI to browse Steam Workshop in an embedded web view. Login to Steam, browse workshop pages, copy links, and download items without leaving SteaMidra. Uses a persistent profile so your session is kept.
- Workshop item download: Paste a workshop URL or item/collection ID to download manifests. Supports single items and full collections.
- Check mod updates: Track workshop items and check for newer versions, then update outdated mods in one go.
- Check for updates – automatic install: When a newer version is available, download and update automatically. SteaMidra fetches the release, extracts it, and replaces files in your install folder.
- Steam patch removed: The Steam patch feature (xinput1_4.dll, hid.dll) has been removed from all variants.
- Sync Lua removed: The option to sync saved Lua files and manifests into Steam's config has been removed.
- Version bump to 4.6.2.
- Login now works: The multiplayer fix no longer uses HTTP-only login, which often failed with "Login failed (form still visible)". It now uses Selenium with Chrome: a headless browser opens the game page, fills in your credentials, clicks the login button, and handles cookies and JavaScript like a real browser. Login and download should work reliably.
- What you need: Chrome browser must be installed. Selenium is in the main requirements:
pip install -r requirements.txt. - Search, match, download button, and archive extraction flow are unchanged; only the login step is now browser-based.
- Automatic update: When a newer version is available, you can choose "Download and update automatically?". SteaMidra downloads the release zip, extracts it, and replaces the files in your install folder. When running from source (Python), the app restarts with the new version. When running from the EXE, SteaMidra does not relaunch the EXE; it tells you to rebuild the EXE so the new updates take effect.
- Updates use the same folder as your current install, so no manual copying or extracting is needed.
- "Game: Unknown" fixed: The game name is now read from the ACF in the same Steam library where the game is installed (e.g. if the game is on
D:\SteamLibrary\..., we read that library’s manifest, not the first one). If the name is still missing, we fetch the official name from the Steam Store API so we never search with "Unknown". - Wrong game match fixed: Search now uses a stricter minimum match (50%) and prefers results whose link text contains the game name (e.g. "R.E.P.O. по сети" for R.E.P.O.). We also search with "game name online-fix" to narrow results. This avoids picking the wrong game (e.g. "Species Unknown" when you selected R.E.P.O.).
- Check for updates now works for everyone: it always checks GitHub for the latest release and shows your version vs latest.
- If you're up to date: "You're already on the latest version."
- If a newer version exists: you can open the release page in your browser to download (or, for the Windows EXE with a matching update package, update from inside the app).
- The updater uses proper GitHub API headers and a fallback when the "latest" endpoint is unavailable.
- DLC check no longer gets stuck when Steam is slow or times out.
- Steam API requests (app info, DLC details) now retry up to 3 times with a short delay instead of looping forever.
- If Steam still fails after retries, SteaMidra automatically falls back to the Steam Store (no login): it fetches the DLC list and names from the store website and still shows which DLCs are in your AppList/config and lets you add missing ones.
- So the DLC check works even when the Steam client connection is flaky.
- credentials.json is now in
.gitignoreso it never gets committed or included in release zips. - UPLOAD_AND_PRIVACY.md updated with release-zip instructions and what to exclude.
What was the problem?
Some people got a crash when starting SteaMidra. The error said something like:
'SteamClient' object has no attribute '_listeners'. Did you mean: 'listeners'?
That happened because the wrong Python package named "eventemitter" was installed. SteaMidra needs a specific one called gevent-eventemitter. There is another package with a similar name that does not work with SteaMidra and caused the crash.
What we changed
- We now tell the installer to use the correct gevent-eventemitter package so new installs should not hit this crash.
- If you already had the crash, do this once:
- Open a command line in the SteaMidra folder.
- Run:
pip uninstall eventemitter - Run:
pip install "steam[client]" - Run:
pip install -r requirements.txt - Start SteaMidra again.
After that, SteaMidra should start normally.