Skip to main content

No project description provided

Project description

sailpy - Python bindings for SAIL

The missing small and fast image decoding library for humans (not for machines).

Features

  • Fast - Written in C/C++ for maximum performance
  • 20+ image formats - JPEG, PNG, WebP, AVIF, TIFF, GIF, BMP, and more
  • Format conversion - Easy pixel format conversion
  • Metadata support - Access EXIF, ICC profiles, and more
  • NumPy integration - Zero-copy access to pixel data
  • Clean API - Simple and intuitive interface

Installation

Pre-built wheels with all dependencies included:

pip install sailpy

Quick Start

import sailpy
import numpy as np

# Load an image
image = sailpy.Image.from_file("photo.jpg")
print(f"Size: {image.width}x{image.height}")

# Convert to NumPy array (zero-copy!)
pixels = image.to_numpy()

# Process with NumPy
inverted = 255 - pixels

# Save result
new_image = sailpy.Image.from_numpy(inverted, image.pixel_format)
new_image.save("output.png")

Supported Formats

Format Load Save Features
AVIF Modern efficient format
BMP Windows Bitmap
GIF Animations
JPEG Lossy compression
JPEG 2000 Advanced JPEG
JPEG XL Next-gen format
PNG Lossless with alpha
PSD Photoshop files
QOI Quite OK Image
SVG Vector graphics
TGA Targa
TIFF Multi-page support
WebP Google's format

...and more! See full list.

Examples

The package includes comprehensive examples demonstrating various features:

# View all available examples
import sailpy.examples
print(sailpy.examples.__doc__)

Run examples from command line:

python -m sailpy.examples.01_quickstart
python -m sailpy.examples.12_image_viewer  # Qt-based image viewer

Available examples:

  • 01_quickstart.py - Basic image loading and saving
  • 02_memory_io.py - Working with memory buffers
  • 03_features_and_options.py - Codec features and save options
  • 04_numpy_integration.py - NumPy array integration
  • 05_multiframe.py - Multi-frame image handling
  • 06_probe.py - Image probing without full loading
  • 07_codec_info.py - Querying codec information
  • 08_logging.py - Logging configuration
  • 09_image_transformations.py - Image transformations
  • 10_enum_usage.py - Working with enums
  • 11_advanced_saving.py - Advanced saving options
  • 12_image_viewer.py - Simple Qt-based image viewer

Basic Loading and Saving

import sailpy

# Load
image = sailpy.Image.from_file("input.jpg")
print(f"Format: {image.pixel_format}")
print(f"Size: {image.width}x{image.height}")

# Save in different format
image.save("output.png")

Format Conversion

import sailpy

image = sailpy.Image.from_file("input.jpg")

# Convert to RGBA
image.convert(sailpy.PixelFormat.BPP32_RGBA)

image.save("output.png")

NumPy Integration

import sailpy
import numpy as np

# Load image
image = sailpy.Image.from_file("photo.jpg")

# Get NumPy array (zero-copy when possible!)
pixels = image.to_numpy()
print(f"Array shape: {pixels.shape}")

# Apply filters
brightened = np.clip(pixels * 1.2, 0, 255).astype(np.uint8)

# Create new image from array
result = sailpy.Image.from_numpy(brightened, image.pixel_format)
result.save("brightened.png")

Batch Conversion

import sailpy
from pathlib import Path

input_dir = Path("images")
output_dir = Path("converted")
output_dir.mkdir(exist_ok=True)

for img_path in input_dir.glob("*.jpg"):
    image = sailpy.Image.from_file(str(img_path))
    image.convert(sailpy.PixelFormat.BPP24_RGB)
    image.save(str(output_dir / f"{img_path.stem}.png"))

Image Information

import sailpy

image = sailpy.Image.from_file("photo.jpg")

print(f"Dimensions: {image.width}x{image.height}")
print(f"Pixel format: {image.pixel_format}")
print(f"Bits per pixel: {image.bits_per_pixel}")
print(f"Is RGB: {image.is_rgb_family}")
print(f"Is grayscale: {image.is_grayscale}")

