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.2.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.2-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.2-cp313-cp313-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

pixelflux-1.4.2-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.2-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.2-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.2-cp312-cp312-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

pixelflux-1.4.2-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.2-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.2-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.2-cp311-cp311-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

pixelflux-1.4.2-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.2-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.2-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.2-cp310-cp310-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

pixelflux-1.4.2-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.2-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.2-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.2-cp39-cp39-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

pixelflux-1.4.2-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.2-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.2-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.2-cp38-cp38-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ ARM64

pixelflux-1.4.2-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.2-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.2.tar.gz.

File metadata

  • Download URL: pixelflux-1.4.2.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.2.tar.gz
Algorithm Hash digest
SHA256 a39127b4a5f90ca6ab3a95f964e39d0075678bf1474064c886fbfaae066d814b
MD5 b469dcb0a06c3a2b04d9acbbecb5e7ee
BLAKE2b-256 cb00b3d342483a1945e590eb4e85b5994fa5387338fdc9654aab82004ee1e172

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 10822cd74c9ba8375f916ba79894897c3b137653e6bdd36769b77c6820b998b3
MD5 abeb1fa922e01529ec7738038abb3b14
BLAKE2b-256 266429f64ca2beba4edc5d65b36680814e1c6b4a991eee392406ba220ee364a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2b17a323e7085227d47f163e3fd80e8ffeabc6e8fdac4c2d36829c44c33bee89
MD5 7b2b06d7de2160092b9361a68b76dafa
BLAKE2b-256 3ca05fac98c1398468b5eb6e4f50e1cb52c699cfa2f75a7b937bd62a26bd21bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6ba165a98e73349e9e64331e2c893b751c13130b0700c56dffa45bd58a2c9a1a
MD5 bdc478a4743b3bf65a642b5764a91028
BLAKE2b-256 30679e61a1e06ff61a2d096bd97e5117a3b94510dcbde8272a6d38795ada172d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 97aa7af0d13044514d6eaa0fbb55a2bf36e5cd7eaf9858392b6ce1fa59cafaf9
MD5 3eaf30cefb4ab9f9e40243a4f978d7a1
BLAKE2b-256 3222ab5689be980b63082f1164eeafdbdc2d6a9d23a8a077507ae27c36ef2c46

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f2b948f1cf0c83f8aa39122697e97f191c4f5d2e46d6cc8c9ae5d71f2e5fe86d
MD5 5fe86a73d0254f90fffef6d8c38cbbeb
BLAKE2b-256 3d8f9c3f31c9fdb5b6f16f1d33d28f47dc77f526a65f464c75724383bfc0930c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c470528c6c334e1674d68848425e3b532b9ad43f4c61fe9fbcd803a2151965bb
MD5 47ae054fbc83c388bcaa9643f1aa80ff
BLAKE2b-256 57c58a327c64b3239720d30b0b09c15971d2e13ff89fa6ad36072a462a51fd9d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 91d0355145ac52ff07c8d1bb59918e52ba0d749c5e53e2d977cd9c2782be081a
MD5 10dd4bcabf875c1027495c89562be7b9
BLAKE2b-256 30ba4bf3617510c99ff0e672619f7d20b448bc4f195bcac0fc6fa5adf416ac2f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 904053cb8b084b590686abd56eb4e164fdcf261ef5f7d1d55172c5221297a6e6
MD5 f5b1e486a052a4bb17cca0c5cc8c5be0
BLAKE2b-256 09fb546f2b264d48a7e891b31fd91bfb3198134d05b28a5922ce6d836e9d8289

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 83cd89a44506ee019219f6fbcbbd72247b169312763c5cb1eddead8bb1e9376e
MD5 2f960ca02cb596b6f65511af5675ea15
BLAKE2b-256 01fe150c8cb2cb925a2df62a6fce1787f951e605856eac0a29e502c2446b7d51

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 adacee2047193190dd916d590e9dcc982198a3679175d7ec6fa0e236e69167cd
MD5 5d9c02e69db6ae9bb7f0b288a194cd2b
BLAKE2b-256 f2b713da63651ae2748c5fee16878b200974c0221d432d20cd6f2ae12efa3581

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6e3d38bb69a09ebc25c73d7532d990e833b40c65f74d1e5694f096ebc2e39da9
MD5 4b183a96cf6106c2058d18ccee3221bc
BLAKE2b-256 81cdc9b66880b3518cd481fce1a4463472aa6f270f0de65d617a4aa489877bad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2995225dac1efc67956e4496a35cf6f0e43a66acef217b35ff287206c27b993a
MD5 644b430f1dc984607cb2a1b9f0de59cc
BLAKE2b-256 1bb9ebce0aa28051075fab1e29c79bbbd3bdb452b53743c0582cd87bf715e814

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cf7e89789dce2c36e74ac8cd760a6d3f7985e95e96eff1c42a1f88a1525e02c9
MD5 12489f473b06585c50b8663d8fe1918c
BLAKE2b-256 e023526743ceb1626202dfe150afb62cd277bb003e07c0eb8bd308b62d592cc5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4e1d70b10a6f6e9e0ce35be78486f5036c8010166d729f4448fbd68b14ad8bb5
MD5 4f90992e256ba1a44eb970c406e61896
BLAKE2b-256 21e3ccf256c3faf5991b5445a8fda6037250522f9eafc746e6b88b3b49cfdae1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a979dbfac35f0d03427e9b3ea75c84d2bcdb57fffac940ce28f799f324c5a064
MD5 c5411abf35cbe504c0b9cba27e68f695
BLAKE2b-256 09478d25c0c1db3ff5ff57dbeadfc44152308b3cc4a445a6740841459aae60d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3a14a7b099e281f0d5a236eaa2634e0af820e771b125a58382239a1a01c83037
MD5 8cf95690afee37b4905da9d2213db3cd
BLAKE2b-256 8d446b5f8cc5e3e9f6007e1baba083105df2d5c5506cdf38c201e8283a1b86f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 05df66de920aa0953494a31fd5069f325d33fc1354d9add53e36c5e1bdf76a79
MD5 0fa991a4923fb94ffa3c7ff42c23cf63
BLAKE2b-256 4640abb1c75af6835f0fe8b01863293cc142a95055e8bc25d5546bf77b146052

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6d80b0cb1823a8ea89818fd35c78caa10f2f7ff4bc87eeefb8649978d7f5c9e3
MD5 e08bbd74fb04a74bdf7a00ac5ed8926b
BLAKE2b-256 3a231d78ef2b3a7db6e64665d0b2215dd4e2129c08f88b30290bb293e7a29b1c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b8fe12a140a9dd201eb83594250f2ffe14f676b7f0a6f0d2dcfbbd7e707e7188
MD5 a0ea788502c88bff610aeeb42eb879d1
BLAKE2b-256 51b0935517373de3ed20f22a1966c24e244422a22d637b86828cee1f07336cc5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2981e2636c7df331f871585a2036bd6ec9c34bedb671691c5750f57cfa595e79
MD5 0a7732050c70cb8c2610c826b3b3b847
BLAKE2b-256 f5a69d1ac8c8a9c60ec09be03d15f35c72a6044ca625ec1ff2f1f0d651665339

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c364d95246d7af49c153e1e77beda8b595f48be118db4a049fdc302889d02134
MD5 372d3d202116c5f76345176a9065550f
BLAKE2b-256 b67b3fe96e31a53e6d5a963c457ebfe5acda6fb6f30e00ba190fb9b8ea9d715c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 02d80709df8580b07f2d3f81deabd39af08281c2e54f701a0b8c0c462ec26a14
MD5 ec9d50bc2c320ed1a36d6fb24abf1ea7
BLAKE2b-256 de704c2aacb25ecaea00fe3645175b13391c271fa4c504c1130465a496e0a57a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fd99d64900952b2097dc766cdf39a0827af6c4d1dbe4444115994a7a346bcd4d
MD5 767a96f44576b42def4468f9aaba5297
BLAKE2b-256 08b4e818459079a906672be5d24ddd7a07228f6b15ec2d915a219ecef9b255b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.2-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 84b7965a0ad9b0471e289d4bfbd55077a59cdb38b91cc1529faa2558d58a656e
MD5 24849ccf3d48dc426ecbf0fb3c570613
BLAKE2b-256 c8446d423ea2983a181685f2389dc5a49f32b7dc925d11b5fbbfdf44549b51b9

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