Wes Ellis./ a personal notebook
Technology. Stories. Side projects.
A few things worth writing down.
← Back to Side Projects

Side Projects

Vapor: Custom Steam Library Artwork Without the Tab Hoarding

A retro game console with cartridges and a VHS tape spread on a wooden floor.
Photo via Pexels, run through my '90s disposable filter

Part 10 of the thread Games and gear

PROJECT AT A GLANCEOpen source
What it is
Desktop app
My role
Creator
Year
2025
Built with
  • Python
  • CustomTkinter
  • aiohttp
  • SteamGridDB API
  • Steam Web API
THE SHORT VERSION4 points
  • 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:

  1. Read your Steam library through the Web API.
  2. Search SteamGridDB for artwork matching each game.
  3. Let you browse the options and choose.
  4. 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.