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

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

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

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

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

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

Versions

Major Version Format Version Description
1 0 Still experimental.

Stream Format

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

Header

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

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

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

Flat Label Format

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

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

Encoding flat labels is fast.

Condensed (Variable Width) Pins Label Format

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

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

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

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

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

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

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

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

Fixed Width Pins (disabled)

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

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

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

Crack Code Format

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

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

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

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

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

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

Boundary Structure: Crack Code

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

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

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

Label Map: Method of Pins

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

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

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

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

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

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

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

References

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

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

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

Project details


Download files

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

Source Distribution

crackle-codec-0.6.0.tar.gz (74.7 kB view details)

Uploaded Source

Built Distributions

crackle_codec-0.6.0-cp311-cp311-win_amd64.whl (212.9 kB view details)

Uploaded CPython 3.11 Windows x86-64

crackle_codec-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324.4 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.11 macOS 11.0+ ARM64

crackle_codec-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl (383.9 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

crackle_codec-0.6.0-cp311-cp311-macosx_10_9_universal2.whl (667.8 kB view details)

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

crackle_codec-0.6.0-cp310-cp310-win_amd64.whl (212.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

crackle_codec-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324.5 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.10 macOS 11.0+ ARM64

crackle_codec-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl (383.9 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

crackle_codec-0.6.0-cp310-cp310-macosx_10_9_universal2.whl (667.8 kB view details)

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

crackle_codec-0.6.0-cp39-cp39-win_amd64.whl (212.2 kB view details)

Uploaded CPython 3.9 Windows x86-64

crackle_codec-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325.0 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

crackle_codec-0.6.0-cp39-cp39-macosx_11_0_arm64.whl (299.3 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

crackle_codec-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl (384.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

crackle_codec-0.6.0-cp39-cp39-macosx_10_9_universal2.whl (668.2 kB view details)

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

crackle_codec-0.6.0-cp38-cp38-win_amd64.whl (212.8 kB view details)

Uploaded CPython 3.8 Windows x86-64

crackle_codec-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324.8 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

crackle_codec-0.6.0-cp38-cp38-macosx_11_0_universal2.whl (684.8 kB view details)

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

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

Uploaded CPython 3.8 macOS 11.0+ ARM64

crackle_codec-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl (383.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

crackle_codec-0.6.0-cp37-cp37m-win_amd64.whl (213.7 kB view details)

Uploaded CPython 3.7m Windows x86-64

crackle_codec-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (326.0 kB view details)

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

crackle_codec-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl (383.1 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

crackle_codec-0.6.0-cp36-cp36m-win_amd64.whl (213.6 kB view details)

Uploaded CPython 3.6m Windows x86-64

crackle_codec-0.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325.2 kB view details)

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

crackle_codec-0.6.0-cp36-cp36m-macosx_10_9_x86_64.whl (383.2 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: crackle-codec-0.6.0.tar.gz
  • Upload date:
  • Size: 74.7 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.6.0.tar.gz
Algorithm Hash digest
SHA256 b4e58287eca43797606a7aed47e9b0c65a4752053b56474e5957918babb6b092
MD5 ae922393ee4ce2fa694115541996a3c5
BLAKE2b-256 75352f7c47df721d847fdbc00d2b7119f331eac649526d3f1a1307d46c1d8dca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 15693a0e08ea786c9f6d26aa895e7a7deebd7b0842dfc4d7d2fe00d6f818505f
MD5 db960216eab05b99b2566fe447a4881e
BLAKE2b-256 1afb7e22d79a039ac453f5e06f52bb3e288bbf4339546c9753ccd9df1230e16f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b54f7e5f63f3afdbd6b886f8199e83a52422848086ad09e644da8cb5561adc19
MD5 d3b74adc4af190408812f20b352c1f9a
BLAKE2b-256 080d3ef84ba98eaa0b7e34b8c602b98016a960257ac7f493f68e9c2ff71961d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3806cb6154a928233fb1a23f56640ab52e31b2b98ec95428c0b4631cc01249eb
MD5 bc7a636cc6745ccb9a3aef304c8d18e4
BLAKE2b-256 f3cb63d0e6225a8ac3011d17438cebf446930491bd0c85cb50ce734f587eb4f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f1b78bf02bd674606f30d285cab3313a1cb3169ca9a6c2b64f7b473a570f7ac0
MD5 3cd16d24dbb2930449855e5e69155393
BLAKE2b-256 8b87a770a3000fe3a9a81446eb4a603b4d5efa04c61a57b686072f67561dd07d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 9499d7b64c63706e269d5f94fcd9d42fd1b73b9907f4cf54e5216dd2f6018e17
MD5 6c9cd951ad46dc0109eee487f254489f
BLAKE2b-256 57f719a5ff4667095f9ad0bfdda35030011dbeaed6562969f011af637c802df9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6c57e56335d283b3c06258a0726d6beda9824f157d8d8870ff8097b49fb7e961
MD5 4895106a506941b7beefe37cec7b0a31
BLAKE2b-256 7f191a35ce7080eeaff680d44b6daf013ad0d8f84f0b83a96bc7a7465e1e708e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 438c287eb898ad097a438056544499d978153dd36a92e2b1d7596fa69905f53e
MD5 a00453f257ecfd492b5a2a87c935a64f
BLAKE2b-256 2bef3fbc3502a0952f0799696130d74327a18b29ab81e951d42730ea00ee3f95

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 10ad4322ca7313e95e863449934c9b326bf228e05f3c5d21c67f833e5bdd208e
MD5 89cc0c4c6fcbc79c5fb2a96bf6a45f27
BLAKE2b-256 ef07776d54c36c815000c804d0d96641496c82fd0bd0255a6e6609331c91bcce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cee44751b0e544fadbb108717dfe4f5db99a7b06618d7d6fa096cbcfb451fa01
MD5 5db8c1d96947e2acb9cd162145c2cc6a
BLAKE2b-256 a7b0086da71a4b97b37cf55f69f701c463f453d4023c0d2a206f32e75c3ec6da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e16b527d088c66b8667cca3b4933567b91fcb477c407d68de09d76df8725cf3a
MD5 7186307fde93caa92776a032ed7cf278
BLAKE2b-256 3d9925f494c62e0b07c0bab2390e212cc989d44a075d423e21e8c03dd7921d6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 ce618d8154fa45e78b5f3f0c7c504b86e5f2f1eee6094235578015af015caca6
MD5 213ee526e1d9eaf6d512be4c3b4ef3d4
BLAKE2b-256 be627aee744d3bbbefec575ff89774cb1a6e34924c5bf358ca26fe6d40709b8e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 75b81e609d1ec2b83f4afa695f8d97108d899a58b726727fc698e7c37b8b2f31
MD5 84ec00ef58ad83f876feee348ac5f457
BLAKE2b-256 eb0572383a1e784ca9d39771b745430029033487856a211d37774b02249c8c7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6cfc563f4e539662df9f23c71bcd9707beeceee769bb56eabb50112118c7c22e
MD5 6c8407fec7b9a142f5a64b0d75a6f460
BLAKE2b-256 7ccc4ae6433ab2a06a3d06c1d2143db4308e4852ab08f71c7f82ec1cf196835f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 dd250ab88d1f946b0457265819562f8bfeb973be362cb57229ed57c203334ff2
MD5 7485ae5edec9989f23e872755fc34ca3
BLAKE2b-256 7a986a424132b58b8db2999d7ef06bb90e744e157bc51e5960a4adb8b565738e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 6aa9cc2ba6176bd58f7b4728879382273e9e2d037a7078283407b6abd0adc408
MD5 8679997e40a13765330ba88b10c61642
BLAKE2b-256 13263a53c195c54e8094b227bb458dc5f036c6323698715a7a27f27f5b4f2e58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 e23b056286e1a48a2fc9bf2fe48cc19ac005f3a785b9119c3249151021e6c146
MD5 cf9083c552cd24109e73d54723b2b628
BLAKE2b-256 aaaaf20b55eda2e881f74660fe392ee09f6e906e32de49c2a1922803be082888

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e333fbe22c7e3f697ec0ee9f2ef88fc06e80cbf048b0caed915dd7c3e5344591
MD5 8916e452b13ed28bbc6acefda8933e24
BLAKE2b-256 9ad8aa2e410f8ceedb3a57afdc1bd1abeea1d5bcb07d2c1141b7076ef4bac7d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp38-cp38-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 869f4f50ec315caa653a4269cf83aa93a7c7ad15c2f6d4e92d194542bf6e0d9c
MD5 1e6f6c4c298d16ce159529ecfa2c57e8
BLAKE2b-256 dfad332fb89122553c745b1535d8b2d917c791b23c4b39fd9424de92f36e434b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c3d56c149be5acfacda7df794e9dd5a59497a3cd5af1151ad5b617986dce8ebc
MD5 c6f4467a4a2396d539cb497cf98a44b2
BLAKE2b-256 11cd03bad72b619a213717ad46d765810b90896fbb86f0fbce961551512c6a2e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5e16bcb8e8b8b5ab4e6c5c1b04c48d23f4b9e09e3e4797ffeafcdf8922f3466e
MD5 d2fbe4ba546652c2bea71795ba8b876f
BLAKE2b-256 247ba8e50f3b81d7f6feedbd1dca134082f7472487c434e9e5b07edfb24b20c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 125d359d95ba08469c69c11df2f58e94d3757c553dabb8a621e10d551fb8a19b
MD5 7eabe8fcff33541c0ca7a16daa320079
BLAKE2b-256 860965f9e6b05aa3b52f1a31be9c910afc2ceba48a83b7e0104aaabb85457656

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5d79cafcb1f3597549a936d95ff0820732947ec21b449e23eecc12b6bb549284
MD5 6911b149a7d00c8e95a7cf441c0df947
BLAKE2b-256 237007dbe2647ac723c32051e5caa44bc3a8ade46c4aad084bb3ff7a1409b592

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ee8aa46d9af3f5e11f7091979e73126d062aab7f3297c59b77d5916333439677
MD5 2d6d418446c41a8563b139bb260cd15c
BLAKE2b-256 380622e884123a0e7af75301bda208a65e9e7ebe760baf34a75500bb8d35b1bb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 a34495fa6440d41e6ec068cb331695bd64e60732dc26b98504201754881da7e0
MD5 d1a87ab25bd05a66ef657ae03d3343dd
BLAKE2b-256 57312d468431203ce78843e871f706bb6d71d7ae224ecabeea7bf89e060b0409

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0c00abdce57a956076ac1af1056f136af196c2beb5ddd6a5426a74597ec3b73e
MD5 d61851d9962ef3b3fa338acf4af7f614
BLAKE2b-256 f6fd166837a6bb7c8e4506d6b72da7570a21724395215bbaab43a33861aaf889

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1f8a24f6b2be1d44d444c3616e9c14d5ddb83f21dcb16ab685619d8924983c34
MD5 a80363c2492f39534dbe691125fef664
BLAKE2b-256 82e2f27ecd0f84fe749760b91caf2290ae6e19a5ec7a01158673ac7cd089b5b9

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