Creating Images from Scratch

import sailpy
import numpy as np

# Create a new image
image = sailpy.Image(sailpy.PixelFormat.BPP24_RGB, 640, 480)

# Fill with color using NumPy
pixels = image.to_numpy()
pixels[:] = [0, 128, 255]  # Blue color

# Or create gradient
pixels[:, :, 0] = np.linspace(0, 255, 640)  # Red gradient

image.save("created.png")

Error Handling

import sailpy

# Error handling with specific exceptions
try:
    image = sailpy.Image.from_file("image.xyz")
except FileNotFoundError:
    print("File not found")
except ValueError as e:
    print(f"Unsupported format or invalid parameters: {e}")
except Exception as e:
    print(f"Error loading image: {e}")

# Check if format is supported before loading
try:
    codec = sailpy.CodecInfo.from_path("image.xyz")
    if not codec.can_load:
        print(f"Format {codec.name} cannot load images")
    else:
        image = sailpy.Image.from_file("image.xyz")
except ValueError:
    print("Format not supported")
except FileNotFoundError:
    print("File not found")

Multi-Frame Images (Animations)

import sailpy

# Load animated GIF or multi-page TIFF
input = sailpy.ImageInput("animation.gif")
frames = input.load_all()

print(f"Total frames: {len(frames)}")

# Process each frame
for i, frame in enumerate(frames):
    print(f"Frame {i}: {frame.width}x{frame.height}, delay={frame.delay}ms")
    # Extract individual frames
    frame.save(f"frame_{i:03d}.png")

# Or iterate frame by frame (memory efficient)
input = sailpy.ImageInput("animation.gif")
for i, frame in enumerate(input):
    print(f"Processing frame {i}")
    # Process frame...

# Load with custom options
options = sailpy.LoadOptions()
input = sailpy.ImageInput("image.tiff").with_options(options)
frames = input.load_all()

Working with Memory (Bytes)

import sailpy
import requests

# Load from HTTP
response = requests.get("https://example.com/image.jpg")
image = sailpy.Image.from_bytes(response.content)

# Save to memory
image_bytes = image.to_bytes("png")
print(f"PNG size in memory: {len(image_bytes)} bytes")

# Send over network, save to database, etc.

Image Transformations

import sailpy

image = sailpy.Image.from_file("photo.jpg")

# Rotate (creates new image)
rotated = image.rotate_to(sailpy.Orientation.ROTATED_90)
rotated.save("rotated_90.jpg")

# Mirror (in-place)
image.mirror(sailpy.Orientation.MIRRORED_HORIZONTALLY)
image.save("mirrored.jpg")

# Rotate in-place
image.rotate(sailpy.Orientation.ROTATED_180)
image.save("rotated_180.jpg")

# Apply EXIF orientation
if image.source_image and image.source_image.orientation:
    corrected = image.rotate_to(image.source_image.orientation)
    corrected.save("corrected.jpg")

Advanced: Frame-by-Frame Writing

import sailpy

# Save multi-page TIFF (memory efficient for large datasets)
output = sailpy.ImageOutput("document.tiff")

# Optional: Set save options
options = sailpy.SaveOptions()
options.compression = sailpy.Compression.DEFLATE
options.compression_level = 6
output = output.with_options(options)

# Save pages one by one
for page_num in range(10):
    # Create or load page
    page = sailpy.Image(sailpy.PixelFormat.BPP24_RGB, 1024, 768)
    # ... fill page data ...

    output.save(page)

output.finish()
print("Multi-page document created")

API Reference

Core Classes

Image

Main class representing an image with pixel data.

Constructors:

Image()  # Create invalid image
Image(path: str)  # Load from file
Image(pixel_format: PixelFormat, width: int, height: int)  # Create empty

Properties:

  • width: int - Image width in pixels
  • height: int - Image height in pixels
  • pixel_format: PixelFormat - Pixel format
  • bits_per_pixel: int - Bits per pixel
  • bytes_per_line: int - Bytes per scan line
  • pixels_size: int - Total pixel data size
  • gamma: float - Gamma value
  • delay: int - Animation frame delay (milliseconds)
  • resolution: Resolution - Image resolution
  • source_image: SourceImage - Source image information
  • meta_data: MetaData - Image metadata (EXIF, etc.)
  • iccp: Iccp - ICC profile
  • palette: Palette - Color palette (for indexed images)

Properties:

  • is_valid: bool - Check if image is valid
  • is_rgb_family: bool - Check if RGB-like format
  • is_grayscale: bool - Check if grayscale
  • is_indexed: bool - Check if indexed (palette-based)

Methods:

  • from_file(path: str) -> Image - Load from file (static)
  • load(path: str) - Load from file (instance method)
  • save(path: str, options: SaveOptions = None) - Save to file
  • convert(pixel_format: PixelFormat) - Convert pixel format (in-place)
  • convert_to(pixel_format: PixelFormat, options: ConversionOptions = None) -> Image - Convert to new image
  • rotate(orientation: Orientation) - Rotate image (in-place)
  • rotate_to(orientation: Orientation) -> Image - Rotate to new image
  • mirror(orientation: Orientation) - Mirror image (in-place)
  • to_numpy() -> np.ndarray - Get NumPy array view (zero-copy when possible)
  • from_numpy(array: np.ndarray, pixel_format: PixelFormat) -> Image - Create from NumPy array (static)

ImageInput

Low-level interface for loading images with more control.

# Basic usage
input = ImageInput(path: str)
frames = input.load_all()  # Load all frames
frame = input.next_frame()  # Load next frame
input.stop()  # Stop loading

# With custom options (builder pattern)
options = LoadOptions()
input = ImageInput("image.tiff").with_options(options)
frames = input.load_all()

# Force specific codec (for files with wrong/missing extension)
codec = CodecInfo.from_name("png")
input = ImageInput("image.dat").with_codec(codec)

ImageOutput

Low-level interface for saving images with more control.

# Basic usage
output = ImageOutput(path: str)
output.save(image: Image)
output.finish()

# With save options (builder pattern)
options = SaveOptions()
options.compression = Compression.JPEG
output = ImageOutput("output.tiff").with_options(options)
output.save(image)
output.finish()

# Force specific codec (for files with custom extension)
codec = CodecInfo.from_name("tiff")
output = ImageOutput("output.dat").with_codec(codec)

CodecInfo

Information about image format codecs.

Methods:

  • from_extension(ext: str) -> CodecInfo - Get codec by extension
  • from_path(path: str) -> CodecInfo - Get codec from file path
  • from_mime_type(mime: str) -> CodecInfo - Get codec by MIME type
  • list() -> List[CodecInfo] - Get all available codecs

Properties:

  • name: str - Codec name
  • description: str - Codec description
  • version: str - Codec version
  • extensions: List[str] - Supported file extensions
  • mime_types: List[str] - Supported MIME types
  • magic_numbers: List[bytes] - Magic number patterns
  • can_load: bool - Can load images
  • can_save: bool - Can save images
  • is_valid: bool - Check if codec info is valid
  • load_features: LoadFeatures - Supported load features
  • save_features: SaveFeatures - Supported save features

Enums

PixelFormat

Pixel format enumeration.

RGB formats:

  • BPP24_RGB, BPP24_BGR - 24-bit RGB/BGR
  • BPP32_RGBA, BPP32_BGRA - 32-bit RGB/BGR with alpha
  • BPP48_RGB, BPP48_BGR - 48-bit RGB/BGR
  • BPP64_RGBA, BPP64_BGRA - 64-bit RGB/BGR with alpha

Grayscale:

  • BPP8_GRAYSCALE, BPP16_GRAYSCALE - 8/16-bit grayscale
  • BPP8_GRAYSCALE_ALPHA, BPP16_GRAYSCALE_ALPHA - With alpha

