Skip to main content

A performant web native pixel delivery pipeline for diverse sources, blending VNC-inspired parallel processing of pixel buffers with flexible modern encoding formats.

Project description

pixelflux

PyPI version License: MPL 2.0

A performant web native pixel delivery pipeline for diverse sources, blending VNC-inspired parallel processing of pixel buffers with flexible modern encoding formats.

This module provides a Python interface to a high-performance C++ capture library. It captures pixel data from a source (currently X11 screen regions), detects changes, and encodes modified stripes into JPEG or H.264. It supports CPU-based encoding (libx264, libjpeg-turbo) as well as hardware-accelerated H.264 encoding via NVIDIA's NVENC and VA-API for Intel/AMD GPUs. The resulting data is delivered efficiently to your Python application via a callback mechanism.

Installation

This module relies on a native C++ extension that is compiled during installation.

  1. Prerequisites (for Debian/Ubuntu): Ensure you have a C++ compiler (g++) and development files for Python, X11, Xfixes, XShm, libjpeg-turbo, and libx264. These are required for the base software encoding functionality.

    sudo apt-get update && \
    sudo apt-get install -y \
      g++ \
      libdrm-dev \
      libjpeg-turbo8-dev \
      libva-dev \
      libx11-dev \
      libx264-dev \
      libxext-dev \
      libxfixes-dev \
      libyuv-dev \
      python3-dev
    
  2. Hardware Acceleration (Optional but Recommended):

    • NVIDIA (NVENC): No extra packages are needed at compile time. If you have the NVIDIA driver installed, the library will be detected and used automatically at runtime.
    • Intel/AMD (VA-API): The libva-dev and libdrm-dev packages listed above are sufficient for compilation. Ensure you have the correct VA-API drivers for your hardware installed (e.g., intel-media-va-driver-non-free for Intel, mesa-va-drivers for AMD).
  3. Install the Package: You can install directly from PyPI or from a local source clone.

    Option A: Install from PyPI

    pip install pixelflux
    

    Option B: Install from a local source directory

    # From the root of the project repository
    pip install .
    

    Note: The current backend is designed and tested for Linux/X11 environments.

Usage

Capture Settings

The CaptureSettings class allows for detailed configuration of the capture process.

# All attributes of the CaptureSettings object are standard ctypes properties.
settings = CaptureSettings()

# --- Core Capture ---
settings.capture_width = 1920
settings.capture_height = 1080
settings.capture_x = 0
settings.capture_y = 0
settings.target_fps = 60.0
settings.capture_cursor = True

# --- Encoding Mode ---
# 0 for JPEG, 1 for H.264
settings.output_mode = 1
# Force CPU encoding and ignore hardware encoders
capture_settings.use_cpu = False

# --- Debugging ---
settings.debug_logging = False # Enable/disable the continuous FPS and settings log to the console.

# --- JPEG Settings ---
settings.jpeg_quality = 75              # Quality for changed stripes (0-100)
settings.paint_over_jpeg_quality = 90   # Quality for static "paint-over" stripes (0-100)

# --- H.264 Settings ---
settings.h264_crf = 25                   # CRF value (0-51, lower is better quality/higher bitrate)
settings.h264_paintover_crf = 18         # CRF for H.264 paintover on static content. Must be lower than h264_crf to activate.
settings.h264_paintover_burst_frames = 5 # Number of high-quality frames to send in a burst when a paintover is triggered.
settings.h264_fullcolor = False          # Use I444 (full color) instead of I420 for software encoding
settings.h264_fullframe = True           # Encode full frames (required for HW accel) instead of just changed stripes
settings.h264_streaming_mode = False     # Bypass all VNC logic and work like a normal video encoder, higher constant CPU usage for fullscreen gaming/videos

# --- Hardware Acceleration ---
# Set to >= 0 to enable VA-API on a specific /dev/dri/renderD* node.
# Set to -1 to disable VA-API and let the system try NVENC if available.
settings.vaapi_render_node_index = -1

# --- Change Detection & Optimization ---
settings.use_paint_over_quality = True  # Enable paint-over/IDR requests for static regions
settings.paint_over_trigger_frames = 15 # Frames of no motion to trigger paint-over
settings.damage_block_threshold = 10    # Consecutive changes to trigger "damaged" state
settings.damage_block_duration = 30     # Frames a stripe stays "damaged"

# --- Watermarking ---
# Must be a bytes object. The path to your PNG image.
settings.watermark_path = b"/path/to/your/watermark.png" 
# 0:None, 1:TopLeft, 2:TopRight, 3:BottomLeft, 4:BottomRight, 5:Middle, 6:Animated
settings.watermark_location_enum = 4 

Stripe Callback and Data Structure

Your callback function receives a ctypes.POINTER(StripeEncodeResult). You must access its fields via the .contents attribute.

The StripeEncodeResult struct has the following fields:

# This is an illustrative Python representation of the C++ struct.
class StripeEncodeResult(ctypes.Structure):
    _fields_ = [
        ("type", ctypes.c_int),             # 1 for JPEG, 2 for H.264
        ("stripe_y_start", ctypes.c_int),
        ("stripe_height", ctypes.c_int),
        ("size", ctypes.c_int),             # The size of the data in bytes
        ("data", ctypes.POINTER(ctypes.c_ubyte)), # Pointer to the encoded data
        ("frame_id", ctypes.c_int),         # Frame counter for this stripe
    ]

Memory Management: The data pointed to by result.contents.data is valid only within the scope of your callback function. The C++ library automatically frees this memory after your callback returns. To use the data, you must copy it, for example by using ctypes.string_at(result.contents.data, result.contents.size).

Features

  • Efficient Pixel Capture: Leverages a native C++ module using XShm for optimized X11 screen capture performance.
  • Flexible Encoding Backends:
    • Software: libx264 (H.264) and libjpeg-turbo (JPEG).
    • Hardware: NVIDIA NVENC and VA-API (Intel, AMD).
  • Stripe-Based Processing: For software encoding, can divide the screen into horizontal stripes and process them in parallel across CPU cores.
  • Change Detection: Encodes only stripes that have changed (based on an XXH3 hash comparison) since the last frame, significantly reducing processing load and bandwidth for software encoding modes.
  • Dynamic Watermarking: Overlay a PNG image on the captured video. The watermark can be pinned to a corner, centered, or animated to bounce around the screen.
  • Dynamic Quality Optimizations:
    • Paint-Over for Static Regions: After a region remains static for paint_over_trigger_frames, it is resent at high quality (JPEG) or as a new IDR frame (H.264) to correct any compression artifacts.
    • Damage Throttling: For highly active regions, the system can temporarily reduce the frequency of change detection to save CPU cycles.
  • Direct Callback Mechanism: Provides encoded stripe data directly to your Python code for real-time processing or streaming.

Example: Real-time H.264 Streaming with WebSockets

A comprehensive example, screen_to_browser.py, is located in the example directory of this repository. This script demonstrates robust, real-time screen capture, H.264 encoding, and streaming via WebSockets. It sets up:

  • An asyncio-based WebSocket server to stream encoded H.264 frames.
  • An HTTP server to serve a client-side HTML page for viewing the stream.
  • The pixelflux module to perform the screen capture and encoding.
  • Dynamic capture region selection via the URL hash.

To run this example:

Note: This example assumes you are on a Linux host with a running X11 session.

  1. First, ensure you have the websockets library installed:

    pip install websockets
    
  2. Navigate to the example directory within the repository:

    cd example
    
  3. Execute the Python script:

    python3 screen_to_browser.py
    
  4. Open your web browser to view the live stream. You can control the capture area:

    • http://localhost:9001: Captures from the screen's top-left corner (x=0).
    • http://localhost:9001/#50: Captures a region starting at x=50.
    • You can open multiple browser tabs with different hash values to see multiple, independent capture sessions running from the single server instance.

License

This project is licensed under the Mozilla Public License Version 2.0. A copy of the MPL 2.0 can be found at https://mozilla.org/MPL/2.0/.

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

pixelflux-1.4.1.tar.gz (234.0 kB view details)

Uploaded Source

Built Distributions

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

pixelflux-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pixelflux-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

pixelflux-1.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.0 MB view details)

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

pixelflux-1.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

pixelflux-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pixelflux-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

pixelflux-1.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.0 MB view details)

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

pixelflux-1.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

pixelflux-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pixelflux-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

pixelflux-1.4.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.0 MB view details)

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

pixelflux-1.4.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

pixelflux-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pixelflux-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

pixelflux-1.4.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.0 MB view details)

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

