Skip to main content

Crackle 3D dense segmentation compression codec.

Project description

Crackle: Next gen. 3D segmentation compression codec.

# Command Line Interface
crackle data.npy # creates data.ckl
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)
labels = crackle.decompress(binary)

# get unique labels without decompressing
uniq = crackle.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
)

# 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. u8 Number of bytes of the labels section. Note the labels come in at least two format types.

Format Field (u16): DDSSCLLFGRRRRRRR (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) R: Reserved

Flat Label Format

| NUM_LABELS (u64) | UNIQUE LABELS (NUM_LABELS \* STORED_DATA_WIDTH) | NUM CONNECTED COMPONENTS PER A GRID (sizeof(sx \* sy) \* sz) | INDEX INTO UNIQUE LABELS FOR EACH CCL ID (sizeof(NUM_LABELS) \* ... to end of section) |

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

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

FMT_BYTE: 0000DDNN

DD: 2^(DD) is the depth width NN: 2^(NN) is the num pins width

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 |

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).

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: | CHAIN 0 | CHAIN 1 | ... | CHAIN N |

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

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

Uploaded Source

Built Distributions

crackle_codec-0.2.0-cp311-cp311-win_amd64.whl (186.3 kB view details)

Uploaded CPython 3.11 Windows x86-64

