Skip to content

Repository files navigation

AssetsManager

Your personal game-asset library, in two small apps:

  • AssetsDownloaders - downloads the game assets you own (itch.io, craftpix.net) or that are free (kenney.nl) into one organized library folder.
  • AssetsViewer - browses that library: searchable, filterable grid with previews, favorites, notes and your own tags.

Downloader: Python 3.12 + Tkinter Viewer: Electron 32 Linux + Windows

How to install

You only need two things installed - everything else is fetched automatically on first run:

  • Python 3 (for AssetsDownloaders)
  • Node.js (for AssetsViewer)

On Windows the scripts print the exact winget install command if either is missing.

1. Get the code - clone it (or copy the folder onto your disk):

git clone https://github.com/innocentmiau/AssetsManager.git

2. Run each app once - the launchers are self-bootstrapping (they create their own environment and install dependencies on the first run, which takes a minute):

# Linux
./downloader/run.sh        # AssetsDownloaders
./viewer/run.sh            # AssetsViewer
# Windows - double-click run.bat, or from PowerShell:
.\downloader\run.ps1       # AssetsDownloaders
.\viewer\run.ps1           # AssetsViewer

3. (Optional) Add them to your app menu / Start menu so you can open them from the OS search bar like any other app:

./linuxApplications.sh     # Linux: adds both to the Activities search
windowsApplications.bat    :: Windows: adds both to the Start menu (double-click)

Safe to re-run any time: each run verifies the installed launchers and repairs anything stale (icon, paths); up-to-date ones are left alone. --force / -Force rewrites unconditionally, --remove / -Remove uninstalls.

How to use

AssetsDownloaders (get assets)

  1. Plug in the disk (or pick any folder) where the library should live, then start the app and pick that destination (use Refresh after plugging in).
  2. Pick a source and start:
    • itch.io - paste your API key (itch.io -> Settings -> API keys). Downloads everything you own.
    • craftpix.net - click Log in... once (a browser window opens; sign in with email + password), then Start. First use installs its own browser automation; large libraries resume across days (craftpix has a daily cap).
    • kenney.nl - no account needed; downloads the free CC0 packs.
  3. Leave Skip already-downloaded on: re-running skips the big downloads and just refreshes titles/tags/previews on what you already have - so a re-run is always cheap and always safe.

Every asset lands in its own folder with the files, preview images and an asset.json describing it.

AssetsViewer (browse the library)

  1. Start it and pick the library folder you downloaded into.
  2. Browse: search box + tag/source filters, Ctrl+scroll over the grid to resize the cards. Assets stream in while big libraries scan.
  3. Click an asset for details, then:
    • Copy files to Downloads - copies its zips to ~/Downloads/<name>/ and opens the folder (the "get this asset onto my computer" button).
    • Show asset files - opens the asset's folder on the library disk.
    • Save tags & notes - favorite, rating, hidden, notes and your own tags. Your edits are never touched by the downloader.
  4. Made something yourself? + Add asset (top bar) saves your own work into the library like any downloaded asset: pick the zip(s), optional preview image(s), a name and tags - it gets its own folder under custom/ and shows up in the grid immediately.

How it works

Details for the curious - you don't need any of this to use the apps.

Two independent apps, one contract

App Folder Stack Role
AssetsDownloaders ./downloader Python 3.12 + Tkinter Logs into the sources, downloads owned assets, writes asset.json + preview images per folder.
AssetsViewer ./viewer Electron (Node 24) Scans the library, shows the grid, edits only the user block of asset.json (favorites / notes / tags).

They never import each other's code; the only contract is a per-folder asset.json (see SCHEMA.md). Top-level fields are machine-owned (the downloader may rewrite them on refresh); the user block is yours and the downloader never touches it. Why split: the downloader talks to websites and is fragile per-site; the viewer is a stable, read-mostly UI that can never corrupt what was downloaded.

The library is self-describing, on a removable disk

There is no central database - each asset folder carries its own metadata, so the library survives being copied, unplugged, or moved between machines:

<library_path>/
  itch.io/<asset-slug>/{asset.json, previews/*, files/*}
  craftpix.net/<asset-slug>/{asset.json, previews/*, files/*}
  kenney.nl/<asset-slug>/{asset.json, previews/*, files/*}
  custom/<asset-name>/{asset.json, previews/*, files/*}     <- your own work, added in the viewer

Because the disk's mount point can change (or be absent), both apps scan the currently-mounted disks on launch and ask you to pick the folder - the last-used path is pre-selected if it's still there.

Launchers and environments

The launchers are self-bootstrapping and re-sync on every start, so you edit source in ./downloader and ./viewer and just run:

  • Viewer: Electron ^32.0.0 is installed into a local runtime cache (on Linux under ~/.cache/assetsmanager, because the code may live on an exFAT disk that can't host node_modules).
  • Downloader: a Python venv in the same cache; Pillow for previews; craftpix's browser automation (Playwright) is installed on demand, in-app.
  • Both apps share their config at ~/.config/assetsmanager/config.json (%APPDATA% on Windows).
  • linuxApplications.sh / windowsApplications.ps1 install the app-menu / Start-menu entries, using the shared ./icon.ico; they verify-and-repair on every re-run.

License

MIT - see LICENSE. The license covers this code only; assets you download keep their own terms from their source sites.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages