Skip to main content

Fast Python bindings for libjxl and libjpeg-turbo with GIL-free encoding/decoding and native async support.

Project description

pylibjxl

Fast Python bindings for JPEG XL (libjxl) and JPEG (libjpeg-turbo)

CI PyPI version Python versions License: BSD 3-Clause


pylibjxl provides efficient, high-performance Python bindings for libjxl and libjpeg-turbo. Built with nanobind, it features GIL-free encoding/decoding and native async support for maximum throughput.

✨ Key Features

  • 🚀 High Performance — C++ core releases the GIL during heavy computation.
  • 📦 Metadata Excellence — Full support for EXIF, XMP, and JUMBF metadata.
  • Async-First — Native asyncio integration for non-blocking I/O.
  • 🖼️ NumPy Native — Directly encode from and decode to ndarray (RGB/RGBA).
  • 🔄 Lossless JPEG Transcoding — Bit-perfect JPEG ↔ JXL roundtrips.
  • 🎯 Thread-Safe — Persistent thread pools with resource control via threads parameter.

🛠️ Installation

Install from PyPI

# Recommended: Using uv
uv pip install pylibjxl

# Or via standard pip
pip install pylibjxl

Install from Source

uv pip install git+https://github.com/twn39/pylibjxl.git --recursive

Quick Start

🖼️ Basic In-Memory Operations

import numpy as np
import pylibjxl

# Create a test image (Height, Width, Channels)
image = np.random.randint(0, 256, (512, 512, 3), dtype=np.uint8)

# Encode to JXL bytes
data = pylibjxl.encode(image, effort=7, distance=1.0)

# Decode back to NumPy array
decoded = pylibjxl.decode(data)

💾 File I/O & Metadata

pylibjxl handles EXIF and XMP metadata seamlessly.

# Write an image with EXIF metadata
exif_data = b"Raw EXIF bytes..."
pylibjxl.write("output.jxl", image, effort=9, exif=exif_data)

# Read image and its metadata
img, meta = pylibjxl.read("output.jxl", metadata=True)
print(f"Loaded image shape: {img.shape}")
print(f"EXIF size: {len(meta.get('exif', b''))} bytes")

🔄 Lossless JPEG Transcoding

Reduce JPEG file size by ~20% without losing a single bit of information. The resulting .jxl can be restored to the exact original .jpg.

# Convert JPEG to JXL losslessly
pylibjxl.convert_jpeg_to_jxl("input.jpg", "input.jxl")

# Restore the bit-identical original JPEG
pylibjxl.convert_jxl_to_jpeg("input.jxl", "restored.jpg")

⚡ Async Support

High-performance non-blocking I/O for web servers and data pipelines.

import asyncio

async def main():
    # Async encoding
    data = await pylibjxl.encode_async(image, distance=0.0)
    
    # Async file reading
    img = await pylibjxl.read_async("input.jxl")

asyncio.run(main())

🏗️ Batch Processing (Context Manager)

Using the JXL context manager maintains a persistent thread pool, providing a significant speedup for batch operations.

# High-performance batch conversion
with pylibjxl.JXL(effort=7) as jxl:
    for i in range(100):
        img = jxl.read(f"input_{i}.jxl")
        # Process and save as high-quality JPEG
        jxl.write_jpeg(f"output_{i}.jpg", img, quality=95)

🚀 FastAPI / Asyncio Integration

pylibjxl is designed for high-concurrency web servers. By using a shared AsyncJXL instance, you can limit the total number of native worker threads, preventing resource exhaustion under load.

from fastapi import FastAPI, UploadFile
import pylibjxl
import numpy as np

app = FastAPI()

# Create a single shared runner with a fixed thread pool (e.g., 8 threads).
# This prevents thread explosion even if 1000 requests arrive simultaneously.
runner = pylibjxl.AsyncJXL(threads=8)

@app.on_event("startup")
async def startup():
    runner.enter()

@app.on_event("shutdown")
async def shutdown():
    runner.close()

@app.post("/encode")
async def encode_image(file: UploadFile):
    # Read bytes (non-blocking)
    content = await file.read()
    
    # Offload decoding to the shared C++ runner (releases GIL)
    # Concurrent requests will be serialized at the runner level if needed,
    # preventing CPU oversubscription while keeping the event loop responsive.
    image = await runner.decode_jpeg_async(content)
    
    # Process image...
    
    # Encode back to JXL
    return await runner.encode_async(image, effort=5)

📈 Performance & Stability

pylibjxl is engineered for high-performance production environments where throughput and responsiveness are critical.

🚀 Key Benchmarks

Tested on Apple M2 Pro (1440x960 RGB Image)

JXL Encoding (pylibjxl vs. pillow-jxl-plugin)

Both libraries are tested using the same effort parameter (1-11) to ensure a fair comparison. Higher effort results in better compression but slower encoding.

Effort Level pylibjxl pillow-jxl-plugin Scaling
Effort 1 (Fastest) ~14.1 ms ~13.2 ms Low latency
Effort 4 (Balanced) ~25.4 ms ~21.8 ms Optimal mix
Effort 7 (Default) ~100.8 ms ~94.1 ms Best compression

Decoding Performance

Format pylibjxl pillow-jxl-plugin / PIL Improvement
JXL Decode 8.8 ms 11.9 ms ~26% Faster
JPEG Decode 17.0 ms 18.2 ms ~7% Faster

🛠️ Architecture Highlights

  • GIL-Free Execution: The C++ core releases Python's Global Interpreter Lock (GIL) during all heavy encoding and decoding tasks. This allows for true multi-core parallelism when using Python's threading or concurrent.futures.
  • Native Async Support: Unlike standard Pillow-based plugins, pylibjxl provides native asyncio bindings. This prevents event-loop blocking in high-concurrency web servers (e.g., FastAPI, Tornado).
  • Zero Memory Leaks: Extensive stability testing (500+ consecutive rounds) shows that memory usage stabilizes after initial warm-up, with no ongoing growth.
  • Optimized Memory Management:
    • Adaptive Buffering: Employs an intelligent buffer growth strategy during encoding to minimize reallocations while handling high-entropy images.
    • Runner Reuse: The JXL context manager maintains a persistent thread pool, eliminating the overhead of creating/destroying threads for every call.

[!IMPORTANT] For maximum parallel throughput in multi-threaded environments, use the free functions (pylibjxl.encode, pylibjxl.decode). For maximum serial speed in batch processing, use the JXL context manager to reuse the thread pool.


📂 API Reference

🖼️ JXL In-Memory Operations

encode(input, effort=7, distance=1.0, lossless=False, decoding_speed=0, *, exif=None, xmp=None, jumbf=None) -> bytes

async encode_async(...) -> bytes

Encodes a NumPy array into JPEG XL format.

Parameter Type Default Description
input ndarray required uint8 array of shape (H, W, 3) or (H, W, 4)
effort int 7 Speed/size tradeoff [1-11]. 1=fastest, 11=best compression.
distance float 1.0 Perceptual quality [0.0-25.0]. 0.0=lossless, 1.0=visually lossless.
lossless bool False If True, enables mathematical lossless mode.
decoding_speed int 0 Decoding speed tier [0-4]. 0=default, 4=fastest decoding.
exif bytes None Optional raw EXIF metadata.
xmp bytes None Optional raw XMP (XML) metadata.
jumbf bytes None Optional raw JUMBF metadata.
# Synchronous encoding
data = pylibjxl.encode(image, effort=9, lossless=True)

# Asynchronous encoding
data = await pylibjxl.encode_async(image, distance=0.5)

decode(data, *, metadata=False) -> ndarray | tuple[ndarray, dict]

async decode_async(...) -> ndarray | tuple[ndarray, dict]

Decodes JPEG XL bytes back into a NumPy array.

Parameter Type Default Description
data bytes required JPEG XL encoded bytes.
metadata bool False If True, returns a tuple including a metadata dictionary.
# Basic decode
img = pylibjxl.decode(jxl_bytes)

