texture-courier
simple CLI program and high-level python API to interact with the second life texture cache.
if you're looking for a end-user tool, you may be interested in lltexturecache-browser-qt.
goals
- output the entire texture cache in a commonly readable format
- support all platforms that support python
- be as fast as it is practical to be
- use few dependencies
non goals
- no gui, no bells and whistles
- no option to transform outputs into other formats, as i believe this is better covered by other programs
use CLI
install texture-courier from PyPI. conventionally this is done with pip. but uv tool install gives you proper dependency isolation without having to worry about environments.
# with uv (preferred)
uv tool install texture-courier[cli]
# with pip
pip install texture-courier[cli]
then, run it on the command line like
texture-courier
texture-courier will attempt to find any texture caches on the system automatically. if this does not work, find your texture cache and provide it like so
texture-courier /Users/meri/Library/Caches/Firestorm_x64/texturecache
this dumps the contents of the cache to a directory (by default, to
./texturecache).
see texture-courier --help for other options.
use API
from texture_courier import list_texture_caches, TextureCache
caches = list_texture_caches()
# [PosixPath('/Users/meri/Library/Caches/Firestorm_x64/texturecache')]
cache = TextureCache("/Users/meri/Library/Caches/Firestorm_x64/texturecache")
# <TextureCache /Users/meri/Library/Caches/Firestorm_x64/texturecache, 26478 textures, 3 GB>
# the cache implements an iterator, which is the main way to list textures
for tex in cache:
print(tex)
# <Texture 93ff0fc0-731a-b04e-8a66-b6489c059e04, 2026-08-21 22:39:00, 20 KB, whole=True>
# <Texture eb2667d6-dbc8-7188-ea0e-2bc8bc8da19b, 2026-08-21 22:39:00, 39 KB, whole=True>
# <Texture f75d9ea7-2c6f-3d11-5645-7c7c0a195721, 2026-08-21 22:38:58, 597 bytes, whole=True>
# ...
# the api implements __getitem__, so you can interact with it like you would a list
first_ten = cache[:10]
for tex in first_ten:
with open(f"{tex.uuid}.jp2", "wb") as f:
f.write(tex.jpeg_2000())
thumbnails
the viewer keeps a small decoded copy of each texture in a FastCache.cache
beside the cache. texture.thumbnail can read it
thumb = cache[0].thumbnail
# <Thumbnail 32x32, 3 components, discard 5>
print(thumb.dimensions) # (32, 32)
with open(f"{tex.uuid}.png", "wb") as f:
f.write(thumb.png())
thumb.pixels holds the raw rows if you would rather encode them yourself.
refer to the api.py file for additional methods and helpers.
hacking
i use pip install --editable . to install texture-courier as an editable
package, which allows the cli to be used like it was installed from pip.
lltexturecache.h is the authoritative implementation of the texture cache, which much of this implementation was engineered out of.
prior art
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 texture_courier-0.0.15.tar.gz.
File metadata
- Download URL: texture_courier-0.0.15.tar.gz
- Upload date:
- Size: 23.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e7cde9e6d1cefcf23e7c66dd66a1f87a995037f346c4d8e9ed5e04c70c1a2f8e
|
|
| MD5 |
1c2c9f6e41f4f5cd3a9e9f34d5172e0d
|
|
| BLAKE2b-256 |
b7b145e4e89292cb835e2914f65a1cb9f5730c2fee0c66e7f763ff2f87b66de0
|
File details
Details for the file texture_courier-0.0.15-py3-none-any.whl.
File metadata
- Download URL: texture_courier-0.0.15-py3-none-any.whl
- Upload date:
- Size: 21.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
184a43d5ab8c6be191db793a416849e3e124ed8612ff388c9528e206b9c0de96
|
|
| MD5 |
52b9f5d905204cc8533bb712dc02c1ea
|
|
| BLAKE2b-256 |
8472581319d289d9a44b17ba39606801585ff8cc217f137b49c9f40068882a30
|