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

Uploaded Source

Built Distributions

crackle_codec-0.6.2-cp311-cp311-win_amd64.whl (214.5 kB view details)

Uploaded CPython 3.11 Windows x86-64

crackle_codec-0.6.2-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.6.2-cp311-cp311-macosx_11_0_arm64.whl (301.1 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

crackle_codec-0.6.2-cp311-cp311-macosx_10_9_x86_64.whl (385.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

crackle_codec-0.6.2-cp311-cp311-macosx_10_9_universal2.whl (670.1 kB view details)

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

crackle_codec-0.6.2-cp310-cp310-win_amd64.whl (214.5 kB view details)

Uploaded CPython 3.10 Windows x86-64

crackle_codec-0.6.2-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.6.2-cp310-cp310-macosx_11_0_arm64.whl (301.2 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

crackle_codec-0.6.2-cp310-cp310-macosx_10_9_x86_64.whl (385.8 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

crackle_codec-0.6.2-cp310-cp310-macosx_10_9_universal2.whl (670.1 kB view details)

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

crackle_codec-0.6.2-cp39-cp39-win_amd64.whl (213.9 kB view details)

Uploaded CPython 3.9 Windows x86-64

crackle_codec-0.6.2-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.6.2-cp39-cp39-macosx_11_0_arm64.whl (301.3 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

crackle_codec-0.6.2-cp39-cp39-macosx_10_9_x86_64.whl (386.0 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

crackle_codec-0.6.2-cp39-cp39-macosx_10_9_universal2.whl (670.4 kB view details)

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

crackle_codec-0.6.2-cp38-cp38-win_amd64.whl (214.5 kB view details)

Uploaded CPython 3.8 Windows x86-64

crackle_codec-0.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (326.5 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

crackle_codec-0.6.2-cp38-cp38-macosx_11_0_universal2.whl (687.0 kB view details)

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

crackle_codec-0.6.2-cp38-cp38-macosx_11_0_arm64.whl (301.0 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

crackle_codec-0.6.2-cp38-cp38-macosx_10_9_x86_64.whl (385.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

crackle_codec-0.6.2-cp37-cp37m-win_amd64.whl (215.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

crackle_codec-0.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (327.3 kB view details)

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

crackle_codec-0.6.2-cp37-cp37m-macosx_10_9_x86_64.whl (385.1 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

crackle_codec-0.6.2-cp36-cp36m-win_amd64.whl (215.2 kB view details)

Uploaded CPython 3.6m Windows x86-64

crackle_codec-0.6.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (327.4 kB view details)

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

crackle_codec-0.6.2-cp36-cp36m-macosx_10_9_x86_64.whl (385.1 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: crackle-codec-0.6.2.tar.gz
  • Upload date:
  • Size: 75.2 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.6.2.tar.gz
Algorithm Hash digest
SHA256 b1ef994939a38e660ec5e6e2a6c3e062229c4efb7240a481f4c6949b623eb0ef
MD5 c9edfb392b686159bf526d681926001f
BLAKE2b-256 4e0df43daf42cb01e1f680d145a81ecd3ea449df3a7f97bdaf4030bc25e343f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 04ed499afeab4acd097bfc2068208c13a2577c78939fda10280ea0f9f3cbce7a
MD5 8fc42a8a832afa79d01d260eaa9e60cf
BLAKE2b-256 6fae7036e565e7dbfa983f6aa947ec73b43a1290f84cf71d48558bd478d5b8c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b35b7e57cfccdad8a4a3fd9465eacc63088acfcfac118e9793c215238d1a7208
MD5 d50e761b13d21c85c07d7b595e82c76e
BLAKE2b-256 2c1a5419271cb9107060ca530363f4b8176d5008ed17ebb5a7d2a7da0ff458ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 22141c328c8c60a4ca64c198fd7646297a4ba7224296ca54d880a9ce7e7e031d
MD5 25200b5af83f0e79fc4ae9409b01715f
BLAKE2b-256 ef62b90de6676bb6bb236ead98f6b9cefc67a3913c7c374f472935547a1b22c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 911fd91da700ae7d5b9ef298acbf01d9a62d18ae40e43a5863ac0b85a6408be0
MD5 33c87c2ade677da366dedf259401df57
BLAKE2b-256 9bc59e2f61fcaeafb71ea7ff68c344c46655d206d8562543a3323989aa9ec7b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 5616bc1fa2090103eba32aba9eecbcf63483ffde04cb8850bcfe877a71ebeded
MD5 29435d7af91212553e0404b4b05e0df3
BLAKE2b-256 78a9944344967e99e4ef4ab31c8d7ff3567e6cf5150484635305ecd5373ba4d6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 bcedaad4f861eda4bb3c494baa838fa27090a83036142595d82ea1aa38a2eedb
MD5 85beabf788505758485cef03a5af4955
BLAKE2b-256 9a57bec6e64721b6ecd7c8c28274146c50347d59fd0f954758f56b46bdc96348

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d29b2e180fa5a945368225a6b67f7dedfbf796e92a4008053cc4f621f90597a1
MD5 91e9fb89eecf34344b1885fae1f6c4cb
BLAKE2b-256 c49f77752ca26fd5db8f485071a57b0a19b9167c3fcf025ff850e85b7191a9bd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 611cef1ab191aa2a198009e72adc52c129766d2d733de47a17edfc4e47cb1bd3
MD5 17c1842467bd9d4464288c18c3c6e432
BLAKE2b-256 0ee69e89e551f11ce5884daf7828274fa508bcadeb2041f7ebb18b4282c60f82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 24aba8834578b86ea20faf870fae7ef92487524ab40351391fcff98bac3b5ccd
MD5 b7c65bccbca02a566b0337a04b83d32a
BLAKE2b-256 cc77e25d45eec21ae143d753c2cc55efcd58a5a437b6607a820525680f37c59f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 87337603e191ccad4a024d41cfe3717eb81292b3c8832fa894b0d1e4c0e41e75
MD5 d9539d3a870371dec66c00fbf606a363
BLAKE2b-256 546dbc1bcb193c9c38539da48cea5a69c353e2f72bed8ac4b9c8cb9fe38b9876

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 884560257285c3198b9bce0cb17dbd2937714c27b2bae63a48b196c9d5a75a17
MD5 a1b8f41671a83a4c9411be3ceb28c0df
BLAKE2b-256 5a8570869ba77ad312cf518e2089688c23cc5777e262d26d90140ca75ab3f93c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5b22ba4dcb97a5a0e8c55d668cd6f6e4f6b01fe6d03b102943695258d967006e
MD5 c2a272787c87548e4cff8015986a8994
BLAKE2b-256 696fd311fadabc118a3093c6aa11e5cc3c1e079a6a7e975b817d46580923f04c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1d06ef44d0ad47d91f7d3b718637e6c29ff369020272ac38dae221145c9d3467
MD5 b9dbda84fc7cacdad8d7e097b8f2ec71
BLAKE2b-256 4eb79890b930e36927286ac4d0d2dac902b6c2ffa501f047612a7ba0a37bb8c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e908004cb02433208fdbb23f4a925777639d9fb43e639bf8776d506015fe6f07
MD5 5197e5c46f252c9c7f76da82feb46735
BLAKE2b-256 1b79343386ff54f8712363c28ebcd71d0071438cc1965571dae7b9782e3fed1f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7a1c9a2469efd9a878344892122133ee9d913022c8b787b1180b8343dca753ae
MD5 184964f7dd849f932186704ce5dede41
BLAKE2b-256 c44060269560f091745e140eeaa4bee51fe33b4ba62de3ede9395c0de07e68f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 31f7be7c804f95ddf8884bf6804b4502dfd1a052d57e3c657bc7dbcc1f39b548
MD5 eb2dc215034ed0dca32baf90b6f08c57
BLAKE2b-256 86338ac981319804316923fba69dbdf7709840ad782b1c5065a44a29c5f26c63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8ef466d6e1dc6d89209ffc093a8c64fcf629e9b955ab46614a405556dfa113c1
MD5 1576f87504e760322ae20dcb8168fac0
BLAKE2b-256 9d1615d43de1ba0424bdac75c55e255312ee378c4707d39b363c2cd35e118d03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp38-cp38-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 6650dc53c46b2c59af25e929c23199ee70390f5e7cc6b477c88e2236a95dcd9e
MD5 a379766a47a5502cc2bc07bf2fdca0dd
BLAKE2b-256 e8b7f65df45ba31e2487df3484b28dfe1d854f9d4cb698e97b97364cc076c91c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9d2c4ad4f3a556c2a71c08449a42e03e99ab31ced2364c84e27e534a0c5108a9
MD5 15d581d99260087f662004ffff0211b0
BLAKE2b-256 028c47467697e14d50918f759acafbba98df89be32813d0d66e8ef45ee247732

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cede22b2b2a45d85decb53acac7164057dbe2c0f2aeb5657eb379718c9d96abb
MD5 c7f6eb1f87a397ce02b4e6f3b8857ad4
BLAKE2b-256 2be45faa347816720750933cfb97068965760c9850dc501432151d2cf9626762

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 24fdabcf7193f5a62a8554b12ed774147b4f700fedc4af51c00a94559fe29435
MD5 a404de7d9d60fba91d3d8b16b2f85098
BLAKE2b-256 c68fd7ffe2f12e23bc4cd5b9b694b52daa89b17fa1fe0ede3f51fe86dd7897f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7ca83598904d075d870ba9c801cf84ed34c7ac91e34a22f1f607595eb98ba96c
MD5 f0b41b37f3a4740c97b3e77cb0a3fc89
BLAKE2b-256 3d35f43253db89b324b1f23cd0f5804f72bd41b89569bd3b463c12789da7704a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3a07e953430bd6f27578e3c85d5ba841ee0414d0967bdbbccdafe5c7514b88ed
MD5 a09007828560ce324dfd3e4bdebe2217
BLAKE2b-256 f28ebab51a6fd241c4d2d5fd81342b19fb77f11f2ed5d5b5a4b46c41a195b408

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 f56233d307b6baefac060cbc94357fdd9eaf1210ff8167ea34d25faa57629562
MD5 840d74289a3144f6cc2a5c6614d75f61
BLAKE2b-256 4c7f6e36334de25cba134f1eff6a25fe21a18d76d5b5ccfa3981eab02a05624e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3a8e9b7c7ca62bb219571744c2032f84ed59d5e746a448359d66e41659ac7236
MD5 ac92da418cf5bfb38444b0b9f1caf304
BLAKE2b-256 be2484618f5b829df9ff1b5a05e06dcb20082594e83fcb29c4d295c268a1ce71

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.6.2-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 29a2d4d12e63cde8e5489abc3f47e5f182665041f92b5d39f197119b08e7c45f
MD5 f12a3d8662854a07b75a3e2af31a0b2b
BLAKE2b-256 d2dd3ed8de31bba7bfe8ef36d55d49afd2a735c8b4b9934fe77fdf0a8a64dc92

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