Python bindings for JPEG XL and JPEG encoding/decoding, powered by libjxl and libjpeg-turbo. Both libraries are statically linked — no system dependencies required.
Features:
- JPEG XL + JPEG: Full encode/decode/file I/O for both formats in one package.
- Unified Polymorphic I/O & Sniffing:
imread,imwrite, andprobe_imageauto-detect formats (JXL container, JXL codestream, or JPEG). Seamlessly handles file paths, raw bytes, and non-seekable streams (PrefixedStream). - Pillow (PIL.Image) Deep Bridge & Plugin:
to_pil()andfrom_pil()zero-copy conversions with full ICC/EXIF metadata preservation. Built-in Pillow ImageFile plugin with automaticentry_pointsregistration (Image.open("pic.jxl")). - PyTorch Tensor Zero-Copy & DataLoader Acceleration:
to_tensor()andfrom_tensor()preserving contiguous HWC memory layout;decode_into_tensor()enables zero-allocation in-place decoding into Pinned Memory or cross-process shared memory tensors. - High-Throughput Batch Pipeline:
read_batch()andtranscode_batch()multi-threaded pipelines releasing the Python GIL for near-linear CPU core scaling. - Adaptive Quality Control: Supports both Butteraugli distance (
<=15.0, 0=lossless) and standard percentage quality (>15.0, e.g., 90, 95). - High Bit Depth & HDR: Full support for 8-bit (
uint8), 16-bit (uint16), and 32-bit floating point (float32) pixels with HDR peak brightness (intensity_target). - Color Profiles & Metadata: Preserves and embeds ICC color profiles, EXIF, and XMP metadata blocks.
- Fast Metadata Probing: Sub-millisecond inspection (
probe,probe_file,probe_image) with zero pixel buffer allocation. - Zero-Allocation In-Place Decoding: Decode directly into preallocated NumPy arrays (
decode_into,read_into), eliminating buffer copying overhead. - Lossless Transcoding: Reversibly transcode JPEGs into 20% smaller JXLs, and losslessly reconstruct the exact original JPEG bit-for-bit.
- PEP 561 Compliant: Bundled
py.typedmarker and comprehensive.pyitype stubs. - Async API: First-class
async/awaitsupport viaasyncio.to_thread.
Installation
# Core package (minimal dependencies: only numpy)
pip install pyjpegxl
# With Pillow plugin support
pip install "pyjpegxl[pillow]"
# With PyTorch bridge support
pip install "pyjpegxl[torch]"
# Full ecosystem support
pip install "pyjpegxl[all]"
(Note: Pre-built wheels are currently only available for select platforms. If a wheel is not available, pip will try to build it from source. You will need a Rust toolchain installed.)
Build from source
Requires Rust toolchain and uv:
git clone https://github.com/twn39/pyjpegxl && cd pyjpegxl
# Install dependencies and build extension in-place
uv sync
Quick Start
Unified Polymorphic I/O (imread / imwrite / probe_image)
Automatically detects JPEG or JPEG XL (container or bare codestream) from paths, raw bytes, or streams:
import pyjpegxl
# Auto-detects format and decodes to NumPy array
meta, arr = pyjpegxl.imread("photo.jxl") # or photo.jpg, BytesIO, etc.
print(f"{meta.width}x{meta.height}, shape={arr.shape}")
# Auto-infers format from extension and writes directly
pyjpegxl.imwrite("compressed.jxl", arr, quality=1.0) # Butteraugli quality
pyjpegxl.imwrite("web.jpg", arr, quality=90) # Standard JPEG quality
# Fast sub-millisecond format inspection
info = pyjpegxl.probe_image("unknown_file")
Pillow (PIL.Image) Integration & Plugin
Zero-copy bridge with full color profile (ICC) and EXIF preservation:
from PIL import Image
import pyjpegxl
# 1. Native Pillow Plugin (works automatically via entry points)
# Directly open and save JXL images with standard Pillow!
img = Image.open("photo.jxl")
img.save("output.jxl", "JXL", quality=1.0)
# 2. Direct zero-copy bridge
meta, arr = pyjpegxl.imread("photo.jxl")
pil_img = pyjpegxl.to_pil(arr, metadata=meta) # Attaches ICC & EXIF
# Extract C-contiguous NumPy array and metadata dict from PIL
arr, meta_dict = pyjpegxl.from_pil(pil_img)
PyTorch Tensor & DataLoader Optimization
True zero-copy tensor wrapping and zero-IPC in-place decoding:
import pyjpegxl
import torch
# 1. Zero-copy wrapping (default HWC layout avoids hidden memcpy/permute overhead)
meta, arr = pyjpegxl.imread("sample.jxl")
tensor = pyjpegxl.to_tensor(arr) # Contiguous HWC Tensor sharing memory
# Optional: permute to (C, H, W) or normalize to [0.0, 1.0]
tensor_chw = pyjpegxl.to_tensor(arr, permute_chw=True, normalize=True)
# 2. High-performance DataLoader: direct decode into Pinned / Shared Memory
# Eliminates buffer allocation and multi-process IPC serialization overhead
pinned_tensor = torch.empty((1080, 1920, 3), dtype=torch.uint8, pin_memory=True)
pyjpegxl.decode_into_tensor(jxl_bytes, pinned_tensor)
High-Throughput Batch Processing
Releases the Python GIL to achieve near-linear multi-core CPU scaling:
import pyjpegxl
# Parallel decode a batch of images across CPU cores
files = ["img1.jxl", "img2.jpg", "img3.jxl"]
results = pyjpegxl.read_batch(files, max_workers=8)
# Parallel lossless dataset transcoding (e.g. JPEG to 20% smaller JXL)
transcoded = pyjpegxl.transcode_batch(["a.jpg", "b.jpg"], output_dir="jxl_dataset", target_format="jxl")
Basic Usage (Bytes API)
import pyjpegxl
# Decode
with open("image.jxl", "rb") as f:
meta, pixels = pyjpegxl.decode(f.read())
print(f"{meta.width}x{meta.height}, channels={meta.num_color_channels}, bits={meta.bits_per_sample}")
# Encode
jxl_data = pyjpegxl.encode(pixels, width=meta.width, height=meta.height)
# Custom Encode (Lossless, Falcon effort)
jxl_data = pyjpegxl.encode(
pixels,
width=meta.width,
height=meta.height,
lossless=True,
speed=pyjpegxl.EncoderSpeed.Falcon,
)
NumPy Zero-Copy & High Bit Depth (8-bit, 16-bit, float32)
Move raw pixel buffers to and from NumPy arrays instantly without Python-level allocations:
import pyjpegxl
import numpy as np
with open("image.jxl", "rb") as f:
# Auto-detects bit depth: returns uint8, uint16, or float32 ndarray (H, W, C)
meta, arr = pyjpegxl.decode_to_numpy(f.read())
print(arr.shape, arr.dtype) # e.g. (1080, 1920, 3), dtype('uint8')
# Encode directly from a NumPy array (supports 2D (H, W) or 3D (H, W, C))
jxl_data = pyjpegxl.encode_from_numpy(arr, quality=1.0)
# Encode 16-bit or float32 HDR arrays
hdr_arr = np.random.rand(1080, 1920, 3).astype(np.float32)
hdr_jxl = pyjpegxl.encode_from_numpy(hdr_arr, intensity_target=1000.0) # 1000 nits
Fast Lightweight Metadata Probing
Inspect dimensions, bit depth, channels, HDR brightness, and metadata in sub-millisecond time with zero pixel buffer allocation:
import pyjpegxl
# Probe bytes directly
meta = pyjpegxl.probe(jxl_bytes)
print(meta.width, meta.height, meta.bits_per_sample, meta.intensity_target)
# Probe file without reading pixel payload
meta = pyjpegxl.probe_file("large_image.jxl")
Zero-Allocation In-Place Decoding
Write decoded pixels directly into a caller-preallocated writable NumPy array:
import pyjpegxl
import numpy as np
# Preallocate buffer (e.g. reused in video processing loops or memory maps)
out_buffer = np.empty((1080, 1920, 3), dtype=np.uint8)
# Decodes directly into out_buffer with zero intermediate copying
meta = pyjpegxl.read_into("image.jxl", out_buffer)
File I/O API
Read and write JXL files directly:
import pyjpegxl
# Read a JXL file to a NumPy array (uint8 / uint16 / float32)
meta, arr = pyjpegxl.read_to_numpy("image.jxl")
print(arr.shape, arr.dtype)
# Write a NumPy array to a JXL file
pyjpegxl.write_from_numpy("output.jxl", arr, lossless=True)
# Bytes-level file I/O
meta, pixels = pyjpegxl.read("image.jxl")
pyjpegxl.write(
"output.jxl",
pixels,
width=meta.width,
height=meta.height,
num_channels=meta.num_color_channels + int(meta.has_alpha),
)
Color Profiles (ICC) & Metadata (EXIF/XMP)
Preserve, extract, or embed color profiles and metadata:
import pyjpegxl
# Read and extract ICC profile / EXIF
meta, arr = pyjpegxl.read_to_numpy("photo.jxl")
icc_bytes = meta.icc # raw ICC profile bytes (or None)
exif_bytes = meta.exif # raw EXIF bytes (or None)
# Encode with custom ICC and EXIF metadata
pyjpegxl.write_from_numpy(
"tagged.jxl",
arr,
icc=icc_bytes,
exif=exif_bytes,
)
Concurrency & Thread Pool Control
Control the internal multi-threading runner to prevent CPU oversubscription in worker pools:
import pyjpegxl
# Get current setting (0 = auto-detect logical CPUs)
print(pyjpegxl.get_num_threads())
# Set to pure single-threaded execution (bypasses runner, 0 thread overhead)
# Ideal when running inside concurrent.futures.ThreadPoolExecutor or Gunicorn
pyjpegxl.set_num_threads(1)
# Set to specific thread count
pyjpegxl.set_num_threads(4)
# Reset back to auto
pyjpegxl.set_num_threads(0)
Async API
Perfect for high-concurrency web servers like FastAPI or Starlette:
import asyncio
import pyjpegxl
async def process_image():
with open("image.jxl", "rb") as f:
data = f.read()
# Fast async metadata probing
meta = await pyjpegxl.async_probe(data)
# Non-blocking decode
meta, arr = await pyjpegxl.async_decode_to_numpy(data)
# Non-blocking encode
out_jxl = await pyjpegxl.async_encode_from_numpy(arr)
return out_jxl
asyncio.run(process_image())
JPEG Quick Start
import pyjpegxl
# Read JPEG → NumPy array
info, arr = pyjpegxl.jpeg_read_to_numpy("photo.jpg")
print(arr.shape) # (H, W, 3)
# Write NumPy array → JPEG file
pyjpegxl.jpeg_write_from_numpy("output.jpg", arr, quality=95)
# In-memory encode/decode
jpeg_data = pyjpegxl.jpeg_encode_from_numpy(arr, quality=90)
info, decoded = pyjpegxl.jpeg_decode_to_numpy(jpeg_data)
Direct JPEG ↔ JXL Lossless Transcoding
Repack JPEGs into smaller JXL files losslessly without ever decoding pixels, and revert them exactly bit-for-bit:
import pyjpegxl
with open("photo.jpg", "rb") as f:
jpeg_bytes = f.read()
# Transcode directly (lossless, usually 20% smaller)
jxl_bytes = pyjpegxl.jpeg_to_jxl(jpeg_bytes)
# Reconstruct the exact original JPEG bit-for-bit
restored_jpeg_bytes = pyjpegxl.jxl_to_jpeg(jxl_bytes)
assert jpeg_bytes == restored_jpeg_bytes
# Also available natively for File I/O
pyjpegxl.jpeg_file_to_jxl("photo.jpg", "smaller_version.jxl")
pyjpegxl.jxl_file_to_jpeg("smaller_version.jxl", "restored_photo.jpg")
Concurrency and Performance
pyjpegxl natively releases the Global Interpreter Lock (GIL) and engages ThreadsRunner from libjxl. If you use concurrent.futures.ThreadPoolExecutor or asyncio.gather(), multiple images will encode and decode in parallel without blocking the main Python thread.
Benchmarks & Competitor Comparison
Comprehensive benchmarks run on Apple Silicon (10 Cores), Python 3.12, evaluating real-world 1440×960 RGB images across pyjpegxl, pylibjxl (v0.5.0), and pillow-jxl-plugin (v1.3.8) / Pillow.
Fairness & Methodology: All libraries were tested under strictly matched CPU thread counts (10 worker threads) and identical compression effort tiers. Every benchmark performs warmup iterations to eliminate JIT/cold-cache bias and reports median (P50) latencies alongside industry-standard MP/s (Megapixels/second) throughput and Python heap allocation.
1. JPEG XL Codec Comparison (1440×960 RGB, 10 Threads)
| Benchmark Scenario | pyjpegxl (Rust) |
pylibjxl (C++) |
pillow-jxl (Python/C) |
Best Performer |
|---|---|---|---|---|
| Decode to NumPy | 42.90 ms (32.2 MP/s) | 44.76 ms (30.9 MP/s) | 46.56 ms (29.7 MP/s) | 🏆 pyjpegxl |
Zero-Allocation Decode (decode_into) |
41.93 ms (33.0 MP/s) | 44.20 ms (with out) |
Unsupported | 🏆 pyjpegxl |
| Decode Peak Python Heap | 0.00 MB | 0.00 MB | 11.88 MB | 🏆 pyjpegxl & pylibjxl |
| Lossless Encode (Fastest, Effort=1) | 2.01 ms (688 MP/s) | 1.52 ms (910 MP/s) | 3.83 ms (361 MP/s) | ⚡ Microsecond-Tier |
| Lossless Encode (High, Effort=6/7) | 289.17 ms (eff=6) | 2,112.34 ms (eff=7) | 302.64 ms (eff=7) | 🏆 pyjpegxl |
Metadata Probing (probe) |
49 μs (0.049 ms) | 16 μs (0.016 ms) | ~1,500 μs (requires open) | ⚡ Sub-0.1ms |
2. JPEG Codec Comparison (1440×960 RGB)
| Operation | pyjpegxl (TurboJPEG) |
pylibjxl (libjpeg-turbo) |
Pillow |
Best Performer |
|---|---|---|---|---|
| JPEG Decode to NumPy | 17.73 ms (78.0 MP/s) | 17.16 ms (80.5 MP/s) | 18.53 ms (74.7 MP/s) | 🤝 Parity (~17.5 ms) |
JPEG Zero-Alloc Decode (jpeg_decode_into) |
17.20 ms (80.3 MP/s) | 17.15 ms | Unsupported | 🏆 pyjpegxl & pylibjxl |
| JPEG Encode (Quality 95) | 4.38 ms (315.6 MP/s) | 6.01 ms (230.1 MP/s) | 5.27 ms (262.4 MP/s) | 🏆 pyjpegxl (20-28% faster) |
| JPEG Marker Probe (Exif & ICC) | 10 μs (0.010 ms) | ~17,000 μs (full decode) | ~1,200 μs | 🏆 pyjpegxl (Pure Rust) |
3. Concurrency & Multi-Threaded Batch Scaling (8 Images Batch)
pyjpegxl releases the GIL and provides thread-safe isolated runner instances (TLS), delivering near-linear throughput scaling when processing batches in parallel:
| Threads | Batch Time | Speedup | Aggregate Throughput |
|---|---|---|---|
| 1 Thread | 2,274 ms | 1.00× | 4.9 MP/s (14.6 Raw MB/s) |
| 2 Threads | 1,309 ms | 1.74× | 8.4 MP/s (25.3 Raw MB/s) |
| 4 Threads | 864 ms | 2.63× | 12.8 MP/s (38.4 Raw MB/s) |
Reproducing the Benchmarks
You can reproduce all benchmark metrics on your hardware at any time:
# Run all benchmark categories and format output as a clean table
uv run python -m tests.test_benchmark --category all
# Output directly as GitHub-flavored Markdown
uv run python -m tests.test_benchmark --markdown
# Run specific category (e.g. competitor comparison or concurrency)
uv run python -m tests.test_benchmark --category compare
uv run python -m tests.test_benchmark --category concurrency
API Reference
Unified Polymorphic I/O & Sniffing
imread(source, *, dtype=None, channels=None) -> tuple[Metadata | JpegInfo, np.ndarray]: Auto-detects format from path, bytes, or stream.imwrite(dest, image, *, format=None, quality=None, lossless=False, speed=EncoderSpeed.Squirrel, **kwargs) -> None: Auto-infers format or saves to JXL/JPEG.probe_image(source) -> Metadata | JpegInfo: Sub-millisecond metadata inspection for any supported format.sniff_bytes(header: bytes) -> "jpeg" | "jxl" | "unknown"sniff_stream(stream) -> tuple[format, usable_stream]: Safe peek/stream wrapping.PrefixedStream: Transparent wrapper for non-seekable binary streams.
Ecosystem Bridges: Pillow & PyTorch
to_pil(image_or_array, metadata=None, *, preserve_hdr=True) -> PIL.Image.Image: Zero-copy PIL conversion with ICC & EXIF preservation.from_pil(image) -> tuple[np.ndarray, dict]: Extracts C-contiguous NumPy array and metadata dict.to_tensor(array_or_bytes, *, permute_chw=False, channels_last=False, normalize=False, device=None) -> torch.Tensor: Zero-copy tensor wrapping (default contiguous HWC).from_tensor(tensor) -> np.ndarray: Converts GPU/CPU PyTorch Tensor back to NumPy HWC array.decode_into_tensor(data: bytes, tensor, *, is_jpeg=None) -> Metadata | JpegInfo: Zero-allocation decode directly into Pinned or Shared Memory Tensor.
High-Throughput Batch Operations
read_batch(sources, *, max_workers=None, dtype=None, channels=None) -> list[tuple[Metadata | JpegInfo, np.ndarray]]: Multi-core parallel batch decode releasing Python GIL.transcode_batch(sources, output_dir, *, target_format="jxl", max_workers=None) -> list[str]: Multi-core parallel lossless dataset transcoding.
Metadata Probing (Fast, Zero Pixel Allocation)
probe(data: bytes) -> Metadataprobe_file(path: str | os.PathLike) -> Metadataasync_probe(data: bytes) -> Metadataasync_probe_file(path: str | os.PathLike) -> Metadatajpeg_probe(data: bytes) -> JpegInfojpeg_probe_file(path: str | os.PathLike) -> JpegInfoasync_jpeg_probe(data: bytes) -> JpegInfoasync_jpeg_probe_file(path: str | os.PathLike) -> JpegInfo
In-Place Zero-Allocation Decoding
decode_into(data: bytes, out: np.ndarray) -> Metadataread_into(path: str | os.PathLike, out: np.ndarray) -> Metadataasync_decode_into(data: bytes, out: np.ndarray) -> Metadataasync_read_into(path: str | os.PathLike, out: np.ndarray) -> Metadatajpeg_decode_into(data: bytes, out: np.ndarray) -> JpegInfojpeg_read_into(path: str | os.PathLike, out: np.ndarray) -> JpegInfoasync_jpeg_decode_into(data: bytes, out: np.ndarray) -> JpegInfoasync_jpeg_read_into(path: str | os.PathLike, out: np.ndarray) -> JpegInfo
Concurrency & Thread Control
set_num_threads(num_threads: int) -> None:0for auto-detect,1for single-thread bypass,>1for explicit worker count.get_num_threads() -> int
JXL Bytes API
decode(data: bytes, *, dtype: str | None = None) -> tuple[Metadata, bytes]encode(data, width, height, *, lossless=False, quality=1.0, speed=EncoderSpeed.Squirrel, num_channels=4, exif=None, xmp=None, icc=None, dtype=None, intensity_target=None) -> bytes
JXL NumPy API
decode_to_numpy(data: bytes, *, dtype: str | None = None) -> tuple[Metadata, np.ndarray]encode_from_numpy(array: np.ndarray, *, lossless=False, quality=1.0, speed=EncoderSpeed.Squirrel, exif=None, xmp=None, icc=None, intensity_target=None) -> bytes
JXL File I/O API
read(path, *, dtype: str | None = None) -> tuple[Metadata, bytes]read_to_numpy(path, *, dtype: str | None = None) -> tuple[Metadata, np.ndarray]write(path, data, width, height, **kwargs) -> intwrite_from_numpy(path, array, **kwargs) -> int
JPEG Bytes API
jpeg_decode(data: bytes, *, channels: int | None = None) -> tuple[JpegInfo, bytes]jpeg_encode(data, width, height, *, quality=95, num_channels=3) -> bytes
JPEG NumPy API
jpeg_decode_to_numpy(data: bytes, *, channels: int | None = None) -> tuple[JpegInfo, np.ndarray]jpeg_encode_from_numpy(array: np.ndarray, *, quality=95) -> bytes
JPEG File I/O API
jpeg_read(path, *, channels: int | None = None) -> tuple[JpegInfo, bytes]jpeg_read_to_numpy(path, *, channels: int | None = None) -> tuple[JpegInfo, np.ndarray]jpeg_write(path, data, width, height, **kwargs) -> intjpeg_write_from_numpy(path, array, **kwargs) -> int
Transcoding API
jpeg_to_jxl(data: bytes) -> bytesjxl_to_jpeg(data: bytes) -> bytesjpeg_file_to_jxl(jpeg_path: str, jxl_path: str) -> intjxl_file_to_jpeg(jxl_path: str, jpeg_path: str) -> int
Async API
All sync functions have async variants prefixed with async_ (JXL) or async_jpeg_ (JPEG).
Types
Metadata: Image metadata with properties:width: int,height: intnum_color_channels: int,has_alpha: boolbits_per_sample: int(e.g. 8, 16, 32)intensity_target: float(HDR peak nits)min_nits: floaticc: bytes | None,exif: bytes | None,xmp: bytes | None
JpegInfo: JPEG image dimensions and metadata:width: int,height: int,num_channels: inticc: bytes | None,exif: bytes | None
EncoderSpeed: JXL compression effort (Lightning→Tortoise).
License
BSD 3-Clause
Metadata
Release files for pyjpegxl 0.3.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 | |
|---|---|---|---|
| pyjpegxl-0.3.0.tar.gz | 5.5 MB | Details |
Built distributions (wheels)
Total release size: 42.8 MB
Release files / pyjpegxl-0.3.0.tar.gz
| Download URL | pyjpegxl-0.3.0.tar.gz |
|---|---|
| Size | 5.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cdf66f3caee7359398a6d6d438315c2c73bb2a2c57ce18d148c5cffc44f91f5a
|
|
BLAKE2b-256 checksum How to use checksums |
633f037d8c9dfc01b66e7316e4a3745939f05527edcdb1bd842285fdb866ede1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp314-cp314-win_amd64.whl
| Download URL | pyjpegxl-0.3.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cfe012cd1b61029de499fb09dec2cfe11a12dc51ad0a6870558e1bf07c8f25f4
|
|
BLAKE2b-256 checksum How to use checksums |
a0387a84fa236e4399b6944357620cadf474cb88f08202947bcc9ae309a2285f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pyjpegxl-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
a2284539f041c0b02af2ed8fac006f1ee1d7783841f2c3fc2fcdd7fcbdbabb04
|
|
BLAKE2b-256 checksum How to use checksums |
861a7913f500f71aaa91912d08a36f70f8406cb58301085476a36fe0e7e673a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | pyjpegxl-0.3.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2604e087faefb57fd6815fe226389b25939896901275c94eb9f4582ca5dc7325
|
|
BLAKE2b-256 checksum How to use checksums |
b286a9d03c3db1e7b849501c8840c9090c4eff143fc397509701a6efc4709b7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp313-cp313-win_amd64.whl
| Download URL | pyjpegxl-0.3.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
339a44447a6bb5d660d32b8056b004fc822fd46a4b2d4c8aa0bcdf2e3ea79482
|
|
BLAKE2b-256 checksum How to use checksums |
e0e989df3fb627fa1d0984b30856c646a5e9c7b4608a6baef2b353150a644d53
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pyjpegxl-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
5a5cf4c7c06243373beda6390c31a2cf531a6c06f02159da0f7da745b561c367
|
|
BLAKE2b-256 checksum How to use checksums |
42d9716cda4e2b20703abea5464d1bd56ec3430fc9ade1b3e2d4d994c7f19044
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | pyjpegxl-0.3.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
869d06f898ea1157c34eba8513fa7a8dc97f0e5c9be1fa3c2f743d8bd4e0446a
|
|
BLAKE2b-256 checksum How to use checksums |
a1462e01af6608b3e317ad50b2e098e22a9fbf78bb15eb8accf7eff5005323bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp312-cp312-win_amd64.whl
| Download URL | pyjpegxl-0.3.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5c986f44e91e8ea4f6a321c347c47333f8f83958fad3a3da89ab51f803e8fbce
|
|
BLAKE2b-256 checksum How to use checksums |
66fbe1fda7082e88507d0f1aa2ea71298ee0272f597927a79dd74aca3714bf8e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pyjpegxl-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
44af8b62ca911b5763ae23ab1ddc535453692aec929c9e23e50601c07afbac43
|
|
BLAKE2b-256 checksum How to use checksums |
267235e32d5d2bf919c8ba27b658a89fa9965e41c7a6c539154a34d0de023ef7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | pyjpegxl-0.3.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
93f958b82179dd48a17f8ae80d628a7d6b1812146268ff30058d1a8e293947d8
|
|
BLAKE2b-256 checksum How to use checksums |
d3e09b8cc0055190744ffcf5c9dc07c6631bcb356581cc0e2305da3ee9fc79ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp311-cp311-win_amd64.whl
| Download URL | pyjpegxl-0.3.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7423ef7ff33fab93b3139743f5c65998113c9e0a5c79c5a56d53fbc4717b289c
|
|
BLAKE2b-256 checksum How to use checksums |
ae1eee88f7e65bd3d8c0e93a1fee7f67a0f58acd758aafd6cebf97bd1b0eb58f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pyjpegxl-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.7 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
7ee2aa6df41e52b9b7ef684c90dde556a852d378d89ba7a2c4518715b335e040
|
|
BLAKE2b-256 checksum How to use checksums |
68ff532576e3ce54fe506b09aa66a1d6616802f73e660da4ca6f15bcdf67f786
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / pyjpegxl-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | pyjpegxl-0.3.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
cf5bcb8f1e12e63fb1a567033bfe7be8726fbcb6996980ebcc0a4f01d1a5eed4
|
|
BLAKE2b-256 checksum How to use checksums |
0b7456f0191caf9be0647c3b976a4466b0095db8f07a1cc73aada4e634ad0dda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency log