Ultra-fast Gaussian Splatting PLY + SPZ I/O library - pure Python with NumPy and Numba. Features 11x faster GPU transfers and automatic format state tracking for seamless conversions.
Project description
gsply
Ultra-Fast Gaussian Splatting PLY + SPZ I/O Library
93M Gaussians/sec read | 57M Gaussians/sec write | Auto-optimized
Quick Start • Installation • Examples • API Reference • Performance
Quick Start
from gsply import plyread, GSData, GSTensor
# Read PLY file (auto-detects format, zero-copy)
data = plyread("model.ply") # Functional API
# Or use object-oriented API
data = GSData.load("model.ply") # Classmethod
# Access fields
positions = data.means # (N, 3) xyz coordinates
colors = data.sh0 # (N, 3) RGB colors
scales = data.scales # (N, 3) scale parameters
rotations = data.quats # (N, 4) quaternions
# Save PLY file
data.save("output.ply") # Uncompressed
data.save("output.ply", compressed=True) # Compressed (71-74% smaller)
# GPU acceleration (optional)
gstensor = GSTensor.load("model.ply", device='cuda')
gstensor.save("output.compressed.ply") # GPU compression
Performance: 93M Gaussians/sec read, 57M Gaussians/sec write (400K Gaussians in 6-7ms)
Overview
Ultra-fast Gaussian Splatting PLY and SPZ I/O for Python. Zero-copy reads, auto-optimized writes, optional GPU acceleration.
Key Features
- Ultra-Fast: 93M Gaussians/sec read, 57M Gaussians/sec write
- Zero-Copy: Reads use memory views for maximum performance
- Auto-Optimized: Writes are 2.6-2.8x faster automatically
- Format Support: Uncompressed PLY + PlayCanvas compressed (71-74% smaller) + SOG + Niantic SPZ (v1–v4)
- GPU Ready: Optional PyTorch integration with GSTensor (11x faster transfers)
- Python-first: NumPy + Numba core with bundled C++ acceleration in v0.4.2+ wheels
- Object-Oriented API:
data.save(),GSData.load(),gstensor.save(),GSTensor.load() - Format Conversion:
normalize(),denormalize()with fused kernels (~8-15x faster) - Color Conversion:
to_rgb(),to_sh()for SH ↔ RGB conversion - Comprehensive: 435 passing tests, 22 skipped optional-environment tests, full type hints, extensive documentation
Installation
Basic Installation
pip install gsply
Core dependencies: NumPy and Numba (automatically installed)
Current PyPI wheel status (v0.4.2+): pip install gsply installs the
bundled gsply_cpp extension automatically on supported platform wheels:
Linux x86_64, Windows AMD64, and macOS arm64 for CPython 3.10-3.13. The Python
backend remains the default at runtime; opt into C++ with
gsply.use_backend("cpp") or gsply.use_backend("auto").
Optional Features
GPU Acceleration (PyTorch):
pip install torch
Enables GSTensor, plyread_gpu(), plywrite_gpu(), read_spz_gpu(), and
GPU-accelerated format conversions.
SOG Format Support:
pip install gsply[sogs]
Enables sogread() for reading SOG (Spatially Ordered Gaussians) format files.
C++ acceleration backend (bundled wheels):
pip install gsply installs the gsply_cpp backend automatically from the
published v0.4.2+ platform wheels on supported platforms. No gsply[cpp] extra
and no separate gsply-cpp package are needed.
pip install gsply
If pip uses the sdist, or if the platform has no matching wheel, the install can remain Python-only by default. To build the extension locally from the repository root, opt in explicitly:
pip install . -Cwheel.cmake=true -Ccmake.define.GSPLY_BUILD_CPP=ON
Then opt in at runtime (the Python backend remains the default):
import gsply
gsply.use_backend("cpp") # or "auto" (use C++ if importable), or "python"
# equivalently: set the env var GSPLY_BACKEND=cpp before importing gsply
print(gsply.active_backend()) # -> "cpp" when gsply_cpp is installed
data = gsply.read_spz("scene.spz") # routed through C++ when enabled
gsply.write_spz("out.spz", data, version=4)
When enabled, plyread/plywrite/read_spz/write_spz use gsply_cpp where it
applies and fall back to pure Python otherwise (e.g. compressed PLY). Reads are
float32-ULP-identical to the Python path; writes may differ by <=1 LSB per
quantized value and use a different compressor (decoded data matches; compressed
bytes differ).
For non-Python C++ applications, use the standalone CMake target in cpp/:
add_subdirectory(path/to/gsply/cpp) then link gsplycpp::core and include
gsplycpp.hpp. See cpp/README.md.
Full Installation:
pip install "gsply[sogs,spz]" torch # GPU + SOG + SPZ v4 support
Development:
git clone https://github.com/OpsiClear/gsply.git
cd gsply
pip install -e .[dev] # Includes pytest, ruff, mypy
Examples
Basic I/O
from gsply import plyread, plywrite, GSData
# Read PLY file
data = plyread("model.ply")
print(f"Loaded {len(data)} Gaussians")
# Object-oriented API
data = GSData.load("model.ply") # Auto-detects format
data.save("output.ply") # Uncompressed
data.save("output.ply", compressed=True) # Compressed
# Unpack to individual arrays
means, scales, quats, opacities, sh0, shN = data.unpack()
# Write with individual arrays
plywrite("output.ply", means, scales, quats, opacities, sh0, shN)
Format Conversion
from gsply import GSData
import numpy as np
# Load PLY file (log-scales, logit-opacities)
data = GSData.load("scene.ply")
# Convert to linear format for easier manipulation
data.denormalize() # Uses fused kernel (~8-15x faster)
# Modify in linear space
data.opacities = np.clip(data.opacities * 1.2, 0, 1)
data.scales *= 1.1
# Convert back to PLY format before saving
data.normalize() # Uses fused kernel (~8-15x faster)
data.save("modified.ply")
GPU Acceleration
from gsply import GSTensor, plyread_gpu, plywrite_gpu, read_spz_gpu
# Direct GPU I/O (4-5x faster than CPU decompress + GPU transfer)
gstensor = plyread_gpu("model.compressed.ply", device='cuda')
# Direct SPZ decode to tensors. Container decompression happens on CPU, then
# packed SPZ sections are uploaded once and unpacked with PyTorch ops.
spz_tensor = read_spz_gpu("model.spz", device='cuda')
# Or convert from CPU
data = GSData.load("model.ply")
gstensor = GSTensor.from_gsdata(data, device='cuda')
# Access GPU tensors
positions_gpu = gstensor.means # torch.Tensor on GPU
colors_gpu = gstensor.sh0 # torch.Tensor on GPU
# Filter on GPU
high_opacity = gstensor[gstensor.opacities > 0.5]
# GPU format conversion
gstensor.denormalize() # GPU-accelerated
# Write back (GPU compression)
gstensor.save("output.compressed.ply") # GPU compression by default
Creating from External Data
from gsply import GSData, GSTensor
import numpy as np
import torch
# Create GSData from arrays with format preset
data = GSData.from_arrays(
means=np.random.randn(1000, 3),
scales=np.random.rand(1000, 3),
quats=np.random.randn(1000, 4),
opacities=np.random.rand(1000),
sh0=np.random.randn(1000, 3),
format="linear" # or "auto", "ply", "rasterizer"
)
# Create GSTensor from tensors
gstensor = GSTensor.from_arrays(
means=torch.randn(1000, 3),
scales=torch.rand(1000, 3),
quats=torch.randn(1000, 4),
opacities=torch.rand(1000),
sh0=torch.randn(1000, 3),
format="linear",
device="cuda"
)
Data Manipulation
from gsply import GSData
# Slicing and indexing
subset = data[100:200] # Slice
first = data[0] # Single Gaussian
filtered = data[data.opacities > 0.5] # Boolean mask
# Concatenation
combined = data1 + data2 # Pairwise (1.9x faster)
merged = GSData.concatenate([data1, data2, data3]) # Bulk (6.15x faster)
# Optimize for faster operations
data = data.make_contiguous() # 2-45x speedup for operations
# Copy and modify
bright = data.copy()
bright.sh0 *= 1.5 # Make brighter
In-Memory Compression
from gsply import compress_to_bytes, decompress_from_bytes
# Compress for network transfer or storage
compressed_bytes = compress_to_bytes(data)
# Decompress from bytes
data_restored = decompress_from_bytes(compressed_bytes)
SPZ Format (Niantic)
from gsply import read_spz, read_spz_gpu, write_spz
# Read any SPZ — the container is auto-detected (legacy gzip v1/v2/v3 or NGSP v4
# zstd). Returns a GSData in PLY format, same API as plyread().
data = read_spz("scene.spz")
# PyTorch path: returns GSTensor on the requested device.
# This avoids materializing the decoded float arrays on CPU before upload.
gstensor = read_spz_gpu("scene.spz", device="cuda")
# Write v3 (gzip, smallest-three quats) — the default
write_spz("out.spz", data)
# Write v4 (NGSP container, per-attribute zstd) — Niantic's modern format, ~3% smaller
write_spz("out_v4.spz", data, version=4) # zstd_level=12 (default)
write_spz("fast.spz", data, version=4, zstd_level=9) # ~2.3x faster write, +0.8% size
v4 needs the zstd extra (
pip install gsply[spz]); v1–v3 work without it (large v3 writes use a core parallel gzip fallback whenisalis not present;isalremains preferred when installed).
SOG Format (Optional)
from gsply import sogread
# Read SOG file - returns GSData (same API as plyread)
data = sogread("model.sog")
positions = data.means
colors = data.sh0
# Read unbundled splat-transform output
data = sogread("model/meta.json")
# Read from bytes (in-memory, no disk I/O)
with open("model.sog", "rb") as f:
sog_bytes = f.read()
data = sogread(sog_bytes) # Fully in-memory extraction
# SOG returns PLY-format values: log-scales and logit-opacities.
linear = data.denormalize(inplace=False)
Performance
Benchmark Summary
Uncompressed Format (400K Gaussians, SH0):
- Read: 5.7ms (70M Gaussians/sec)
- Write: 19.3ms (21M Gaussians/sec)
Compressed Format (400K Gaussians, SH0):
- Read: 8.5ms (47M Gaussians/sec)
- Write: 15.0ms (27M Gaussians/sec)
- Size reduction: 71-74%
Peak Performance:
- Read: 78M Gaussians/sec (1M Gaussians, SH0, uncompressed)
- Write: 29M Gaussians/sec (100K Gaussians, SH0, compressed)
GPU Transfer (400K Gaussians, RTX 3090 Ti):
- With
_baseoptimization: 1.99ms (11x faster, single tensor transfer) - Without
_base: 22.78ms (CPU copy + transfer)
Format Conversion (Fused Kernels):
normalize()/denormalize(): ~8-15x faster with parallel Numba kernels- Single-pass processing reduces memory overhead
See detailed performance benchmarks for more information.
Format Support
Uncompressed PLY
Standard binary little-endian PLY format:
| SH Degree | Properties | Description |
|---|---|---|
| 0 | 14 | xyz, f_dc(3), opacity, scales(3), quats(4) |
| 1 | 23 | + 9 f_rest coefficients |
| 2 | 38 | + 24 f_rest coefficients |
| 3 | 59 | + 45 f_rest coefficients |
Compressed PLY (PlayCanvas)
Chunk-based quantized format:
- Automatically saves as
.compressed.plywhencompressed=True - Compression ratio: 71-74% size reduction
- Compatible with PlayCanvas, SuperSplat, other WebGL viewers
- Parallel compression/decompression with Numba JIT
SOG Format (Spatially Ordered Gaussians) - Optional
WebP-based texture format for web deployment:
- Requires
gsply[sogs]installation - Uses WebP images for efficient storage
- Codebook-based compression for scales and colors
- Compatible with PlayCanvas splat-transform
- Supports current
version: 2SOG and legacy V1 assets without a version field - Supports
.sogZIP bundles, folders, directmeta.jsonpaths, and ZIP bytes - Returns
GSDatacontainer (same API asplyread()) - Returns PLY-format log-scales and logit-opacities; call
denormalize()for linear scales/opacities - Invalid quaternion tags fall back to the canonical
wxyzidentity quaternion[1, 0, 0, 0], matching splat-transform - In-memory ZIP extraction: can read bundled SOG directly from bytes
SPZ (Niantic) - Optional
Niantic SPZ, read + write, both containers:
- Legacy gzip (v1/v2/v3): one gzip stream; v3 uses smallest-three quaternions
- NGSP v4: per-attribute zstd streams behind a 32-byte header + table of contents — Niantic's current format, ~3% smaller than gzip
- Container is auto-detected on read;
write_spz(..., version=3)(default, gzip) orversion=4(NGSP/zstd,zstd_leveltunable).read_spz/write_spzuse the PLY-formatGSDataAPI, round-trip with the Niantic reference both directions. - Requires
gsply[spz]for v4 (zstd); v1–v3 work with the core package. Large v3 writes use a parallel single-member gzip fallback unlessisalis present.
API Reference
Complete API documentation: docs/API_REFERENCE.md
Core I/O
plyread(file_path)- Read PLY files (auto-detects format)plywrite(file_path, ...)- Write PLY filesread_spz(file_path)- Read Niantic SPZ (gzip v1/v2/v3 or NGSP v4 zstd)read_spz_gpu(file_path, device="cuda")- Read SPZ intoGSTensorwith tensor decodewrite_spz(file_path, data, *, version=3, ...)- Write SPZ (v3 gzip / v4 zstd)detect_format(file_path)- Detect format and SH degreesogread(file_path | meta_json_path | bytes)- Read SOG files (optional)
GSData Container
GSData.load(file_path)- Load from PLY (classmethod)data.save(file_path, compressed=False)- Save to PLYGSData.from_arrays(...)- Create from arrays with format presetGSData.from_dict(...)- Create from dictionary with format presetdata.normalize()/data.denormalize()- Format conversion (fused kernels, ~8-15x faster)data.to_rgb()/data.to_sh()- Color conversion- Format query:
is_scales_ply,is_scales_linear,is_opacities_ply,is_opacities_linear,is_sh0_sh,is_sh0_rgb,is_sh_order_0/1/2/3 data[index]- Indexing and slicingdata.unpack()- Unpack to tupledata.copy()- Deep copy
Compression APIs
compress_to_bytes(data)- Compress to bytescompress_to_arrays(data)- Compress to arraysdecompress_from_bytes(bytes)- Decompress from bytes
Utility Functions
sh2rgb(sh)/rgb2sh(rgb)- Color conversionlogit(x)/sigmoid(x)- Optimized CPU functionsapply_pre_activations(data, ...)- Fused activation kernel (~8-15x faster)apply_pre_deactivations(data, ...)- Fused deactivation kernel (~8-15x faster)SH_C0- Normalization constant
GPU Support (PyTorch)
GSTensor.load(file_path, device='cuda')- Load from PLY (classmethod)gstensor.save(file_path, compressed=True)- Save with GPU compressionGSTensor.from_arrays(...)- Create from tensors with format presetGSTensor.from_gsdata(data, device='cuda')- Convert to GPUgstensor.to_gsdata()- Convert to CPUgstensor.normalize()/gstensor.denormalize()- GPU format conversiongstensor.to_rgb()/gstensor.to_sh()- GPU color conversion- Format query:
is_scales_ply,is_scales_linear,is_opacities_ply,is_opacities_linear,is_sh0_sh,is_sh0_rgb,is_sh_order_0/1/2/3 - Device management:
.to(),.cpu(),.cuda() - Precision:
.half(),.float(),.double()
What's New
v0.4.4 - SOG Parity and Normalization Correctness
- SOG parity:
sogread()now follows the current PlayCanvas splat-transform reader forversion: 2, legacy V1 assets, directmeta.jsonpaths, and unknown-version errors. - Normalization correctness: SOG data remains in PLY-format log-scales and
logit-opacities, and activated
exp/sigmoidvalues match splat-transform round trips. - Quaternion fallback: Invalid SOG tags and zero-norm activation fallback
now use canonical
wxyzidentity[1, 0, 0, 0].
v0.4.3 - SPZ v3 Python Write Performance
- Faster pure-Python SPZ v3 writes: Large
write_spz(..., version=3)payloads now use a parallel single-member gzip fallback whenisalis not installed. - Compatibility preserved: The optimized path still emits one strict gzip member and round-trips through the same SPZ reader and Niantic-compatible payload format.
v0.4.2 - Bundled Platform Wheels
- Bundled C++ wheels:
pip install gsplyinstallsgsply_cppautomatically on supported CPython 3.10-3.13 platform wheels. - No separate C++ extra: No
gsply[cpp]extra or separategsply-cpppackage is needed.
v0.2.11 - GPU Compression Optimization
- torch.compile() Auto-Optimization: GPU compression now uses
torch.compile()when available- ~25% faster GPU compression (5.0ms → 4.0ms for 365K Gaussians)
- Automatic fallback to eager mode if compilation fails
- Zero configuration required - works transparently
- GPU Rounding Fix: Fixed quaternion quantization to match CPU behavior exactly
- Platform Support: Triton backend on Linux (standard), Windows (requires
triton-windowspackage)
v0.2.9 - Protocol Interfaces & Performance Optimization
- Protocol Interfaces: Type-safe interfaces for format management
FormatAware- Protocol for objects that track format stateNormalizable- Protocol for objects that support format conversionGaussianContainer- Protocol for objects containing Gaussian splat data- Enables structural typing across GSData and GSTensor
- Format Management API: Advanced format control methods
format_stateproperty - Returns current format as immutable dictionarycopy_format_from(other)- Copy format state from another objectwith_format(**kwargs)- Create shallow copy with modified format
- Performance Optimizations: Improved efficiency for common operations
- Removed auto-consolidate overhead in plywrite() - users can call
make_contiguous()manually when needed - In-place format conversion now default (
inplace=True) - reduces memory allocations - Better performance for already-contiguous data
- Removed auto-consolidate overhead in plywrite() - users can call
v0.2.8 - Format Query Properties
- Format Query Properties: Convenient boolean properties to check current data format
is_scales_ply,is_scales_linear- Check scale formatis_opacities_ply,is_opacities_linear- Check opacity formatis_sh0_sh,is_sh0_rgb- Check color formatis_sh_order_0/1/2/3- Check SH degree- Available on both
GSDataandGSTensor
v0.2.7 - Fused Activation Kernels & Performance Optimization
- Fused Activation Kernels: Ultra-fast format conversion with parallel Numba kernels
apply_pre_activations()- Fused kernel for activating scales, opacities, and quaternions (~8-15x faster)apply_pre_deactivations()- Fused kernel for deactivating scales and opacities (~8-15x faster)normalize()anddenormalize()now use optimized fused kernels internally- Single-pass processing reduces memory overhead and improves cache locality
v0.2.6 - Format Safety & Auto-detection
- Convenience Factory Methods:
GSData.from_arrays(),GSData.from_dict(),GSTensor.from_arrays(),GSTensor.from_dict() - Auto-Format Detection: Smart heuristics automatically detect PLY vs Linear format
- Format Safety: Strict validation prevents mixing incompatible formats
- Format Helpers:
create_ply_format(),create_rasterizer_format()
v0.2.5 - SOG Format Support & API Improvements
- SOG Format Support:
sogread()- Read SOG (Spatially Ordered Gaussians) format files - Object-Oriented I/O API:
data.save(),GSData.load(),gstensor.save(),GSTensor.load() - Format Conversion API:
normalize(),denormalize()for linear ↔ PLY format conversion - Color Conversion API:
to_rgb(),to_sh()for SH ↔ RGB conversion
Full Changelog • API Reference
Development
Setup
# Clone repository
git clone https://github.com/OpsiClear/gsply.git
cd gsply
# Install in development mode
pip install -e .[dev]
# Run tests
pytest tests/ -v
# Run with coverage
pytest tests/ -v --cov=gsply --cov-report=html
Project Structure
gsply/
├── src/gsply/ # Source code
│ ├── __init__.py # Public API exports and lazy optional imports
│ ├── _backend.py # gsply_cpp backend selection
│ ├── gsdata.py # GSData dataclass
│ ├── reader.py # PLY reading
│ ├── writer.py # PLY writing
│ ├── spz.py # Niantic SPZ reading/writing
│ ├── sog_reader.py # SOG reading
│ ├── formats.py # Format detection
│ ├── utils.py # Utility functions (fused kernels)
│ └── torch/ # PyTorch integration
│ ├── gstensor.py # GSTensor GPU dataclass
│ ├── compression.py
│ ├── spz.py # SPZ tensor decode
│ └── io.py # GPU I/O
├── cpp/ # Bundled C++ acceleration backend source
├── tests/ # Unit tests (457 collected)
├── benchmarks/ # Performance benchmarks
├── docs/ # Documentation
└── pyproject.toml # Package configuration
Testing
gsply has comprehensive test coverage with 435 passed, 22 skipped, 457 collected in the latest local verification:
# Run all tests
pytest tests/ -v
# Run PyTorch tests (requires torch)
pytest tests/ -v -k "torch or gstensor"
# Run with coverage
pytest tests/ -v --cov=gsply --cov-report=html
Benchmarking
# Install benchmark dependencies
pip install -e .[benchmark]
# Run benchmark
python benchmarks/benchmark.py
Documentation
- API Reference - Complete API documentation
- Changelog - Version history and release notes
- Contributing - Contribution guidelines
Contributing
Contributions are welcome! Please see docs/CONTRIBUTING.md for guidelines.
Quick start:
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Run tests:
pytest tests/ -v - Submit a pull request
License
MIT License - see LICENSE file for details.
Citation
If you use gsply in your research, please cite:
@software{gsply2024,
author = {OpsiClear},
title = {gsply: Ultra-Fast Gaussian Splatting PLY I/O},
year = {2024},
url = {https://github.com/OpsiClear/gsply}
}
Related Projects
- gsplat: CUDA-accelerated Gaussian Splatting rasterizer
- nerfstudio: NeRF training framework with Gaussian Splatting support
- PlayCanvas SuperSplat: Web-based Gaussian Splatting viewer
- 3D Gaussian Splatting: Original paper and implementation
Made with Python and numpy
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 gsply-0.4.4.tar.gz.
File metadata
- Download URL: gsply-0.4.4.tar.gz
- Upload date:
- Size: 322.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d304edd21e62ee4a4c856edb78ad612938b9697cd3ef94f911f151cfce562fd4
|
|
| MD5 |
8016a03b482083799dea5bc73a915c0d
|
|
| BLAKE2b-256 |
5bfc39b7ee72957d86bd3c4ba7fd31fc026324696bb0ea72ce113de95f2909eb
|
Provenance
The following attestation bundles were made for gsply-0.4.4.tar.gz:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4.tar.gz -
Subject digest:
d304edd21e62ee4a4c856edb78ad612938b9697cd3ef94f911f151cfce562fd4 - Sigstore transparency entry: 1734248013
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: gsply-0.4.4-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 412.6 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36675a18d824f12943970eb50e1018d279398b40aec103abff5c6d5396ba2f47
|
|
| MD5 |
7ad1b72a3984cafad7347c9082caab6f
|
|
| BLAKE2b-256 |
a26e5ff0e315ed79e6ffd802627d046077e2baf4317dcdaa270227f6736d747c
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp313-cp313-win_amd64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp313-cp313-win_amd64.whl -
Subject digest:
36675a18d824f12943970eb50e1018d279398b40aec103abff5c6d5396ba2f47 - Sigstore transparency entry: 1734248237
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: gsply-0.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 747.3 kB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4485121bec0f9e26ff0aaf499bf2c46f5446f64dea97c6178cbd99bb8eb3900c
|
|
| MD5 |
0278ba9821d7f5b72432a194915f646e
|
|
| BLAKE2b-256 |
34340224868a4dda78febbedce7c9eda41f49044df5ecca8cffed16cdbafe6b8
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
4485121bec0f9e26ff0aaf499bf2c46f5446f64dea97c6178cbd99bb8eb3900c - Sigstore transparency entry: 1734248159
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: gsply-0.4.4-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 430.5 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e3a2a768c114924a30134b841b613ab6dc861c1c5dce731124ac16a4da5d659
|
|
| MD5 |
2874254e5cd86bf878784aa9c47518f2
|
|
| BLAKE2b-256 |
7f990c0419c6b9f9ab5582d22e95b8c077cfbabfe794550b2fd7a68beb9c3431
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
6e3a2a768c114924a30134b841b613ab6dc861c1c5dce731124ac16a4da5d659 - Sigstore transparency entry: 1734248306
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: gsply-0.4.4-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 412.6 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
128ba7c52a70eb25793a2129fb82e36298d1309cdf7a9fefd76da837b051ce6a
|
|
| MD5 |
5823b0ba1bdc3a388fc5d979287b76d1
|
|
| BLAKE2b-256 |
01897653b4d70f3408d2ea638653e2ccda4cb9e5a69aec871ddebb0cb2a9b7a5
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp312-cp312-win_amd64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp312-cp312-win_amd64.whl -
Subject digest:
128ba7c52a70eb25793a2129fb82e36298d1309cdf7a9fefd76da837b051ce6a - Sigstore transparency entry: 1734248202
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: gsply-0.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 747.3 kB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f100ed65096da870df550c0d2f021a6ac091044ff725bd571733bd3b2ba3a67
|
|
| MD5 |
aa19faba6886314d8c28d3885ff4fd26
|
|
| BLAKE2b-256 |
e2785324b41225b43a9611d0493977edadd4641b6ccc0df60c1511c81d7a0a00
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
8f100ed65096da870df550c0d2f021a6ac091044ff725bd571733bd3b2ba3a67 - Sigstore transparency entry: 1734248359
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: gsply-0.4.4-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 430.5 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef234a08199138518aa1cb85205a40eacc87aadce5114e1762cd23886a39169a
|
|
| MD5 |
7aa8e368113f462e20b48e8fbb4f1d37
|
|
| BLAKE2b-256 |
7860537b91a98e0d258e8dc9f136cb0293e54f79e2d5b5dd5703f420b3a38f67
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
ef234a08199138518aa1cb85205a40eacc87aadce5114e1762cd23886a39169a - Sigstore transparency entry: 1734248070
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: gsply-0.4.4-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 412.5 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
374ff26a7d3fe5a7255fcce7962e6248742a5dd3a715dad775eaa651263cb5a0
|
|
| MD5 |
cdff740266c0acf1adadd3ccc21808f3
|
|
| BLAKE2b-256 |
c5c4b1f5373569911803fb15022292db4af7fbe85f12721596954483d56a9599
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp311-cp311-win_amd64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp311-cp311-win_amd64.whl -
Subject digest:
374ff26a7d3fe5a7255fcce7962e6248742a5dd3a715dad775eaa651263cb5a0 - Sigstore transparency entry: 1734248411
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: gsply-0.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 747.5 kB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c95207a83425295069b71c026c8f4b48d82768ecfbe2a61b6c1a220a90f48997
|
|
| MD5 |
ebb9baf1117067acd4e227f17fd0f498
|
|
| BLAKE2b-256 |
ad90852f461ad53e899cadcbc2cc90384b69f2002a0bd46588149d7a72cc798b
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
c95207a83425295069b71c026c8f4b48d82768ecfbe2a61b6c1a220a90f48997 - Sigstore transparency entry: 1734248476
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: gsply-0.4.4-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 430.9 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c72fab1d5b975a27956525343862f8d17ba3b35e9cd37a90d8e27b3de32d0c9
|
|
| MD5 |
7dd63b2eb5f2fdbc45cbaf544c71d900
|
|
| BLAKE2b-256 |
d89c86375ed951ac40f3ba62442321c4972b0ac95dc5730e9e7c45ccc33f4218
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
5c72fab1d5b975a27956525343862f8d17ba3b35e9cd37a90d8e27b3de32d0c9 - Sigstore transparency entry: 1734248636
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: gsply-0.4.4-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 412.7 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dec86d25a43512210592650b9b35f92bcaa4ec5ea0888a5ec27c358a7ed0e4da
|
|
| MD5 |
cb3f43275a62751848fd3b0c1b8cf7b9
|
|
| BLAKE2b-256 |
cd3bb136eb6a7da38ebac398666c400171712a6f2cf29b23182e1165c7e33ef6
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp310-cp310-win_amd64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp310-cp310-win_amd64.whl -
Subject digest:
dec86d25a43512210592650b9b35f92bcaa4ec5ea0888a5ec27c358a7ed0e4da - Sigstore transparency entry: 1734248111
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: gsply-0.4.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 747.7 kB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db823f81e9163c61d95a65fb7248dc5b1aabd0656a71eff0c0fdada745bef2c2
|
|
| MD5 |
76d4126a0bc7f5b3f8f5ec92c7eb376b
|
|
| BLAKE2b-256 |
d35eb1fb5d34c6bc67a3bf80efc66dff74ee82ffa80edf0061b52972ac6973f5
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
db823f81e9163c61d95a65fb7248dc5b1aabd0656a71eff0c0fdada745bef2c2 - Sigstore transparency entry: 1734248578
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type:
File details
Details for the file gsply-0.4.4-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: gsply-0.4.4-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 431.1 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b2d23668ee6c7687694a00aeada3842b4350435ab1fb1bb6e16ef499c6002c7
|
|
| MD5 |
b57eb233de0288868f46154e644588bc
|
|
| BLAKE2b-256 |
a7b11f6ffd15937a31b33564a27d0880ac6d6094c75a243b48144dd8fb07de88
|
Provenance
The following attestation bundles were made for gsply-0.4.4-cp310-cp310-macosx_11_0_arm64.whl:
Publisher:
publish.yml on OpsiClear/gsply
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gsply-0.4.4-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
4b2d23668ee6c7687694a00aeada3842b4350435ab1fb1bb6e16ef499c6002c7 - Sigstore transparency entry: 1734248525
- Sigstore integration time:
-
Permalink:
OpsiClear/gsply@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Branch / Tag:
refs/tags/v0.4.4 - Owner: https://github.com/OpsiClear
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ed1c3e378050cce0878b882abde2ce0f5e6a020b -
Trigger Event:
release
-
Statement type: