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)

# faster extraction of binary images
binary_image = crackle.decompress(binary, label=1241)

# 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)
# check if label in array in log(N) time
has_label = crackle.contains(binary, label)

# 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 # log(N) check

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.
cc_per_grid smallest_type(sx * sy)[sz] Array containing the number of CCL IDs in each grid (usually a z-slice).
fmt_byte u8 00CCDDNN DD: 2^(DD) is the depth width NN: 2^(NN) is the num pins width, CC: 2^(CC) is the single components 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 |

Both num_pins and num_single_labels use the num_pins_width.

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.8.0.tar.gz (77.5 kB view details)

Uploaded Source

Built Distributions

crackle_codec-0.8.0-cp312-cp312-win_amd64.whl (217.3 kB view details)

Uploaded CPython 3.12 Windows x86-64

crackle_codec-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (331.2 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

crackle_codec-0.8.0-cp312-cp312-macosx_11_0_arm64.whl (299.4 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

crackle_codec-0.8.0-cp312-cp312-macosx_10_9_x86_64.whl (381.3 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

crackle_codec-0.8.0-cp311-cp311-win_amd64.whl (217.7 kB view details)

Uploaded CPython 3.11 Windows x86-64

crackle_codec-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (330.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

crackle_codec-0.8.0-cp311-cp311-macosx_11_0_arm64.whl (301.3 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

crackle_codec-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl (383.5 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

crackle_codec-0.8.0-cp310-cp310-win_amd64.whl (217.0 kB view details)

Uploaded CPython 3.10 Windows x86-64

crackle_codec-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (330.2 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

crackle_codec-0.8.0-cp310-cp310-macosx_11_0_arm64.whl (300.2 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

crackle_codec-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl (382.0 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

crackle_codec-0.8.0-cp39-cp39-win_amd64.whl (216.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

crackle_codec-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (330.2 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

crackle_codec-0.8.0-cp39-cp39-macosx_11_0_arm64.whl (300.3 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

crackle_codec-0.8.0-cp39-cp39-macosx_10_9_x86_64.whl (382.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

crackle_codec-0.8.0-cp38-cp38-win_amd64.whl (217.0 kB view details)

Uploaded CPython 3.8 Windows x86-64

crackle_codec-0.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (329.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

crackle_codec-0.8.0-cp38-cp38-macosx_11_0_arm64.whl (300.2 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

crackle_codec-0.8.0-cp38-cp38-macosx_10_9_x86_64.whl (381.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

crackle_codec-0.8.0-cp37-cp37m-win_amd64.whl (218.1 kB view details)

Uploaded CPython 3.7m Windows x86-64

crackle_codec-0.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (332.0 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

crackle_codec-0.8.0-cp37-cp37m-macosx_10_9_x86_64.whl (381.4 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

crackle_codec-0.8.0-cp36-cp36m-win_amd64.whl (218.0 kB view details)

Uploaded CPython 3.6m Windows x86-64

crackle_codec-0.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (331.4 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

crackle_codec-0.8.0-cp36-cp36m-macosx_10_9_x86_64.whl (381.0 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: crackle-codec-0.8.0.tar.gz
  • Upload date:
  • Size: 77.5 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.8.0.tar.gz
Algorithm Hash digest
SHA256 4e827b4a4742f699ba5c09d93c8fe4290785a1e69d5c1bbfb8a1dadb5115967e
MD5 b3b6d60c9f766fe51d4b075b05645d7a
BLAKE2b-256 4f08ec2f1852cba7826204ab9973741ea9b700eff554028723b27632d7b98825

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8586f3a87fb178d2ca25166fea3fb3b9382877b42f467201294195cf774202b6
MD5 9eb60d40b82ac217c5cbae52f4220aea
BLAKE2b-256 26bb2139e062282f5422aa8e524109c3b528679637f85010fd1cbce81eb214bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9df511749bd2ffc4ba67c257558a7a4555bf3c1d1a42c20b8f09330a33d114d3
MD5 099378ca54defb23e35b1efc689324c7
BLAKE2b-256 cbe5e2d6877fe2470d4123d3bc6382fc829f2979ba968403e44427db9eb63785

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bfd0a6c7bc5c465b3bc6b2d2cf19403be1b49bf5616ca851955c00814782d3f7
MD5 76b16b8713a6458f67d25d0fd0b95cd4
BLAKE2b-256 47f1bae59bbe46265104d5eb27b96afb63685beb40d493ab4b4ac02f5f987812

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b2543a42b6dab8ebf4a227298b9f827b2f123233d41e5cc0f5fcb78eac73de7c
MD5 5c1de3c9b9b9cba4e7908b9930d02d7e
BLAKE2b-256 18ca6b6728a558b932eb42b3d281454c106f3a3e758579b81fd728dafec6a441

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e70f05cbf6d35a9213025fdbdff5e447f3d83c797a569d61d67b69c63d4637c5
MD5 9a527a948324b028a0059bf2c57ea633
BLAKE2b-256 dd112e7d1df8c1a07171b35a0a56db39a0e7c62e469eca63fe2f71697ffd7ade

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f0b69eb9bbc48bd96d4b4cdb262678d1428414f643b6332c69bb8c21c12e735e
MD5 2ca9568f1b69ca203beab03916720fb3
BLAKE2b-256 421b70aa145686c5acd6be77c34ae665c8c2bc8007847991ece8c89c3e660e26

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e34d59553b545abf6cfaeec92f0cd9ae67253821b847a84e69dc51ff18c40aa9
MD5 74e337a1f38ad9e855c97444a3ff3b4d
BLAKE2b-256 70fc09cb40244632726a90b2a6b95b051ce7f888f1fc321104888eb3b430e039

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 539023017711da9c4de97b685f357bb819eaf6f2c55b9c17f52780ae68c767e7
MD5 705e77491aa727498079e6945cd174d4
BLAKE2b-256 7c5b55502c97bb0b67dc6ac97b14a594b2dd53c69e4f7652cd4ad8eff4bb0b59

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4346865edb49fab529651217a26b5706cb9478974793b2f9fcc2307eb4685070
MD5 82d51c90b2e173d07a20f2f1d2dfe2f6
BLAKE2b-256 414d050b9d14d878c5fe91582a61ad04a9a4159c16fbd4741da25eb1a86462eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2e01047e465d48152d09327ace9562549f7ec8c9ca1bbd0b54597f9e3a671130
MD5 e3d53032422b8f59f4a0c1868e4b4535
BLAKE2b-256 3ba00d8cf80a9cbcc27ef10172b47a750253d19ff0968ced9d1a1f4725fc3f0f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 57444f3266698907aa2433e36b470883bf4df7ebb5d37ba23b714199d3ef818f
MD5 ee02967eaac7d0a057df88a765f69451
BLAKE2b-256 15aa2b965dbb644b164e1c5f0767cb783863846abbf111e116bff6825f2876bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9e884b8a1b303da93776b401f2328404b3f5f5b8a7304b35a1567cbbc5e4d1d5
MD5 0f5e61933988e363a9305b9755ba5224
BLAKE2b-256 a5ef21ea751a3b110284d3c234df6ff8fda7475908970ed98794dce610fc9b6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a35e714a60b939f97a6dc3fae709931c3db1f419e2c5b7f427f6b2a2c69b8277
MD5 5ae0c83de5fbc4a3d39fd719d761c55e
BLAKE2b-256 818225b114f741207ed4e450e10d3b1709d8dc3b82b2d7ef65ebc7f325543d6b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2f4d5daf38d74d97ec872efe0688a9113635232bcb85a36c4a105258e8394f21
MD5 8caa08e2c5b4aa054cc7a3d84896ebb0
BLAKE2b-256 e3ed973ba694867ec409cb4c88b78790c9107bc9194c6c8ceee83a1003d6831a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 827813253078ecdb67362a7eea64619c8e35552656c5956cd18e00f3870755f4
MD5 614d03f294f72d56ca4676a5c5b717d5
BLAKE2b-256 16ca694fd9c1d7c51e06ac9aae7dc3b54c6ce995f8843293c1b29d1086a648f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fcae3a049e65598433c36088603d111fe03e822d45d5c5175a9aa5da4eb77bdc
MD5 691840a980434b9afba148709d13686d
BLAKE2b-256 475d756bf894dfaacbdb89f542a6482e0d328645dc03e6755fe0cd53d3779d6a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 6a8d2683572abff458e7728a07ba76453c7a777f562286d167a73d6e57444843
MD5 db230ed4da64ac6c441fee5ace26fec2
BLAKE2b-256 7eedfd945ddd279abedc7df719d2155c24649b6ca00632264aef4f1aaac5fdbc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 143cf2c16cb1b3981291bb769436c2359e0bc25850bf171432f0b149b126c072
MD5 95271da9853ef955ca21e1f6025f84aa
BLAKE2b-256 e4c24ad24d05a1f214611f6df2853c7a6661c3038b111f8966a4d1c7c56ddfbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f328fcac419ebeeb3501cb53982e0421b240fb983cb299680e5fd665c094bcab
MD5 c85c95a1819e1838460721b7dccf7ba8
BLAKE2b-256 a221dfbad297d48812d90be976720d95f2b227b146f1eb48d455ccba477c918e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 48a2f229abfa3e7d86d15faadd97068c64a4b4c3d2370c32554d43fdd68d8dfe
MD5 2524152eb1ce2e3b0d6d409e5ab88151
BLAKE2b-256 d48ae298269fb2a9ccb78e2ac29c2734c45598009fde3d46b9c6c5f9f0474db6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 8792b1d390c6c04ed42531173a69846f5b74701b81bd4865a54495646b4ecb08
MD5 049c5fb2b0cec32cac9e357aee9b4bd0
BLAKE2b-256 d244dc3c616f5f7f2ecf3553e5124ed5e1bc7015b3e1cd762c4c206751bec37d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6804f066ef031cbd6c6b504be05683a7f0dd68dc7bcd8046ee75a1b18b5e5372
MD5 e841140e6562976719fd096596ee9b9d
BLAKE2b-256 7123ac5008c64a604b75cadecf77cb7bfe30e5529f340426e628466694d318b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 44de3d95040f53dcad79b13a87ebb830d8d0354a583a30f2f84776618c0d7b59
MD5 7e88a4a740c91850c3dae6a5f5c1b82b
BLAKE2b-256 ac6ca7c3c145be491edf65199ff43617542b25a0a69a4f9e939b037a2be114c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 f174ad7762eda5fed3b3dff81697d07634ade7bacf157369050c6513789af3fb
MD5 038a511faa40c0ab2c123636d0c16d05
BLAKE2b-256 8fc53fe1b77bc4cecffb63b7715c62fb43ced94dd3c6c961a8e5f20758e1a282

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df6e88b7709cf81977967d0283c57259f07cb0f94afafb370e1768486643052e
MD5 d188563cd4b30c640f3dc639b8e485c7
BLAKE2b-256 883e754d3218d605876f8dfad243f11cc1d6610dea861decba6162ed78fc272c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.8.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e2d895c2ec5621a18b92d3f9feaf0e7cf4bbde6717e3081c71a748e507acdb4c
MD5 6d9b32a39263c71fcb63b9356f58ef9e
BLAKE2b-256 a531ca36879909b413e75a05b4299028ec9558ca420347a5cdae541d9927cc7b

See more details on using hashes here.

Supported by

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