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 without decompressing
N = crackle.num_labels(binary) 
# get min and max without decompressing
mn = crackle.min(binary)
mx = crackle.max(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 Beta. It works and the format is reasonably fixed. There may be some improvements down the line (such as 3d compression of crack codes), but they will be a new format version number.

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 Initial release w/ flat, pins, crack codes with finite context modeling. Beta.

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.7.1.tar.gz (75.7 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.7.1-cp312-cp312-win_amd64.whl (216.4 kB view details)

Uploaded CPython 3.12Windows x86-64

crackle_codec-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (329.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

crackle_codec-0.7.1-cp312-cp312-macosx_11_0_arm64.whl (297.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

crackle_codec-0.7.1-cp312-cp312-macosx_10_9_x86_64.whl (381.2 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

crackle_codec-0.7.1-cp311-cp311-win_amd64.whl (216.8 kB view details)

Uploaded CPython 3.11Windows x86-64

crackle_codec-0.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (329.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

crackle_codec-0.7.1-cp311-cp311-macosx_11_0_arm64.whl (299.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

crackle_codec-0.7.1-cp311-cp311-macosx_10_9_x86_64.whl (383.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

crackle_codec-0.7.1-cp310-cp310-win_amd64.whl (216.1 kB view details)

Uploaded CPython 3.10Windows x86-64

crackle_codec-0.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (328.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

crackle_codec-0.7.1-cp310-cp310-macosx_11_0_arm64.whl (298.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

crackle_codec-0.7.1-cp310-cp310-macosx_10_9_x86_64.whl (381.9 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

crackle_codec-0.7.1-cp39-cp39-win_amd64.whl (215.5 kB view details)

Uploaded CPython 3.9Windows x86-64

crackle_codec-0.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (328.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

crackle_codec-0.7.1-cp39-cp39-macosx_11_0_arm64.whl (298.5 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

crackle_codec-0.7.1-cp39-cp39-macosx_10_9_x86_64.whl (382.0 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

crackle_codec-0.7.1-cp39-cp39-macosx_10_9_universal2.whl (662.3 kB view details)

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

crackle_codec-0.7.1-cp38-cp38-win_amd64.whl (216.1 kB view details)

Uploaded CPython 3.8Windows x86-64

crackle_codec-0.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (328.1 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

crackle_codec-0.7.1-cp38-cp38-macosx_11_0_universal2.whl (681.1 kB view details)

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

crackle_codec-0.7.1-cp38-cp38-macosx_11_0_arm64.whl (298.4 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

crackle_codec-0.7.1-cp38-cp38-macosx_10_9_x86_64.whl (381.8 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

crackle_codec-0.7.1-cp37-cp37m-win_amd64.whl (217.2 kB view details)

Uploaded CPython 3.7mWindows x86-64

crackle_codec-0.7.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (329.4 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

crackle_codec-0.7.1-cp37-cp37m-macosx_10_9_x86_64.whl (381.2 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

crackle_codec-0.7.1-cp36-cp36m-win_amd64.whl (217.2 kB view details)

Uploaded CPython 3.6mWindows x86-64

crackle_codec-0.7.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (328.2 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

crackle_codec-0.7.1-cp36-cp36m-macosx_10_9_x86_64.whl (381.2 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for crackle-codec-0.7.1.tar.gz
Algorithm Hash digest
SHA256 bbea18ea869d34650ce1d6ea9499a921fef9ca6b9d7c4d76947db0dc140b4f4a
MD5 83d17ef74322223ebf8885fa4680f0e4
BLAKE2b-256 ee28445560eb9101b2faeb2824cf075af1fd4aba55b0176e6c08a2ca71fa5d3e

See more details on using hashes here.

File details

Details for the file crackle_codec-0.7.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 dc02344a9a7efc87e2860363a9834a45d206387fd1e3c4a7f0fa7c7c349e0699
MD5 b7edcebd007a04e9c8fea935815aa71f
BLAKE2b-256 47cc46d7c9c0603dbe9fba9b41512dae116318dd75ac5657c7a00304ddb046e5

See more details on using hashes here.

File details

Details for the file crackle_codec-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d95a8cad31aebe3832e13bfb260cad7fb818da1707722ee9f79d5ca0df688d58
MD5 32a83de9b44c40da0c6644b30662579e
BLAKE2b-256 f11edd4263971c5443bbc28e9493ff1ba716ff76b532081b158dc5b457d77704

See more details on using hashes here.

File details

Details for the file crackle_codec-0.7.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1eacf3ac61ffb6005dc5447732c4b81e79bd9800b721e105ec69e8e493f7d0e
MD5 43a40120292c51c8f475031bebe77cf5
BLAKE2b-256 b818b50a5294c63271b442596b6e418824377c1e1f5c0f13d5c01fa1110aef94

See more details on using hashes here.

File details

Details for the file crackle_codec-0.7.1-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b4ac7a35dad700c4f604f87c2e97cd901c8a4482d5c3630e41c104a0321c329d
MD5 142dee0d19430f950e0931f9b4026dd9
BLAKE2b-256 f2ca10d937927fd3cf49c9d89db2930570a2f073dfa78070181d68f8439f7388

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ee6f2331dc20879fd20f4ca9e6fe802d22042ac9892373331caf6b343accf2b2
MD5 337947e050cfdad0af80565617cfadb0
BLAKE2b-256 01f002b05aaf9513d043031952702efb43defa8b261f2bf4ec14d5da7138d5c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4a2fb2f3b920343ab6f9884396d5c953616baea57533acf9d7488aa8a26d0275
MD5 071776c2f8e48096b20cb38e0bdbde2d
BLAKE2b-256 dae992a4747c1c7fe45e7e88a9ea323c66f23bd648e37011dd6fd321bc13b336

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d7b30c758af9fa117fa4a6b4c2ff520ca11c97433e8180c99a481abf1cb6bebc
MD5 6d8d6ff2d44ec6f1bd48d749a20002e4
BLAKE2b-256 3a35b400649c085ae0dcc79e7c317d0bb5ff126b135680bd4eeae3cc6ce1a93d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 71d911590b2d6be059b947044dcbec750c8a3c62bc2bd8c7775ca6d4b5fa0da6
MD5 23641c6041fd6c9f52b2c111904c904d
BLAKE2b-256 b795860dc6c174f680958cb757031b3b8ed3a628039735f1f8206214b6757d13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 cc7f2b4daa4a8d1d9567ed674d75f798c2baec312e4e678cc67384803b00b87f
MD5 3e609094261afbb79a7d051311d6699d
BLAKE2b-256 befcad48e70768526100921226d12e0e7a77d8a101f38bcf9100d7c9a79dbb8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0b8c469b0a66d6c8a862c1babce38346449cdcd879d0a89080b9b8d57fa13a8d
MD5 9cba2b76fb66ab890f44a813e73f89de
BLAKE2b-256 4b93a467b597c0b0e2d6a7885ed542677c957600966d46622ac9d1248c2882c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c8ca62dd180a22c15d647525feb56e2d247b8bcab7902d109a57bfab26d78d4
MD5 1340f7af7f2801fdd6fe8a010b56bcff
BLAKE2b-256 1d9737cc507cc3de5579027ce8f8db3f37187c9613e734b477119f596078e30c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f4e4e62098f17d96d48b3964c0ecf593089d9513d12465f6125ed98d3a845df9
MD5 2688f1f3655be447b8b81cd463363a84
BLAKE2b-256 d837c0ba6f264edef6bb0c2b0d32776a9b6ac92b963d4e9ad01c6bb81fe22937

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 c1cbf44fec429135c9b9d655fc89ebf875ca32bb7e9ebe4a8fd961669f5b037c
MD5 99ecab29556e19f524dfe01374cd7e7e
BLAKE2b-256 e3cac317191b36b4daba47f48b11c44867f58dafa50263a1d362b095e206bfcb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8ad0dfe4f471edb298a1b40763c3f72a627bee6fdc71828515512b52664099b9
MD5 278e3b7232d29d41d35cee80af82f4db
BLAKE2b-256 b8cba13baf8cef313a197a236af41d8475b237b4e73b03ca3572f7eadc3cc374

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a82dc2e15b3e2f46bd7e6563730e07d4efd7e5d5ee1d44bf564595cecfbf133e
MD5 2e1894a3b18a27f3effe0b6bf80f2e9d
BLAKE2b-256 e3cb93b7881543861883a242e430a1cd80b397ab309a6edea6801401e693aad3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 203c89e3a617b50b29ed00b5d247215a61cccc8041536d3ac573ab8a48ad2b89
MD5 ace79381e0ba8cad44251998406f4512
BLAKE2b-256 8e8cd0a78d10e4a6a4702160c6a3b08906e1a82714d7bd2391f801f602d2c7f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 21abf9447f2ebdc18103026a82e99afc85b9c13546fbabb88de4147c6218052e
MD5 b2b29acfcb93e892619c3f21019d6b55
BLAKE2b-256 2620579bb12ee73c66678c1e9954212510f0033be198d689f4135ebfb25e103d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 ceec4d4ea3c5dc992a533b4d94ac2677d6b7f62bc80c677f96e4351369954b95
MD5 1878cd609f72630ecb0f1b5770ccdccd
BLAKE2b-256 09c4bc3782ab52460ed845c5dce6bfa5172ff6245e7d827bfe7feb391a1b8b82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 71ee1b1da728dc7716145c0f3022ecad693ddb3bfe6e3bc875ffdd305628c835
MD5 bc1991562296fe2f63d2d72f45a50958
BLAKE2b-256 09ed2db1b3407d622a494b76055c3e88079a6a665989ee3af267c20e600188e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp38-cp38-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 6e369dce65737eb61f7ca73dd51c476c10717357b567e28322ba27c991d47040
MD5 1d1934b72a2204395727dec68201f377
BLAKE2b-256 d20657a607af3d36cbc3fee2dd1c3dc93c5c7a6faf2ffdcd7ae7fa12a3dcfcc9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cbe94a3967acfcf18dfc090f4c682ef0fc90bf138db13c697a83fdec6bfcfd7a
MD5 463bf90893ed09ebf512fc04c239407e
BLAKE2b-256 a68ad4688ca6123947d85aa1586af1e58e0a7c9e2de8d5cd3ee7c59803a5441b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c5b06e1753fb267439a3cd17d6fcbf7fc7a3a29e9c6fb6d788f3f57212fafce3
MD5 89c33eaff153fc92d7340701e4b6f8cb
BLAKE2b-256 d0978cebbdbceee6fa4f84c3a01b2bf35bb4833c2fe39afde67117642cdb3346

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 1d81701f6c13f239e72f3c42340e23383e1e65d315903a0f52ba8719d7b391b0
MD5 5c949ee999cf9f7a5fdc5a1c6fcf8ea8
BLAKE2b-256 ae26a4199e0174e747b919416f547409434aeae7c8cc7ec7d9181dda11adaf39

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 45ebf1bf1868dab8b06258dfe3eb4565aff31c88d3f7ee88230f5e0980ddb94f
MD5 e0f693228af2b195ffd281717c080602
BLAKE2b-256 eea9655ae128c576be088472b4b0da03b429721fcd5ee00ced0697c4d66df714

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e406a5001f5761f4df5fe715e250c8794a4a5344917059b6597e887c2a141c88
MD5 16fd86345711e0d7c88f37c54c26806f
BLAKE2b-256 b45e3e4e34c116dfc49df3d804a8722188ba3cae4da706b73a892a0c8cdfd224

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 37edc96545170aaf7c579de1269e42c754a1ae66abd4c0a6c83678ad2f4322a1
MD5 0c99bd4cf39a94837f9b35fdf092e2d8
BLAKE2b-256 e6f71b08a4f5ddf8d54105c4284b979d65910b27fb5a2d1046fb76488df23613

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de93757cbb438caaf6cd333ae6cf5f281b867cd39f0e8b5fa9f36628ca7119d2
MD5 a4a8013cb1c81ca272b23a4a863c414d
BLAKE2b-256 fd3dacc10b1a773dd240857ef0efb121c92750749e6e9bcfc44c12798cc686e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.1-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 17f0c8cadb90702bc3133d94267ffce083fc5c5b957b2e078541f434788120a6
MD5 fba98f1c1c605d28be89e4e2a5c6108b
BLAKE2b-256 ff54c31399ac9f9fda335c0d9829e21d793ebab87a4611483a099d8d7475ab19

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