pixelflux-1.4.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

pixelflux-1.4.1-cp39-cp39-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

pixelflux-1.4.1-cp39-cp39-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

pixelflux-1.4.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.0 MB view details)

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

pixelflux-1.4.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

pixelflux-1.4.1-cp38-cp38-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

pixelflux-1.4.1-cp38-cp38-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ ARM64

pixelflux-1.4.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (2.0 MB view details)

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

pixelflux-1.4.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

File details

Details for the file pixelflux-1.4.1.tar.gz.

File metadata

  • Download URL: pixelflux-1.4.1.tar.gz
  • Upload date:
  • Size: 234.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.2

File hashes

Hashes for pixelflux-1.4.1.tar.gz
Algorithm Hash digest
SHA256 415ab5f7b69e7edc59ed7d0183fcf744994a6640014a5c12dd738783637bbba1
MD5 a117a339919101e7f7a7fb62b5268e77
BLAKE2b-256 79bf161b4f39c0f60774964191652e440020e8d7822a939ea3c6b649843288c4

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 81a21dc0e828a6642ef5762d1aca9272a669d6b81389ea0a87a2d4d075b72b1f
MD5 5a5018230c5f34dda4d1079b942bec73
BLAKE2b-256 5680dd3489a4c43464652d0adc8397fbb71734b047ffd5a1f2270bb3571ae5ce

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d92f4ad212843cb050c135788567053d56f4bcf85d8cfe0d28083efa1aa6b3ff
MD5 62a58661480ce92a20220f72f282b1fc
BLAKE2b-256 973d42a0d066c4276411c0f48cd46608bbb7ec9ce0e77ab2da6c7529b730393e

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cb93d450cc75c8b0358a83288b7895d16177afb6c217daea5fc726a5a074568f
MD5 23908bc7aefd44bd6762e443ccf4017d
BLAKE2b-256 0a7d261fa27d360062f85ea1cfc6416643c5dfe7378f1a2deb71922095cdc02d

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 850d2beb3e76ea36ab29d6f352e0fc25fb35fdbdd528acebde07cef7a37a4d29
MD5 ea7097667d2b9e63b9ad18198ca7f96f
BLAKE2b-256 18e5172b2cee5b372a155f05b2f97426b10d48ed6f621301d51abce3717770fb

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a1ccf296ea17a7af88d0c5047c6f6005b433a79fab808130a02438366d0aef89
MD5 5b3600797de5e9c16bc5bf68c9b083e9
BLAKE2b-256 6f1a04065ad071538fde2ea919b49ea0cc9ae98d64be97db9217a467687422d7

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1610ec9060bc388d1c2b53b365e97a1748abc44aeaf46d01e7216363ab19b716
MD5 db88f10bb12f0e69a8d318a392e9bdcf
BLAKE2b-256 3723cddb100da3b7342a8682d689a5cdfe203f12d07e4a4cf96ec480122079b9

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a6cf1b56a0a94afcc1b015941066b334237ac99e5e3cfa312a24f501be46ec07
MD5 5b5398a834ab936c8a265af338de2373
BLAKE2b-256 c41f0d61e8ec49d5ab0b2d1657586937402d227408b29916384869a51bf93219

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7c71692252b57290e7dad7d81e2ab263ab688ba0f600d027d4db8541fedbfdd9
MD5 f52f2117acbe2cf068f1e0be52b46836
BLAKE2b-256 7f77cb89d4347e951013dfc91df5b1bd3fb5e66244bed7f9e3d5352a4af7460f

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 97c1b9acfb125228f5893a0f1bc51f03b1696d522f2f8a051cacd59d39a15181
MD5 6c40887894bbdfb6a3e659666183e351
BLAKE2b-256 6c9966f7d8bc83d0b4ddf0fdd6aebc1314c0dbe46f132c087af1c99b167d5749

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b9eaf1117604443d06b980c40e2b5004b8a9ae1ff1f1b55ad20954131058e2d0
MD5 041dd48f34cd1a827f86f4424d90c060
BLAKE2b-256 ad388f8354f3c29136ed87f880363fd7771da5b6cca8713c8cc3be7c48d19765

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c93fd212080037308887fe7772afffd5aea975e2377e9b0e9721b3d26c2b4a59
MD5 5d12d40eb5698f31b0a08db946c7e269
BLAKE2b-256 1c450efa0f8300de428d97032305f30c2e3225d1e7acf8840c90925891d5c879

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6a9fec1c5d38fbcbd61e55d0936a4f1bfaab42e805e406e131de8881d00299a1
MD5 70f4a00a58cf55a810ec4a050f68d03e
BLAKE2b-256 7be27083c8170c9ff9ed62f11cb76d604bb09f8ec8b66622339011f05d758f88

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3a090cc67481fc48083cfb6afa10a23aecdab14467970a2e3264772d0006d11e
MD5 383303e22ae6bba0ddc59bf5492ad97b
BLAKE2b-256 50c7920d5f85d1ed7109f9759ca8e180b893138a2bf3e33362edc93b8a63341e

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 bf791bb323b930060ac64ddb9b85ab9ca3047028901770ee62f71cd23bec6e65
MD5 d71795437622a1a7489eac4a19dd8fc1
BLAKE2b-256 ccbbbeb8cf4800dcad19daac2d1bcae283db7f272c5a6927cb48226b3a258989

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 351a50faa6169d05c458e6700d5647deab246e448664ee9c908168d2eaf7d208
MD5 8578a5d11052d84016367b7b4ba1d6ed
BLAKE2b-256 d5c973de8edfc1089484f218afde97195f9c30bfbe4d11974aca30992f91e3dd

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5aa7a33d61ab1a49e71c375355ddb25a5619ca968bc37e168dc0533923648322
MD5 1509f8abacc5ccd4c1cae7bb2e9abe72
BLAKE2b-256 8c68b596ad07fdfdd31d071ec790901dde87ae9d7d3068dee78d0bd5b792ad4f

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1d832424154b06b052ef46450b73be75c69d901d7c68ace1fdd43f2754f4b8fb
MD5 0dc1b52d546879e32be507951f2b2784
BLAKE2b-256 d222d45938f46b210fe29d99250da97164f3c4c3ff02623ea829fcdf67e5ee38

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 398f842034a4381dd0efdf75a7aea5a69380fc9e84da2fb1ad2ace039d710ee3
MD5 03c3978ce0329ac6612c5fe7cdb1b942
BLAKE2b-256 94d2a68c9f9a938525c598e6f48cde88f050c94d1f47ba2f35222ff34f384423

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e1e11603403efe64c9178ce40773eafb093881d6542c9df182e3ffc2d4d33809
MD5 6de4beee652e0a4801f9fc3a89a03586
BLAKE2b-256 720566b8aa210abe2eb186947d25554a09c1dee01332a184de68c96491fd9e0e

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 86e943d00c9178cafa60bd0fdc495d7f7bae25f5a3db89db6ae95d758a90cf9a
MD5 4887a5c25a9c9396613790edf5c1f080
BLAKE2b-256 094ab0343f95d84370b9b77c4b5df54ec9c37c239f58d10673b547b8ebf30a9a

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 df8669b8974a70e2537deaa0c90134944e0d46eb6cf2df24139f23766fa43239
MD5 02502649fa68c551a7554f3cd240cc67
BLAKE2b-256 158c8f97c2749957d9427736448f3094753b1b00c827e0f61ce231e44eba8c83

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp38-cp38-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8228293a72d888ba8ec1e4f1b391430ebb13767e7f1e2c46240272c2a5f47fb1
MD5 9412e736ee1b2ceff4d5be350a25edb0
BLAKE2b-256 24a5c5a8655e64bd63d91f403dd54442f94c297236768ef0118137efc7b80e2b

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fb99d37bd75c6617693df2630c94ff75a0952ef64b4527eb2be451d375d932b0
MD5 9e0ca79a69d125ba4cfb973b91e73cfb
BLAKE2b-256 77a1429feece39304e4505a6b3f5e4b64d9a7ce7ac8265e2f2be14a00f658767

See more details on using hashes here.

File details

Details for the file pixelflux-1.4.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pixelflux-1.4.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 283dbdb78e7bf9f4e62bcdea601cc2324bf8cc207c766b3c5dda7226f2f0c2de
MD5 6eeb43507cc84f0bca266b83e44b9d88
BLAKE2b-256 3691a29162a75ab569ffa95c2d927a98fbdadc0ac47ac9a737eb98591af151ce

See more details on using hashes here.

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