edgefirst-decoder
YOLO and ModelPack output decoding for edge AI — bounding boxes, segmentation masks and multi-object tracking, without leaving native code.
Part of the EdgeFirst HAL
edgefirst-decoder is one of five Python packages built from the EdgeFirst Hardware Abstraction Layer.
The EdgeFirstAI/hal repository is the home for all of them — source, issue tracker, architecture documentation and release notes.
| Package | Provides |
|---|---|
edgefirst-tensor |
Zero-copy tensor allocation and host/GPU/CUDA mapping |
edgefirst-codec |
JPEG and PNG decoding directly into pre-allocated tensors |
edgefirst-image |
GPU-accelerated colour conversion, resize, letterbox, tiling and drawing |
edgefirst-decoder |
YOLO and ModelPack output decoding (this package) |
edgefirst-tracker |
ByteTrack multi-object tracking |
Installation
pip install edgefirst-decoder
Requires Python 3.8 or newer; edgefirst-tensor and NumPy are installed automatically. Wheels are published for Linux (x86_64, aarch64), macOS (arm64), and Windows (x86_64).
Packages install under the PEP 420 edgefirst.* namespace, so the import is edgefirst.decoder.
Quick start
Describe your model's outputs, then decode inference results into detections:
import numpy as np
from edgefirst.decoder import Decoder, Output, Tensor
decoder = Decoder.new_from_outputs(
outputs=[Output.detection(shape=[1, 84, 8400])],
score_threshold=0.25,
iou_threshold=0.45,
)
# `raw` is what your inference runtime produced. Copy it into a HAL tensor;
# in a real pipeline the runtime writes into the tensor directly instead.
raw = np.zeros((1, 84, 8400), dtype=np.float32)
raw[0, 0:4, 0] = [0.5, 0.5, 0.2, 0.2] # cx, cy, w, h (normalized)
raw[0, 4, 0] = 0.9 # class 0 score
output = Tensor(raw.shape, "float32")
output.from_numpy(raw)
boxes, scores, classes, masks = decoder.decode([output])
print(np.asarray(boxes), np.asarray(scores), np.asarray(classes))
Boxes come back normalized. NMS runs by default in class-agnostic mode; pass nms=Nms.ClassAware or nms=None to change or bypass it.
For a quantized model, attach the quantization parameters to the output description so the decoder dequantizes as it reads:
Output.detection(shape=[1, 84, 8400]).with_quantization(scale=0.004, zero_point=-123)
Configurations can also be supplied as a dictionary, or as JSON or YAML, with Decoder(config_dict), Decoder.new_from_json_str() and Decoder.new_from_yaml_str(). Set decoder_version=DecoderVersion.Yolo26 for end-to-end Ultralytics models.
decode() and friends accept a model-output tensor from any edgefirst.* package, not just this one — they cross packages through the capsule protocol, not by type. Value types such as PixelFormat and TensorMemory are accepted from any package too, comparing and hashing equal across packages by value. Importing Tensor from edgefirst.decoder when calling into this package is still good style for readability, not a requirement. See the Interoperability section below for the one thing that does not cross: isinstance against a concrete class.
Segmentation masks
decode() returns masks at prototype resolution as arrays of shape (H, W, C):
- Instance segmentation (YOLO):
C == 1, a binary per-instance mask — threshold at 128. - Semantic segmentation (ModelPack):
C == num_classes, per-pixel class scores — takeargmaxover the last axis.
Multi-object tracking
Tracking lives in the standalone edgefirst-tracker wheel. Decoder.decode_tracked accepts any object with an update method, including edgefirst.tracker.ByteTrack:
from edgefirst.tracker import ByteTrack
tracker = ByteTrack()
boxes, scores, classes, masks, tracks = decoder.decode_tracked(
tracker, timestamp_ns, outputs
)
Schema inference for Ultralytics exports
A vanilla Ultralytics YOLOv8/11/26 export carries no edgefirst.json, but its
own metadata and tensor shapes are enough to derive one.
infer_ultralytics_schema reads what your runtime reports and returns a
schema you can hand straight to Decoder():
import onnxruntime as ort
from edgefirst.decoder import Decoder, infer_ultralytics_schema
sess = ort.InferenceSession("yolov8n.onnx", providers=["CPUExecutionProvider"])
# Ultralytics ONNX exports are float32 throughout and unquantized. A TFLite
# interpreter reports dtype and quantization per tensor instead; pass those as
# a 4th element on each output: (name, shape, dtype, (scales, zero_points)).
inputs = [(t.name, list(t.shape), "float32") for t in sess.get_inputs()]
outputs = [(t.name, list(t.shape), "float32") for t in sess.get_outputs()]
metadata = dict(sess.get_modelmeta().custom_metadata_map)
inferred = infer_ultralytics_schema("onnx", inputs, outputs, metadata)
print(inferred.description) # "Ultralytics YOLOv8/11 detect, 80 classes"
decoder = Decoder(inferred.schema, score_threshold=0.25, iou_threshold=0.45)
boxes, scores, classes, masks = decoder.decode(model_outputs)
print(inferred.labels[classes[0]]) # class name for the first detection
The result is a named tuple, so schema, labels, description = inferred
works too — but two of the three fields are strings, and naming them is
cheaper than remembering the order.
source decides the box convention: Ultralytics ONNX exports report
pixel-space coordinates, TFLite exports report [0, 1]. "other" is
accepted but refused by inference rather than defaulted — that convention
follows the exporter, is not derivable from shapes, and guessing it scales
every box by the input size. Supported dtype strings are "int8",
"uint8", "int16", "uint16", "int32", "uint32", "float16" and
"float32".
schema is a plain dict, ready for Decoder(schema) — there is no JSON
string to parse back. labels is the class names in index order, which is
what maps decode()'s class indices back to names.
Shapes must be concrete. A model exported with dynamic=True reports a
symbolic axis ('batch' from ONNX, -1 from TFLite); those are refused
with a ValueError naming the tensor and axis, because the layout rules
need real sizes.
The schema pins the NMS mode and leaves the thresholds to you.
Ultralytics runs NMS class-aware (agnostic=False), so an inferred pre-NMS
schema says so rather than inheriting Decoder's class-agnostic default,
which would suppress a box against an overlapping box of a different class.
Passing nms= still overrides. Thresholds are not inferable, and
Decoder's defaults (score_threshold=0.1, iou_threshold=0.7) are not
Ultralytics' (0.25/0.45) — pass them as shown above. YOLO26 end-to-end
exports apply NMS in-graph and carry no mode at all.
ValueError is raised for anything that is not a recognizable Ultralytics
export — missing or unparsable metadata, an unsupported task (only detect
and segment; pose, OBB and classify are refused), or a class count that does
not fit the output width. Metadata and shapes are cross-checked against each
other, so a disagreement is reported rather than resolved by preference.
What this package provides
| API | Purpose |
|---|---|
Decoder |
Model output decoding to boxes, scores, classes and masks |
Decoder.new_from_outputs() |
Programmatic configuration from Output descriptions |
Decoder.new_from_json_str() / new_from_yaml_str() |
Configuration from JSON or YAML |
infer_ultralytics_schema() |
Schema derived from a vanilla Ultralytics export's own metadata and shapes |
InferredSchema |
Named tuple returned by infer_ultralytics_schema() |
Output, DimName |
Output shape and semantics description |
Nms, DecoderType, DecoderVersion |
NMS mode and model family selection |
ProtoData |
Mask prototypes and coefficients |
Decoder.draw_onto |
Fused decode + draw onto an ImageProcessor |
MatchMetric, MergeConfig, TiledFrameAccumulator |
SAHI tile-merge |
Interoperability
decode() / decode_proto() / decode_tracked() accept model-output tensors from any edgefirst.* package, and Decoder / ProtoData instances produced here hand off to edgefirst.image's ImageProcessor the same way. Each extension module registers its own type objects (PyO3 issue #1444 — isinstance across packages is always False, even for two objects wrapping the same Rust type), so acceptance goes through duck-typed capsule protocols instead:
# CORRECT — works regardless of which edgefirst.* package produced obj
if hasattr(obj, "__edgefirst_tensor__"):
...
# WRONG — always False for a tensor from a sibling package
if isinstance(obj, edgefirst.image.Tensor):
...
edgefirst.decoder.EdgeFirstTensorExportable (re-exported from edgefirst.tensor), EdgeFirstDecoderExportable and EdgeFirstProtoDataExportable are typing.Protocol classes you can annotate a cross-package parameter with. See crates/python-common/INTEROP.md for the full protocol.
Versioning and changelog
All four edgefirst-* packages are versioned and released together with the HAL itself, so a given version number refers to the same source tree in every language. Because of that there is no per-package changelog: release notes for every version live in the single CHANGELOG.md in the hal repository, which follows Keep a Changelog and Semantic Versioning.
Links
- Changelog — release notes for all packages
- Source — the
halmonorepo - Issue tracker
- Package documentation — the underlying Rust crate
- EdgeFirst
License
Apache-2.0
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
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 edgefirst_decoder-0.29.3-cp311-abi3-win_amd64.whl.
File metadata
- Download URL: edgefirst_decoder-0.29.3-cp311-abi3-win_amd64.whl
- Upload date:
- Size: 2.1 MB
- Tags: CPython 3.11+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fd98c30f9b41c97123de1a87326b8292350d354a8f204222f6b01ff6724b866d
|
|
| MD5 |
da1e580b2d0bf9bd6768fa9dac80687b
|
|
| BLAKE2b-256 |
5c949d15644f778dfaa37d2399a0195f4102ceb48f8840b93445f4f1a795d54d
|
Provenance
The following attestation bundles were made for edgefirst_decoder-0.29.3-cp311-abi3-win_amd64.whl:
Publisher:
release.yml on EdgeFirstAI/hal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
edgefirst_decoder-0.29.3-cp311-abi3-win_amd64.whl -
Subject digest:
fd98c30f9b41c97123de1a87326b8292350d354a8f204222f6b01ff6724b866d - Sigstore transparency entry: 2717259103
- Sigstore integration time:
-
Permalink:
EdgeFirstAI/hal@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Branch / Tag:
refs/tags/v0.29.3 - Owner: https://github.com/EdgeFirstAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file edgefirst_decoder-0.29.3-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: edgefirst_decoder-0.29.3-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.2 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.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cea511ae57ef817ea27e0aff20102b083dbabdb01ea86c28d38b0cef02f1520e
|
|
| MD5 |
4602cd4a1265ac35da3e151195eb4f57
|
|
| BLAKE2b-256 |
7d55e2eb25685d7423fc439c1cf6a1b51a8b8a7dbe7de57790c2db7de90c7b03
|
Provenance
The following attestation bundles were made for edgefirst_decoder-0.29.3-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on EdgeFirstAI/hal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
edgefirst_decoder-0.29.3-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
cea511ae57ef817ea27e0aff20102b083dbabdb01ea86c28d38b0cef02f1520e - Sigstore transparency entry: 2717257734
- Sigstore integration time:
-
Permalink:
EdgeFirstAI/hal@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Branch / Tag:
refs/tags/v0.29.3 - Owner: https://github.com/EdgeFirstAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file edgefirst_decoder-0.29.3-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: edgefirst_decoder-0.29.3-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.11+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
027277e752b1717a4435da9a0132bf1c5b928e4233040f2462c2672915ce0689
|
|
| MD5 |
ef8cda26ca76c892f5b34ef8dbbc4db2
|
|
| BLAKE2b-256 |
cfcff8673355f069f03e7a84e17780f6681028d516e140baa61451b0ec633ffc
|
Provenance
The following attestation bundles were made for edgefirst_decoder-0.29.3-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on EdgeFirstAI/hal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
edgefirst_decoder-0.29.3-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
027277e752b1717a4435da9a0132bf1c5b928e4233040f2462c2672915ce0689 - Sigstore transparency entry: 2717261933
- Sigstore integration time:
-
Permalink:
EdgeFirstAI/hal@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Branch / Tag:
refs/tags/v0.29.3 - Owner: https://github.com/EdgeFirstAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file edgefirst_decoder-0.29.3-cp311-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: edgefirst_decoder-0.29.3-cp311-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.11+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f1cb0467f3be271e7c3b07b0f400f8ccd6de6daa3794b64d1b354a39741d20c
|
|
| MD5 |
ae22fc412afd2c3a3e22ea0fdcc54527
|
|
| BLAKE2b-256 |
2604fd0695fff286e987333df11dc6dd8c99cf2d5fbc660d42a8c8a8bbd08b4e
|
Provenance
The following attestation bundles were made for edgefirst_decoder-0.29.3-cp311-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yml on EdgeFirstAI/hal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
edgefirst_decoder-0.29.3-cp311-abi3-macosx_11_0_arm64.whl -
Subject digest:
8f1cb0467f3be271e7c3b07b0f400f8ccd6de6daa3794b64d1b354a39741d20c - Sigstore transparency entry: 2717260056
- Sigstore integration time:
-
Permalink:
EdgeFirstAI/hal@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Branch / Tag:
refs/tags/v0.29.3 - Owner: https://github.com/EdgeFirstAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file edgefirst_decoder-0.29.3-cp38-abi3-win_amd64.whl.
File metadata
- Download URL: edgefirst_decoder-0.29.3-cp38-abi3-win_amd64.whl
- Upload date:
- Size: 2.1 MB
- Tags: CPython 3.8+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
653a4f305ff68b3cfb47615b619705879a43d842d05ae47b0a35d04251da841b
|
|
| MD5 |
01adc0d264d34b0ef88efa33b1efee02
|
|
| BLAKE2b-256 |
f390109e700ff625c14c8c0205400d31235fa9caeccf3a59fa514c4bafdb652f
|
Provenance
The following attestation bundles were made for edgefirst_decoder-0.29.3-cp38-abi3-win_amd64.whl:
Publisher:
release.yml on EdgeFirstAI/hal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
edgefirst_decoder-0.29.3-cp38-abi3-win_amd64.whl -
Subject digest:
653a4f305ff68b3cfb47615b619705879a43d842d05ae47b0a35d04251da841b - Sigstore transparency entry: 2717261038
- Sigstore integration time:
-
Permalink:
EdgeFirstAI/hal@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Branch / Tag:
refs/tags/v0.29.3 - Owner: https://github.com/EdgeFirstAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file edgefirst_decoder-0.29.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: edgefirst_decoder-0.29.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e45d74fe6d780bdab8c8577bc7c1e892c532685a4c216a74f91d18b679fe744a
|
|
| MD5 |
d198b4fafa5f609c443d4a380c8aff4c
|
|
| BLAKE2b-256 |
0cc86c69f6f5affff6bc2becc20b9c84411f80510e417a7f5ab98c2226978403
|
Provenance
The following attestation bundles were made for edgefirst_decoder-0.29.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on EdgeFirstAI/hal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
edgefirst_decoder-0.29.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
e45d74fe6d780bdab8c8577bc7c1e892c532685a4c216a74f91d18b679fe744a - Sigstore transparency entry: 2717262570
- Sigstore integration time:
-
Permalink:
EdgeFirstAI/hal@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Branch / Tag:
refs/tags/v0.29.3 - Owner: https://github.com/EdgeFirstAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file edgefirst_decoder-0.29.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: edgefirst_decoder-0.29.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cddecf15dbdd6ea0104055f9ed37a3d6af4b26b420dd5c6e8b4d244e867765d9
|
|
| MD5 |
88099c6aea05378c6d4fa64c2e391437
|
|
| BLAKE2b-256 |
c3d35a6afbe4412d32908a6abf8e7218403fbd9fd386227ad33cc3505e24ce05
|
Provenance
The following attestation bundles were made for edgefirst_decoder-0.29.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on EdgeFirstAI/hal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
edgefirst_decoder-0.29.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
cddecf15dbdd6ea0104055f9ed37a3d6af4b26b420dd5c6e8b4d244e867765d9 - Sigstore transparency entry: 2717256477
- Sigstore integration time:
-
Permalink:
EdgeFirstAI/hal@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Branch / Tag:
refs/tags/v0.29.3 - Owner: https://github.com/EdgeFirstAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file edgefirst_decoder-0.29.3-cp38-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: edgefirst_decoder-0.29.3-cp38-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.8+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
756a2a5ef1c2fb02ec513d31a54967f9cbccf1a2292fb1f8c851975994b5cc14
|
|
| MD5 |
c66dd4040029d0c0fff469f560b8fa77
|
|
| BLAKE2b-256 |
26d10b8108033eeb8a295bf5b9afd67187e2b0876f242fd50aa5655cee59b79c
|
Provenance
The following attestation bundles were made for edgefirst_decoder-0.29.3-cp38-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yml on EdgeFirstAI/hal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
edgefirst_decoder-0.29.3-cp38-abi3-macosx_11_0_arm64.whl -
Subject digest:
756a2a5ef1c2fb02ec513d31a54967f9cbccf1a2292fb1f8c851975994b5cc14 - Sigstore transparency entry: 2717254847
- Sigstore integration time:
-
Permalink:
EdgeFirstAI/hal@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Branch / Tag:
refs/tags/v0.29.3 - Owner: https://github.com/EdgeFirstAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d67df3d0c9dbd6339e4369f96eeb75b7617a28d5 -
Trigger Event:
push
-
Statement type: