Skip to main content

Crackle 3D dense segmentation compression codec.

Project description

PyPI version

Crackle: Next gen. 3D segmentation compression codec.

# Command Line Interface
crackle data.npy # creates data.ckl
crackle -m 5 data.npy # use a 5th order context model
crackle -d data.ckl # recovers data.npy
import crackle
import numpy

labels = np.load("example.npy") # a 2D or 3D dense segmentation

binary = crackle.compress(labels, allow_pins=False, markov_model_order=0)
labels = crackle.decompress(binary)

# get unique labels without decompressing
uniq = crackle.labels(binary) 
# get num labels w/o decompressing
N = crackle.num_labels(binary) 

# Remap labels without decompressing. Could
# be useful for e.g. proofreading.
remapped = crackle.remap(
  binary, { 1: 2, 2: 3, ... },
  preserve_missing_labels=True
)

# change dtype to smallest possible w/o precision loss
remapped = crackle.refit(binary)
# renumber array and change dtype to smallest possible
remapped = crackle.renumber(binary, start=0)

# for working with files
# if .gz is appended to the filename, the file will be
# automatically gzipped (or ungzipped)
crackle.save(labels, "example.ckl.gz")
labels = crackle.load("example.ckl.gz")

arr = crackle.CrackleArray(binary)
res = arr[:10,:10,:10] # array slicing (efficient z ranges)
20 in arr # highly efficient search

This repository is currently experimental.

Crackle is a compression codec for 3D dense segmentation (labeled) images. The algorithm accepts both signed and unsigned integer labels (though the implementation currently has some restrictions on signed integers). It is written in C++ and has Python bindings. Crackle uses a two pass compression strategy where the output of crackle may be further comrpessed with a bitstream compressor like gzip, bzip2, zstd, or lzma. However, if the Crackle binary, which is already small, is not further compressed, it supports several efficient operations:

  • Query if a label exists in the image
  • Extract unique labels
  • Remap labels
  • Decode by Z-Range

Crackle is inspired by Compresso [1]. Compresso innovated by separating labels from boundary structures. There were conceptually four (but really five) elements in the format: header, labels, bit packed and RLE encoded binary image boundaries, and indeterminate boundary locations.

Crackle improves upon Compresso by replacing the bit-packed boundary map with a "crack code" and can also use 3D information to reduce redundancy in labels using "pins".

See benchmarks for more information on Crackle's size and compute effiency.

Versions

Major Version Format Version Description
1 0 Still experimental.

Stream Format

Section Bytes Description
Header 24 Metadata incl. length of fields.
Crack Index header.sz * sizeof(uint32) Number of bytes for the crack codes in each slice.
Labels header.num_label_bytes Can be either "flat" labels or "pins". Describes how to color connected components.
Crack Codes Variable length. Instructions for drawing crack boundaries.

Header

Attribute Value Type Description
magic crkl char[4] File magic number.
format_version 0 u8 Stream version.
format_field bitfield u16 See below.
sx, sy, sz >= 0 u32 x 3 Size of array dimensions.
grid_size log2(grid_size) u8 Stores log2 of grid dimensions in voxels.
num_label_bytes Any. u32 Number of bytes of the labels section. Note the labels come in at least two format types.

Format Field (u16): DDSSCLLFGOOOORRR (each letter represents a bit, left is LSB)

DD: 2^(DD) = byte width of returned array (1,2,4,8 bytes)
SS: 2^(SS) = byte width of stored labels (sometimes you can store values in 2 bytes when the final array is 8 bytes)
C: 1: crack codes denote impermissible boundaries 0: they denote permissible boundaries.
LL: 0: "flat" label format, 1: fixed width pins (unused?) 2: variable width pins 3: reserved
F: whether the array is to be rendered as C (0) or F (1) order G: Signed (if (1), data are signed int, otherwise unsigned int) OOOO: Nth-Order of Markov Chain (as an unsigned integer, typical values 0, or 3 to 7). If 0, markov compression is disabled. R: Reserved

