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

Uploaded Source

Built Distributions

crackle_codec-0.7.0-cp312-cp312-macosx_10_9_universal2.whl (660.4 kB view details)

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

crackle_codec-0.7.0-cp311-cp311-win_amd64.whl (216.2 kB view details)

Uploaded CPython 3.11 Windows x86-64

crackle_codec-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (326.6 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

crackle_codec-0.7.0-cp311-cp311-macosx_11_0_arm64.whl (299.1 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

crackle_codec-0.7.0-cp311-cp311-macosx_10_9_x86_64.whl (382.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

crackle_codec-0.7.0-cp311-cp311-macosx_10_9_universal2.whl (670.3 kB view details)

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

crackle_codec-0.7.0-cp310-cp310-win_amd64.whl (216.2 kB view details)

Uploaded CPython 3.10 Windows x86-64

crackle_codec-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (326.7 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

crackle_codec-0.7.0-cp310-cp310-macosx_11_0_arm64.whl (299.2 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

crackle_codec-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl (382.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

crackle_codec-0.7.0-cp310-cp310-macosx_10_9_universal2.whl (670.3 kB view details)

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

crackle_codec-0.7.0-cp39-cp39-win_amd64.whl (215.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

crackle_codec-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (326.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

crackle_codec-0.7.0-cp39-cp39-macosx_11_0_arm64.whl (299.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

crackle_codec-0.7.0-cp39-cp39-macosx_10_9_x86_64.whl (382.8 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

crackle_codec-0.7.0-cp39-cp39-macosx_10_9_universal2.whl (670.6 kB view details)

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

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

Uploaded CPython 3.8 Windows x86-64

crackle_codec-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (326.7 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

crackle_codec-0.7.0-cp38-cp38-macosx_11_0_universal2.whl (687.2 kB view details)

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

crackle_codec-0.7.0-cp38-cp38-macosx_11_0_arm64.whl (299.1 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

crackle_codec-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl (382.6 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

crackle_codec-0.7.0-cp37-cp37m-win_amd64.whl (217.1 kB view details)

Uploaded CPython 3.7m Windows x86-64

crackle_codec-0.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (326.5 kB view details)

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

crackle_codec-0.7.0-cp37-cp37m-macosx_10_9_x86_64.whl (382.1 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

crackle_codec-0.7.0-cp36-cp36m-win_amd64.whl (217.0 kB view details)

Uploaded CPython 3.6m Windows x86-64

crackle_codec-0.7.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (326.6 kB view details)

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

crackle_codec-0.7.0-cp36-cp36m-macosx_10_9_x86_64.whl (382.1 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: crackle-codec-0.7.0.tar.gz
  • Upload date:
  • Size: 75.8 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.0.tar.gz
Algorithm Hash digest
SHA256 669d418ea2aa4998723cd243e44b571558dcfc97c04e6a5a0d2e53cb37d28498
MD5 b0fde03a452c23ba3e18b47b5c96d915
BLAKE2b-256 c76275b76c7ce1f0b6d0769a34f234b5e6bbcc81f46e50bbe67490132116aaf2

See more details on using hashes here.

File details

Details for the file crackle_codec-0.7.0-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

  • Download URL: crackle_codec-0.7.0-cp312-cp312-macosx_10_9_universal2.whl
  • Upload date:
  • Size: 660.4 kB
  • Tags: CPython 3.12, macOS 10.9+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.21.0 setuptools/56.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.10

File hashes

Hashes for crackle_codec-0.7.0-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 10c371a98c97b0c63ce9779bdd05503afb3d8cb18b5ca534873eb50f46827749
MD5 953ea37d5d58cf6fb75f77595d7c6e37
BLAKE2b-256 51e41d3dd077141676e3193d4538a7382efb4616ea2bd1f6bf2e77cbafd652a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3f23bef10dd87c4dd026ac628deb3e3dc3e9a24eeec6196e0f116598be8b7123
MD5 e548a108957bf959452f7ee38cb95c56
BLAKE2b-256 be35726f10763dc47c18a9e617cafd9a6eb87fddcc6f6ce72dc2d8646d09a1e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bad706e326a6cab86e07347a3bb99b0f2da6337174f380f5cdbe331cce9b86f2
MD5 2e5ad919952275c9bfd5a07bf380ac22
BLAKE2b-256 6afb68a376b9b63a96c6448e7ae2edf9870444b51017dfa0c326cbaa049ba5d4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f1ca60b63174ea639a5ac39401a00a8459d4d48fbb21d952d1c1e9b171383649
MD5 bc03b6392d00f3f755c586532cb937ab
BLAKE2b-256 be7f8134785d8210e3be388b4199ccaa22c38606d36763c7d1793d8cc86f216d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 41910ce7533a4ca6a99adf388a5bc09469bccf333559d24a976f93e1cd23eff4
MD5 fbaf7cf27e6280cd626e25f92c62a0ed
BLAKE2b-256 e67b5ad62bfdc5f4bad41b2825d82fc31a925d4ec4ebf5d83345542a74262ac3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 1e707d14b58a913c75ab3ba6ceb249d61bfd0a0478a0633680a038f3d0398fb4
MD5 5466294e122eb1583095ea26dcf52115
BLAKE2b-256 28fb23cb2006d9cc9266ff188f9554689c8079e702fc6e5c0b565c3ab7372415

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9e2670b3696d9f0f371e42291a34c1cf81b7fed57185f84b6561cedbc5f07889
MD5 097a0bfe7a7bec87a933e4edd3cdbc67
BLAKE2b-256 19407aae0c715dedd5e483aaad3f460bb0da78187e9c463c0ccca413270493d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f8b6810812e5d106ef2cb66956a15c06e63f5b6a4a7332bfdeb720c6a40b8605
MD5 f58c060ddbb255c3e0cb59b3418cbe4c
BLAKE2b-256 cc8ddf992a6e3ce7468599536256440defc101bf4cb800d0e19f7e798a1d8deb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 135bd79cef751b758237bc75fd3c4fab345231542f82cf13079b81d7c693596b
MD5 9cbdb107ffbf1534be29bdc9bae4889b
BLAKE2b-256 7e94c2e7fd572debb441e6a0308e0e9702df879bf9f68669247a14b7ffdc9d4c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 46dea0128692236194ce95bfdb47abfc693e929a873625f86b65d1c2a558c72b
MD5 a5dc9bc7100ac296e0cf8507e9d81c8a
BLAKE2b-256 3d54568ae6026bf3dc3e63ad20bb5f3a64a2aa4ba9c6b9a992294716f9410222

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7fde2499a48452f0fe3c3dcdcb1a386d722f64fb426e81b3920dc7aed9f66161
MD5 13307ff2ae634c784e31cecf25890d67
BLAKE2b-256 77aeea35fe2f7c531bc45a0814b257b46343f14ddd55c664dcffb7da3cd306c5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 2dd29e874a3b3c36e1fd4d5a72afa72cc5a7e7c88d054733f292890812be9a0c
MD5 1e2b06f4f45b55e96da763014163c9ba
BLAKE2b-256 eb686754a5d88969b0866ef30e2f62c5cb3512f2f442815ec5e466fd27fceb12

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3674811b43007fb5afea0a4f94fd70abe8d8969242e9530873a2aa8534332822
MD5 7194973459cf986f8d3241c9b70095ca
BLAKE2b-256 b070cb54d794b46ce08776433b0951057001fa7b761e48ca98fb8daed6254cbf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3acca837fd38a25d6596308740ad8d110985cc5f79c15228aa42b4bf60a81a8b
MD5 2e63b6c7ecaeb37f374c9ec4e42f0ca3
BLAKE2b-256 73dabbf5928d17d469bc56f4994244a3feaa9318e02b243a7320eaf59b74c7c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d2697084ba20ffe29682ad1f0ab4969497bff7d812a097b4b52c2cf8d9cd6be7
MD5 ea9fda4d50b7dbbf7dc20bc4921c070e
BLAKE2b-256 2b84149ad0ba858d793dbf10186a866063711b0fa633f64d9e28fc8271a1cb13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 da2ae295c24e50abdeee1e25f571c52aa800c200d6a1145b482a59bfd7aea0d8
MD5 8231d2e2813c28dedff1346981d6b344
BLAKE2b-256 635634032531c6fd146f6d417cc8978486a7b3f92e1e050780a74d0aacba0c6c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 406ce658eb9e2d19779c244ad4717e45e1a5018b8c27eb3501570ea3bca5971d
MD5 982846b1bf4f896e8aec85535e1d94f9
BLAKE2b-256 a4ba3efa3527a1bbdebd85007f54006cfb1e55bf95ea04fc401f0e9f219eaf03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 86e57b9fb9cf32834e8b0c32477c025d202a9722f92b01855360ff77de9a00fd
MD5 6686a7cff5d8f79ced5eee40d4c37dd6
BLAKE2b-256 9e927d04c94a4aaa7c42132dc59e473928216e694fc3b27d1d4c040cdf61541e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp38-cp38-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 d2402be80aebe1d7a05bc4989e3cc78fa8b765ea0eee020e6bce7882e2954ce6
MD5 5d4d977b8be44ec48c98f39ba66d0f3f
BLAKE2b-256 c34fbf9ba447b19b7bec48082b70877f612c2da6a36b8edb32fb99fe5ab30f8f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 98e7272b2a1cc63d206665f44dc61248c6d515f3b2ce85fb992415c719987160
MD5 fab3ef1c155154b3b574940f9ba6d742
BLAKE2b-256 d31ebfec3577887a5ba86c07a4fc12a34327a0cde3a99cd67c68e0bf0c894c62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1beadcca59373ca8de87429cd2db32aa9cd921c0cf10bdf9f6a43fcccdf8061c
MD5 cd8fe2765a6baa1e637de357eb57e736
BLAKE2b-256 7072e05479859b299f37126a414be4ee05e89720ba744f42b4518e6a2b3298dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 fe92d003b1a57ee00cb15597eb759c639d60a0733aaefa9a6c540f03c8cb59e6
MD5 48a576e476f63f0e4d6cfa8a4d2aad7e
BLAKE2b-256 3ddb7aeb11f713989ff6fb755d8a9941b5ee0e0036abf28ffda6213f2c4c556a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6fbe68a26e8f13e86789e87059bc06eb9a7f0e9a9785db2beb1bda7ca311eda4
MD5 c7658cb9a5894bc483216ecc7763159c
BLAKE2b-256 356c6fb1a4487e4f84b14fdc788127124240d22429431a043945e328b573e1dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f6eaf5a8d2612c67fc99ca7ed9d2c0c00bbc238d5e04da9ff98d6c5e2e8537b9
MD5 b3030ff0149de9ffad4015f261673623
BLAKE2b-256 46f2b523ad72687898ac01589bf4d3bff9198c8373787bc1a77a45e933225506

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 5fccfe27661392fd29641f7626aaab5549da1ba6882cf6b2a7b56a83b7f175c7
MD5 1f49177cc483e35aea1663c0c46fcd72
BLAKE2b-256 a744ad97ccebcbbab18273a5001508517a9528c004024d248834cd2fd2d12244

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3d7d6d668da73f1c24807af0dc37c239fb2e8e114ce1dc94aaa526d3afd6befa
MD5 667ed372dcbdc7a29f4ab773bb2c9c8b
BLAKE2b-256 6adbf67f3b1a26d4fdac45199c56634a7d82860eff7ff5e543bebc5488d3aaba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.7.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 843115bf563f11fe47861f3751395e9d34fd06848ffcde7d48e06d2f1d9c0cdd
MD5 284619e140c8dff19f0edb0cba1338c5
BLAKE2b-256 d3a644835cf9705dd5a70e7f28f8fdf09f97024e452189d03320cea0cd67bfac

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