steam-case-covers
Give every game in your Steam library a "physical copy" case cover.
Everything runs on your computer: no login, no API key, no uploads.
Install · How it works · Features · Safety · Steam compatibility · Command line · FAQ · Feedback and bugs · Support
![]() Home |
![]() 1. Choose the look |
![]() 2. Highlight your 100% games |
![]() 3. Or pick a console case by hand |
The whole app: Home, then five short steps, no terminal. The preview follows every choice.
This project is not affiliated with Valve Corporation, Microsoft or any game publisher. Steam and Windows are trademarks of their respective owners. See THIRD_PARTY.md.
What is it?
Steam shows your library as tall portrait cards. This tool puts each game's own artwork inside a "box" (blue by default, or any colour and shade you pick, from vivid to dark grey and black) with a Steam banner and platform badges, like a boxed console game, and installs the result as your custom artwork.
The artwork comes from Steam's own servers. The covers are built on your computer and stay there.
How the covers look inside Steam: the Steam case, console cases (God of War, Horizon Zero Dawn and The Last of Us in PlayStation 5 cases, Hellblade and State of Decay 2 in Xbox One cases) and games at 100% with a rosette, some with the gold border option. Leaf it Alone comes from a family member's library, so it has the green corner. Coral Island is owned in both libraries, so it does not (the small “2” is Steam's own badge).
📥 Install
Windows
Download SteamCaseCovers-windows.exe from the Releases page and double-click it.
If "Windows protected your PC" appears, click More info, then Run anyway. The app isn't code-signed (that costs money), which is why Windows warns you. Some antivirus tools also flag apps of this kind.
macOS
Download SteamCaseCovers-macos.zip from the Releases page and double-click it to unzip. Before you open the app, run this in Terminal (change the path if the app isn't in Downloads), then double-click the app:
xattr -dr com.apple.quarantine ~/Downloads/SteamCaseCovers.app
Why: macOS blocks any app that doesn't come from a paid Apple developer (about 99 USD a year, which a free project can't justify). That command removes the "downloaded from the internet" mark, so macOS opens the app normally. The app isn't harmful or damaged, and its source code is here for anyone to read.
If you open the app first instead, macOS shows "SteamCaseCovers" Not Opened: Apple could not verify it is free of malware. Click Done (not Move to Trash), then open System Settings, Privacy & Security, scroll to Security, and click Open Anyway next to the SteamCaseCovers message (it stays for about an hour; double-click the app again to bring it back). If the app then bounces in the Dock forever with no window, restart your Mac and use the Terminal command above instead. On macOS 14 or older you can also right-click the app and choose Open.
The first time you press Apply to Steam, macOS may say the app isn't allowed to control Steam. Allow it in the prompt (or in System Settings, Privacy & Security), then press the button again.
macOS support is best effort: the author has only tested it on an Apple Silicon MacBook Air. The build is for Apple Silicon (M1 or newer). On an Intel Mac, run it from source.
Linux and Steam Deck
On a Steam Deck, switch to Desktop Mode first. The app needs a desktop window, so it doesn't run in Gaming Mode.
Download SteamCaseCovers-linux from the Releases page and open it. On a Steam Deck a small pop-up appears: click Launch and the app opens.
If your file manager doesn't run it, make it executable and start it from a terminal:
chmod +x SteamCaseCovers-linux
./SteamCaseCovers-linux
From source (any system)
If you'd rather not trust a download, run it from the code. It needs Python 3.10 or newer, Pillow 10.3 or newer and PySide6 (Qt). The release builds and the automated tests use Python 3.12.
git clone https://github.com/diegobergonsi/steam-case-covers
cd steam-case-covers
python -m pip install -r requirements-qt.txt
python -m qtui
On macOS and Linux, use python3 instead of python. Run the tests with QT_QPA_PLATFORM=offscreen python -m unittest discover -s tests (on Windows PowerShell: $env:QT_QPA_PLATFORM="offscreen" first). python -m qtui --selftest builds the window without showing it.
Release files come with a SHA256SUMS list so you can check what you downloaded. See SECURITY.md.
🔧 How it works
- Get your game list. Click Open the page in my browser. Your browser opens Steam: log in if it asks, and you'll land on a page of plain text. Save it (Ctrl+S, or Cmd+S on a Mac) as
userdata.json. The app notices the file by itself. No browser opening? Click Copy link and paste it yourself. Or tick Only my installed games to skip this step: games that are not installed on this computer, including games shared by a family member, are then left out (hover the i next to it). On a Mac with Safari, set the format to Page Source when saving (or use Chrome or Firefox). - Choose the look. Pick the look of the cases: drag the Colour, Colourfulness and Brightness sliders or tap one of the nine swatches (six colours, then Black, Graphite and Silver), and the preview shows the result. Colourfulness and Brightness only go down from the original blue, so the case can be any shade from vivid to dark grey and black; the white logo and text stay white. Theme can turn the cases into a Halloween one: a cobweb with a spider, a pumpkin and a spider hanging from the top, on top of whatever colour you picked. The Halloween case shows the rosette only for your 100% games (the ribbon would hide the decorations), and the window picks that for you. If you set your own art for some games (in Steam's menu, or from SteamGridDB), turn on Use my own custom art where I have it and your art goes inside the case instead of Steam's; games without art of your own keep Steam's. The app keeps a copy of your art in its own folder and never changes your files.
- Highlight your 100% games (optional). Load your Steam games page and the games where you unlocked every achievement get a mark. Details below. You can skip this step.
- Make the covers. Check your choices (each one leads back to its step) and click Make covers, then wait. You can cancel and run it again later: finished covers are kept, so it picks up where it stopped. If you already made covers in another colour or theme, the app asks before it replaces them.
- Add them to Steam. Click Apply to Steam. If more than one Steam account is on this computer, the window shows which one will change; pick another with the account buttons. Your current artwork is backed up first.
[!WARNING]
Step 5 closes Steam for you (any running game stops and downloads pause), adds the covers, and starts Steam again. Save your game first. The app asks before it does anything.
Changed your mind? Right after step 5, press Undo on the Done card. Later, use Home (the first entry in the left list), where an Undo card appears once there is something to undo:
- Restore previous artwork undoes the last Apply. Press it again to go one step further back.
- Reset to Steam's default art removes the covers this app made. It works even if you have no backup. If it also finds custom art that this app did not make (from SteamGridDB, or set by hand in Steam), it asks whether to remove that too: Remove only ours keeps it, Remove all brings back Steam's own art everywhere. Restore undoes either.
Optional: pick games by hand, in console cases or in a colour of your own
Some games belong in another box: The Last of Us is a PlayStation game, Forza is an Xbox game. On Home, the card Pick games, choose their cases opens a second way through the window (the other card, the same case for every game, stays as it is). After your game list, you tick the games you want (search by name, or scroll), then pick a case for them: PlayStation 5, 4 or 3, Xbox Series X|S, Xbox One or Xbox 360, Nintendo Switch or Switch 2, or the Steam case, which can have its own colour here (blue, violet, magenta, red, gold, green, black, graphite or silver). You can tick more games and give them another case, or go on. Games you do not tick are left alone (their covers do not change), and Make and Add to Steam work as before, only for the games you ticked.
- The console cases are fixed: no colour, brightness or theme. They are drawn to fill the same tall tile as the Steam case.
- Your own case. Make a case yourself and use it: My own case, at the end of the list of cases. It is a PNG of 600 x 900 pixels that is see-through where the game's art goes (at least 400 x 400), like the console cases, and the app finds the see-through part by itself. You pick the file each time you want a new case, and the last one is kept so you can make the covers again. The Look step of the step by step way has the same choice and uses it for every game; colour, theme and gold do not apply to it.
- Groups. The games you give a case go in a group with a name you can change ("Dropped games", "Xbox 360"), and the app remembers it. Next time you can add games to a group you made, or delete it. A game is in one group only. Colours are only a look: gold is a colour like the others, and the rosette and ribbon only go on games that really are at 100% on the games page you loaded.
- The usual way leaves your groups alone. When you make covers again with the card The same case for every game on your list, the covers of your groups are not repainted. On the Make step you can tick a group to repaint its covers with the look you chose; that deletes the group. Reset to Steam's default art (on Home) works the same way: it leaves your groups on Steam unless you tick them.
- Games shared through Steam Family Sharing get the green corner only if you switch on Mark family games (it needs your game list file).
- Your 100% games get the rosette and ribbon (or the rosette alone) if you load your games page in the 100% games step of this way and keep Highlight them.
- The natural way never changes or removes a console cover: only picking the game again here does.
- The PlayStation, Xbox and Nintendo logos belong to their owners, and this project is not affiliated with them. See THIRD_PARTY.
Optional: highlight your 100% games
Step 3, Highlight your 100% games, is optional. Games where you unlocked every achievement get a rosette at the top left, just under the banner, and a "100% Complete" ribbon at the bottom (you can keep only the rosette). It works like step 1: the app cannot see your achievements by itself, so you save one more page from your own browser.
Games completed at 100%, with the gold case option.
- Click Open my games page (or Copy link). Your browser opens your Steam games page, sorted by achievements. Log in if it asks and wait until your games have loaded.
- Save it (Ctrl+S, or Cmd+S on a Mac) as "Webpage, Complete" in Chrome or Firefox, named
games.html. Your browser also saves a folder next to it. The app notices the file in your Downloads folder by itself, or you can click Browse… and pick it. - Choose what those games get: Rosette and ribbon (the rosette at the top left and the "100% Complete" ribbon at the bottom; the default), Rosette only (just the rosette, no ribbon over the art) or No marks (nothing on the cover: pick it with Gold case or Gold border and the gold alone says the game is at 100%).
- Choose how those games look: Gold case (the whole case turns gold), Gold border (a gold border around the outside of the case, which becomes about 5% smaller), Normal case (your case stays as it is; this is the default once a page is loaded) or No special case (no highlight at all, so the marks do not apply). The choices can be picked once a page is loaded. Then click Make covers.
[!NOTE]
The saved page contains a temporary login token for your Steam account. The app only reads which games are at 100%: it never uses, stores or logs the token. You can delete games.html and its folder once the covers are made. The app never deletes your files itself.
Good to know:
- Only games that are already in your step 1 list can be highlighted.
- Steam's page shows progress only for games where you have unlocked at least one achievement. That is why only games at 100% are marked: there are no marks for games you have only started.
- Switching the choice, or saving the page again after you finish another game and clicking Make covers, rebuilds only the covers that change. If you make covers without loading a page, covers that are already highlighted keep their highlight.
- The page lists most of a library but not all of it. On the author's library it listed about 99% of the covers (509 of 515): a few old, free or hidden games are not on it and cannot be highlighted.
- This was only tried with Chrome, on Linux, with Steam set to Portuguese and to English; the saved pages gave exactly the same result. Firefox is expected to save the page the same way, and the app reads the progress without depending on the language of Steam's label, but other languages and browsers were not tested. Windows and macOS were not tested either, and neither was a real touchscreen.
✨ Features
Covers
- For your installed games, or your whole library
- Each cover is the game's own portrait inside a case, with the Steam banner and platform badges
- Games shared through Steam Family Sharing get covers too, with a green corner and a family icon
- Optional "skip blurry covers" for games Steam has no real portrait for
- Pick games by hand and put them in a PlayStation, Xbox or Nintendo case, or in a colour of your own, in groups the app remembers
- Optionally put the art you set yourself (in Steam's menu or from SteamGridDB) inside the case, for the games that have it
- Pick the colour, colourfulness and brightness of the cases with three sliders or a ready-made swatch (black, graphite and silver included), with a live preview, and, if you like, a Halloween theme (a cobweb with a spider, a pumpkin and a hanging spider) in any colour
- Optional: games where you unlocked every achievement get a rosette and a "100% Complete" ribbon (or the rosette alone), and, if you like, a gold case or a gold border (how it works)
- One click: Steam is closed gracefully, backed up, updated and restarted
- Undo step by step, and a reset to Steam's default art
- Cancel anytime; run again to continue
- Several Steam accounts on one computer: you choose which one gets the covers
- Works with the keyboard, scales on high-DPI screens and fits small screens like the Steam Deck's
- English and Brazilian Portuguese: the app starts in your system's language, and two small flags under the name switch it at any time (the command line stays in English; this README is also in Brazilian Portuguese)
- A "Check for updates" button, only when you click it: it asks GitHub for the newest version and never downloads or installs anything
- Free software: no ads, no account, no telemetry
🔒 Safety
- It only ever touches the portrait files (
, andp.png .jpg,.jpegor.webpones that would hide a cover) in your Steam account'sconfig/gridfolder. Anything it moves is kept in the backup. It never touches your games or saves. - Before every change it makes a backup of exactly what it changes, writes files atomically, and rolls back if anything fails.
- Two open windows can't change Steam's folder at the same time.
- It never logs in, never asks for a password or API key, never uploads anything and never runs with elevated rights.
- Files it reads from the internet are size-limited and checked before use.
🎮 Steam compatibility
✅ Linux and SteamOS (Steam in ~/.local/share/Steam)
✅ Windows: an early version (0.9.11) was tested by the author's colleague on a real PC; newer versions, including the colour sliders and the family corner, are covered by the automated tests only
🟡 macOS: tested on one Apple Silicon Mac (best effort)
[!NOTE]
If something doesn't work on your system, please tell us on Discord (or open an issue) with your system and what you saw. Feedback from Windows and macOS is especially welcome.
💻 Command line
Everything the window does is also available in a terminal:
python -m engine make --library userdata.json # build covers
python -m engine make --library userdata.json --hue 134 # ...in another case colour (0 to 359 degrees; 0 is the original blue)
python -m engine make --library userdata.json --brightness 0 # ...a black case (0 to 100; 100 is the original)
python -m engine make --library userdata.json --saturation 0 --brightness 60 # ...a grey case (--saturation also goes 0 to 100)
python -m engine make --library userdata.json --theme halloween # ...with the Halloween theme (the case keeps its colour; --theme classic goes back)
python -m engine make --library userdata.json --games-page games.html # ...with a rosette and a ribbon on your 100% games
python -m engine make --library userdata.json --use-custom-art # ...with the art you set yourself inside the case, for the games that have it
python -m engine make --library userdata.json --games-page games.html --completed-style gold-case # ...also in a gold case (or gold-border)
python -m engine make --library userdata.json --games-page games.html --completed-marks rosette # ...with the rosette only, no ribbon
python -m engine make --library userdata.json --completed-style none # ...and back to plain covers for 100% games
python -m engine apply --close-steam # install them
python -m engine restore # undo the last apply
python -m engine reset # back to Steam's default art
python -m engine reset --everything # ...also removing art from other sources
| Command | What it does |
|---|---|
| list | Show the games it found |
| make | Build covers into ./covers |
| apply | Copy covers into Steam, with a backup |
| run | make then apply |
| restore | Undo the last apply (run again to go further back) |
| reset | Remove the covers this app made from Steam (--everything also removes custom art from other sources) |
list marks games from your Steam Family library with (family). make keeps the colour of the covers already in the folder unless you pass --hue, --saturation or --brightness; an option you leave out keeps the value of the covers already there, or the original (--hue 0 --saturation 100 --brightness 100 asks for the original blue). --use-custom-art puts the art you set yourself inside the case for the games that have it (use --user with make to pick the account); --no-custom-art goes back to Steam's portrait for every cover; with neither, covers already made from your art keep it. --theme is classic or halloween, and without it the covers already in the folder keep their theme; with the Halloween theme, 100% games get the rosette only, so --completed-marks full is refused. Saturation and brightness go from 0 to 100, where 100 is the original and lower values give a greyer or darker case. --case-file FILE puts every game of the run in a case of your own (a 600 x 900 PNG, see-through where the art goes). It cannot be mixed with --hue, --saturation, --brightness, --theme or the gold styles, and a later make without it leaves those covers as they are (use another --out, or delete them).
--games-page FILE is the games page saved as "Webpage, Complete" (see above). --completed-style is ribbon (the plain case; the default when you pass a page), gold-case, gold-border or none; none removes the highlights from covers made before. --completed-marks is full (the rosette and the ribbon, the default), rosette (the rosette alone) or none (no marks: with gold-case or gold-border the gold alone) and works with every style except none. Without either option, covers keep the look they have.
Run python -m engine -h for all options, such as --only, --hue, --saturation, --brightness, --skip-auto-art, --steam-dir and --user (the account's folder number in Steam's userdata, to pick one of several accounts).
❓ FAQ
It says my game list has no games in it
You weren't logged in to Steam in your browser when you saved the page. Steam doesn't show an error in that case; it gives an empty list. Click Open the page in my browser again: it opens Steam's login page first, so log in there, then save the page you land on. If that page shows no games even though you just logged in, refresh it (F5, or Cmd+R on a Mac) before saving.
Why do some covers look blurry?
Many older or smaller games have no real portrait on Steam. Steam builds a stand-in from the wide header image, so the title banner sits in the middle of a blurred copy of itself. Tick Skip blurry covers (hover the i next to it) to leave those games alone.
I set custom art by hand in Steam. Will these replace it?
Steam shows art you set by hand (or got from SteamGridDB) before these covers. Apply to Steam moves such art for the covered games into the backup, so the case is shown, and Restore brings it back. To clear all of it and get Steam's own art, use Reset to Steam's default art and choose Remove all.
Where are the covers stored?
In your own user folder: ~/.local/share/steamcase/covers on Linux, %LOCALAPPDATA%\steamcase\covers on Windows and ~/Library/Application Support/steamcase/covers on macOS. Use Open covers folder in the app. Steam's copies live in userdata/; copy that folder to use the covers on another computer.
A game from my family's library got no cover
Games shared with you through Steam Family Sharing are not on your own game list, so the app has to compare Steam's own files with your list to tell them apart. Untick Only my installed games and load your game list (Download your game list, or Browse… to an older userdata.json: it does not need to contain the shared game). The shared games then get covers with a green corner. If the list is old, games you bought after saving it may be mistaken for shared ones, so save it again after you buy games. This is only tested on a small family: please open an issue if games are missing.
What happens if I change the colour after I made covers?
When you click Make covers, the app asks before it replaces the covers you already made in another colour, shade or case theme. If you say yes, it rebuilds them all in the new look, which downloads the artwork again. Steam keeps showing your current art until you add the new covers in step 5, and Restore previous artwork can undo that. There is one set of covers at a time. Only the original blue is checked for readable text: bright yellow or lime banners make the white text harder to read, and the same can happen with a very light case.
Why does the games page need to be saved as "Webpage, Complete"?
Steam builds that page in your browser after it loads. "Webpage, HTML only" saves only Steam's first answer, which holds just the 20 games you played most recently and no game rows, so the app finds nothing to read and tells you so. "Webpage, Complete" saves the page as it looks on screen, with every game. It also saves a folder of images (about 90 MB for a big library) that the app does not need.
Can I remove the highlights later?
Yes. Load a page again (or any page), choose No special case and click Make covers: the app asks first, then rebuilds the highlighted covers as normal ones. On the command line, use --completed-style none. Add the covers to Steam again in step 5 to see the change there.
What happens when I finish another game?
Save your games page again (same name, same way), pick the new file with Browse… in the games-page block (the app only watches Downloads while no page is loaded), and click Make covers. Only the covers that change are rebuilt.
Does it work for non-Steam games and shortcuts?
Not yet. Only games in your Steam library.
Can I get the covers without running it?
Covers I already made are on SteamGridDB:
Are screen readers supported?
No. The window works fully with the keyboard (Tab, Space, Enter), but the toolkit it uses can't talk to screen readers. The command line is the accessible alternative.
💬 Feedback and bugs
Feedback and bug reports are mainly handled on the project's Discord; Join our Discord at the bottom of the left list opens the invite too. Tell us your system (Windows, macOS, Linux or Steam Deck), the version you use (the Check for updates link shows it) and what you saw; a screenshot helps a lot. You can also open an issue on GitHub if you prefer.
Security problems are the exception: please report them privately, not in public.
☕ Support the project
Steam Case Covers is free, and it will stay free: no ads, no account, no telemetry. I make it in my spare time. If it made your library look better, you can help it keep growing:
It is entirely optional. Starring the repository ⭐ and telling a friend help just as much.
My Ko-fi page also covers WakeDeck, another small app I made.
🙏 Acknowledgments
Thanks to SteamGridDB and its community for making custom Steam artwork easy to share, and to the authors of Pillow, PyInstaller, the Nunito Sans font and the KDE Breeze icon theme. Details are in THIRD_PARTY.md.
Game artwork shown above belongs to its publishers and developers. Covers you generate contain that artwork: keep them for personal use.
📄 License
Copyright (C) 2026 Diego Bergonsi. Free software under the GNU General Public License v3 or later: you may use, change and share it, and anything you distribute built on it must stay open under the same license.




