Skip to main content

libstb

Python bindings for the stb single-header libraries. pip install libstb and you have image/font processing with no system dependencies and no Python dependencies. The C++ library is usable from CMake too.

numpy is optional: pip install "libstb[numpy]" if you want img.numpy() / libstb.imread(). It is imported only when one of those is first used, never by import libstb, and without it they raise an ImportError that says so. Everything else works without numpy, including Image(array) from any buffer (a memoryview, array.array, a bytearray, a PIL-exported buffer...), and img.tobytes() and memoryview(img) give you the pixels with no numpy at all.

module status
stb_image (read) done
stb_image_write (write: png, jpg, bmp, tga) done
stb_image_resize2 (resize) done
stb_truetype (fonts: metrics, glyphs, text, atlas) done
stb_rect_pack used internally by the atlas packer

Python

import numpy as np
import libstb

img = libstb.Image.open("photo.png")                # or bytes; also: channels=4, flip=True
img.width, img.height, img.channels                 # 640, 480, 3
img.numpy()                                         # uint8 pixels (H, W, C), no copy; np.asarray(img) works too
np.from_dlpack(img)                                 # DLPack: also torch/jax/cupy.from_dlpack(img), zero-copy
libstb.Image.from_dlpack(tensor)                    # and back: a torch/jax/cupy/numpy uint8 array -> Image
pixels = libstb.imread("photo.png")                 # just the ndarray (same options as Image.open)
libstb.imwrite("out.jpg", pixels, quality=80)       # an ndarray or an Image; format from the extension
libstb.ImageInfo.read("photo.png")                  # header only: (width, height, channels)
libstb.Image(np.zeros((8, 8, 4), np.uint8))         # from your own uint8 array (no copy, see below)
img.copy()                                          # an independent image (deep copy)

img.write("out.jpg")                                 # format from the extension, default settings
img.write_jpg("out.jpg", quality=80)                # or pick the format and its settings
data = img.to_png(compression=9)                    # -> bytes (to_png / to_jpg / to_bmp / to_tga)

small = img.resize(320, 240)                        # new Image; default Resizer()
small = img.resize(320, 240, "cubic")               # filter by name (see the table below)
libstb.Resizer("cubic")                             # same name works on Resizer itself
libstb.Resizer(libstb.Resizer.Filter.MITCHELL, libstb.Resizer.Edge.WRAP, srgb=False)
img.resize(320, 240, libstb.Resizer("linear", srgb=False))  # name + other options

font = libstb.Font.open("font.ttf")                 # trusted fonts only, see below
text = font.render("Hello\nworld", 32)              # RenderedText(bitmap: Image (1 channel), origin_x, origin_y)
text.bitmap.write("hello.png")
font.metrics(32), font.advance("A", 32), font.kerning("A", "V", 32), font.measure("Hello", 32)
font.render_glyph("A", 32)                          # Glyph(bitmap, x_offset, y_offset, advance)
atlas = font.make_atlas("ABCabc123", 32, 256, 256)  # Atlas: .image and atlas["A"] -> AtlasGlyph

libstb.iminfo("photo.png")                          # shortcut: ImageInfo.read(...)

Encoding. Every format has a pair of methods with its own settings, all defaulted: to_png(compression=8), to_jpg(quality=90), to_bmp(), to_tga(rle=True) return the file's bytes, and write_png(path, ...), write_jpg(path, ...), write_bmp(path), write_tga(path, ...) do the same and write it (only after encoding succeeded, so a failure never leaves a truncated file). write(path) is the shortcut: it picks the format from the extension (.png .jpg .jpeg .bmp .tga, case-insensitive; ValueError for anything else) and uses the defaults. For other settings call write_*.

libstb.imwrite(path, image, *, quality=None, compression=None, rle=None) is the functional form: it takes an Image or a uint8 array, picks the format from the extension, and passes the options that format has (quality for jpg, compression for png, rle for tga). An option the format does not have is a ValueError, not silently ignored. libstb.imread(source, *, channels, flip, max_bytes) is its counterpart and returns an ndarray.

Resize filters by name. Image.resize(w, h, x) and Resizer(x) accept a Resizer.Filter, or a case-insensitive name (- and space count as _). Any other option (edge, srgb, max_bytes) is a keyword of Resizer(...). Image.resize also takes a ready-made Resizer, or None for the default.

