Side Projects
Vapor: Custom Steam Library Artwork Without the Tab Hoarding

Part 10 of the thread Games and gear
- What it is
- Desktop app
- My role
- Creator
- Year
- 2025
- Built with
- Python
- CustomTkinter
- aiohttp
- SteamGridDB API
- Steam Web API
- Vapor reads your Steam library and finds matching grids, heroes, logos and icons on SteamGridDB.
- Browse and pick art game by game in the GUI, or let auto-enhance fill in a whole library.
- You need two free API keys: one from Steam, one from SteamGridDB.
- Runs on Windows, Linux and the Steam Deck.
A Steam library with custom artwork looks great. Getting it there is the tedious part: look up a game on SteamGridDB, download the grid, download the hero banner, maybe a logo, drop each one where Steam expects it, repeat for every game you own. Somewhere around the fifteenth browser tab you start wondering why a computer isn't doing this.
vapor is my answer to that. The name is a backronym, Visual Artwork Processing & Organization Resource, and the job is simple: read your library, find art for it, put the art in place.
What it does
Vapor talks to two services. The Steam Web API tells it which games you own. SteamGridDB, the community-run artwork database, supplies the images. Vapor sits in the middle and does the matching and the file shuffling.
It handles all four kinds of artwork Steam shows:
| Artwork type | Where you see it |
|---|---|
| Grid | The cover tiles in your library view |
| Hero | The wide banner at the top of a game's page |
| Logo | The title art laid over the hero |
| Icon | The small icon in lists and shortcuts |
You can go through games one at a time in the GUI, look at the options, and pick the ones you like. Or you can turn on auto-enhance, which selects and applies artwork for a batch of games in one pass. That's the mode for a big library you don't feel like curating by hand.
How it works
The flow has four steps:
- Read your Steam library through the Web API.
- Search SteamGridDB for artwork matching each game.
- Let you browse the options and choose.
- Download what you picked and apply it to your library.
Under the hood there's a small local database cache so it isn't asking the same questions of the APIs over and over, plus a game cache and a library analyzer. The interface is built on CustomTkinter, and the networking side uses aiohttp with connection pooling and retry logic, which matters when you're making a lot of requests against a free API tier.
It runs on Windows, Linux and the Steam Deck. On the Deck it pairs nicely with Deckport, which uses the same SteamGridDB artwork when it registers native Linux games as shortcuts.
Using it
Clone the repo, install the requirements, and start it:
pip install -r requirements.txt
python vapor.py
The first run asks for your Steam ID and your two API keys. There's also a setup wizard (python vapor.py --setup) and a CLI mode (--cli) if you'd rather skip the GUI.
Tip
Both keys are free. You get the Steam Web API key from Steam's developer page and the SteamGridDB key from your SteamGridDB profile preferences. Keep them to yourself; they're tied to your accounts.
Rough edges
Some limits come with the territory, and the README is upfront about them.
- It's online-only. Everything comes from SteamGridDB, so there's no offline browsing of cached art yet.
- Rate limits apply. You're on SteamGridDB's free tier, so a huge library takes a while to work through.
- Not every game has art. If nobody's uploaded artwork for an obscure title, there's nothing for Vapor to find.
- Odd Steam installs may need a manual path set before Vapor can see your library.
Note
Vapor doesn't back up your original artwork before replacing it. Steam regenerates its default art on its own, which is why that's been a nice-to-have rather than a must.
What's on the wish list: an artwork backup system, a favorites list for art you want to reuse, better previews, and an automated test suite. The same SteamGridDB idea also spun off into a desktop icon tool, which does for Windows and Linux shortcuts what Vapor does for the Steam library.
Try it
It's MIT licensed and on GitHub. If your library is a wall of default capsules and mismatched banners, give it an evening and see what it looks like afterward. Bug reports and suggestions are welcome in the issues.