Lossless RGB + bit-exact auxiliary signals (depth, object IDs, …) in one WebM (VP9)
Project description
ChromaPakZ
A lossless RGBD video codec (クロマパックZ): one ordinary .webm that carries an 8-bit RGB track
alongside bit-exact 16-bit auxiliary signals — depth, object IDs, packed normals, or any other W×H
uint16 plane — in sync. It is built so that
- a legacy player shows plain RGB — the depth rides in extra tracks a normal player ignores;
- it uses only royalty-free codecs (VP9 / libvpx, BSD) — no GPL encoder, no patent pool;
- it runs in the browser via WebCodecs — no WASM on Chromium, with a small libvpx-WASM fallback for engines whose native path isn't bit-exact; and
- depth is packed with one reversible map, not the range-slice bookkeeping of older schemes;
- multiple lossless uint16 signals (depth, object IDs, …) share one container in sync.
It's a clean-room redo of an older MP4/x264 approach (RGB as YUV, plus 16-bit depth sliced into several lossless-10-bit ranges). That design worked but had three thorns: x264 is GPL, the range-slicing was fiddly, and the browser always needed a WASM codec. ChromaPakZ removes the first two outright; for the third, Chromium runs end-to-end on WebCodecs with no WASM, and a small libvpx-WASM build is kept only as a per-operation fallback for engines whose native path isn't bit-exact (Firefox, Safari).
The same format is implemented three times — browser (WebCodecs), C++ (libvpx), and Python — and a file written by any one decodes bit-exactly in the others.
Quickstart
# Browser demo — encode→file→decode→view, entirely in-page (no WASM on Chromium)
python3 -m http.server 8000 # from the repo root, then open http://localhost:8000/demo/
# Python / C++ — the native libvpx core is compiled from source, so install the build
# prerequisites first: libvpx (dev headers), pkg-config, CMake, and a C++17 compiler.
# macOS: brew install libvpx pkg-config cmake ninja
# Debian: sudo apt-get install libvpx-dev pkg-config cmake ninja-build g++
pip install . # pip compiles the native core via CMake and bundles it
python -c "import chromapakz as cz; print(cz.inverse_depth_spec(0.3, 9.0))"
# cz.encode({"depth": u16}, specs={"depth": cz.inverse_depth_spec(near, far)}, rgb=rgba)
# Browser JS API — streaming encode/decode (see docs/API.md)
# createEncoder({ signals: [{ id:'depth', near, far }, { id:'objectId' }] })
# createDecoder(bytes).readFrame() -> { rgb, signals: { depth: { u16 }, objectId: { u16 } } }
# C++ / CLI
cmake -S . -B build && cmake --build build -j # or: native/build.sh
./build/dccli selftest
./build/dccli decodesignal clip.webm depth depth.u16
How it works
| Layer | Choice |
|---|---|
| Container | WebM / Matroska, multi-track. RGB is track 1, so any player shows it; depth tracks are ignored by players that don't know them. A Duration, a Cues index, and ~1 s RGB keyframes make it seekable in <video> (depth stays single-keyframe — it isn't what <video> plays). |
| RGB track | 8-bit VP9, YUV 4:2:0, BT.709 full-range — a normal, viewable video stream. |
| Lossless signals | Each signal: optional quant (e.g. inverse-depth for float depth) → uint16 → triangle-fold 8+8 → two VP9 lossless tracks. Add object IDs, labels, etc. as additional signal pairs. |
| Metadata | v2 signals[] only — each signal (id, tracks, scheme, quant). |
Inverse-depth quantization spends precision where it matters (near surfaces), matching how stereo/ToF sensors behave. Float can't be stored losslessly in 16 bits, so this quantization is the format's defined precision boundary; everything below it is bit-exact.
Triangle-fold is the key trick. The naive low byte d & 0xFF is a sawtooth — a hard 255→0 cliff
every 256 levels — and those manufactured edges wreck any spatial predictor (this is exactly why the old
design needed range slices). Reflecting every other segment (lo = (high&1) ? 255-lo : lo) turns it into a
continuous triangle wave with no cliffs, so VP9's own predictor works. It's range-slicing collapsed into one
reversible map, with nothing to manage.
Full color range is signaled in the bitstream (VP9E_SET_COLOR_RANGE), so a range-honouring decoder
returns the packed luma unscaled instead of applying a limited-range conversion that would corrupt depth.
Why these choices (measured, not assumed — Chromium 148)
WebCodecs has no "lossless" switch, so every claim here is a measurement from
experiments/webcodecs-lossless:
- VP9 at QP 0 is bit-exact through WebCodecs; AV1 is not (AV1
quantizer:0drifts by up to ~257). So VP9 carries depth; AV1 is fine only for the lossy RGB track. - Triangle-fold beats a naive byte-split by ~13%, and inter-coding cuts another ~52% (and stays bit-exact across the GOP) — most of what looks like incompressible LSB noise is actually static fold structure that temporal prediction removes.
- 8+8 beats high-bit-depth. 10-bit VP9 encode is available in browsers, but a 10+6 split is ~4% worse than 8+8 and narrows browser reach, so 8+8 wins on both counts.
docs/EVALUATION.md is the full due-diligence record: every codec/container/packing
alternative considered, the constraint that eliminates each, a head-to-head benchmark (ChromaPakZ beats
FFV1, PNG-16 and x264 on the same 16-bit depth, beats x265/HEVC at matched 11-bit precision, and lands
within 1–2% of LZMA), cited licensing/browser
facts, and a sensitivity analysis of when a different choice would win.
What it costs
Lossless 16-bit depth of a real sensor is noise-bound: the low bits are largely sensor noise, and
lossless coding must preserve every bit of it. On real Kinect data (TUM RGB-D fr1/desk, 30 frames at
640×480, 78% valid):
| track | bits / pixel |
|---|---|
| RGB | 0.19 |
| depth (hi + lo) | 0.50 + 4.35 |
| total | 5.04 |
— depth round-tripped bit-exact. Reproduce with examples/tum_fr1desk.py (see its header for the
one-line dataset fetch).
The one knob that moves this is the quantization precision vs the sensor's noise floor. Spreading depth
over all 65,535 codes makes one step far finer than the noise, so the codec faithfully archives randomness.
Coarsening the grid to match the noise collapses the cost — without losing real signal. The sweep below is
measured on the synthetic benchmark clip (make_synthetic_rgbd.py, range ≈0.9–7.8 m) — a separate clip from
the TUM numbers above:
| effective bits | depth precision at 7.8 m | depth bpp |
|---|---|---|
| 16 (default) | 0.9 mm per step | 13.2 |
| 12 | 14 mm per step | 9.7 |
| 11 | 28 mm per step | 8.1 |
| 10 | 56 mm per step | 6.9 |
(Reproduce the bpp column with python python/benchmark_codecs.py.) levels is a first-class,
metadata-stored parameter (default 65536 = full 16-bit) shared by all three implementations, so
reduced-precision files reconstruct identically everywhere. Set it with ingest.py --depth-bits N or the
levels= argument.
Codec rate-distortion
This is a separate axis from precision: how faithfully the codec carries whatever quantized depth you give it. PSNR here is the encode→decode path measured against the source codes.
The lossless codecs all sit on the ∞-dB band — they reproduce depth exactly and differ only in size,
where ChromaPakZ (VP9) is smallest, just under FFV1, with PNG-16 well behind. The blue curve is ChromaPakZ's
own near-lossless option (sweeping the VP9 quantizer trades fidelity for size), but the default operating
point is QP 0, bit-exact. Regenerate with python python/plot_rd.py.
A note on ffmpeg. Decoding ChromaPakZ files with ffmpeg (or any conformant VP9 decoder) is bit-exact. But encode with ChromaPakZ, not the ffmpeg CLI:
ffmpeg -c:v libvpx-vp9 -lossless 1is lossless yet ~3× larger (≈39 vs ≈13 bpp) — same library, far worse coding decisions, and no flag tested closes the gap.python/plot_rd.pytherefore uses the real WebCodecs encoder for the VP9 numbers.
Cross-language implementations
All three read and write the identical .webm, verified bit-exact in every direction (browser ⇄ C++ ⇄
Python), and produce standard files — ffprobe reports matroska,webm with one RGB stream plus two VP9
streams per lossless signal, and ffmpeg decodes track 0 as plain RGB when present.
Format schema: docs/FORMAT.md. API: docs/API.md.
| Surface | Codec | Build |
|---|---|---|
| Browser | WebCodecs VP9 | none — src/chromapakz.js, src/signals.js, src/webm.js. Multi-signal streaming API. |
| C++ | libvpx VP9 | CMake → build/_core + dccli (dc_encode_multi, dc_decode_signal) |
| Python | ctypes → C++ | pip install . — encode(), decode(), parse_metadata() |
./build/dccli encodergbd rgb.rgba depth.u16 W H N fps near far kbps out.webm
./build/dccli decodesignal clip.webm objectId ids.u16
./build/dccli decodergb clip.webm rgb.rgba
Real-data ingestion (python/)
ingest.py— load depth (.exr/.npy/.npz/ 16-bit PNG·TIFF / raw) and optional RGB (image sequence, video via ffmpeg, or array), auto-derive inverse-depthnear/farfrom percentiles, encode, and report real per-track bpp. Invalid pixels (<=0/NaN) map to code 0.python ingest.py --depth 'd_*.exr' --rgb 'rgb_*.png' -o clip.webm --report --verifymake_synthetic_rgbd.py— a realistic RGBD generator (smooth surfaces, depth edges, disparity-domain noise, occlusion shadows, dropout holes) for when you don't have a sensor handy.webm_inspect.py— pure-Python EBML parser for the per-track byte breakdown.
How it relates to RealSense / Kinect
Depth-camera ecosystems already split into two camps; ChromaPakZ takes the best of both.
- Intel RealSense colorizes 16-bit depth into an RGB image (Hue, ~10.5 effective bits) and encodes that with a stock H.264/H.265 codec. Great for streaming and reuse of hardware codecs, but lossy — unfit for ground-truth or archival depth.
- Kinect / RGBD datasets store depth raw or as 16-bit PNG. Azure Kinect even records to Matroska with a 16-bit depth track (lossless via per-frame PNG); TUM RGB-D, NYU and ScanNet use 16-bit PNG sequences. Bit-exact, but intra-only and large — no temporal compression.
| RealSense colorize | Kinect / PNG | ChromaPakZ | |
|---|---|---|---|
| bit-exact 16-bit depth | ✗ (lossy) | ✓ | ✓ |
| RGB plays in any legacy player | ✓ | — | ✓ |
| inter-frame (temporal) compression | ✓ (lossy) | ✗ | ✓ (lossless) |
| royalty-free, browser-native (no WASM on Chromium) | — | — | ✓ |
That Azure Kinect already chose Matroska — WebM's basis — is telling. ChromaPakZ differs by compressing depth losslessly (VP9 + triangle-fold, inter-coded) rather than storing raw or intra PNG, and by running in the browser. Sources: RealSense colorized depth, Azure Kinect record format.
Repository layout
src/ chromapakz.js, signals.js, webm.js, chromapakz-core.js
native/ chromapakz.{h,cpp}, dccli.cpp
python/ chromapakz/ (pip package), ingest.py, make_synthetic_rgbd.py
demo/ index.html in-browser encode→decode→view
examples/ tum_fr1desk.py
experiments/ webcodecs-lossless/ run.mjs, smoke-demo.mjs, headless tests
docs/ FORMAT.md, API.md, EVALUATION.md, RELEASING.md
tests/ roundtrip.py, cross_interop.py, stream_interop.py, ffmpeg_interop.py, js_*.mjs
CI builds and tests on Linux + macOS and runs the in-browser VP9-lossless probe in headless Chromium;
docs/RELEASING.md covers wheels and PyPI publishing. The full design rationale and benchmarks are in
docs/EVALUATION.md.
Status & limitations
Working end-to-end and verified across all three implementations. Honest caveats:
- Browser support is engine-specific (measured,
EVALUATION.md§11): native WebCodecs lossless encode is Chromium-only today (WebKit lacks WebCodecs' quantizer mode; Firefox's QP 0 isn't lossless); native lossless decode works on Chromium and WebKit/Safari, while Firefox decodes VP9 to color-converted BGRX. Where native can't be trusted, the library transparently falls back to a bundled libvpx-WASM codec, chosen per operation by a cached runtime probe — so a decode-only browser (e.g. Safari) downloads onlyvp9-decode.wasmand never the larger encoder, and vice-versa. Force it withbackend: 'webcodecs' | 'wasm'(default'auto'); seedocs/API.md. These are Playwright engine builds — reconfirm on shipping browsers before hard claims. - "Royalty-free" reflects the AOMedia/Google position on VP9; Sisvel operates pools that dispute it.
- An auto precision picker (estimate the sensor noise floor to choose
--depth-bits) is future work. - Network byte streaming is supported via
onChunkon encode andcreateDecoder()+push()/finish()on decode. Seedocs/API.md.
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 chromapakz-0.2.0.tar.gz.
File metadata
- Download URL: chromapakz-0.2.0.tar.gz
- Upload date:
- Size: 2.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1042390ada200bc2ff58513578eecf628911325c1233b5b6d7f77a87678f278f
|
|
| MD5 |
858b9c34c681d19828e2b306dc9a494e
|
|
| BLAKE2b-256 |
088a441c9d2d02bab2d6d290186be198453ce81bf64fbbf09f152fc57b9ed438
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0.tar.gz:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0.tar.gz -
Subject digest:
1042390ada200bc2ff58513578eecf628911325c1233b5b6d7f77a87678f278f - Sigstore transparency entry: 1900155298
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71fde28d3da20611829e259fb18abaf33e09dce50f41cf447df611fda022c825
|
|
| MD5 |
4d93027338eea3ab4c52c40bf248091c
|
|
| BLAKE2b-256 |
0a10f4871870f1aaf181a80adfdc9d17055f2943554fccb239cf76302a221ac8
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
71fde28d3da20611829e259fb18abaf33e09dce50f41cf447df611fda022c825 - Sigstore transparency entry: 1900157117
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d775a07a13294c846c2ca6608cb068a5aa8b149a58198d2960f356534a3ecfa2
|
|
| MD5 |
0c1268182dff669a2c9bd77b971e2907
|
|
| BLAKE2b-256 |
1bed11db71a4c5f83865fc9ed4a98c1d5b086b2d4382fd9122dd2bcb86f8bbca
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl -
Subject digest:
d775a07a13294c846c2ca6608cb068a5aa8b149a58198d2960f356534a3ecfa2 - Sigstore transparency entry: 1900158098
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp313-cp313-macosx_15_0_arm64.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp313-cp313-macosx_15_0_arm64.whl
- Upload date:
- Size: 869.8 kB
- Tags: CPython 3.13, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c87ae5a2b9cea565ed017a3bb9429df804a786d8fe976832521b6ea935ebae6c
|
|
| MD5 |
ad9f4bc775bf543a96428a45cb372a7c
|
|
| BLAKE2b-256 |
c7f05d6767d3b14c4e371be1be5ead9781debf0f723d1a1c5328447544ef7499
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp313-cp313-macosx_15_0_arm64.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp313-cp313-macosx_15_0_arm64.whl -
Subject digest:
c87ae5a2b9cea565ed017a3bb9429df804a786d8fe976832521b6ea935ebae6c - Sigstore transparency entry: 1900157917
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22fc8042ff48bddc6b0c36008728d8de793ce5385ddc4564e73d586aeb4a6f05
|
|
| MD5 |
a1041159d7ed8d64a6b0d481a689a657
|
|
| BLAKE2b-256 |
747f03c0a34a22497a91561c3f7a3fd945af0fab87d9972f5868233156386a6b
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
22fc8042ff48bddc6b0c36008728d8de793ce5385ddc4564e73d586aeb4a6f05 - Sigstore transparency entry: 1900156985
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d480e76f847cc15d5a210c6b1117bf3e3deee4db6fa71aebd7d374e7743e1029
|
|
| MD5 |
7cdd923fc256086ec0c901f7fcb03a5b
|
|
| BLAKE2b-256 |
b523cb5b33dee77dd04656308706a1c6357c8a46fa7adf7b54934a7b30124eed
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl -
Subject digest:
d480e76f847cc15d5a210c6b1117bf3e3deee4db6fa71aebd7d374e7743e1029 - Sigstore transparency entry: 1900155959
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp312-cp312-macosx_15_0_arm64.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp312-cp312-macosx_15_0_arm64.whl
- Upload date:
- Size: 869.8 kB
- Tags: CPython 3.12, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0c1dec6138dfe0f5ca7362a69495c1f51e96c2de197af515eb3be6d06564045
|
|
| MD5 |
89dba454c4c83b01bcb18ec5a25ee076
|
|
| BLAKE2b-256 |
b4ee61ac3125dba2e5e9bbc51f14cfbf3f01d217cd7d02840761d8c295c0fe98
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp312-cp312-macosx_15_0_arm64.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp312-cp312-macosx_15_0_arm64.whl -
Subject digest:
c0c1dec6138dfe0f5ca7362a69495c1f51e96c2de197af515eb3be6d06564045 - Sigstore transparency entry: 1900157523
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
948c68d0d1f9388a2b7a36a9cf00b6c662c1282a4e716d71f07939b07e0f30ad
|
|
| MD5 |
2c7ad393c4b654ec77e884f94736d1ee
|
|
| BLAKE2b-256 |
d4bdd54fff85addab6eb27beda77e029aa0bcb9589244f41192643250f67d367
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
948c68d0d1f9388a2b7a36a9cf00b6c662c1282a4e716d71f07939b07e0f30ad - Sigstore transparency entry: 1900156312
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af2ff816c84d3e7d53ea947c6c07981f22176080da19b0ce724ea63eeccaa00a
|
|
| MD5 |
7984e19f3ef97d933f055433f9125ab7
|
|
| BLAKE2b-256 |
3737f068207d1f730d94e5e5c6076e21ed5c2113aae55ca71cdb3dc9ae559fa6
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl -
Subject digest:
af2ff816c84d3e7d53ea947c6c07981f22176080da19b0ce724ea63eeccaa00a - Sigstore transparency entry: 1900156656
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp311-cp311-macosx_15_0_arm64.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp311-cp311-macosx_15_0_arm64.whl
- Upload date:
- Size: 869.8 kB
- Tags: CPython 3.11, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d474af70a18e39be3313cecac0231ab45e1cdd4816d8b97c21b52801f1b36fc3
|
|
| MD5 |
3eb214a5014740ef4948236b8538e5e4
|
|
| BLAKE2b-256 |
9cad36ca7606e9111cd9018348e83a4532e3188689d476cc9d5694b0330be6ff
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp311-cp311-macosx_15_0_arm64.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp311-cp311-macosx_15_0_arm64.whl -
Subject digest:
d474af70a18e39be3313cecac0231ab45e1cdd4816d8b97c21b52801f1b36fc3 - Sigstore transparency entry: 1900157265
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1546d62193c18fc2d1ce10dfe219bd107fa6b468c7fdff6e62f64b2caefa3d3
|
|
| MD5 |
f3bf823def3a8a1b9b847284cba3499d
|
|
| BLAKE2b-256 |
6da81a995298251345d2eefeab74d3d45cf852f38dace1f856258879bfc7d007
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
f1546d62193c18fc2d1ce10dfe219bd107fa6b468c7fdff6e62f64b2caefa3d3 - Sigstore transparency entry: 1900156155
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe982507dd57c1b047ecfbe96e3a87b266e6fe4a2aa4babee56f1dbfbeb775eb
|
|
| MD5 |
cbcc4672a13a1512f24d2bbdfdac18f7
|
|
| BLAKE2b-256 |
a5aabd1031085267839b90be700f17910c8a8c8debc25e8f367f214e41dc7a36
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl -
Subject digest:
fe982507dd57c1b047ecfbe96e3a87b266e6fe4a2aa4babee56f1dbfbeb775eb - Sigstore transparency entry: 1900157727
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp310-cp310-macosx_15_0_arm64.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp310-cp310-macosx_15_0_arm64.whl
- Upload date:
- Size: 869.8 kB
- Tags: CPython 3.10, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efb735f462fb6b944582c4a6bc06b49e806729b018cf970e267c1c16e9cf2c1d
|
|
| MD5 |
06de60b7f15c910e2a351b702d2817df
|
|
| BLAKE2b-256 |
be6f51a3725cfe48ba30f48608c09eb549737c6660cf703f246b49efc4568456
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp310-cp310-macosx_15_0_arm64.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp310-cp310-macosx_15_0_arm64.whl -
Subject digest:
efb735f462fb6b944582c4a6bc06b49e806729b018cf970e267c1c16e9cf2c1d - Sigstore transparency entry: 1900156492
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0421159967421f11c3b1feb283fd424abd4b79ff1d2a76fdc6e1dce56fc153bb
|
|
| MD5 |
eadc79ac7e85985f90670f348de41143
|
|
| BLAKE2b-256 |
2267631d758b56beecfbf7138b24fc0a5e35edee0feb10b887aa9a5e649d946a
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
0421159967421f11c3b1feb283fd424abd4b79ff1d2a76fdc6e1dce56fc153bb - Sigstore transparency entry: 1900156821
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad556c5e09148c18f8394346c7ab65d26627ca8b9a0369bad93afbb7d3adfc48
|
|
| MD5 |
3672a44ebc3d7cdafd8133a79d9b535a
|
|
| BLAKE2b-256 |
5e9d674221651c37d0b2e4d6a41f36aa2cb6cdc9bf340bd7a9c9219db7e5e8b1
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl -
Subject digest:
ad556c5e09148c18f8394346c7ab65d26627ca8b9a0369bad93afbb7d3adfc48 - Sigstore transparency entry: 1900155564
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type:
File details
Details for the file chromapakz-0.2.0-cp39-cp39-macosx_15_0_arm64.whl.
File metadata
- Download URL: chromapakz-0.2.0-cp39-cp39-macosx_15_0_arm64.whl
- Upload date:
- Size: 869.8 kB
- Tags: CPython 3.9, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b6bb88d8e026eec7fc5555623867140cdfdbbb67683a6b526716d16843efc23
|
|
| MD5 |
420a27f56d22d1b700c43e917143ec62
|
|
| BLAKE2b-256 |
646c4a8e040e10296871089f1a10fa248c6c135440da98248da02af0c338effd
|
Provenance
The following attestation bundles were made for chromapakz-0.2.0-cp39-cp39-macosx_15_0_arm64.whl:
Publisher:
release.yml on kmatzen/ChromaPakZ
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
chromapakz-0.2.0-cp39-cp39-macosx_15_0_arm64.whl -
Subject digest:
7b6bb88d8e026eec7fc5555623867140cdfdbbb67683a6b526716d16843efc23 - Sigstore transparency entry: 1900155760
- Sigstore integration time:
-
Permalink:
kmatzen/ChromaPakZ@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kmatzen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bae75d8e344b644a8eb224ce0b994e6d01c85d88 -
Trigger Event:
release
-
Statement type: