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

# --- 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 = 23                  # CRF value (0-51, lower is better quality/higher bitrate)
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.

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 and go to the URL indicated by the script's output (usually http://localhost:9001) to view the live stream.

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.3.0.tar.gz (201.1 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.3.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.3.0-cp313-cp313-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

pixelflux-1.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

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

pixelflux-1.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.5 MB view details)

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

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

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

pixelflux-1.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

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

pixelflux-1.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.5 MB view details)

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

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

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

pixelflux-1.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

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

pixelflux-1.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.5 MB view details)

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

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

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

pixelflux-1.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

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

pixelflux-1.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.5 MB view details)

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

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

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

pixelflux-1.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

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

pixelflux-1.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.5 MB view details)

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

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

Uploaded CPython 3.8musllinux: musl 1.2+ ARM64

pixelflux-1.3.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (1.8 MB view details)

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

pixelflux-1.3.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.5 MB view details)

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

File details

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

File metadata

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

File hashes

Hashes for pixelflux-1.3.0.tar.gz
Algorithm Hash digest
SHA256 667db75a281eb4e9912f43f63207149eee7068ffe6287b35a3641ec88dbd9429
MD5 b2df98d1465000eb014b4fccccff25f7
BLAKE2b-256 2852db9bd16b222e54e6d66678a0746d44a53dae50ce112fb649f61ad6bae2f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8f5233d4268681143042a80de2d3855247e954f74459b0d1f1da5104f773b557
MD5 3ed20281f2414157a1370024a23dc3e9
BLAKE2b-256 11b83c149854c7f610846f600ff074656eb7de73c45d337926c222e3b2463fb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2d303c3f03e56c82febc7c28bbe09c71265e0beed1b73063b3eb32cf38ded640
MD5 c598eb7e2be871e5d926b3b605b24331
BLAKE2b-256 a0472f3c23041a8683e4aa3cba48fe912581d4732e6aac442061d73aaac0e5ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b5bca07886668e45305370b1fcc1f32793bd5eba7d3885f0362e18bb8e3172c6
MD5 bcb3dce193ab0b60197ee4bbdfd5b210
BLAKE2b-256 19cb45066238f763acfd262eea2d25125a85dbad171acccc4295ca4fdaf7307e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a25b29bb3022e1c9bb515cc15e5f1d61576266bbf9b43a1ffa1f9a8ca099aa7e
MD5 22d4c019d4e41a805376ba7db1a3fd76
BLAKE2b-256 847c822553fb5d47b388c41b897f49496b07bfccf9c98ec2ba46802df7c4418c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 742d80efc1d39983b5e651a69168201041875120ddffc15e23c8ccd494e8e9dc
MD5 9d07c86d3b569fbb8d97ef8ea422d68c
BLAKE2b-256 7d76b0e0f16c4bae47e3f8e4a84fa30a5fd175ef447c7a06bd58c5a7d0454aba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 79302ccd8a998950d1c6b4ef169b5eeffd9158004e88c5fac12bfdfae8b3b723
MD5 31dd3ab11ab6d7aa559a6ce62175e872
BLAKE2b-256 1238623cac5936d3e81d3695684d8c78cd1b90539cb85c282bc966a3a18c3bd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e5bd7f631d61cddb374936062ea233b2ffd177781176b92ab4af11c9afe5c882
MD5 128b0ee9e575700bcb71e6955b2d46ae
BLAKE2b-256 5a61f7410015abbf855e97fedc0a87d3c686c7f9ff7d6cf7656877e46a7721a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bbab5354f1a24c751926157727c92423e2daccb0d5727712e32d5ea62d7d55f0
MD5 0e35e5c05d93d7a394566c94ea9d74ed
BLAKE2b-256 c82f0ce1cd1182b6506ae653669e9ffa9586cfa94e739d74c8b42eb9fcec6ad2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 537885b412eeb935829d8a2e944ee324b8aa240ae8cab4a444d2c01195825682
MD5 a7c79542dff960e8558937f2508ad41b
BLAKE2b-256 f515f9d83a9333213c1355c0fd36ee022bff536623f3084e1e5d7102923ff350

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a4a66610293bdf50e0d05fa0b1c05354ca45869a528a841bad07e1a79d3307c1
MD5 8c7f8a951aabe40c998f0b86d1a1f9b8
BLAKE2b-256 9ca4b5ba3e000c5e51938315b53ac5e013465bc08dcb291e23f955dd8635d6f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2435abc87d59a3d37af99419665dec70e4e23745715350be616b256574ab81a4
MD5 ebdca9cb6f099ddd1d6fd239c5cf4d19
BLAKE2b-256 bd089e62d5a7b2e50bec4262134a427b94c5abfa049b0de97ca8ce249e628797

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9e5e3c8d1c8dafd31d99db6f6491d00e81dae1400318b51199971b2c33a77f6d
MD5 3cb058d170ae31dac4822d773fe1c646
BLAKE2b-256 174640aaa1604f646f2cd88506bfceaf0d2326e0df000ab8ab6fe4c566000ed9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8d38a6b56156f50eeff0babea38dc97067b28bed12c81509b6ba4c0104fb9263
MD5 6c7a52fca99adaa214cdbc8e23b383cb
BLAKE2b-256 1aea31a1159db3d0b1448885b8094db1071f7b64889eb7020d9d491f5b86f497

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 434992a0756c043fdb76d0b213ea9fe829497d87931a5b99b5e3eb21e85aa70a
MD5 0d66a2c2691bf7f49b2cf2e97c838743
BLAKE2b-256 84b4f37b87b52bd6c04c6abac4ba47ad83fe2151a0181579d4144c7989a7d4f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dea7a18c7da523854c5071b1e52c127865157a34cff5d7423fc81e88affd9214
MD5 8fc05e39ececeb56296f1378e2dc7523
BLAKE2b-256 aab48f62e1518dd79398e61fa874eee5b3b5e9d882451575d0029a5cfdc8dfd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 410526a8ab2e1240848b11ea828b8c4eb4d04868c07c5275f23337e073a09007
MD5 0031aaa98392ca57a6337b1781e6a37f
BLAKE2b-256 dd2c06dce0af4b4b8380750940db15883e8f22a02aa83ffc598cee4929b91c57

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 95e380c3809982a7cb0b18e3ed2ed459c747b2256bda81c6dc6cb5cbd4f1e096
MD5 3609fb88f2a15f0371d8da2a8b45a7be
BLAKE2b-256 37b4c9e0e6b09095ca2f5bfb85f4818af83331d1c63eba905dcdcc68eab5d9e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 91c170b367388ee66c6a9c95d74fe5a0afd41d091d838a6b3ce3c1b44e85d271
MD5 d85daf99edd61d27ea143271608cebb2
BLAKE2b-256 4580a170fc3911884b2f63fb76ffa0131b33ecd4582b2cb434a920a74bb9394a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 45dba38bc706568f33265b4cfda733d0574cdf58074157f823973c23cfd523b0
MD5 3705265d0944f73d7fa818469bb2fd2d
BLAKE2b-256 134b4547a76f406b8007c2c1df0d04a054c4af6e7d4fb6fc467501073a001dd5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 19396dc79fd59f7fc32d7cf3c40ce19be80fd4e37eafeda51cf6ee0d6ef33588
MD5 5828a0005f408a701d1ff39bc0a889cd
BLAKE2b-256 13c9b3c74efe6b6bb0e1c71a7a8a092de4d6a8b2057d7c65f65e8a271ba918a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 22ce4de35b4393de8ddf86b648420c12690ee0bfd7d5c01dda4221a5b37ed84d
MD5 8129697e2bb8287f6201c189906c5a6a
BLAKE2b-256 68a24f1764a301b2b384c58905b8e3274ab00802ca6450b5e8629b9eeb69f97e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f4831e3d611ce3ad487bc3be56ed56e101fee5877d791b5a183fd37c471ca230
MD5 b71ff4dd4f4cd194f779061761efe171
BLAKE2b-256 3c3e2bb117b06cd8e33839cef97639ca8f401d2cd207ad007d764ee71c07a88f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ea6f466a421fa429e4b5091261bba045950ab48a2af7a6675340e8dd41f352d2
MD5 16007b8d1cff91dfd5b884a0eff5a9c6
BLAKE2b-256 c25541bbfa4a36935fc504710d645622ab3a8b15bc015cc8fc9a9323d8bbe05a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c5cb1e8d040b3adccc4186e95185d7edd94df7d10d94281a84542cf165f0d7e5
MD5 58034034c047881541142b41e778d572
BLAKE2b-256 2a70fb3081fa1977f24fea59ccf87b7a9cada3e8449bede1400c9a4b2c9d5838

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