Skip to main content

Courier from Hello Girl

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

texture_courier-0.0.15.tar.gz (23.9 kB view details)

Uploaded Source

Built Distribution

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

texture_courier-0.0.15-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

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

Hashes for texture_courier-0.0.15.tar.gz
Algorithm Hash digest
SHA256 e7cde9e6d1cefcf23e7c66dd66a1f87a995037f346c4d8e9ed5e04c70c1a2f8e
MD5 1c2c9f6e41f4f5cd3a9e9f34d5172e0d
BLAKE2b-256 b7b145e4e89292cb835e2914f65a1cb9f5730c2fee0c66e7f763ff2f87b66de0

See more details on using hashes here.

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

Hashes for texture_courier-0.0.15-py3-none-any.whl
Algorithm Hash digest
SHA256 184a43d5ab8c6be191db793a416849e3e124ed8612ff388c9528e206b9c0de96
MD5 52b9f5d905204cc8533bb712dc02c1ea
BLAKE2b-256 8472581319d289d9a44b17ba39606801585ff8cc217f137b49c9f40068882a30

See more details on using hashes here.

Release history Release notifications | RSS feed

0.0.16

2 files

This release

0.0.15 This release

2 files

0.0.14

2 files

0.0.13

2 files

0.0.12

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page