crackle_codec-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (291.8 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

crackle_codec-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl (280.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

crackle_codec-0.2.0-cp310-cp310-win_amd64.whl (186.3 kB view details)

Uploaded CPython 3.10 Windows x86-64

crackle_codec-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (292.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

crackle_codec-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl (280.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

crackle_codec-0.2.0-cp310-cp310-macosx_10_9_universal2.whl (516.9 kB view details)

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

crackle_codec-0.2.0-cp39-cp39-win_amd64.whl (185.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

crackle_codec-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (290.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

crackle_codec-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl (280.9 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

crackle_codec-0.2.0-cp39-cp39-macosx_10_9_universal2.whl (518.2 kB view details)

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

crackle_codec-0.2.0-cp38-cp38-win_amd64.whl (186.2 kB view details)

Uploaded CPython 3.8 Windows x86-64

crackle_codec-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (291.2 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

crackle_codec-0.2.0-cp38-cp38-macosx_11_0_universal2.whl (531.4 kB view details)

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

crackle_codec-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl (280.6 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

crackle_codec-0.2.0-cp37-cp37m-win_amd64.whl (187.1 kB view details)

Uploaded CPython 3.7m Windows x86-64

crackle_codec-0.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (298.0 kB view details)

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

crackle_codec-0.2.0-cp37-cp37m-macosx_10_9_x86_64.whl (280.1 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

crackle_codec-0.2.0-cp36-cp36m-win_amd64.whl (187.1 kB view details)

Uploaded CPython 3.6m Windows x86-64

crackle_codec-0.2.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (298.6 kB view details)

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

crackle_codec-0.2.0-cp36-cp36m-macosx_10_9_x86_64.whl (280.1 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: crackle-codec-0.2.0.tar.gz
  • Upload date:
  • Size: 64.8 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.2.0.tar.gz
Algorithm Hash digest
SHA256 23f4fdf009d6ce48e02f3f8266d739fdaf025d25c618c4dc49cf72cb36c19d2a
MD5 ef7ca68f66da64d2c549aaaf93176708
BLAKE2b-256 70bacf699195c3b0ba40cc274cf2675ca821f3d84fd594b154b0b5760c7c0ff9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9ed5653627868fd6ac896790ba34639c41762cff3d132ffcc814681628433f7c
MD5 9b80341159846ee937449685622f5268
BLAKE2b-256 a3224c2d98150408c66ab5cfc9c9030c88bcae03b671a2967ee93c044049eac0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9b913ab06a660b8b6fc52db5c4db15c3e451ddc25d8d9c0561bae2c58577a33f
MD5 2a568476e5618edd69a6635589e125a8
BLAKE2b-256 21f69b5ecbb38f0e7db27e7f7bc2f63ce99f1db24486669fd4e8852e77e10701

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5418445dc1271be2ccba99f2cf74699522a59f95d23318bc76d941b034d463b1
MD5 55a3dae9064c1e2021a238398f72861e
BLAKE2b-256 eba19b9cf6a3023bb4edbea9e819d20923bed45bf0b25e9d2b0df7eefcf13e55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c971643b3b2b6ace27e4ac1709ca775b6814ede93daff221b038fac6893cf5af
MD5 aa4c611d0940ce9bea19c474c1396fb8
BLAKE2b-256 b89781e3faf47a0871a6e7000487ae62e59e067d96bcc298b47f3170aea81d3d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 13c20736a321eac05048b01c4f0684575987fb7f61cb58d21fa315926ffa3bb7
MD5 fab087b3f58016b17332f9745b8834ff
BLAKE2b-256 49fff88802de9e522dafd18b6a3226d7d8d97721165c9bc7138f1afb7642b167

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 46848e938809a3a44982a9585912b4b6872ee948aa920546edb4d27c2470bd5a
MD5 795e13bc66b3b1d881fbb2894e5ee7aa
BLAKE2b-256 224d0d28d1f8873174c66fe5c0d295a2ac736af4cf769f11c169b12920298e81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 daed53fc56d1f337ec42c5dbea94cb89298bd779308ce29ff67daa8a0d891810
MD5 e2ed94da9cab330517868b7d6ce18ddc
BLAKE2b-256 da7c06f973c2e6be0b47bbfe20d520cc9df7b34d393e199ba084292ed3c71759

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 bfe386f1c0210316f21245bf7af40ccfc4b9eba07cfb424dd5d867998a018859
MD5 d9b00e20e3868b571fc8285bf71ab758
BLAKE2b-256 b32b5a102d5a6c73a16ee3fe0b016c78971df8618a84b5c0647ed24169ec73d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9d94721154a7cfb9f831823e11d92a6e3ebd9323288a3f58ee8d4035810b6ef4
MD5 7f864d81b10ec95afcd9ded166fe4990
BLAKE2b-256 2803d5066a48c730e4589b25bf478aeeb32e703bb4a238cdd48af123c308f52b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 046f7241aea78da9a3ccf463b47e6eebd72ff32732e5d7bb2763c9bec8e5f61b
MD5 4761d9e44dd828ad6bdfb70f3f682c4f
BLAKE2b-256 57150758df6b808bac46e8523cfee8e207c97e2102746e16ad404f2d5b5fad46

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.2.0-cp39-cp39-macosx_10_9_universal2.whl
  • Upload date:
  • Size: 518.2 kB
  • Tags: CPython 3.9, 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.2.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 6d24bf934b3ff15c278bfcaa171a778a518e2dad7922e388f45d46faa959f0be
MD5 254b0b4866cbbe6e49a8d13c918730b5
BLAKE2b-256 19d282ea6ed91ebf83b39bf8215b025353e931b1c5b60ec950d5953cbc423611

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 8efd642bfeddc88086c33dd1c320de0635cb68ec963e05f69a53b5a277816be7
MD5 5a88b2584fc1b4f2731524d131a2a90f
BLAKE2b-256 188f8c8431f55ea69d38bbc5787cc562378cf4bd9a869f587160cb840eb86ddc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f989c34580119ae1cec3e61a78e121e6250f6c0cdb5c65d7a83827fcecdd1528
MD5 95b71699ea54c27f90ebc4ab22f28cef
BLAKE2b-256 2590fc4218738da5c7cfb74d1c3a7e03b3657eafecebe5bcf6c87a25bfe0b47f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.2.0-cp38-cp38-macosx_11_0_universal2.whl
  • Upload date:
  • Size: 531.4 kB
  • Tags: CPython 3.8, macOS 11.0+ 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.2.0-cp38-cp38-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 e47b84f317bdc1680c474660d44dd0c73431296da5d02c916b515a8b80c5ed7f
MD5 bf5c3eb832adaa6b976a134e2750f372
BLAKE2b-256 8260edb19dfedcf3ccd337d59728fc185c867af96d8e06ef34e62f2bdf4f31dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a2ee1d74c5555f6bacbcd71867dc814ddd68078dfd92f13917c687a458b51a14
MD5 10a8cf8a96285b0787b9c0de0aa5a2ac
BLAKE2b-256 968e1c88eb13eaabf135ce1aac275866ae59f90d67657c0088aad5a5fd2c57b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 3bae94271a6472ed2cfe9178b1408782ae2abbda0b0ab88e060c7a41f5e7abfa
MD5 61e0fb65a4fb8cad901072ccbfc1af33
BLAKE2b-256 5e5933cbeb45cf37b160f2a763cf4799c9833ff44f5086828f958c283779bc15

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0d7cc2ff5118c48743f4603790aa72fa8a74e2caf2d3fd64e3895c4cda64e113
MD5 c9f3bb16e7c9b05c61ded80641231116
BLAKE2b-256 a5bb3c51f46980e5a9460b101e71cb054551e11b900e65bb779cec80f397fea7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 02e58ce78060d9c58a6cf8df23e8a681dd02edc2f0c9be6e35a2e6f1bc073b7e
MD5 5aa8861591a7f02b8f4961524f9ac994
BLAKE2b-256 7dd5c50764d082926c65f7c8de078a66f9bb2dd71d7816d761b492380bbbe6e7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 d7991be890a1911aaa3c1d7cac35c0bfa490f9e7bcbc515f54363805899f1177
MD5 fc4d52544526056781a6f557544e76c2
BLAKE2b-256 604c34bc8cc10765bb3cd65936170089f78d42b5cd7d1e840fc2ae7eef75ac32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4fca751532f2a43689601a91fb9953889db0fd7e169e7c4dd53d50599f15ea6a
MD5 1c045a744669f276ced1bf89533afd65
BLAKE2b-256 a73fc6e3384af205a8d1974ee8c94a7d0f103e0d1766c21c583572b5406dad44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.2.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 54edaa27e2a65b7879f25708018788d2ad791e96501b7db7a30a38cfdff300d8
MD5 b16d4d4e6b487b5ea894914cc0b44349
BLAKE2b-256 9ec5b5e6469cf9ff56336cf59046e6c59c84b4ef7b87616b502b8a6c017c56df

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