name filter note
auto, automatic, default DEFAULT Catmull-Rom when enlarging, Mitchell when shrinking
nearest, point POINT nearest neighbour
linear, bilinear, triangle TRIANGLE
cubic, bicubic, catmull_rom CATMULL_ROM sharp; the PIL/OpenCV meaning of "cubic"
bspline, cubic_bspline CUBIC_BSPLINE smooth, slightly blurry; scipy's meaning of "cubic"
mitchell MITCHELL good all-round compromise
box, area BOX

An unknown name raises ValueError listing the valid ones. There is no lanczos: stb_image_resize2 does not have it.

Fonts: trusted files only. stb_truetype does no bounds checking; its author writes "NO SECURITY GUARANTEE -- DO NOT USE THIS ON UNTRUSTED FONT FILES". Load your own or vetted system fonts, never user uploads. (Images are different: stb_image is fuzzed, and libstb adds dimension and size limits.)

Errors mirror the C++ hierarchy: libstb.Error (a RuntimeError) with DecodeError, EncodeError, LimitError below it, so a single except libstb.Error catches every libstb failure. Bad arguments raise ValueError, unreadable files OSError (FileNotFoundError, PermissionError, ... as the OS says). Images whose decoded size would exceed max_bytes (default 512 MiB) are rejected from the header, before any pixel memory is allocated.

libstb.Image is stb::image itself, not a wrapper: open, resize, to_* and write* are the C++ members, run without the GIL. img.numpy() / np.asarray(img) are numpy views of its pixels (kept alive by the view); memoryview(img) is the same zero-copy view as a plain 3-D memoryview (numpy reads it too), and img.tobytes() is a copy, both without numpy.

DLPack. Image implements __dlpack__ / __dlpack_device__, so np.from_dlpack(img), torch.from_dlpack(img), jax.numpy.from_dlpack(img) and cupy.from_dlpack(img) share the pixels with no copy and no framework import on libstb's side. The layout is fixed: uint8, shape (height, width, channels), on the CPU (dl_device other than the CPU is a BufferError). The view keeps the image alive. It is writable with numpy 2.1 or newer (older numpy, the last one on Python 3.9 being 2.0.2, imports every DLPack view read-only and has no copy= argument; img.numpy() is always writable). Asking for copy=True gives an independent copy. The other way round, libstb.Image.from_dlpack(x) takes any DLPack object holding uint8 pixels of shape (H, W) or (H, W, 1..4) (a torch, jax, cupy or numpy array, another Image): a writable C-contiguous CPU array is shared, anything else is copied, and copy=True always copies. (Image(x) accepts the same objects; from_dlpack additionally insists on __dlpack__, so a stray bytes is a clear TypeError.) For a different layout or dtype (CHW, float32), convert on the framework side, e.g. torch.from_dlpack(img).permute(2, 0, 1).float() / 255.

Pixels are never copied behind your back. Image(array) uses a writable, C-contiguous uint8 array in place, so the image and the array share their pixels (changes show on both sides, and the image keeps the array alive). Any other array (read-only, or strided like arr[::-1]) cannot be shared and is copied. Image.open takes ownership of stb's own buffer, no copy either. When you want an independent image, say so: img.copy() (also copy.copy and copy.deepcopy).

C++ / CMake

