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

# --- 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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

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

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

pixelflux-1.2.8-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.2.8-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

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

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

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

pixelflux-1.2.8-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.2.8-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

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

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

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

pixelflux-1.2.8-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.2.8-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

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

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

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

pixelflux-1.2.8-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.2.8-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

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

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

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

pixelflux-1.2.8-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.2.8-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

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

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

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.8musllinux: musl 1.2+ ARM64

pixelflux-1.2.8-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.2.8-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (1.4 MB view details)

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

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 131636bc382f128c2ab97685bf8cf1ce6101f0a2665fb5bfb5df896279f29164
MD5 6398b6a03269ce1fdd2172e371ecec1c
BLAKE2b-256 c6e5d14960f82690d8d786ba07caa1bed2673f756b4bce2bff5c0c2c10e334e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ff30e5e342c64fac20a2e2fe930295eff5f03b6eda87ed457cfd9cc60510657b
MD5 2b2ef089684c98e5c13ce666d2d3d562
BLAKE2b-256 0583aa4fb1c3f1528cb5e5082fc492b258e008f0a20724dad1914fbb9d22e468

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d6aee3db74087c95ae59a406957c6fdb1ed4ca45c1b7a7c53c3c6478733e35cb
MD5 51b5bcb1f44857fb12ac0de35845bdbe
BLAKE2b-256 451a31b83ed1917117dc8115fb501025eb315c78002753e47e9e55d226ba1a84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 04f14072ccdd36b31670b9874a9759b1280d2626eeef93c36a6fae8d188bf978
MD5 775666f9466716bab83c4f398dd9bfd0
BLAKE2b-256 cdc548158ba214caba8e1c21c4855cd1aae6acb617a82d308891565228830c38

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d420a896fa69cda2acfc8fb5b78335432f0221111041aa7299f39adaaa461b77
MD5 0833c50bf9aadb652cab93becbb08858
BLAKE2b-256 ec39e6892c10120d4066d23012e9c8e0cf28848bef6d583554d254d0dd43ad42

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 42acc456796fa1120760dbd5e42f64f49d7a8c8ec3e835583d1b27b7ffbc4f1d
MD5 c7d0b96fb119ea77afd407ca0493fc70
BLAKE2b-256 0a53bfeedb3050f5eafba59760792a212bd7433f59b526cb01f60876b5357ed6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0e1072336e56414bb59967e5b4e8225a758c58d5ad1249fc77cc286293260a5a
MD5 d82d80aabf4e5b6017caff9c755a7209
BLAKE2b-256 16c4ce20998f4ee46615248dcbc42cb09c6d5e49762b846948460a6092c4841c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 dbe5bf5290a7e6bf53c73e9ee3651baebb789996ff898a590168dc4781be1f59
MD5 1c876ac51c6a2e59cd52efca86b5ad07
BLAKE2b-256 3b220982dcade8fb01230fbc530354bcc6fe5b5ca4e6cd51080af960f26025a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 626cfe7b3e3181e4abe789a955f95ce3272192ae11f3afdd2d39fda91aacf1c0
MD5 1a4f8549405954605132e78d3b38b4a5
BLAKE2b-256 1e15fea4f51b1208e643879abb862fbb26a4f69666fbe72a610945832c3cc2de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 c4d2b22fb5b6932c9f4fe2fa04f9848cb4a5712a2d1c4d1d5634c3b88f9e0a6e
MD5 45f54e9f85249160f73ada58fdf4ab34
BLAKE2b-256 52ffe5ce156bac47a39ddf7d6cd836a5b5a8e83059b782e73918618ee028b0a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d183626e213b296a858916186105ae46f14638584ae9331caab2ed552b1a0d18
MD5 8e6cc6bb7e81450fcfcd28a02e5ec6d5
BLAKE2b-256 9239b82edb26073228ae5ecd8ce4595f4e700a3b968734ae08e7a4114f314c34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 35676c945cb324563276aeb85d40ea7922f51ed6bebdc61fcaf2eb27fac2886b
MD5 d0b57e13953c58351d8904a1d546e6f7
BLAKE2b-256 8f4463aa48e50a4af2a53a4e16bd17ef35cf77167192edf2e99ac9e8ff48ab87

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e97702ce55a5e57286f2b6aa35736ab22c923dbad22953feefec0eb96b94c1e8
MD5 a4905694dcaba7d763983888692fbe87
BLAKE2b-256 28907a0aa698b6658255c881afb22dee9aad316b6876d5e5d50bb0f98a7a11b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 cc9a3565d9775eb0f432e344a864987cd8868ed52727beb1f02ea042a693d529
MD5 2d2ee6b68000393f948eba123ee063ee
BLAKE2b-256 9135dc88e6eb3139c564efaba93a6bb5f177ee5aa74ac6715064190c7a842340

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b0ae5724f2951d4e101435711825463a0b8da0cb7f45cb706fa1ff9c9e912010
MD5 705a0c9901a60c17ddaccbea1dcb68ac
BLAKE2b-256 b5fe42f5dcd5dee02962b13e9a7025b843293e4d01941264633e2b1c05a1706c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bb4e49c91173fec2006e9fb3f146a4333c2f134d36e5bb418c150b5ce1cb8035
MD5 b525a2be00fd9935f2581e7d1a8c3d0b
BLAKE2b-256 1511e0f89b82be2ffbc566db8724bc12de76efea7b5989a4a63693f70ea1d87f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 76d8dd8cd1b5e463fc1fac55ab51ff6739c9741f16ef23cd5086b34eb8e34414
MD5 41ca33ea9f61adc8292128f0e07009ad
BLAKE2b-256 52b610cd0724cb6cabd084d03e28c8dbbfe3a6afa38df4e7ea8a230d85440599

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 270cd466a5aaf4ed73550035ae82d58022c668e245ff38b5157a287ebbdb684c
MD5 3b600f19bdb9f43f4a91085908796a57
BLAKE2b-256 3cd878b783b432a34830bc1f50563044b1d77715c7940a34f5720eac33cd806c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 909a91e06bb63728261af798dc7c7f78992321e1af3675ab5e71d1e487557820
MD5 1c039719fe72ca929358541d4c748018
BLAKE2b-256 0098f9ef5f2da9a4c9dfa4d64fb82f861d5837f636fab4566ec0da1dc8c09bc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9ab0b7b9a090a68190ac5eb7dbcf8800b73b63965a7b21993e5f695a8d69ebb0
MD5 21f18c176a11aaf6ca4c48b85ab84274
BLAKE2b-256 8d39d5c1acc7943edd19accf57cb69c932089dec06851e54256d011325979fef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 64790afaee0d50186ab4c5381e885c9060797572986441b5471e9605f47ada45
MD5 2e1992c0163576f6032fa0f31e8b925a
BLAKE2b-256 a16b666dc8ccb6e7ae73cf3fc51ee703e64161740bd4976b776a208d55616183

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 47e21a34493ce419f527328578fcd1df4c9257dd1879056e517eae94648d896a
MD5 74fc309fb95a5f196bc8540d8f03fd9c
BLAKE2b-256 aad4e136a425bec39d1da003110b71230581d4ac408791c09ecf2ea92e81cb08

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2cc7f17ac7e8e56076621510b63d2437a0e7d3565e0244efb40370cc094e5e1d
MD5 19eefe6eb4db084f2f4bbdf1b77c6bbc
BLAKE2b-256 f1f069e83296c0613f2d57f1a7ed692f247369bc0e7853668e365536e2e6ec00

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.2.8-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4c30f832ccc472a1c542a1d087036b25118786dcff00f2b9549216129b228cd8
MD5 42505a7707fe467f317fd56049649f11
BLAKE2b-256 7258e498dcb5bfd64798e03489adf35a88fcc4d955e42f7d6febf17e00313f30

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