Flat Label Format

Attribute Type Description
num_unique u64 Number of unique labels in this volume.
unique_labels stored_type[num_unique] Sorted ascending array of all unique values in image, stored in the smallest data type that will hold them.
cc_per_grid smallest_type(sx * sy)[sz] Array containing the number of CCL IDs in each grid (usually a z-slice).
cc_to_labels smallest_type(num_labels)[sum(cc_per_grid)] Array mapping CCL IDs to their proper value by indexing the unique labels array.

Flat labels are random access read, allow efficient reading of unique labels, efficient remapping, and efficient search for a given label's existence. Since the connected component labels can often use a smaller byte width than the unique values, even noise arrays can see some value from compression.

Encoding flat labels is fast.

Condensed (Variable Width) Pins Label Format

Attribute Type Description
background_color stored_data_width Background color of image.
num_unique u64 Number of unique labels in this volume.
unique_labels stored_type[num_unique] Sorted ascending array of all unique values in image, stored in the smallest data type that will hold them.
fmt_byte u8 0000DDNN DD: 2^(DD) is the depth width NN: 2^(NN) is the num pins width
pin_section Bitstream to end of labels section. Contains pin information.

PIN SECTION: | PINS FOR LABEL 0 | PINS FOR LABEL 1 | ... | PINS FOR LABEL N |

PINS: | num_pins | INDEX_0 | INDEX_1 | ... | INDEX_N | DEPTH_0 | DEPTH_1 | ... | DEPTH_N | num_single_labels | CC 0 | CC 1 | ... | CC N |

Note that INDEX_0 to INDEX_N are stored with a difference filter applied to improve compressibility.

A pin (color, position, depth) is a line segment that joins together multiple connected component IDs and labels them with a color (an index into UNIQUE LABELS) in order to use 3D information to compress the labels as compared with the flat label format. Pins are slow to compute but fast to decode, however random access is lost (a full scan of the labels section is needed to decode a subset of crack codes). The most frequent pin is replaced with a background color. Like with flat, efficient reading of unique labels, efficient remapping, and search are supported.

Depending on the image statistics and quality of the pin solver, pins can be much smaller than flat or larger (some heuristics are used to avoid this case). An excellent example of where pins do well is a binary image where remarkable savings can be achieved in the labels section (though overall it is probably a small part of the file).

For very short pins (e.g. depth 0 or 1) that take more bytes to record than simply listing the corresponding CC label, we list the CC label instead. This calculation is made depending on the dimensions of the image and the max pin depth, and the byte width of the CCL labels.

Example calculation. For a 512 x 512 x 32 file with an average of 1000 CCL's per a slice and a maximum pin depth of 30, a pin takes 4 index + 1 depth = 5 bytes while a CCL takes 2 bytes. Therefore, depth 1 and 2 pins can be efficiently replaced with 1 and 2 CCL labels for a 60% and 20% savings respectively. CCLs are also difference coded to enhance second stage compressibility.

Fixed Width Pins (disabled)

| BACKGROUND COLOR (STORED_DATA_WIDTH) | NUM_LABELS (u64) | UNIQUE LABELS (NUM_LABELS \* STORED_DATA_WIDTH) | PIN SECTION |

PIN SECTION: |PIN0|PIN1|PIN2|...|PINN| PIN: |LABEL|INDEX|DEPTH|

A fixed width variant of pins has also been developed but is not enabled. It frequently is not significantly smaller than flat outside of special circumstances such as a binary image. An advantage this format would have over condensed is that the pins can be sorted and searched rapidly by index, which reduces the amount of reading one might have to do on an mmapped file. Please raise an issue if this seems like something that might be useful to you.

Crack Code Format

CRACK CODE: MARKOV MODEL | CHAIN 0 | CHAIN 1 | ... | CHAIN N |

CHAIN: | BEGINNING OF CHAIN INDEX (sizeof(sx * sy)) | BIT PACKED MOVES (2 bits each) |