# after `pip install libstb`
execute_process(COMMAND ${Python3_EXECUTABLE} -c "import libstb; print(libstb.get_cmake_dir())"
    OUTPUT_VARIABLE libstb_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
find_package(libstb CONFIG REQUIRED)
target_link_libraries(app PRIVATE libstb::core)

The C++ namespace and headers are stb (<stb.h>, <stb/*.hpp>); the CMake target (libstb::core) and the Python package (libstb) keep the project name.

#include <stb.h>

stb::image img = stb::image::open("in.png");        // throws stb::error subclasses
img(0, 0, 1) = 255;                                       // unchecked pixel access
stb::image dup = img.copy();                              // image is move-only: copies are explicit
img.write("out.jpg");                                      // format from the extension, default settings
img.write_jpg("out.jpg", 80);                             // or pick the format and its settings
std::vector<std::uint8_t> bytes = img.to_png(9);          // to_png / to_jpg / to_bmp / to_tga -> file bytes

stb::image small = img.resize(320, 240);              // default resizer
stb::image crisp = img.resize(320, 240, "cubic");      // filter by name, or by enum:
stb::image soft  = img.resize(320, 240, stb::resize_filter::mitchell);

stb::resize_options o;                                 // full control: filter, edge, srgb, max_bytes
o.edge = stb::resize_edge::wrap;
stb::resizer r(o);                                     // also: resizer("cubic"), resizer(resize_filter::box)
stb::image tile = img.resize(320, 240, &r);            // nullptr = default resizer; r.resize(img, w, h) works too

stb::font f = stb::font::open("font.ttf");          // cheap to copy, thread-safe
stb::text_bitmap t = f.render("h\xC3\xA9llo", 32);      // UTF-8 in, 1-channel image out
stb::atlas atlas = f.make_atlas(U"abc", 32, 256, 256);

Design: stb never appears in a public header. Where a class would hold stb state, it is hidden behind a pimpl: font keeps the font bytes and the stbtt_fontinfo in an opaque font::impl (shared and immutable, so copies are cheap and threads can share one). image and resizer carry no stb state at all (plain ints/enums), so a pimpl there would only add indirection. image is move-only: its pixels are a shared_ptr<uint8_t> whose deleter (or aliased owner) decides who frees them, so the same class holds memory it allocated, stb's decode buffer (adopted, not copied) or memory somebody else owns (image::wrap, which is how a numpy array becomes an image without a copy). A copy is always spelled copy(). The four output formats are a closed set, so there is no encoder class hierarchy: each format is a to_* / write_* pair on image with its own defaulted settings, next to decoding in src/core/image.cpp. Runtime failures derive from stb::error (decode_error, encode_error, limit_error, io_error); programmer errors throw std::invalid_argument.

Or cmake --install build and find_package(libstb) as usual.

Layout (mirrors httpp / ctoon)

include/stb.h               umbrella header, owns LIBSTB_VERSION_* (single source of truth)
include/stb/*.hpp           public API (error, image, resizer, font, utf8); never includes stb
src/core/*.cpp              implementation; the only place stb headers are compiled
src/third_party/stb/        vendored stb headers (committed, no submodules)
src/bindings/python/        nanobind module (bind_*.cpp, one per area) + the `libstb` Python package
cmake/                      DynamicVersion, Startup, Optimize, package config
tests/{cpp,python,cmake}    unit tests + find_package consumer test, all run by ctest
tests/data/                 synthetic test font (solid-rectangle glyphs) + the script that makes it

Each stb header is compiled with STB_*_STATIC, so no stbi_* symbol leaks from libstb_core: it links fine next to your own copy of stb.

Build & test

pip install -r requirements-dev.txt
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build --output-on-failure

Wheels: abi3 (cp312-abi3, covers 3.12+) plus one wheel each for cp39-cp311; see .github/workflows/wheels.yml. Free-threaded builds are not supported.

License

MIT for libstb. The vendored stb headers are MIT / public domain (see src/third_party/README.md).

Metadata

Release files for libstb 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for libstb 0.5.0
File Size Uploaded Provenance
libstb-0.5.0.tar.gz 371.2 kB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for libstb 0.5.0
File
libstb-0.5.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
libstb-0.5.0-cp312-cp312-win32.whl CPython 3.12 CPython 3.12 Windows x86-32 Details
libstb-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
libstb-0.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
libstb-0.5.0-cp312-cp312-macosx_10_15_universal2.whl CPython 3.12 CPython 3.12 macOS 10.15+ universal2 (ARM64, x86-64) Details
libstb-0.5.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
libstb-0.5.0-cp311-cp311-win32.whl CPython 3.11 CPython 3.11 Windows x86-32 Details
libstb-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
libstb-0.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
libstb-0.5.0-cp311-cp311-macosx_10_15_universal2.whl CPython 3.11 CPython 3.11 macOS 10.15+ universal2 (ARM64, x86-64) Details
libstb-0.5.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
libstb-0.5.0-cp310-cp310-win32.whl CPython 3.10 CPython 3.10 Windows x86-32 Details
libstb-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details
libstb-0.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
libstb-0.5.0-cp310-cp310-macosx_10_15_universal2.whl CPython 3.10 CPython 3.10 macOS 10.15+ universal2 (ARM64, x86-64) Details
libstb-0.5.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
libstb-0.5.0-cp39-cp39-win32.whl CPython 3.9 CPython 3.9 Windows x86-32 Details
libstb-0.5.0-cp39-cp39-musllinux_1_2_x86_64.whl CPython 3.9 CPython 3.9 Linux musl 1.2+ x86-64 Details
libstb-0.5.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
libstb-0.5.0-cp39-cp39-macosx_10_15_universal2.whl CPython 3.9 CPython 3.9 macOS 10.15+ universal2 (ARM64, x86-64) Details

Total release size: 52.2 MB

Release files / libstb-0.5.0.tar.gz

Download URL libstb-0.5.0.tar.gz
Size 371.2 kB
Tags Source
SHA-256 checksum
How to use checksums
a62616aa2de978d8a90ee0507667a805a4e89b75a302f00fced29f81260b3598
BLAKE2b-256 checksum
How to use checksums
34c38ab2f5cd909978c75b68e91541c606be0cb57aa399533891fe9750d25c23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp312-cp312-win_amd64.whl

Download URL libstb-0.5.0-cp312-cp312-win_amd64.whl
Size 3.4 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
6db023c3f64093b71bca391b9793776c226e7af6a84609babf4a92121730fb31
BLAKE2b-256 checksum
How to use checksums
529cc29d7a377067c1e933d2e9a5fa5e60b66d990ecb15a795af6a14964fb41e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp312-cp312-win32.whl

Download URL libstb-0.5.0-cp312-cp312-win32.whl
Size 3.4 MB
Tags CPython 3.12 Windows x86-32
SHA-256 checksum
How to use checksums
5db9cdfa9333db31cdb590afed349b441d32a88f070565cb8f143ce3b67e5ef9
BLAKE2b-256 checksum
How to use checksums
6cf577b8be470cd05941b23de9d7685858f6e585a784e007ee1e241ff2293290
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL libstb-0.5.0-cp312-cp312-musllinux_1_2_x86_64.whl
Size 2.6 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
de2af0ad8df0f95c8397b7ab821d0c7aff0a2dbbb5157bddf99b1be1d23ac922
BLAKE2b-256 checksum
How to use checksums
b12bb01fa2514e38b58181ad572cefdb696d7a8ec052c3249724c05f3ac0bd70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL libstb-0.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 2.2 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7fd4b819061624b567bbf17f55eeae109df6ceb776f476b9c1d264da61d158cb
BLAKE2b-256 checksum
How to use checksums
811541115a9353e97f698d035d95f009e255fa6e9654e0445e02929b0f8615c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp312-cp312-macosx_10_15_universal2.whl

Download URL libstb-0.5.0-cp312-cp312-macosx_10_15_universal2.whl
Size 1.4 MB
Tags CPython 3.12 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
5867ab1c8d62b7ada2f17dc29342925a2a384d86a2216bc4c44e4ad4c7b3ca64
BLAKE2b-256 checksum
How to use checksums
df8b957472d0adba0ed8f6fb75376c26b30062f4bf5933bffe009126165cdb63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp311-cp311-win_amd64.whl

Download URL libstb-0.5.0-cp311-cp311-win_amd64.whl
Size 3.4 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
ba8c70c9a6748dfa20a5f1ddefed9a685496d34d97cd342dd4d48fbc8737ad4c
BLAKE2b-256 checksum
How to use checksums
f512e26e61c8520d6ff2d337bedba615221f97a06c4ebe23f95b7a2793c84b93
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp311-cp311-win32.whl

Download URL libstb-0.5.0-cp311-cp311-win32.whl
Size 3.4 MB
Tags CPython 3.11 Windows x86-32
SHA-256 checksum
How to use checksums
4b148d97e6d1c6c53b5591b6c8814a9affb336d223581b60cb2b554fb2fe47fd
BLAKE2b-256 checksum
How to use checksums
d4edcab263b7495280c32b69660b832728630ad6e9d8ae561e61251f9bef6605
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL libstb-0.5.0-cp311-cp311-musllinux_1_2_x86_64.whl
Size 2.6 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
6e3dc82fb2cb7a333af40f97e3c528c1b848b4168c171d274f3a8fcbd1374613
BLAKE2b-256 checksum
How to use checksums
98010c40a0a0285ffedf2eba3bd116db2ba81719bdbca19df36e803f133cec47
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL libstb-0.5.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 2.2 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
85abd63c81338ae39c372a5bb526ab88040e462d4429d394dcdd9ce079de46a9
BLAKE2b-256 checksum
How to use checksums
7224200448e726bb455f2b5405872ac2e95bd7f6a9bd55cfd98aecf984aa827d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp311-cp311-macosx_10_15_universal2.whl

Download URL libstb-0.5.0-cp311-cp311-macosx_10_15_universal2.whl
Size 1.4 MB
Tags CPython 3.11 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
d9e98da314977f1410b41b740f4a7c4b2b4b42f6bcb0a6a72789dd8a0f9ada50
BLAKE2b-256 checksum
How to use checksums
a1d794ac6d897660cb4b2a1bc4a737db4b549aded7750d0f41e2b6843801bf3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp310-cp310-win_amd64.whl

Download URL libstb-0.5.0-cp310-cp310-win_amd64.whl
Size 3.4 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
e8b53ce946398995a4a792c1598f035a20efc00a18f9c0d1c4892a0fa37e728e
BLAKE2b-256 checksum
How to use checksums
6833eae66324aec91adc4113dfeac42cf90362f02054189df94b7828e7820a70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp310-cp310-win32.whl

Download URL libstb-0.5.0-cp310-cp310-win32.whl
Size 3.4 MB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
7295dd51dbbe8d7c4ca91c5f845cd572504eeab3ee0cdb109dff8af671d03fa7
BLAKE2b-256 checksum
How to use checksums
c7dc27ce3638573082a1048d1c627cc2ccb2ce194f0f094e3de53d1d5d84aa10
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL libstb-0.5.0-cp310-cp310-musllinux_1_2_x86_64.whl
Size 2.6 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
5f1e37e549159ad3327aaef1db18f38b274a790440116772436e525ead267c15
BLAKE2b-256 checksum
How to use checksums
07e18e50afe495d68c9a3279628e2b51ba3a4b7a6ec464c070925005e2a3fba7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL libstb-0.5.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 2.2 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6e2aee9433b700af460efb740779459af69eb57eacac1434ab439f144cae3ade
BLAKE2b-256 checksum
How to use checksums
bbe88a6147a3d592d583e72f2dacafb6420e5abde107b58ee609bfafd869bb18
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp310-cp310-macosx_10_15_universal2.whl

Download URL libstb-0.5.0-cp310-cp310-macosx_10_15_universal2.whl
Size 1.4 MB
Tags CPython 3.10 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
8f9301b9b5ddc7388921860d0299e5740eb2e79021f58843e8e2032d2bb1a197
BLAKE2b-256 checksum
How to use checksums
206ebbd579e78ae20e756eb28d72dcb955c2e3dec8e517875906d120792a5820
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp39-cp39-win_amd64.whl

Download URL libstb-0.5.0-cp39-cp39-win_amd64.whl
Size 3.4 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
a891fdd8510d9d8dbdb9c33e47f2f185f15c7d11e8b8e61d058592fc3edf9d49
BLAKE2b-256 checksum
How to use checksums
d72243a765c90856f04eeb995448a459ede6225e110f73b8463c68bbb8704527
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp39-cp39-win32.whl

Download URL libstb-0.5.0-cp39-cp39-win32.whl
Size 3.4 MB
Tags CPython 3.9 Windows x86-32
SHA-256 checksum
How to use checksums
afdcd097f726f32175966defcc455f0ffcbd03554007925f120bdbf8c6cd9799
BLAKE2b-256 checksum
How to use checksums
c27d87c17054d0381dbf50dc24c401a35dec0d2885623d6bb4492382b9bbdffe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp39-cp39-musllinux_1_2_x86_64.whl

Download URL libstb-0.5.0-cp39-cp39-musllinux_1_2_x86_64.whl
Size 2.6 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
f0e9e8ce634872b3678469d6be9577c31d0d3e1ef48e45278e31aba7aa3c8dc4
BLAKE2b-256 checksum
How to use checksums
3d3ddbfcb26ffde98eb0409f427a26b423750104d7cc3a66c2dbd346a8deba2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL libstb-0.5.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 2.2 MB
Tags CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6fbb90eb3af4b182b68451386331756f2c2dc45d111fa9c9c873214b4ddb5884
BLAKE2b-256 checksum
How to use checksums
f0707010df7d158487352e417a00296289fbdfc18b6764a3e74f672908dbaff1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / libstb-0.5.0-cp39-cp39-macosx_10_15_universal2.whl

Download URL libstb-0.5.0-cp39-cp39-macosx_10_15_universal2.whl
Size 1.4 MB
Tags CPython 3.9 macOS 10.15+ universal2 (ARM64, x86-64)
SHA-256 checksum
How to use checksums
30b56c3615f1dfd2d476d88aa955ae3a489526ff29e4db7c906834d816b217fc
BLAKE2b-256 checksum
How to use checksums
97c9c9374719bf2bf0bd99e72e73ba2c4553216ccf40b8f3ac68e4d1ad34d87f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for libstb 0.5.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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