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.array /
img.numpy() / libstb.load(). 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
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.load("photo.png") # shortcut: Image.open(...).array
libstb.info("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_*.
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.array / 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.
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.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| libstb-0.4.0.tar.gz | 358.5 kB | Without provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| libstb-0.4.0-cp312-cp312-win_amd64.whl | CPython 3.12 | CPython 3.12 | Windows x86-64 | Details |
| libstb-0.4.0-cp312-cp312-win32.whl | CPython 3.12 | CPython 3.12 | Windows x86-32 | Details |
| libstb-0.4.0-cp312-cp312-musllinux_1_2_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux musl 1.2+ x86-64 | Details |
| libstb-0.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| libstb-0.4.0-cp312-cp312-macosx_10_15_universal2.whl | CPython 3.12 | CPython 3.12 | macOS 10.15+ universal2 (ARM64, x86-64) | Details |
| libstb-0.4.0-cp311-cp311-win_amd64.whl | CPython 3.11 | CPython 3.11 | Windows x86-64 | Details |
| libstb-0.4.0-cp311-cp311-win32.whl | CPython 3.11 | CPython 3.11 | Windows x86-32 | Details |
| libstb-0.4.0-cp311-cp311-musllinux_1_2_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux musl 1.2+ x86-64 | Details |
| libstb-0.4.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.4.0-cp311-cp311-macosx_10_15_universal2.whl | CPython 3.11 | CPython 3.11 | macOS 10.15+ universal2 (ARM64, x86-64) | Details |
| libstb-0.4.0-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| libstb-0.4.0-cp310-cp310-win32.whl | CPython 3.10 | CPython 3.10 | Windows x86-32 | Details |
| libstb-0.4.0-cp310-cp310-musllinux_1_2_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux musl 1.2+ x86-64 | Details |
| libstb-0.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| libstb-0.4.0-cp310-cp310-macosx_10_15_universal2.whl | CPython 3.10 | CPython 3.10 | macOS 10.15+ universal2 (ARM64, x86-64) | Details |
| libstb-0.4.0-cp39-cp39-win_amd64.whl | CPython 3.9 | CPython 3.9 | Windows x86-64 | Details |
| libstb-0.4.0-cp39-cp39-win32.whl | CPython 3.9 | CPython 3.9 | Windows x86-32 | Details |
| libstb-0.4.0-cp39-cp39-musllinux_1_2_x86_64.whl | CPython 3.9 | CPython 3.9 | Linux musl 1.2+ x86-64 | Details |
| libstb-0.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.9 | CPython 3.9 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| libstb-0.4.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.1 MB
Release files / libstb-0.4.0.tar.gz
| Download URL | libstb-0.4.0.tar.gz |
|---|---|
| Size | 358.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
831cc14e81f74d40e7df0b4b3ea7c2914b11476c6ca809aba068305b6918b9fe
|
|
BLAKE2b-256 checksum How to use checksums |
7102f962cb035d784396f30e9487544b1fdd6a1a726690c90725e3cc76894db8
|
| 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.4.0-cp312-cp312-win_amd64.whl
| Download URL | libstb-0.4.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9c049c9bd826400f8a298efee73bd02cab827f2c7eccc137de48aac6a981479e
|
|
BLAKE2b-256 checksum How to use checksums |
35a24ca4142a37dfc95cb5f18b7872e927e90bf80c1cfa0aaead656f8a6aa34e
|
| 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.4.0-cp312-cp312-win32.whl
| Download URL | libstb-0.4.0-cp312-cp312-win32.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.12 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
8a46f0c3bee7fd3017ba9f82c6761934eeed79b6978edc733aed06e15c17dfca
|
|
BLAKE2b-256 checksum How to use checksums |
50b0a91c4a6276e9ef597b5d257ef46feba3f7af1e611c3e59f93b39bdf3b9ed
|
| 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.4.0-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | libstb-0.4.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 |
a7a898b98ac3dd6ee08f003e60a4193d447bb91dd7cdd8a1336a80e99c3ca7f4
|
|
BLAKE2b-256 checksum How to use checksums |
fe3f2e86f5fe6ad59adf8faa44293f319fbce95584726b31983edadcce13b10a
|
| 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.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | libstb-0.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f27c1273764d526e68ae75a2e6e8f49dac81f378dcee02e284cef12c02f4a558
|
|
BLAKE2b-256 checksum How to use checksums |
a00163b4480ac4405e394c2826459924825393389cb1ea1137473f11a30ee32c
|
| 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.4.0-cp312-cp312-macosx_10_15_universal2.whl
| Download URL | libstb-0.4.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 |
8ae06f07aadaf258c071f5ece8d9b48214bfde40628d6b686b679889f692f791
|
|
BLAKE2b-256 checksum How to use checksums |
4a600c854f56ed636b18c2bb505bc616137185e1dc690028b3db5eea345559d3
|
| 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.4.0-cp311-cp311-win_amd64.whl
| Download URL | libstb-0.4.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
72a5c27e2c21e9cdc8f655f97a3a26352971ab849b801a6b0e40ba8277e3e728
|
|
BLAKE2b-256 checksum How to use checksums |
00e381f8a310b4bee541ef9140350cb0ff3de16264a9ddab640bf449aa59d09f
|
| 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.4.0-cp311-cp311-win32.whl
| Download URL | libstb-0.4.0-cp311-cp311-win32.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.11 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
da2afd2c1482e7e40b7c3473eea8cdb903beae2f301219708825b645d832f4e1
|
|
BLAKE2b-256 checksum How to use checksums |
8f39ab76ebfe68c587491a080fee7b5337ca5e546fc6afb89b210af86a72a124
|
| 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.4.0-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | libstb-0.4.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 |
eefe0cc2ce97ff8b8a4c0d3e5fb03583d4e778d5f647247783d913cb8b054eb3
|
|
BLAKE2b-256 checksum How to use checksums |
dae21be7bb9826135e353b0e027842e87301ec1675350c15b15a1cad74dff1dd
|
| 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.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | libstb-0.4.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 |
16f27156cc02e72cc183e122c2aa8e4444d6954bf15177b1a3fbfc076b171f41
|
|
BLAKE2b-256 checksum How to use checksums |
993b9b33a336c70cf5892a1ad5322b0e537ace2656546bce2049c83e5ea36e5b
|
| 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.4.0-cp311-cp311-macosx_10_15_universal2.whl
| Download URL | libstb-0.4.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 |
441e122667c662442667f9bd6f12de3657eef991229501b8b43cc6a539a57ce9
|
|
BLAKE2b-256 checksum How to use checksums |
f3e833b80f8230a521a3b3e3d87af05b7058c3343d952402b6abcc943e6f0c91
|
| 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.4.0-cp310-cp310-win_amd64.whl
| Download URL | libstb-0.4.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e389bfaa71a46f71cf7aa7a0469bfffe9664a96a410cc4f2eed6f155ba629a57
|
|
BLAKE2b-256 checksum How to use checksums |
5604f31e1483b7cd75756818c89df988b00d501d7ccec33dc4f4e43949d3ff03
|
| 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.4.0-cp310-cp310-win32.whl
| Download URL | libstb-0.4.0-cp310-cp310-win32.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.10 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
7d78de5213b919c876bba363468babac007ddf205d0b6e5f7899d89a27db47e3
|
|
BLAKE2b-256 checksum How to use checksums |
9d5d68f57ff5252cbd5017966fca79e1dbccc8a29b3897e6734c92d5e24a9c94
|
| 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.4.0-cp310-cp310-musllinux_1_2_x86_64.whl
| Download URL | libstb-0.4.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 |
10ce63d24e6fa3db2eb466f71c29981af87a518ae44a971516c77b519bd36071
|
|
BLAKE2b-256 checksum How to use checksums |
0808d43042c620bc00746298ddbc6270e98f31f201ba8bfc64a4bcb654f9c413
|
| 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.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | libstb-0.4.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 |
83fc7d0d445c1e575c32a0ae19f88540801445ff3973d32b1596c984adec03c7
|
|
BLAKE2b-256 checksum How to use checksums |
ccfc35cc5f433c833cf03cbf1cceaa8632dc36e84f237e2cfd653375304559e2
|
| 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.4.0-cp310-cp310-macosx_10_15_universal2.whl
| Download URL | libstb-0.4.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 |
cb3478689a24f9033c32f81a4c46d648993d7459f34f80f69f583dbcdb60c02d
|
|
BLAKE2b-256 checksum How to use checksums |
00df038f86bfdcf402329f2c9ed9e7875a28dec39919a358f1a2874719d458ad
|
| 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.4.0-cp39-cp39-win_amd64.whl
| Download URL | libstb-0.4.0-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
61e3455c72fa8f1b2468dea8a3e30237f71801c71307e75e7ea7317b0cba4c96
|
|
BLAKE2b-256 checksum How to use checksums |
a51f43f5510e2fbbd22b0b869c35b095f57a311506c4e3d532724f93aa92c646
|
| 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.4.0-cp39-cp39-win32.whl
| Download URL | libstb-0.4.0-cp39-cp39-win32.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.9 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
64143815aaa74ebf6e87ee22679f305ad912b3782594a6cb8731cc97d82ac915
|
|
BLAKE2b-256 checksum How to use checksums |
26d818556b0ad5904b536eb5d887571fe48bd07fc597de5b705920d0ca3c4a19
|
| 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.4.0-cp39-cp39-musllinux_1_2_x86_64.whl
| Download URL | libstb-0.4.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 |
85e31a082b57c9ef3ed0cc9c151df33b275378bb41ecf2595b0fc392c36a1f89
|
|
BLAKE2b-256 checksum How to use checksums |
a266dfacff6a0c8235ac04e3d91541b4224c662022d2249ddaa9f692c00e4e12
|
| 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.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | libstb-0.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
cd11ed7e8fc8ed62288124776ae193b54f79092f0dd34956e934630696effaef
|
|
BLAKE2b-256 checksum How to use checksums |
225cbc4c36f282e43f1a1aeb0af33c55f6afa35ac63aaade83e3ac561c74291f
|
| 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.4.0-cp39-cp39-macosx_10_15_universal2.whl
| Download URL | libstb-0.4.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 |
1d215352dead8249c1fb4a1fd0b56a2887832879523de3e39db8fc8b1a24926e
|
|
BLAKE2b-256 checksum How to use checksums |
2c357d46b60b1673ad50612d9910f172f2fe434d68bc1f1cccd95a0b7f52589c
|
| 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.4.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.