Skip to main content

Professional Minecraft Inventory Rendering and Asset Mirroring library

Project description

🎒 Exo-Inventory

A powerful, high-performance Minecraft inventory rendering library for Python.

exo-inventory is a professional-grade library designed to fetch, mirror, and render Minecraft item icons and player inventories with 100% customizability. Whether you need a standard player inventory or a completely custom 9x6 chest layout, exo-inventory handles the assets and coordinates for you.


✨ Features

  • 🔄 Smart Asset Mirroring: Local mirror of Jemsire's Minecraft icons with automatic version detection (1.13.2 to 1.21.10+).
  • 🖼️ Flexible Rendering Engine: Support for arbitrary item placement (render_custom) or standard Minecraft layouts (render_player).
  • 🤖 Automated Maintenance: Integrated GitHub Actions workflow to sync assets and rebuild metadata daily.
  • 🎨 UI Customization: Download and cache UI themes (backgrounds, empty slot icons) from remote repositories.
  • 👤 Player Models: Automatic integration with mc-heads.net for rendering 3D player skins.
  • High Performance: Path caching, recursive item lookup, and asynchronous asset fetching.

🖼️ Visual Previews

Standard Inventory Custom Transparent Grid
Standard Custom

🚀 Installation

Install the library directly from your local path or git:

# Git installation (Recommended)
pip install git+https://github.com/zKauaFerreira/Exo-Lib.git

Note: The library already comes with 1400+ Minecraft icons and UI assets bundled in the package. You can start rendering immediately after installation!


⚡ Quick Start (Plug & Play)

1. Minimalistic Rendering

Since assets are bundled, you don't even need to provide a path!

import asyncio
from exo_inventory import InventoryRenderer

async def main():
    # USES BUILT-IN ASSETS AUTOMATICALLY
    renderer = InventoryRenderer()
    await renderer.initialize()

    player_data = {
        "uuid": "caf29aa7-b3f6-494f-b44f-66cdd3fb9a42",
        "armor": [{"id": "diamond_helmet", "slot": 39}],
        "hotbar": [{"id": "netherite_sword", "slot": 0}],
        "main_inventory": [],
        "off_hand": {"id": "shield"}
    }

    render = await renderer.render_player(player_data)
    # Save or send to Discord...

    await renderer.close()

asyncio.run(main())

📂 Examples Folder

We provided a dedicated examples/ directory in our repository to help you get started with common use cases.

  • standard_inventory.py: Demonstrates standard player inventory rendering with the requested skin.
  • custom_grid.py: Shows how to create 100% custom grids with transparent backgrounds.
  • manage_assets.py: Advanced usage: how to sync assets to a custom external folder instead of using the library internal one.

🛠️ Advanced Usage

🎨 Customizing Asset Locations

If you want to manage your icons in a specific shared folder across multiple projects:

# Pass a path to use an external cache
assets = AssetsManager("./shared_assets")
renderer = InventoryRenderer(assets_dir="./shared_assets")

🧩 Custom Layouts

# background=None generates a transparent PNG
image = await renderer.render_custom(
    items_map=[{"id": "apple", "x": 10, "y": 10}],
    width=100,
    height=100,
    background=None
)

📦 Asset Utilities & Exporting

Need the icons for something else? You can export assets from the cache to any directory.

# Export specific icons and UI elements to a folder
await assets.export_assets(
    target_dir="./my_resource_pack",
    items_list=["diamond", "netherite_sword"],
    include_ui=True
)

# Or just download icons to the internal cache without rendering
await assets.download_assets(["stone", "grass_block", "dirt"])

👤 Advanced Player Rendering

Customizing the player model render (poses/angles).

# Get a 3D body render with a 45-degree rotation
body_img = await renderer.get_player_render(
    uuid="zKauaFerreira",
    render_type="body", # options: 'body', 'head', 'avatar', 'player'
    size=400,
    angle=45
)

🛰️ Remote Asset Synchronization

The library can automatically pull UI themes from your GitHub repo:

Asset Source
inventory_bg.png zKauaFerreira/Exo-Lib/main/src/assets
jemsire_index.json Remote metadata mirror
empty_armor_slots PrismarineJS official assets

🤖 Automation (CI/CD)

The library includes a pre-configured GitHub Action (.github/workflows/update_assets.yml) that:

  1. Runs every day at midnight.
  2. Checks Jemsire for new Minecraft versions.
  3. Downloads new ZIPs and extracts them recursively.
  4. Generates a new jemsire_index.json.
  5. Commits changes back to your repository automatically.

📂 Project Structure

exo-inventory/
├── src/
│   └── exo_inventory/
│       ├── __init__.py    # Main exports
│       ├── assets.py      # Jemsire & Remote Sync logic
│       └── renderer.py    # Pillow-based rendering engine
├── pyproject.toml         # Build & Dependency config
└── README.md              # You are here

🛠️ Requirements

  • Python 3.10+
  • Pillow: For image processing.
  • aiohttp: For asynchronous asset downloads.
  • discord.py: Compatible for bot integrations.

🖥️ CLI Commands

exo-inventory provides built-in CLI commands for easy maintenance and asset extraction.

# Sync all assets to the library's internal storage
python -m exo_inventory.assets sync

# Export all icons AND UI elements to your current project folder
python -m exo_inventory.assets export ./assets

📜 License & Acknowledgments


Maintained with ❤️ for the Minecraft Discord community.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

exo_inventory-0.1.3.tar.gz (8.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

exo_inventory-0.1.3-py3-none-any.whl (8.7 MB view details)

Uploaded Python 3

File details

Details for the file exo_inventory-0.1.3.tar.gz.

File metadata

  • Download URL: exo_inventory-0.1.3.tar.gz
  • Upload date:
  • Size: 8.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for exo_inventory-0.1.3.tar.gz
Algorithm Hash digest
SHA256 2a393a8a40bfc7326ebe5211b250dd93129adfd56fe1a6a48988f9d7bd25c80f
MD5 610ff530fb37c51330a96cee49d4953c
BLAKE2b-256 637b3c4487ef925e3e0d1cc95c6296f459e48b026509cd2a5c66747fcce20bfa

See more details on using hashes here.

Provenance

The following attestation bundles were made for exo_inventory-0.1.3.tar.gz:

Publisher: publish.yml on zKauaFerreira/Exo-Lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file exo_inventory-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: exo_inventory-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 8.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for exo_inventory-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1420e9a34fc98e35f36e953e00c36f79e5178da3fbfa7fdb6fcc781b9ba4fed4
MD5 56e9dfca8a8b5c921c95a0be3b714a61
BLAKE2b-256 6d4653176586f726a97e7f870252f550609df5c3f5b17568388409afdbeebd9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for exo_inventory-0.1.3-py3-none-any.whl:

Publisher: publish.yml on zKauaFerreira/Exo-Lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page