MARKOV MODEL (if enabled): priority order of moves UDLR packed per a byte. 4^order bytes.

The BEGINNING OF CHAIN INDEX (BOC) locates the grid vertex where the crack code will begin. Vertices are the corners of the pixel grid, with 0 at the top left and sx*sy-1 at the bottom right (fortran order).

The crack code is a NEWS code (up,right,left,down). Impossible combinations of directions are used to signal branching and branch termination. The next chain begins in the next byte when a termination signal causes the current branch count to reach zero.

There may be ways to further improve the design of the crack code. For example, by applying a difference filter a few more percent compression under gzip can be obtained. In the literature, there are other shorter codes such as a left,right,straight (LRS) code and fancy large context compressors that can achieve fewer than one bit per a move.

Boundary Structure: Crack Code

Our different approach is partially inspired by the work of Zingaretti et al. [2]. We represent the boundary not by border voxels, but by a "crack code" that represents the edges between voxels. This code can be thought of as directions to draw edges on a graph where the vertices are where the corners of four pixels touch and the edges are the cracks in between them.

Since this regular graph is 4-connected, each "move" in a cardinal direction can be described using two bits. To represent special symbols such as "branch" and "terminate", an impossible set of instructions on an undirected graph such as "left-right" or "up-down" can be used (occupying 4 bits). In order to avoid creating palendromic sequences such as (3, 0, 3) meaning (down, branch) but can be read (terminate, down), we can use the left-right impossible directions to rewrite it as (3, 2, 1).

While the image is 3D, we treat the image in layers because working in 3D introduces a large increase in geometric complexity (a cube has 6 faces, 12 edges, and 8 corners while a square has 4 edges and 4 corners). This increase in complexity would inflate the size of the crack code and make the implementation more difficult.

Label Map: Method of Pins

Each 2D CCL region must has a label assigned. Due to the 2D nature of the crack code, we cannot use 3D CCL. However, for example, a solid cube of height 100 would need 100 labels to represent the same color on every slice as in Compresso.

It is still possible to reduce the amount of redundant information even without 3D CCL. For each label, we find a set of vertical line segments ("pins") that fully cover the label's 2D CCL regions. Sharp readers may note that this is the NP-hard set cover problem.

Once a reasonably small or minimal set of pins are found, they can be encoded in two forms:

Condensed Form: [label][num_pins][pin_1][pin_2]...[pin_N] Fixed Width Form: [label][pin_1][label][pin_2]...[label][pin_N] Pin Format: [linear index of pin top][number of voxels to bottom]

Fixed width example with label 1 with a pin between (1,1,1) and (1,1,5) on a 10x10x10 image: [1][111][4]

An alternative formulation [label][idx1][idx2] was shown in an experiment on connectomics.npy.cpso to compress slightly worse than Compresso labels. However, this alternative formulation theoretically allows arbitrary pin orientations and so might be useful for reducing the overall number of pins.

The condensed format is a bit smaller than the fixed width format, but the fixed width format enables rapid searches if the set of pins are sorted by either the label (enables fast label in file) or the likely more useful sorting by top index to filter candidate pins when performing random access to a z-slice.

References

  1. Matejek, B., Haehn, D., Lekschas, F., Mitzenmacher, M., Pfister, H., 2017. Compresso: Efficient Compression of Segmentation Data for Connectomics, in: Descoteaux, M., Maier-Hein, L., Franz, A., Jannin, P., Collins, D.L., Duchesne, S. (Eds.), Medical Image Computing and Computer Assisted Intervention − MICCAI 2017, Lecture Notes in Computer Science. Springer International Publishing, Cham, pp. 781–788. https://doi.org/10.1007/978-3-319-66182-7_89

  2. Zingaretti, P., Gasparroni, M., Vecci, L., 1998. Fast chain coding of region boundaries. IEEE Transactions on Pattern Analysis and Machine Intelligence 20, 407–415. https://doi.org/10.1109/34.677272

  3. Freeman, H., 1974. Computer Processing of Line-Drawing Images. ACM Comput. Surv. 6, 57–97. https://doi.org/10.1145/356625.356627

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crackle-codec-0.5.0.tar.gz (74.2 kB view details)