# Decode with metadata
img, meta = await pylibjxl.decode_async(jxl_bytes, metadata=True)
print(f"EXIF size: {len(meta.get('exif', b''))} bytes")

💾 JXL File I/O

read(path, *, metadata=False) / async read_async(...)

Reads a .jxl file from disk and decodes it.

Parameter Type Default Description
path `str Path` required
metadata bool False Whether to return metadata alongside the image.
img = pylibjxl.read("input.jxl")
img, meta = await pylibjxl.read_async("input.jxl", metadata=True)

write(path, image, ...) / async write_async(...)

Encodes a NumPy array and writes it directly to a .jxl file.

Parameter Type Default Description
path `str Path` required
image ndarray required The image data to encode.
... Supports all parameters from encode().
pylibjxl.write("output.jxl", image, effort=7, distance=1.0)
await pylibjxl.write_async("output.jxl", image, lossless=True)

📷 JPEG Support (libjpeg-turbo)

encode_jpeg(input, quality=95) -> bytes / async encode_jpeg_async(...)

Encodes a NumPy array to JPEG bytes using high-speed libjpeg-turbo.

Parameter Type Default Description
input ndarray required uint8 array of shape (H, W, 3).
quality int 95 JPEG quality factor [1-100].
jpeg_bytes = pylibjxl.encode_jpeg(image, quality=90)

decode_jpeg(data) -> ndarray / async decode_jpeg_async(...)

Decodes JPEG bytes to a NumPy RGB array.

Parameter Type Default Description
data bytes required JPEG encoded bytes.
image = pylibjxl.decode_jpeg(jpeg_bytes)

read_jpeg(path) / write_jpeg(path, image, quality=95)

Stand-alone JPEG file I/O operations using libjpeg-turbo.

img = pylibjxl.read_jpeg("photo.jpg")
pylibjxl.write_jpeg("output.jpg", img, quality=85)

🔄 Lossless Transcoding (JPEG ↔ JXL)

jpeg_to_jxl(data, effort=7) -> bytes / async jpeg_to_jxl_async(...)

Transcodes raw JPEG bytes into a JPEG XL container losslessly.

Parameter Type Default Description
data bytes required Original JPEG bytes.
effort int 7 Transcoding effort [1-11].
jxl_data = pylibjxl.jpeg_to_jxl(jpeg_bytes)

jxl_to_jpeg(data) -> bytes / async jxl_to_jpeg_async(...)

Restores the original JPEG bytes from a transcoded JXL file.

Parameter Type Default Description
data bytes required Transcoded JPEG XL bytes.
original_jpeg = pylibjxl.jxl_to_jpeg(jxl_data)

convert_jpeg_to_jxl(in_path, out_path) / convert_jxl_to_jpeg(...)

File-to-file versions of the above transcoding operations.

pylibjxl.convert_jpeg_to_jxl("input.jpg", "output.jxl")
pylibjxl.convert_jxl_to_jpeg("output.jxl", "restored.jpg")

🏗️ Context Managers

JXL(effort=7, distance=1.0, lossless=False, decoding_speed=0)

AsyncJXL(...)

Sync and Async context managers that maintain a persistent thread pool.

Parameter Type Default Description
effort int 7 Default effort for operations.
distance float 1.0 Default distance for operations.
lossless bool False Default lossless mode.
decoding_speed int 0 Default decoding speed tier.
threads int 0 Number of worker threads for the shared pool (0 = auto).
with pylibjxl.JXL(effort=7) as jxl:
    # Uses persistent threads for all methods
    img = jxl.read("input.jxl")
    jxl.write("output.jxl", img, distance=0.5)

ℹ️ System Information

Function Return Type Description
version() dict Returns library version (major, minor, patch).
decoder_version() int Returns libjxl decoder version integer.
encoder_version() int Returns libjxl encoder version integer.
print(f"pylibjxl version: {pylibjxl.version()}")

📜 License

BSD 3-Clause License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylibjxl-0.3.7.tar.gz (59.2 MB view details)

Uploaded Source

Built Distributions

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

pylibjxl-0.3.7-cp314-cp314-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.14Windows x86-64

pylibjxl-0.3.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibjxl-0.3.7-cp314-cp314-macosx_14_0_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.14macOS 14.0+ x86-64

pylibjxl-0.3.7-cp314-cp314-macosx_14_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

pylibjxl-0.3.7-cp313-cp313-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.13Windows x86-64

pylibjxl-0.3.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibjxl-0.3.7-cp313-cp313-macosx_14_0_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 14.0+ x86-64

pylibjxl-0.3.7-cp313-cp313-macosx_14_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

pylibjxl-0.3.7-cp312-cp312-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.12Windows x86-64

pylibjxl-0.3.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibjxl-0.3.7-cp312-cp312-macosx_14_0_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 14.0+ x86-64

pylibjxl-0.3.7-cp312-cp312-macosx_14_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

pylibjxl-0.3.7-cp311-cp311-win_amd64.whl (2.0 MB view details)

Uploaded CPython 3.11Windows x86-64

pylibjxl-0.3.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibjxl-0.3.7-cp311-cp311-macosx_14_0_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 14.0+ x86-64

pylibjxl-0.3.7-cp311-cp311-macosx_14_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

File details

Details for the file pylibjxl-0.3.7.tar.gz.

File metadata

  • Download URL: pylibjxl-0.3.7.tar.gz
  • Upload date:
  • Size: 59.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibjxl-0.3.7.tar.gz