Indexed:

  • BPP1_INDEXED, BPP2_INDEXED, BPP4_INDEXED, BPP8_INDEXED

Compression

Compression types for saving images.

Values: NONE, RLE, JPEG, DEFLATE, LZW, ZIP, ZSTD, etc.

LogLevel

Logging levels.

Values: SILENCE, ERROR, WARNING, INFO, DEBUG, TRACE

Support Classes

SaveOptions

Options for saving images.

options = SaveOptions()
options.compression = Compression.DEFLATE
options.compression_level = 6

# Codec-specific tuning (dict[str, Variant])
# IMPORTANT: Set the whole dict, not individual keys
options.tuning = {"png-filter": Variant("paeth")}  # PNG: none, sub, up, avg, paeth

# Use with ImageOutput
output = ImageOutput("output.png").with_options(options)
output.save(image)
output.finish()

LoadOptions

Options for loading images.

options = LoadOptions()
# Most codecs don't require load options
# LoadOptions.tuning is available for codec-specific settings if needed

# Use with ImageInput
input = ImageInput("image.tiff").with_options(options)
frames = input.load_all()

Resolution

Image resolution information.

# Create and set resolution for an image
resolution = Resolution()
resolution.x = 300
resolution.y = 300
resolution.unit = ResolutionUnit.INCH

# Assign via property
image.resolution = resolution

# Access existing resolution
print(f"DPI: {image.resolution.x}x{image.resolution.y} {image.resolution.unit}")

MetaData

Image metadata container.

# Load metadata from loaded image
image = Image.from_file("photo.jpg")
meta = image.meta_data
if meta:
    print(f"Key: {meta.key()}")
    value = meta.value  # Property, not method
    if value.has_string():
        print(f"Value: {value.to_string()}")

# Create and set metadata
new_meta = MetaData()
new_meta.set_key(MetaDataType.ARTIST)

variant = Variant()
variant.set_string("John Doe")
new_meta.set_value(variant)

# Add to image
image.set_meta_data([new_meta])

Functions

set_log_barrier(level: LogLevel)

Set minimum logging level.

sailpy.set_log_barrier(sailpy.LogLevel.DEBUG)

set_logger(callback: Callable)

Set custom logging callback.

def my_logger(level, message):
    print(f"[SAIL {level}] {message}")

sailpy.set_logger(my_logger)

Version Information

import sailpy

# Get version string
print(sailpy.__version__)  # e.g., "0.9.10"

Example Modules

The sailpy.examples package contains working examples:

# Find examples location
import sailpy.examples
print(sailpy.examples.__path__)

# Run programmatically
from sailpy.examples import example_01_quickstart
# example_01_quickstart.main()  # If example has main()

Performance

SAIL is designed for performance:

  • Zero-copy NumPy integration when possible
  • Efficient C/C++ implementation
  • Optimized codecs
  • Minimal memory allocations

See benchmarks comparing SAIL to other libraries.

Requirements

  • Python 3.9+
  • NumPy 1.20+

Building from Source

git clone https://github.com/HappySeaFox/sail.git
cd sail/src/bindings/python
pip install -e .

License

MIT License - see LICENSE for details.

Links

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

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

sailpy-1.0.3.tar.gz (668.2 kB view details)

Uploaded Source

Built Distributions

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

sailpy-1.0.3-cp314-cp314-win_amd64.whl (19.5 MB view details)

Uploaded CPython 3.14Windows x86-64