Uploaded Source

Built Distributions

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

crackle_codec-0.5.0-cp311-cp311-win_amd64.whl (212.4 kB view details)

Uploaded CPython 3.11Windows x86-64

crackle_codec-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

crackle_codec-0.5.0-cp311-cp311-macosx_11_0_arm64.whl (298.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

crackle_codec-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl (383.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

crackle_codec-0.5.0-cp311-cp311-macosx_10_9_universal2.whl (667.3 kB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

crackle_codec-0.5.0-cp310-cp310-win_amd64.whl (212.4 kB view details)

Uploaded CPython 3.10Windows x86-64

crackle_codec-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

crackle_codec-0.5.0-cp310-cp310-macosx_11_0_arm64.whl (298.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

crackle_codec-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl (383.7 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

crackle_codec-0.5.0-cp310-cp310-macosx_10_9_universal2.whl (667.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

crackle_codec-0.5.0-cp39-cp39-win_amd64.whl (211.8 kB view details)

Uploaded CPython 3.9Windows x86-64

crackle_codec-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324.7 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

crackle_codec-0.5.0-cp39-cp39-macosx_11_0_arm64.whl (299.0 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

crackle_codec-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl (383.9 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

crackle_codec-0.5.0-cp39-cp39-macosx_10_9_universal2.whl (667.6 kB view details)

Uploaded CPython 3.9macOS 10.9+ universal2 (ARM64, x86-64)

crackle_codec-0.5.0-cp38-cp38-win_amd64.whl (212.4 kB view details)

Uploaded CPython 3.8Windows x86-64

crackle_codec-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324.2 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

crackle_codec-0.5.0-cp38-cp38-macosx_11_0_universal2.whl (684.3 kB view details)

Uploaded CPython 3.8macOS 11.0+ universal2 (ARM64, x86-64)

crackle_codec-0.5.0-cp38-cp38-macosx_11_0_arm64.whl (298.9 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

crackle_codec-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl (383.5 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

crackle_codec-0.5.0-cp37-cp37m-win_amd64.whl (213.3 kB view details)

Uploaded CPython 3.7mWindows x86-64

crackle_codec-0.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324.3 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

crackle_codec-0.5.0-cp37-cp37m-macosx_10_9_x86_64.whl (382.9 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

crackle_codec-0.5.0-cp36-cp36m-win_amd64.whl (213.2 kB view details)

Uploaded CPython 3.6mWindows x86-64

crackle_codec-0.5.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324.3 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

crackle_codec-0.5.0-cp36-cp36m-macosx_10_9_x86_64.whl (382.9 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

Details for the file crackle-codec-0.5.0.tar.gz.

File metadata

  • Download URL: crackle-codec-0.5.0.tar.gz
  • Upload date:
  • Size: 74.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.4

File hashes

Hashes for crackle-codec-0.5.0.tar.gz
Algorithm Hash digest
SHA256 698031879d81658633a7df103365327084ae46f766f63db67e342d63c2bec1f4
MD5 ceb6eb7c66d92875c4fa9ced96a0b3fa
BLAKE2b-256 6c5c7fda441dd7c44fced4ab08d0b4d74b9093a010c70fa2854e166f5f10e53d

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 97797d7fcdbd77e954a9f5bd16d0611e4a06a032812954757a32a5ccf1f361ea
MD5 c3f0399b69c5de037a875568ac1ab1fe
BLAKE2b-256 72fab404e7eebcd0a4f8dfdc08a305f957f121cbc6125d3217ac9ac42da3efbd

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 792fa2e970328a5fd67f6bb94e06ae252011879962298bb426e7e2591558d803
MD5 552bb51b9d91e98dd37ccfdf8845b064
BLAKE2b-256 31ebc5cb7cfbef24ace017468eee394fcb2adb34e97d335192bad88b90f8c7c6

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8ad3f9643156e96479c5a30a108ce88fce31e58ba15a7d8a3a0799a2a8b1ad5c
MD5 dd31c283dfc4e34ca7ce1fd09c4aa76f
BLAKE2b-256 da7ad649845b353fcb225d9b3ec233b82f1cd4b352e4595aa614bc65f6c579a8

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 876aa39662961ca48c94c59415f92d71e99e2f91fb33fa06976b0991e85e7ba4
MD5 27684a53cf77ec916c547b7836841f17
BLAKE2b-256 d65a0cad457beed7e088127fb4645f9c834cebdb852ba2225e7bfbec5e1ee813

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 ccc50931d553d21d18a67109d4dad53b75ef36adc654a8a9f4c47d069113f0ba
MD5 e1bb88975f0d10abaf9436761d4d1a90
BLAKE2b-256 87b6592da90b8309c5d7d950bb36e05e7511b2bacb3cb1bfff6f167cb0660313

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 72987bba2191f9f92ba8b95c6412676e619ff56328650d8c2463f23a786b3cdb
MD5 ff21569fd8f989fd839c09d1d412d8d5
BLAKE2b-256 b0517a3543306a7e7ac39e33bd80f93774e39debffd4ef05faad745cd5d0208f

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 70712aacef5bb83261255972dc35e68fcdef8cb71f981e8ce2c1a7e878f8c99b
MD5 6cf3d8a2eedeb844f218e85989f86b76
BLAKE2b-256 dfc6e7ecb3e05609e4a0665bf53640a1f0ef50c224b533e6bf590ea07a38f85a

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9c4028019d5651de040484badfd323630ad127020314e70bebcb55cedee6275a
MD5 2941ca491930bda993edc22d90532d90
BLAKE2b-256 84cb87882cc1b972252b3cc22e7eec1ac88e344c5a2db3b79d2a4e594e87a972

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9b97e508c1f98ac426f968d73c8ebb1f0e0d9fa481492e34eb903e0db62c31f0
MD5 21ea8c97e3c3f515b7086aca3ffbb637
BLAKE2b-256 9e3efddeeab98131f25b83354e131f6779e3152fadeb39e95ca719ffa1d31af4

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b3178d15bb1ee0f046fcbae50a56aca970fc48c88168b21678b5f2954d80320e
MD5 00ff818383529726e220a8f938f6a1ae
BLAKE2b-256 a4475af7594087095a96b53ce6ce3ce954c02b70191b6aa86f6e5bef9f9ede1f

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5cc1946ea34a6d1508ca700d31d1901cb8dc1965d65d1b80ffc83f8d52214fa3
MD5 c7ebb8a916bae054c40b9cba0377045c
BLAKE2b-256 adcd6531cc2f8159c8f24802400b409a24576c10276ee4596ceb784223958b11

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 10529e477dbd0f47add664a7eb3b086da614b022420a74a7576075fdb440011d
MD5 1b5c74cf0c745a10886f32338d432d6c
BLAKE2b-256 76a220c03483184c058d1051df0a937527b2864735fff22c80e022ebe8fce637

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0cc8c72cffdbed87010bcd3f107ab9d0421c42befea902d426e3d7d7c195e450
MD5 672e1162d62981827c0992addcf4cd89
BLAKE2b-256 a66bff633595d29a3f46bcd260db0cb9f74ea19ef9f42caeaf3d4a69b970601d

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 28fa518b0088bccdc3440abf7f7b60d52cdd76f5161a8ec8e899719427336452
MD5 3a25c753aaceeae5ce77e1ac5b6c5b1e
BLAKE2b-256 e36232ef0fbb1edb20a02da777e96d0777d0495bc77b2816255f3f85ef2d05a7

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 85226db3c92951faa0ce3ee6e7f51f34d1b34b75d85040da6543ad8428f9714f
MD5 0e5e3715057d0eb66af83b3734ba374a
BLAKE2b-256 8fcb793a79f1a6ff50815a4d980c3107d5b37a3daf7ba23c10bb3cf1854b8b11

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 7267a87487caa9d601639f42845bae611b60f40728028b0a90cc55dd026419c8
MD5 9cf833a76bc187ea6bd36c09f39f21c9
BLAKE2b-256 d852866bf916eeb418f7575e0ff20daa0ef2d73eee153ab9547c4f92b3c05d5f

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 143456d2c68a4988bd3e0a98d153401be0076270b00ad3a4b43efdb0ffcfdf8e
MD5 f26e61a7d04900234a9b308f73f177a2
BLAKE2b-256 29fa1c06406997350d2a5639c51160b1d1c19d403cf809ba7c29bb8c4bbbc246

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp38-cp38-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp38-cp38-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 92a2383f0cc580cb0a3f4682ee2de18fdff915bc11d0cb33ea58cd2a1ea6b49e
MD5 47d3a6174211e993e18024332145335f
BLAKE2b-256 bf9d6c853001fbd8462c5abb71b3f5af5079954d022a37fd963a55732d07572b

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 842f15e34ac11f8e64ba680b6519c2d0ff5433eb263090febac5ab5215eb493a
MD5 974938271be40b956a57900f679d64e7
BLAKE2b-256 35f3714899a70a83b621c33979b3ec385cd7f638acc9284c29980e4e34fb3303

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e76868905f66c02e49097dbadd17107fa2a20bf7d2f6250b763ff9121d825df5
MD5 940104c56df49a2d92c3af9b71d35d29
BLAKE2b-256 deb009bea038b235fadb93d88fc01fcf7ad565959f5c7204ec22d65f075482b0

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp37-cp37m-win_amd64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a857f94e66938b42e6efa27e095e0d35ea9bfff19c1e59eef8fd70575479351e
MD5 daa3155cc9f8622f09a967230447a39c
BLAKE2b-256 fdc35df8645c51c1ac5076798ed16bad8f7aa3c0bf4693ef17db8a51785a315c

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2240d2367800532b459e11f5a6cc69805e4a0df83d1e99c57ee2a31d314df29e
MD5 fa4673fdb12d8d1f98297dd2c1dec974
BLAKE2b-256 1958a30a5c25fc4b0bd75969af596d8ed51e4e29f498651f2cb3cd3290e37867

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3e56b0d11810ce7b2f221bcdeed4b8670f2b3dc85db9426bac1a68c211d87c7b
MD5 a919cd013e650d998cce929acb5a1e90
BLAKE2b-256 5bbe118abe7e808e6fa2cac275d6546310082ad1790e1bccf77a3fb654528962

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp36-cp36m-win_amd64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 718dd24333fa4cd5434a1ea2f3a60e3bbc5cd825ab895d3f7b1da915ca34c9d1
MD5 cc98ed8074e145eac2ef83f05cf1bb61
BLAKE2b-256 970a12bb32acfafee0b1a5beb4cee69d42ad960f7906f9c394db9b3ab4041205

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3ce8c8027afc176459ec2540e63f609861d54bc1f0d385aeb2a03f38df648353
MD5 785ca7a82e4aea324f7241058dd5a2aa
BLAKE2b-256 038abe4051151c101cccd86787dda121d1b836a8db362a889c008f33d4e7ba4d

See more details on using hashes here.

File details

Details for the file crackle_codec-0.5.0-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.5.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2ec88ff134e04bceaaa51d7f5b60405740686084fc5a0e85ebf16f6991bf1882
MD5 2451c7602946f3039a16077d868c2ef5
BLAKE2b-256 4dfcca24dacfdf705576fb3a377bf18e0955129748df6b94532a9fa9f0e2bc5a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page