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

# --- 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.1.tar.gz (232.9 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.1-cp313-cp313-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

pixelflux-1.3.1-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.1-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.1-cp312-cp312-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

pixelflux-1.3.1-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.1-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.1-cp311-cp311-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

pixelflux-1.3.1-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.1-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.1-cp310-cp310-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

pixelflux-1.3.1-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.1-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.1-cp39-cp39-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

pixelflux-1.3.1-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.1-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.1-cp38-cp38-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

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

Uploaded CPython 3.8musllinux: musl 1.2+ ARM64

pixelflux-1.3.1-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.1-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.1.tar.gz.

File metadata

  • Download URL: pixelflux-1.3.1.tar.gz
  • Upload date:
  • Size: 232.9 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.1.tar.gz
Algorithm Hash digest
SHA256 d6e3e1d82e07d1662181abc691420ed6873a4638b2c22c53f1917ca1da4b0d18
MD5 cfd12a4f6e866aaed4126a2271cbbad8
BLAKE2b-256 1d9779325474ef08b8bd830a8944069cb2416525ac8f760f57fce83b5d5d9a22

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 65557a263168ca305273ec42d5a09898860cca0fd980f9deb14044637742da34
MD5 1935b06c9368bb34f14d058acd0a3b34
BLAKE2b-256 20ca4d843bafbf444e716e4b8c8070ee94384fe259f9d0ea0050005186b03e58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a6e9a020ea29512d790a3acd221f77f1f268c0473df2b2dfe9439a4a0dfe8c3f
MD5 06d2ea90b0896d35ab851b6ff850fa4e
BLAKE2b-256 f63affee1bc17a19a8b06c79d1d76f63ae85b5b8321eca84f21bddecb40906a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 38c6ade9d2969202688abfedca90ad91635679b999a72fac2b85ae289bc0b27d
MD5 f3720a5106aba5f4e51a0ab5f3e06c8f
BLAKE2b-256 39200b0f71c74e69662bc36531a7b2a8491cb725c364c6e64196e51ab97f9ad7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 03c0c647e6d84d3aec32b5c626249e52d05275844d103503f83582b760cedacc
MD5 6796eeb022ef7c2eaf0aa660328f1afa
BLAKE2b-256 2250231b778a73f97ffeb215a513d00e5f9ca2419c58987dd2511bdfb0df0ea2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 106d0aacaf9c05a88c09054d8e91f0d21b9751f3ef800804837ccb8b2ead5755
MD5 00db8893238b4646821d6a9ce86f29a8
BLAKE2b-256 a4dd6163dd8bfd02205364c458c5c40a75f464d2947dc8f0733eb2a19f15f2b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a896ed9a5565c8f5611895982f770236e626ef82bfdc049068779733e7c498ff
MD5 dfad23f59de9b7b1589454915e2f7826
BLAKE2b-256 66db85c9bca7acedac4e9ce24fc75e77bf0a542c77a590fcb65403b9d3e884c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5d2fe4a3c000bbd6e54a125bf78ed33443a118f5ca566700f637036d05a7d63f
MD5 fb29fad7e11421111b310a1247c9bf77
BLAKE2b-256 64f54ed524f49686a87b9953ba6700c81a7990f2d871d8ba0021c211684d5d86

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cfe5850e5335a7e06da608b79220deb5df194e9cf2f4f62f75d9137d73156ddc
MD5 4644e93d7429f835df886e00d624fe04
BLAKE2b-256 de08aea8047f7aa964a438931a62e9f263c89839be0f78313f7741ec84a55228

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ab298402f78994f6de3dea98f443a23bef1a476a6c3c97df57d908b2a0303913
MD5 9b29676ff15593a10cc33075edd3269c
BLAKE2b-256 ef786b2df19b2001dc422a9183f17aee935e4d32176fac390e87e1450d4019ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 714db9597f96c59d0fcfb2249bc8b0c47e6d0acde3a78b9946230b01dd145120
MD5 f523bf2329817ee4fa1b599f3a0910c4
BLAKE2b-256 7a3b8845d6c108b1ecf230a01ca0602ca928d79cfea45047be6a3f490979b5f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a213e4725c7634b621ce891163495deec1fde3ad6811db39019fc1ed42347c82
MD5 c3a559e304afa987161016c72678a339
BLAKE2b-256 6f4e7cc2304835701d3c44876a4b7d4648f15b9565cfbaf1b6e288eb577a40b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4600a3bad4cb221dfe568e9f696cecf9067ebe3fc7dea0a5fe0276b85d61154b
MD5 b4b12ee33443cfda6d4c3de76e047dac
BLAKE2b-256 b5f200ae38f09c55057d358ecbc12218de0b206242a4ede2bb68b3feb5502e72

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8d1b2a537b13a9ff38d0623faf10ef426ea14056d3a7a3165c9ef9adee3fc753
MD5 45c8203329d401c29a843a39066d347e
BLAKE2b-256 5f696a421cfaf6c7ab8f77d27d3fcc5d848cc6cb12a3819ec330bd302f8286db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 ab5a7a4460047d280931c7dd1fcb45c5363b3235775f381c01fbf76fa00c762d
MD5 01ad06f5ba58387b5df6a21a8522744b
BLAKE2b-256 c727f3fb462ca9a67e96a696c4ca7874f3adaac2f8c3e7a170f3db4173b486fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 552b05c8797ce94ff083fadc54d12292f595f24a77f8d54b8e083fab5defe054
MD5 0c2d1ee7cdfea8e73864389d303bd24c
BLAKE2b-256 c8f92a77d001ad95bb3e023b6dd4377d07d95e52f772c0973d187ed7620fde6e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cb346f6c1feef062a58761183111db61c33def25011356ae05a094a8e36696eb
MD5 f6acc70345a6e79f2932a1286b988dbe
BLAKE2b-256 90a43a07a58cb6a135c897315e2bff99be77b777251bf7d72c206b3135607d47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e9cc0a1c958df47a505603f1bda8248ccdd038a5103383f3e784541859d641e6
MD5 ec60fd27c6d048ed0d5ba7d41d0a8a03
BLAKE2b-256 94820686b121d8844d899d221c620a9f4b4a0dc8212065ee5c1f3e7ed4f68077

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 644d51361554177d7345797a6637cb650047c2f56dea6b5e98befb304288c611
MD5 40fa2124bc338ea8c3d3b4b0d3e02a01
BLAKE2b-256 e661464aadc8db07d10c5b2110cc51ab6b79a5aed5d044e93b29cdf978b0be8e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a773656fc61eefc37955901c6f401cc0ac48c5b57369fa56bcab63000efae04e
MD5 d303f214d9fc7c9a2f2d2b667c346f2a
BLAKE2b-256 42dd4c73a5436616455bffcd0e01079a00242257725373af92fe21506a0f8cab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 48f688b100e321f98e4426b1425717954cc12cdc7217c42c96267c76f7e89e0e
MD5 a53bc2968a0f0a04b1c2643ae5cfa29b
BLAKE2b-256 9c2cf38a334b2339a0b781d4e7c3c9137f64606cf5d8f6095d919f69dd67cd34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3635ee2d285ad9c5766782634682b7042f9c2371bf956dfb6e16b8bd2bb1dbf4
MD5 ec32cb3c8dc146ad114c27e5ee2c0e2e
BLAKE2b-256 88b1fde7a9a5809c6cfeba438ed34efbcc74fb9d93d3d350ac0ef9a3583c188a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5437ff22fba18bf99503a7d64542dbe2b3c92f691e596b30718d536979a2c985
MD5 f4af6596d6bc20bc241a03db055f3045
BLAKE2b-256 f716e663a454e721fb8b578406e104840f28bc5fee67f62e9721e10158d26d9d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2d565227add11d49766f81a2e8e17b8d9b59cc324e3b7976e1eac59b148a2975
MD5 87fcbfe7e54f9ca24e6c879eb65ff339
BLAKE2b-256 5402916df9048fbc30889763fb2a365c53d72646679b749307cf021a098c579c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pixelflux-1.3.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 fee8dbe831eed8160f6376cd69470249a935ef0a3ee5ff24ed36ab432603be44
MD5 f82b1a999e47afc6b0c05a442f425d1c
BLAKE2b-256 4eb39d45164b86e8ffb76301d724b6959e704918549673330ce6c6aeaee7dbd4

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