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

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

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

Uploaded CPython 3.8musllinux: musl 1.2+ ARM64

pixelflux-1.4.0-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.0-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.0.tar.gz.

File metadata

  • Download URL: pixelflux-1.4.0.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.0.tar.gz
Algorithm Hash digest
SHA256 f895788e97672ba3e452dfa47630b830ca4ffa3ee94be2160c5d5988d8fe5077
MD5 e1b86180f4d5f5980bf5247122cb64ac
BLAKE2b-256 7b54c568af09996d39e5b2bd6952a5fdfe52a5b50442978c5f536ba955297537

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 38473822b47a243151ff754260dd8bba1e63280bbf09c3ec0ba89b9b18a2feec
MD5 da9474fa8dee6f9a4e79840e431bba44
BLAKE2b-256 abbbc0ed948a1fb2f58cbd9090b04ee7c14a85058d07414824c8aad8d247f4dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 bd416d0df2859edcb1176f0dfb2ef13ec4bfdc6202ac5aaffa4fc544cc1e17ff
MD5 3ee6dbc6e716e83c56f730e2dc44e96e
BLAKE2b-256 52a44d67dcf70cd21c3c0944d422121fd44cb35c5f0feb836dc0c2914f0f9e79

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c0d2acce32c82f2e143401c7977e7f74d4234034576c835d8d8eda8763b61b60
MD5 6b2787f9a8b95952d132d97bec5398b1
BLAKE2b-256 4990e30fc4fba49c9e95c5e5e54498a3a550ae7e884be3c61fbd100ff77218c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 932570a575b8b6c09a1e5b2df1459617131c5ca70f60a4223e685b89b2e1d1aa
MD5 7201fc78d10e7b878eea215cc5ad0714
BLAKE2b-256 ce6b1334295463c3bfffc33a2f00deb973c4ed1cba50ee18abe1b003111a5258

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c4f1af1b48e6a80a661dc594f5c47a8f9bd80781a8fae8cdfb86fc82d1082300
MD5 0ad626393295b4a40ef89561e400aa0f
BLAKE2b-256 073b6521e4a487540a2e77690d3b98ce181c2388982d5178d6d609dcde8549d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 26d96c38bf28f54f744b99c121c7381cac78f04f7d8ec41462add628c41976b9
MD5 1c76dc9efdbb4cb71c9b7b16117daa4e
BLAKE2b-256 dd5f6ea35ffd61bc2225483fb27cdd53b660ba73de3d7b059308c5bd0c7db006

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2d21cbdba316b9d777d01c9c0fdbabeee0fe19ce1eab167e667f5214f265b9f4
MD5 e3ba1a1c459e846ab4f488fbab17e780
BLAKE2b-256 caa1f5afa046ccf5a4663a8f799a8fe5a2772ccedf3c70aaa5ff6082e1960f61

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8233f726f218fd0c930151d6b9c7afad6f6826c1e4632b66de3b397a90463a4f
MD5 1329e5b72949d2348b658c44abffcfc2
BLAKE2b-256 9949b74342cd0f1b9f7866eb6658c32d540ec2ea681e0ba6a171351744a16386

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8bb7f676e12d1d193fa82a6237bd4a78a6da37867438e0c027e18e5b3e1c65ce
MD5 edef692a214d87c016821e21a40d5407
BLAKE2b-256 6fc88dadb058592f604c2138005c8389563b15975fb48f68e38c1ed4478c61a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0c972969e54eb1f4b72d1a30a6f016e36f2508f0c65f34a605cdae24fa5ea2b5
MD5 57c17849588f2fb31de3afdc59bec65b
BLAKE2b-256 2daee228128489b1b4e1635cc2b88ea586e1c2030ba6657fdf823cae6ba293da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5e6edf46058a6d2218ffbab989e853607b5e75ba2579feb924581280f2c5b0f2
MD5 2490a3ae24d382077c3fc8239b3fde11
BLAKE2b-256 fb9e55a0514cdc7f65f55405e530e3482d2f6379143a74bf83b504d780b8ff86

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5efdca3b38f3060776880d25f0be374ed3693566ec5ac5ed64daa96712e15b50
MD5 bb898adff757a8b71643d678af227069
BLAKE2b-256 e6b1e3ad25af3138ffc96a325cbc65b504874f72f7677f2efc21031d7708a8e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c4be1fc70c9aab4758efee930870e19c6c2186d1635b1197c4107e209599d08e
MD5 0e7c1ad5058517c0dbcffd2e4885080e
BLAKE2b-256 5085dbd71c278248bfed860db21f7fb362ff3a69afd91f9a8bc6556ca7e32a1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8d3fba951e01aec3dc9f942d6c787711c1340508a1f57a97713f650c255a2ad0
MD5 9bb958dcac5e978537f79e34e6d4dd6c
BLAKE2b-256 b5ac2ee424870cc89e8006627f99bbaa6c74e27d9e53559fbd75439327dedda4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a3ee03404523ce942c2d7fa656d0d4ba31eaa6b4ff06eca89fb955a8fe841935
MD5 15d1404e4cb4dcdaeb02e011c035a900
BLAKE2b-256 a6e0f3442abd1f2c21a41ec3d7e0c48469665660bb34de76c8ee6a1799227ce0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f4ddace178d06e16a8577ad46d9d5475827894e9f08da09f979bebe18f1f6ab7
MD5 abe828dfcdc284aaf5c80f88862a98fc
BLAKE2b-256 85108bd031ab07caa65e15f8cfa13c994e6adf40199603f1147ed505a4aa47c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c57f735a95c582adf3e894d8355da30cb4ce98021f5d4969e702b0ef53c50355
MD5 824285e92e4545f93885d8616a94ed8a
BLAKE2b-256 460df7a7e5e2ee24fd550d575a5607e16ba00459b73d62324946c7f187055138

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 85013e37a0a8656381b0a0546be55c70dca0969337a80a3807e357c0666d8785
MD5 b0f7dd1a0e6cb07b380fa7b771b5cae7
BLAKE2b-256 ca0b987ae034c4790a79341e137d92a994475fa216a43320b47152d66e507f84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cbf367654d913f35ae6aada4a725bb3a45c2a92c2fbb8f59390ea6e34a19fca3
MD5 be9a9b889fcccc595248a7173141733e
BLAKE2b-256 b73364fc893518be506b8c545b86c7dd2d3003814d42432384062a6fb816da37

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ec8356150ab0911e36a6614e1b3e0a960007ef6245183ec0a9545bb17215e15f
MD5 8d737f71068ed678457ad3b535503533
BLAKE2b-256 86cb6a729cc841ac403287d1551a5758ba431ab556cb450478f6fcd52f5c902c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ca83c70e1fef19ec4af13ed907ed8d905e6f822f54f2de123ba2be4a1009af36
MD5 84f7c7c3f8d4c174d6bd5b5682d85ca5
BLAKE2b-256 9536608f5ca9d4ad37cb3f78b60b7aba93860e6d6f5454a0d93ed876251e600a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 75a34d58cb8490773270a028b72460d98b8bf2d82ba0c6a401a8fdc38bade009
MD5 6f6fe60ed91cedd111562f97b2070e4a
BLAKE2b-256 ea0d1a5767671b8c06720f5e35fc55179fd78f9e8d01662767edc6bd3e8e650e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5e737c6f96df1761b10a0497ef4471bee13a90c1208aa0703c6cfd7016dd31db
MD5 112db8647c22391150c2ef279ed0a3c4
BLAKE2b-256 c09ba8429aaa4d44aba0da5053599d24923fd49b96055cb4c0f147385936444a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.4.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5d0d8623e6560d3f7f5a9dd1370702ea988438b122eae4dca89e337e52b3ad06
MD5 7a3f3c9722e3f683dc0692db7f31dc0c
BLAKE2b-256 71e276db31c1122cebdacb4806a6fad89d79bff67d069d451d1510bfa6dab19f

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