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
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, delivering them via a callback mechanism. This stripe-based, change-driven approach is designed for efficient streaming or processing of visual data.
Installation
This module relies on a native C++ extension that is compiled during installation using your system's C++ compiler.
- Prerequisites (for the current X11 backend on Debian/Ubuntu):
Ensure you have a C++ compiler (
g++) and development files for Python, X11, Xext (XShm), libjpeg-turbo, and libx264.
sudo apt-get update && \
sudo apt-get install -y \
g++ \
libjpeg-turbo8-dev \
libx11-dev \
libxfixes-dev \
libxext-dev \
libx264-dev \
python3-dev
-
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 .
This command will use
setuptoolsto directly compile the C++ extension (screen_capture_module.cpp) and install it alongside the Python code into your environment.Note: The current backend is designed and tested for Linux/X11 environments.
Usage
Basic Capture
Here is a basic example demonstrating how to use the pixelflux module to start capturing and process encoded stripes.
import time
from pixelflux import CaptureSettings, ScreenCapture, StripeCallback
# Define your Python callback function.
# This function will be called from a background thread for each encoded stripe.
def my_python_callback(result, user_data):
"""
Callback function to process encoded stripes.
`result` is a StripeEncodeResult object with the stripe's data.
`user_data` is whatever object you passed to start_capture (or None).
"""
if result.data:
# result.type will be 1 for JPEG, 2 for H.264
type_str = "H264" if result.type == 2 else "JPEG"
print(
f"Received {type_str} stripe: "
f"frame_id={result.frame_id}, "
f"y_start={result.stripe_y_start}, "
f"height={result.stripe_height}, "
f"size={len(result.data)} bytes"
)
# Memory is managed automatically. No need to free anything.
# 1. Configure capture settings
settings = CaptureSettings()
settings.capture_width = 1280
settings.capture_height = 720
settings.capture_x = 0
settings.capture_y = 0
settings.target_fps = 30.0
# Set output mode to H.264 (1)
settings.output_mode = 1
settings.h264_crf = 25 # H264 Constant Rate Factor (0-51, lower is better quality)
# 2. Instantiate the ScreenCapture module
module = ScreenCapture()
# 3. Create a StripeCallback handler object
# This object simply holds your Python function.
callback_handler = StripeCallback(my_python_callback)
try:
# 4. Start the capture, passing the settings and callback handler.
# The third argument is optional user_data to be passed to your callback.
module.start_capture(settings, callback_handler, None)
print("Capture started. Press Enter to stop...")
input() # Keep the main thread alive while capture runs in the background.
finally:
# 5. Stop the capture. This will block until the background thread has exited.
module.stop_capture()
print("Capture stopped.")
Capture Settings
The CaptureSettings class allows for detailed configuration of the capture process.
# All attributes of the CaptureSettings object are standard Python 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 Quality 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 Quality 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
settings.h264_fullframe = False # Encode full frames instead of just changed stripes
# 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
settings.watermark_path = b"/path/to/your/watermark.png" # Must be bytes
settings.watermark_location_enum = 4 # 0:None, 1:TL, 2:TR, 3:BL, 4:BR, 5:Middle, 6:Animated
Stripe Callback and Data Structure
The start_capture function requires a StripeCallback object, which wraps your Python function. This function is invoked from a C++ background thread whenever an encoded stripe is ready.
Your callback function will receive two arguments:
result: AStripeEncodeResultobject containing the stripe data.user_data: The optional object you passed tostart_capture.
The StripeEncodeResult object has the following read-only properties:
class StripeEncodeResult:
# This is illustrative. You do not define this class.
# You receive an instance of it in your callback.
@property
def type(self) -> int: ... # StripeDataType: 1 for JPEG, 2 for H.264
@property
def stripe_y_start(self) -> int: ...
@property
def stripe_height(self) -> int: ...
@property
def size(self) -> int: ... # The size of the data in bytes
@property
def data(self) -> bytes: ... # The encoded stripe data as a Python bytes object
@property
def frame_id(self) -> int: ... # Frame counter for this stripe
Memory Management: The memory for the stripe data is managed automatically. When the StripeEncodeResult object received by your callback is garbage-collected by Python, its internal C++ destructor is called, which frees the underlying data buffer. You do not need to do any manual memory management.
Features
- Efficient Pixel Capture: Leverages a native C++ module using XShm for optimized X11 screen capture performance.
- Stripe-Based Encoding (JPEG & H.264): Encodes captured frames into horizontal stripes, processed in parallel using a number of threads based on system core count. Each stripe is an independent data unit.
- Change Detection: Encodes only stripes that have changed (based on XXH3 hash comparison) since the last frame, significantly reducing processing load and bandwidth. This approach is inspired by VNC.
- Configurable Capture Region: Specify the exact X, Y, width, and height of the screen region to capture.
- Adjustable FPS, Quality, and Encoding Parameters: Control frame rate, JPEG quality (0-100), and H.264 CRF (0-51).
- Dynamic Quality Optimizations:
- Paint-Over for Static Regions: After a stripe remains static for
paint_over_trigger_frames, it is resent. For JPEG, this usespaint_over_jpeg_qualityifuse_paint_over_qualityis true. For H.264, this triggers a request for an IDR frame for that stripe, ensuring a full refresh. - Adaptive Behavior for Highly Active Stripes (Damage Throttling):
- Identifies stripes that change very frequently (exceeding
damage_block_thresholdupdates). - For these "damaged" stripes, damage checks are done less frequently, saving resources on high motion.
- For JPEG output, the quality of these frequently changing stripes dynamically adjusts (reducing slightly on change) and resets to higher base/paint-over quality after a cooldown period of
damage_block_durationframes. This manages resources effectively for volatile content.
- Identifies stripes that change very frequently (exceeding
- Paint-Over for Static Regions: After a stripe remains static for
- Direct Callback Mechanism: Provides encoded stripe data, including a custom header, 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 stripes. - An HTTP server to serve a client-side HTML page for viewing the stream.
- The
pixelfluxmodule to perform the screen capture and encoding, with proper asynchronous shutdown logic to prevent deadlocks.
To run this example:
Note: This example assumes you are on a Linux host with a running X11 session and will only work from localhost unless HTTPS is added.
-
First, ensure you have the
websocketslibrary installed (it is a dependency for the example, not the library itself):pip install websockets
-
Navigate to the
exampledirectory within the repository:cd example
-
Execute the Python script:
python3 screen_to_browser.py -
Open your web browser and go to the URL indicated by the script's output (usually
http://localhost:9001/index.html) 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pixelflux-1.2.1.tar.gz.
File metadata
- Download URL: pixelflux-1.2.1.tar.gz
- Upload date:
- Size: 51.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0222909ae6b8fdc726fd1c23d926ce66688cdb09dd24602a18da6564e62ecea6
|
|
| MD5 |
e74b8a2a66c8de69d5c19024f6bd4e04
|
|
| BLAKE2b-256 |
a3a45b24126f4226e8cc2380c9213a73bc1a9d678e4843560778bd5c713aa140
|
File details
Details for the file pixelflux-1.2.1-cp313-cp313-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp313-cp313-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.13, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b969858b66bb681f1a89a54803bc0f563b658481e43025dc1931acb935556bb
|
|
| MD5 |
7f1b6ceca3fc27ede8b86b5ecc6bd24e
|
|
| BLAKE2b-256 |
c4fa6cee00b67ffe677ed8117021904aa963882f21a7cfef8abb6d22c98a5fca
|
File details
Details for the file pixelflux-1.2.1-cp313-cp313-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp313-cp313-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.13, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66207b956ea9ba783d4a6248551ae412492b1c8c5525684b57652e057cbc7e62
|
|
| MD5 |
00c5c4b25934fbd8527b01a50a8a2200
|
|
| BLAKE2b-256 |
a8035c16152945b84d4f7bac6053b2421cde5e4b35e92d03d844d2411d98406c
|
File details
Details for the file pixelflux-1.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4d645b7ce01b5416490094190bc8b850d575036fe0b592dc69bcf9bbc66350b
|
|
| MD5 |
7dfcd12d2d79dad6deffaf1d5b2cdda5
|
|
| BLAKE2b-256 |
d95e32ba9dfb5a23276a16e81eeb6febb63d5c6b41afa7e39e691067e875fb6f
|
File details
Details for the file pixelflux-1.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6779973fd41075dca97e607abd7c2d4d4aa58889c51b7e4625d06e2ae52cbc3
|
|
| MD5 |
27dc05a99dbb7a9735099cdb3d5c64d6
|
|
| BLAKE2b-256 |
5e1c084d01e2547add5cc5d8dd6c00b1ed08eac83809ce02b68c190c40782467
|
File details
Details for the file pixelflux-1.2.1-cp312-cp312-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de9834c90ea4547675cea42dc8cf559eec7a8488336d8eb6c57c8a1e72473969
|
|
| MD5 |
438eaf1bd6ab7eb29f27d985f4d2f139
|
|
| BLAKE2b-256 |
fbb740149fa732b7520a9d76d32ee42fa255bffdd31da3210813cf6d0a85d855
|
File details
Details for the file pixelflux-1.2.1-cp312-cp312-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp312-cp312-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.12, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de38701ecc129e70e94e82fecddc6051b279841d3cd023fe440b9985a9b07ebe
|
|
| MD5 |
5cbf534f216ac31d400c81fddd43ab09
|
|
| BLAKE2b-256 |
f794c7aaaa4d9df3fc695e253088555a513cf0674c57502b5ee44b59eb5fe87d
|
File details
Details for the file pixelflux-1.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b008373fc392daca700b0055d4ba60bd0734da5edc0a6ccbd7d66426a3a5c199
|
|
| MD5 |
ee10a6c76ede13b4076dc4b8c4dbd25d
|
|
| BLAKE2b-256 |
55da351a0177e80d026bb09744178a1527badda4cdc5a4652297e0b4fafc207b
|
File details
Details for the file pixelflux-1.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c088da01e2fa9da4885bee007e76064d5f3f96d40b475f7ef18ca59ebd55494f
|
|
| MD5 |
c8074b081e011c5223413f57f8113898
|
|
| BLAKE2b-256 |
0c7a84298c8421570cd806c4910dd56fb1821e3c283746369fa5e79b38bb3228
|
File details
Details for the file pixelflux-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d296b97fc93933c4d68028bfcaf6570276c0311f87ac50f627d88bb8dbab26e6
|
|
| MD5 |
4aeb0a34ecac261ff521260b09323a41
|
|
| BLAKE2b-256 |
ce26e719e88263d0caa0589e963acdb7424c19854379155bce817bf8d52bba56
|
File details
Details for the file pixelflux-1.2.1-cp311-cp311-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp311-cp311-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.11, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f09ecfff0037e6cf85c12a96685545b31277578a81db198fd75a87c6e3b1adea
|
|
| MD5 |
876f1082faa717eba01f63f414abc6b2
|
|
| BLAKE2b-256 |
b3714bf04875cdc32ae3ffdb7e68277b423e879b9718c902cc24334976805545
|
File details
Details for the file pixelflux-1.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c3b34d017e424cb2bcba84e8906eb510e83a128579ac2b201211661e659ea00
|
|
| MD5 |
bc5d687f5a6a395bb76eab9d334528f3
|
|
| BLAKE2b-256 |
d5611d6ada1856fd8ee2f262c0ae0572578d21cbdf002bade747f2612d265f7f
|
File details
Details for the file pixelflux-1.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1517fdfcfe77aee14a031824c057e019e9bcb3d3644f4d90fb639d5af51b66a5
|
|
| MD5 |
36822a132e054ff1d6195c14372665ea
|
|
| BLAKE2b-256 |
ef5c28ecb5d10035acadba6214bf0eaf7e2709521b25149e37e806a91d06e7e3
|
File details
Details for the file pixelflux-1.2.1-cp310-cp310-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8bea2f1f9114188e7f4895b931af9caf38487df1e9266abcc5e31abff82e11c
|
|
| MD5 |
791b43ff9d9d70b22e6db95e27c783c4
|
|
| BLAKE2b-256 |
745a01f5ad418789766cef1a0e8993d1597b9fce34c576c18de34690a492f3c8
|
File details
Details for the file pixelflux-1.2.1-cp310-cp310-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp310-cp310-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.10, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73327381f288ace31230c26c11985b93a96fa79af2ad540023de1bedfbcf63f9
|
|
| MD5 |
eb7e5d485c8421e00cc79c3bff31894b
|
|
| BLAKE2b-256 |
6fb5ecb612c33c77929dee8821f73441d07ba7949534c618c2e212cf0358e4af
|
File details
Details for the file pixelflux-1.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09b6f693442d334197de629f8fa96ba3ce24485b626f4648c6d40fbd7af5261b
|
|
| MD5 |
4c484af3da6dc16829f812349e8ed99b
|
|
| BLAKE2b-256 |
47c6ff65c5558b2c17fb0986fed4d888b3bd645623ad4887f5f16677309dec54
|
File details
Details for the file pixelflux-1.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7573ec8f5c22d8a1af6d661cfc38523100b1132752f5be656c700a3a011f27a
|
|
| MD5 |
b3ce4f632bcf48b37a4f3ed3d6d3095e
|
|
| BLAKE2b-256 |
313782b8e6c68542651c358e510615856440ab21ddd122688e603b315ef45bd2
|
File details
Details for the file pixelflux-1.2.1-cp39-cp39-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp39-cp39-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.9, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28ccaa7732cc845683328a86707de5cb6ba202f55a51b07306b2affafaf6b9a7
|
|
| MD5 |
9d83039395c33e308eaa40bbd9884e1a
|
|
| BLAKE2b-256 |
bcd2660b9d25491b7b8c7d4f6fc00b8afef3895881d99024a624657ea5ab5050
|
File details
Details for the file pixelflux-1.2.1-cp39-cp39-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp39-cp39-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.9, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f054e9ac96b4f394fc3bd51e62236d35605f363322839cfe4448fa1617291d6
|
|
| MD5 |
065299147d62f224d2a23c052eb11686
|
|
| BLAKE2b-256 |
eaca353da012b496cf4919aa4eabf0a86334aa03d41b7b9a1eb12206ec14b6c4
|
File details
Details for the file pixelflux-1.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.9, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
498fe0a17e541b4f3eb17aeeec29fdb27da2ad48148ae2308b55da8d52fe6cd9
|
|
| MD5 |
fd484592894fc3f39886c20a5e173aeb
|
|
| BLAKE2b-256 |
c6fe058e52c2b889e3c7067d0af6402206f9dc785902212c891919eab655d1c7
|
File details
Details for the file pixelflux-1.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.9, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0fdd0afa035488cfe82c62f19a2f40b54813c07fecd1b441e5354ecb7b7992c1
|
|
| MD5 |
53089d73e3c17e1c87f0ffa21647e214
|
|
| BLAKE2b-256 |
598108098f1fa51fc795634fce84a324dbe081d1b14c2e876d6c67cccf4bbb2c
|
File details
Details for the file pixelflux-1.2.1-cp38-cp38-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp38-cp38-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.8, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a9435699b8837653e6a22f9979a4ce806cb199c5dc7ff4b85b98e7c11134200
|
|
| MD5 |
b5a8755cbeca21e5dd4592bc162e46f3
|
|
| BLAKE2b-256 |
e21dd128b755dddd8aa207045b896aeca444630ae26105a533488f8f5d85743d
|
File details
Details for the file pixelflux-1.2.1-cp38-cp38-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp38-cp38-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.8, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
057dd69b5f41768eefd87c4ac136e229ba8a7623503cae2a3f46e547f212c73c
|
|
| MD5 |
b788f175127bdd594ec980fcf2101e5f
|
|
| BLAKE2b-256 |
c61c7aec5bc49615a22bdb7b2b5ea72d78a07a34bf19514bf1e197d6c6c7fc1f
|
File details
Details for the file pixelflux-1.2.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.8, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
390d5ab51257b15034922ed53a70881bad48dc7bc7ee6ad7b40ef2a42793a5b0
|
|
| MD5 |
4f00294799c5df148cd34e63f3a24c76
|
|
| BLAKE2b-256 |
254f619f6f8d43388336139e962dcb62f81744e40fd9ffc41345d8a2c5bf5483
|
File details
Details for the file pixelflux-1.2.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: pixelflux-1.2.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.8, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f48fc4835a0a3e0cb5e902a6a5b4f07d3bbe1c415749efc9c9e8a40f77c6f673
|
|
| MD5 |
7f2daf6d16492281f2176c2f6446ed82
|
|
| BLAKE2b-256 |
96dc3b0e515da2d45a971bb9678e7c1d4583f4b059960993132f4fb5c9cb7314
|