sailpy-1.0.3-cp314-cp314-manylinux_2_39_x86_64.whl (69.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.39+ x86-64

sailpy-1.0.3-cp314-cp314-macosx_15_0_arm64.whl (22.1 MB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

sailpy-1.0.3-cp313-cp313-win_amd64.whl (19.0 MB view details)

Uploaded CPython 3.13Windows x86-64

sailpy-1.0.3-cp313-cp313-manylinux_2_39_x86_64.whl (69.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

sailpy-1.0.3-cp313-cp313-macosx_15_0_arm64.whl (22.1 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

sailpy-1.0.3-cp312-cp312-win_amd64.whl (19.0 MB view details)

Uploaded CPython 3.12Windows x86-64

sailpy-1.0.3-cp312-cp312-manylinux_2_39_x86_64.whl (69.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

sailpy-1.0.3-cp312-cp312-macosx_15_0_arm64.whl (22.1 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

sailpy-1.0.3-cp311-cp311-win_amd64.whl (19.0 MB view details)

Uploaded CPython 3.11Windows x86-64

sailpy-1.0.3-cp311-cp311-manylinux_2_39_x86_64.whl (69.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

sailpy-1.0.3-cp311-cp311-macosx_15_0_arm64.whl (22.1 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

sailpy-1.0.3-cp310-cp310-win_amd64.whl (19.0 MB view details)

Uploaded CPython 3.10Windows x86-64

sailpy-1.0.3-cp310-cp310-manylinux_2_39_x86_64.whl (69.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ x86-64

sailpy-1.0.3-cp310-cp310-macosx_15_0_arm64.whl (22.1 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

File details

Details for the file sailpy-1.0.3.tar.gz.

File metadata

  • Download URL: sailpy-1.0.3.tar.gz
  • Upload date:
  • Size: 668.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sailpy-1.0.3.tar.gz
Algorithm Hash digest
SHA256 637c15c63b67c56c4f65c48183be83359e362336e710b935dfb913f214728893
MD5 798ee58a68ea606b031c1d33425f6148
BLAKE2b-256 69fa5c050f6abd36ced4f1813372fb32a5134431c7e5f19411e79c54a6a051d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3.tar.gz:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: sailpy-1.0.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 19.5 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sailpy-1.0.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 fbbe742784a19d77a12ab24681b46cda4dc08a6ce4865dd5e5fbfaef73b1641b
MD5 c616c5ba2a9145cb0fbe6e16958a3f13
BLAKE2b-256 950be4e88885a56faad6bb65307363a53b18390e82753c3b3b088dc350fe80cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp314-cp314-win_amd64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp314-cp314-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for sailpy-1.0.3-cp314-cp314-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 5bd3191ed44610d3e7d64b1796579770778f7e89c425282969d76da36403bea8
MD5 a4521a135b0a9da46fceb8342d59227c
BLAKE2b-256 138b138e736b996eb87870d008603e38e7d5d2c4a7360a9a426ffd6e6b512c2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp314-cp314-manylinux_2_39_x86_64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sailpy-1.0.3-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 64641a75095988bb23768e6e360c3a4916ed52bf4c16ba5c338c36db64653075
MD5 85ffa946883f060e00acc52f83a3e77d
BLAKE2b-256 68f0c253b617329721577b8f8768b4e8b13f5e9a953420f42dc8ef54bf13d792

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp314-cp314-macosx_15_0_arm64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: sailpy-1.0.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 19.0 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sailpy-1.0.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c309a0dc8f70c5b4f0b02baff2f5839b0f7c2c98c8d6818c90efa69959537337
MD5 07f72dff876905725e1a74c7714e9404
BLAKE2b-256 5f9923646812bbc347fe92aef899aaeb9a269187d2e286b727aa4375e94dd719

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp313-cp313-win_amd64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for sailpy-1.0.3-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 e7fdf80e0a38c1fd9bc2c1c09ae60b53e9e6bf89756647750b1ead223b65257d
MD5 bc6dbe68f8c250faa04355408f7315f0
BLAKE2b-256 fdb65c7ea909a24fddd671d04fbec9a8a8225ac209fe049f593c06eb666a9671

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp313-cp313-manylinux_2_39_x86_64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sailpy-1.0.3-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 a6fd22c554f2feb8c32c521fe6fba3cd8be7cd6863cc9af9bd4aecbff974c42d
MD5 972c7b822fa4bc2b099700c929e50697
BLAKE2b-256 501c42139ffe668ec0a5ca2c756b40207c7632517ff9f243a300964390e67631

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp313-cp313-macosx_15_0_arm64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: sailpy-1.0.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 19.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sailpy-1.0.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4f914e67fcf821ca23205f8f3589bfed433d54679eaaa9851e9474df7a94914e
MD5 9217991a54b0d974e3f0ec4630e62b02
BLAKE2b-256 36b900996ae1b3959b4a6312cb318135b3a8967a7964843e460adfedabc80295

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp312-cp312-win_amd64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for sailpy-1.0.3-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 bb5023ea119d452f40c3edb1ca17de6f880cf0b58b88de56934438db01a64fa2
MD5 f12dc92e5a63066392055f2ce9fbb254
BLAKE2b-256 70c405d12e3d166a78918e13ab7d8dfa3ef21400c9e8eafbdae20e4a7fae6b38

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp312-cp312-manylinux_2_39_x86_64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sailpy-1.0.3-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 91530e572570f373f6442fd9e831f569b954756147b043da630930ba98b64374
MD5 65e77f8b1b9b8afc974684c81fa17913
BLAKE2b-256 12627ea23eaf7f349dbcce4b463c72f8c7e68efb7def27f0a2be031ad0592002

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp312-cp312-macosx_15_0_arm64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: sailpy-1.0.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 19.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sailpy-1.0.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 94959659c28895428ced91e687b54009f730f6bb7d485c3e41f939b7baaacb06
MD5 c4ce3499412c3c6e2a45b3016704f24a
BLAKE2b-256 4c182c07fad1048fd26320ce1a4ad4a8849c55924f78dd6f66f43ea836affe02

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp311-cp311-win_amd64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp311-cp311-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for sailpy-1.0.3-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 643a0064c3e44b0eaec6d6cfa380f798d761eeb01cefc6473a8ba763687caa8b
MD5 3921ca19b7be33aa94239941e356c288
BLAKE2b-256 6b3aae2e02b28c1af45b1c6abfe32f8bee874478133b3e3d983b4f1a1ad5bb5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp311-cp311-manylinux_2_39_x86_64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sailpy-1.0.3-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 edd73ee3143a9b939487a981255c58bcccb1bcb9fdc742e9e328adcb83b595bf
MD5 adefe5ba71d3470ac3187c4516f40e7d
BLAKE2b-256 bef8e496d390b606e941ad9aa9ca65493ec70b564fd67c500ac67eb73149f2d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp311-cp311-macosx_15_0_arm64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: sailpy-1.0.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 19.0 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sailpy-1.0.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ae7d3cf988ab5d3e334a5ef268719f0d2284cc7e38d6ab74cce3ed37da610350
MD5 11498553d542e1807651df395f451c95
BLAKE2b-256 f19629986c0fcf2d4ef89120c6355d23415de82c8e3cd73fe0299a4b64b080ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp310-cp310-win_amd64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp310-cp310-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for sailpy-1.0.3-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 c731fbc9d70e41fe3ff33ac141deec79ca183c7eddec363065906ec79885d1db
MD5 306ad85407002b593ac417b3cf81f8fb
BLAKE2b-256 d5e1c1999462e95230fa5132c1750156425e81228ebb85acdf17e7c96fa99898

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp310-cp310-manylinux_2_39_x86_64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sailpy-1.0.3-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for sailpy-1.0.3-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 44f440851a4a1fb13f47c221058e9c685ba79c795a1d0d7946f15205eb7b35df
MD5 a5cbc80a56b3a37e8cf7fd334c1ec055
BLAKE2b-256 d443fc187f1cd148f36ab554a946c98c572397fe3397485e1efaba1199c5bb96

See more details on using hashes here.

Provenance

The following attestation bundles were made for sailpy-1.0.3-cp310-cp310-macosx_15_0_arm64.whl:

Publisher: build-python-wheels.yml on HappySeaFox/sail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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