Algorithm Hash digest
SHA256 f9a37b3fdf503d31af1dc3fa19105ca70b7cb0f3090558e0c8498926e4f49949
MD5 d1d2f07e37a102fc996f47f839b85704
BLAKE2b-256 0413ffa2361a70aa2a6e3bbb3787501bd65c392fbc1ef3a39d397dccb16e6813

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7.tar.gz:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pylibjxl-0.3.7-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibjxl-0.3.7-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 6901f2f5e17c542d114a9aa89153d37dba55be6f52ea2205684fbded48a1a517
MD5 0a01f6864585fdf1ffc0872e9638be09
BLAKE2b-256 9b7efb6658a3497117d0a94a631eb0f6ba9fa04224d08523dbdfa8f0da1cddc0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp314-cp314-win_amd64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f98320496b62a0b5064d7787d0021cbe65ffff0f485cae3311dc573eeec4aecc
MD5 94cd459c3aa00b6908031142b7379ccb
BLAKE2b-256 722d68d11ff4221bbf74cfe7a06ce48898c1386ddad81450f4132aff8198132a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp314-cp314-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp314-cp314-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 7e65b046808b650441efd8aabdfddbe4a91634646bd1955f450e2e6b177fb3cc
MD5 1d74bc04015a882180831c690cf20390
BLAKE2b-256 f84f5a08ba17bd8f4e13d1d1f690202d703dc78d9047be9ed646465d9da833c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp314-cp314-macosx_14_0_x86_64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 b7b0301339d0ef682e7cd1d8207b7e955879c574acaf7f35332ad58f7b1dee83
MD5 5c4ea6ff60ef20d1dd8f8359650c5610
BLAKE2b-256 55d070a187a5f15ea53996c0867e659d9184bc8ba013e4f6dafbdb2ddc9945f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp314-cp314-macosx_14_0_arm64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pylibjxl-0.3.7-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibjxl-0.3.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 5bd90c129ce26499c34e0f725feced7378c4939c1be880e662de3287830327e9
MD5 9cda6b6732b6937242dd2f9b098fc673
BLAKE2b-256 d7f23eed720536bb8c8cd790839d3c5162cf682d59c1fd21b9ddc70f58bf16f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp313-cp313-win_amd64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1b685a6bc93d43173d8453a359e9801d0e4ee831c33b04f5c270d524e2d34d54
MD5 adc1cdcaf9f1435762a8633230a47f61
BLAKE2b-256 2bb5d4caa2393f32aae999cae7f1eb23fbc8c1df468209cf92e3fed36ed59fa2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp313-cp313-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp313-cp313-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 610f692821cf08ea81d95ae0bda9fbf85df12039ffa9c40a5923effc0969984a
MD5 b8cbd095637a151eef3d65efa74e3753
BLAKE2b-256 6dd2bd029563a13b36e8ab61d97d750bff49fb419c97dd2957147980f0c114e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp313-cp313-macosx_14_0_x86_64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 4e3ae72f1c3f0c4e4ce1cbd8e5327f5a6ec6070cdff7f298cd34a60adba2519f
MD5 8b8581f6a65ed38951e76f1a30c47f82
BLAKE2b-256 85dcede272e0c0436eaec597c731e94f6a0cccda69d2a614477501a7f5f77323

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp313-cp313-macosx_14_0_arm64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pylibjxl-0.3.7-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibjxl-0.3.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 53af68b20e2f14f2b989372720898eb9343f74f3798a099f51492200efed9d29
MD5 3d988988cf7c40002ffec4a14d8236ed
BLAKE2b-256 b084fdd2455c67bd3ba49c9c53a32d99e83159283e1cc78e4f86654ac5ecafcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp312-cp312-win_amd64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8ec20a525398a7d3bd0b8aa20642c472dbbf58bd56d38f7ae3c3510f3b152c48
MD5 b0484982a455a99a45c4921caa364793
BLAKE2b-256 3fd002c3f6941ef277b06a4eb9d3ab3f4caff96e955b9436e32875b8b40056e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp312-cp312-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp312-cp312-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 90fdfe6460a86bfa9f7e8c5b893acea73433300ad7df40167dc2c42e899a28f3
MD5 88b8297ac5f320e93d53e4772af7ed01
BLAKE2b-256 5b2bb8677b96761b5eacdc9d714e64dc98cd4f8506063186948f13a8639bb73d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp312-cp312-macosx_14_0_x86_64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 86f069a1b21bc1d28a1a493b25d0274cf0135ab76eac9af781d4d2b796549f05
MD5 8c06f6d7497dbec79e6e41bcaac5a352
BLAKE2b-256 1b4b102aea29339bb9fd2568376da17ed744e4138f8bbc3fed7c1d4692150173

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pylibjxl-0.3.7-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibjxl-0.3.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d608d7ffde93139efbf58c33a1a878b7b4dbcfb9fff2299998cfe557e9bf443f
MD5 e6d161cf054d5e66a854aa253b98c2a6
BLAKE2b-256 fc810fea2fd14e532c1a172193b84dfbc0c59c77da55ca45499cd0dcbde2f709

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp311-cp311-win_amd64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7d39e0a0053b7b94c9a3f391b0ef22481c3dc1bd06a39b8747c2b795a3faf6f5
MD5 1bb13f8d984c8724800d8c403a1dcde4
BLAKE2b-256 05dc367e6c761fb33125fd0a184a1d700a0dc4e0bdb43ef7e7080bf5e3b5e434

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp311-cp311-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp311-cp311-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 9230bd6446dce667f1c55f3841c388621915eb36b6fd10e8181035d92dd15bb4
MD5 fd7a5bf9dd714ef530c300a8355bce91
BLAKE2b-256 6427b24b4e41a574e04eee419f12710eb3e9cb91963df8d5078faba16e92a95f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp311-cp311-macosx_14_0_x86_64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibjxl-0.3.7-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pylibjxl-0.3.7-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 849453046f66aa58610e799a4ae11231ed92b7ba3be9fa10a8444fa9d8f1e9f9
MD5 da70cfae6be7ca92ef30a1909850d27c
BLAKE2b-256 4723e52de9b4c0e91eb048702e666558ee354dd15d8df6b8c53c64ecee2c16fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibjxl-0.3.7-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: build.yml on twn39/pylibjxl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page