A neon-synthwave loot-box opener for your terminal — a Textual TUI.
Project description
✦ CLI Loot Collector ✦
A neon-synthwave loot-box opener for your terminal, built with Textual. Chunky pixel-art sprites, a software-3D rotating reward cube, and lots of particle effects — all rendered with half-block characters so it stays crisp in a small terminal window.
Install
pipx install clilc
loot
(or pip install clilc, then run loot). pipx keeps
it in its own isolated environment, which is ideal for a command-line app.
Controls
| Key | Action |
|---|---|
O |
Open a loot box |
A |
Toggle auto-play (auto-opens chests hands-free) |
R |
Re-drop the gem hoard behind the chest |
M |
Open the model inspector (cycle every item's 3D model) |
Enter / Space |
Collect the revealed item & continue |
← / → |
Cycle models (in the inspector) |
Q / Esc |
Quit / back |
Your collection (items, total value, gear score, best rarity) persists between
runs in a per-user data file (~/.local/share/clilc/save.json).
Run from source
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python main.py
The three screens
- Main — an idle treasure chest bobbing in front of a hoard of gems that
fall from the top and pile up behind it: one gem per item you've collected,
coloured by its rarity. The pile grows by one gem each time you return from a
reward, and
Rre-drops the whole hoard. Your collection stats sit up top. PressOand the chest bursts open with a rarity-coloured particle blast. - Looting — a CS:GO-style reel of rarity-tinted gem tiles spins over a "wavey RGB" gradient and decelerates to land your drop under the centre marker.
- Reward — a rotating 3D cube tinted to the item's rarity with an emissive glow and confetti, beside the item's name, value and gear score.
How the graphics work
Everything visual draws into a Buffer — a 2D grid of RGB pixels — which is
streamed to the terminal using the upper-half-block character ▀ (foreground =
top pixel, background = bottom pixel). That doubles vertical resolution and
gives the chunky-pixel look. Runs of identical cells are merged so flat regions
are nearly free to redraw at 30 fps.
| Module | Responsibility |
|---|---|
loot/pixelcanvas.py |
Buffer + PixelCanvas widget (the rendering core) |
loot/backdrop.py |
animated synthwave sun + perspective grid |
loot/sprites.py |
procedural chest (with lift-open animation) + gem icons |
loot/cube.py |
software 3D cube: rotate → project → shade → fill, + glow (fallback) |
loot/mesh.py |
generic mesh renderer with a per-pixel z-buffer |
loot/voxel.py |
voxel models, greedy meshing, .vox/.json loaders, item→model map |
loot/itemmodels.py |
a code-authored voxel model for every item in the pool |
loot/models/ |
drop your own .vox / .json models here (see its README) |
loot/screens/inspector_screen.py |
the M model inspector |
loot/particles.py |
particle system (sparkles / burst / confetti fountain) |
loot/loot_table.py |
rarities, themed item pool, weighted rolls, persistence |
loot/screens/ |
the three Textual screens and the flow between them |
Rarities
Common · Uncommon · Rare · Epic · Legendary — each with its own colour, drop weight, glow intensity and confetti volume.
Dev tools
tools/render_preview.py— renders each scene's pixel buffer to a scaled-up PNG (tools/preview_*.png) for inspecting the art directly.tools/drive.py— drives the real app headless through the full flow and saves screenshots, used to verify rendering and screen transitions.
Extending it
This first pass prioritises looking good; it's built to grow. Easy next steps:
add items to POOL in loot/loot_table.py, tune rarity weights/colours in
loot/palette.py, add new sprite shapes in loot/sprites.py, or add an
inventory screen that reads the saved collection.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file clilc-0.1.0.tar.gz.
File metadata
- Download URL: clilc-0.1.0.tar.gz
- Upload date:
- Size: 42.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c1032339bfd53f2119ef051144e1cc19a6aba93aeb9ae19bf059584d628925d
|
|
| MD5 |
6a45332ee962dd194f291919f13d2540
|
|
| BLAKE2b-256 |
a51e1ac3369a5e2c0222d2fd2214dacebc0775964d6183f92cececcb629a39ee
|
Provenance
The following attestation bundles were made for clilc-0.1.0.tar.gz:
Publisher:
publish.yml on ChomChomp/CLILootCollector
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
clilc-0.1.0.tar.gz -
Subject digest:
5c1032339bfd53f2119ef051144e1cc19a6aba93aeb9ae19bf059584d628925d - Sigstore transparency entry: 1852772268
- Sigstore integration time:
-
Permalink:
ChomChomp/CLILootCollector@1cb1189abbf4c0a3e9e75cdabbfe4c8a95dbbd33 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ChomChomp
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1cb1189abbf4c0a3e9e75cdabbfe4c8a95dbbd33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file clilc-0.1.0-py3-none-any.whl.
File metadata
- Download URL: clilc-0.1.0-py3-none-any.whl
- Upload date:
- Size: 45.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
072e91d4933790d8ab6b2b2eb4ac22204ed7c68cdaafeabf4f7f2a5aecd82c4d
|
|
| MD5 |
24328686e2f2e092fa918e785741587a
|
|
| BLAKE2b-256 |
7c16367d5343cbc16d7acb99991ef09379048def5d45a49e10c6297d440696ac
|
Provenance
The following attestation bundles were made for clilc-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on ChomChomp/CLILootCollector
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
clilc-0.1.0-py3-none-any.whl -
Subject digest:
072e91d4933790d8ab6b2b2eb4ac22204ed7c68cdaafeabf4f7f2a5aecd82c4d - Sigstore transparency entry: 1852772335
- Sigstore integration time:
-
Permalink:
ChomChomp/CLILootCollector@1cb1189abbf4c0a3e9e75cdabbfe4c8a95dbbd33 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ChomChomp
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1cb1189abbf4c0a3e9e75cdabbfe4c8a95dbbd33 -
Trigger Event:
push
-
Statement type: