Skip to main content

Crackle 3D dense segmentation compression codec.

Project description

PyPI version

Crackle: Next gen. 3D segmentation compression codec.

# Command Line Interface
crackle data.npy # creates data.ckl
crackle -m 5 data.npy # use a 5th order context model
crackle -d data.ckl # recovers data.npy
import crackle
import numpy

labels = np.load("example.npy") # a 2D or 3D dense segmentation

binary = crackle.compress(labels, allow_pins=False, markov_model_order=0)
labels = crackle.decompress(binary)

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

# get unique labels without decompressing
uniq = crackle.labels(binary) 
# get num labels without decompressing
N = crackle.num_labels(binary) 
# get min and max without decompressing
mn = crackle.min(binary)
mx = crackle.max(binary)
# check if label in array in log(N) time
has_label = crackle.contains(binary, label)

# Remap labels without decompressing. Could
# be useful for e.g. proofreading.
remapped = crackle.remap(
  binary, { 1: 2, 2: 3, ... },
  preserve_missing_labels=True
)

# change dtype to smallest possible w/o precision loss
remapped = crackle.refit(binary)
# renumber array and change dtype to smallest possible
remapped = crackle.renumber(binary, start=0)

# for working with files
# if .gz is appended to the filename, the file will be
# automatically gzipped (or ungzipped)
crackle.save(labels, "example.ckl.gz")
labels = crackle.load("example.ckl.gz")

arr = crackle.CrackleArray(binary)
res = arr[:10,:10,:10] # array slicing (efficient z ranges)
20 in arr # log(N) check

This repository is currently Beta. It works and the format is reasonably fixed. There may be some improvements down the line (such as 3d compression of crack codes), but they will be a new format version number.

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

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

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

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

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

Versions

Major Version Format Version Description
1 0 Initial release w/ flat, pins, crack codes with finite context modeling. Beta.

Stream Format

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

Header

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

Format Field (u16): DDSSCLLFGOOOOURR (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. U: if 0, unique labels are sorted, else, unsorted R: Reserved

Flat Label Format

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

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

Encoding flat labels is fast.

Condensed (Variable Width) Pins Label Format

Attribute Type Description
background_color stored_data_width Background color of image.
num_unique u64 Number of unique labels in this volume.
unique_labels stored_type[num_unique] Sorted ascending array of all unique values in image, stored in the smallest data type that will hold them.
cc_per_grid smallest_type(sx * sy)[sz] Array containing the number of CCL IDs in each grid (usually a z-slice).
fmt_byte u8 00CCDDNN DD: 2^(DD) is the depth width NN: 2^(NN) is the num pins width, CC: 2^(CC) is the single components width.
pin_section Bitstream to end of labels section. Contains pin information.

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

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

Both num_pins and num_single_labels use the num_pins_width.

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

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

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

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

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

Fixed Width Pins (disabled)

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

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

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

Crack Code Format

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

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

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

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

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

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

Boundary Structure: Crack Code

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

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

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

Label Map: Method of Pins

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

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

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

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

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

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

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

References

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

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

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

Project details


Download files

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

Source Distribution

crackle-codec-0.9.0.tar.gz (78.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

crackle_codec-0.9.0-cp312-cp312-win_amd64.whl (217.2 kB view details)

Uploaded CPython 3.12Windows x86-64

crackle_codec-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (330.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

crackle_codec-0.9.0-cp312-cp312-macosx_11_0_arm64.whl (299.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

crackle_codec-0.9.0-cp312-cp312-macosx_10_9_x86_64.whl (381.6 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

crackle_codec-0.9.0-cp311-cp311-win_amd64.whl (217.5 kB view details)

Uploaded CPython 3.11Windows x86-64

crackle_codec-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (330.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

crackle_codec-0.9.0-cp311-cp311-macosx_11_0_arm64.whl (301.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

crackle_codec-0.9.0-cp311-cp311-macosx_10_9_x86_64.whl (383.6 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

crackle_codec-0.9.0-cp310-cp310-win_amd64.whl (216.8 kB view details)

Uploaded CPython 3.10Windows x86-64

crackle_codec-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (329.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

crackle_codec-0.9.0-cp310-cp310-macosx_11_0_arm64.whl (300.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.10macOS 10.9+ x86-64

crackle_codec-0.9.0-cp39-cp39-win_amd64.whl (216.3 kB view details)

Uploaded CPython 3.9Windows x86-64

crackle_codec-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (329.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

crackle_codec-0.9.0-cp39-cp39-macosx_11_0_arm64.whl (300.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

crackle_codec-0.9.0-cp39-cp39-macosx_10_9_x86_64.whl (382.3 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

crackle_codec-0.9.0-cp38-cp38-win_amd64.whl (216.9 kB view details)

Uploaded CPython 3.8Windows x86-64

crackle_codec-0.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (329.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

crackle_codec-0.9.0-cp38-cp38-macosx_11_0_arm64.whl (300.5 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

crackle_codec-0.9.0-cp38-cp38-macosx_10_9_x86_64.whl (381.9 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

crackle_codec-0.9.0-cp37-cp37m-win_amd64.whl (218.0 kB view details)

Uploaded CPython 3.7mWindows x86-64

crackle_codec-0.9.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (330.2 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

crackle_codec-0.9.0-cp37-cp37m-macosx_10_9_x86_64.whl (381.6 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

crackle_codec-0.9.0-cp36-cp36m-win_amd64.whl (217.9 kB view details)

Uploaded CPython 3.6mWindows x86-64

crackle_codec-0.9.0-cp36-cp36m-macosx_10_9_x86_64.whl (381.3 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: crackle-codec-0.9.0.tar.gz
  • Upload date:
  • Size: 78.0 kB
  • Tags: Source
  • 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.9.0.tar.gz
Algorithm Hash digest
SHA256 60aa63e2304b236342dae4e3fd80e56af2f409d54f174d5491c3325a78dc2c22
MD5 a9efaa15b047d5389e75ea00c2c1b524
BLAKE2b-256 35e6b5594021e627843346cf910802e553db30688a500dd3c086759774c47e37

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 217.2 kB
  • Tags: CPython 3.12, Windows 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.9.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 168359d083cad26a83e528aa3af99a7f11c75b5c5ef75a7e411afe9889d96df8
MD5 8788e24a159fb15004220be44c1441eb
BLAKE2b-256 50c5e5eabc327d8beafef46f80a73c6dd24f020d50c4fde8fdf76138c167b194

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a3b5e447a3495c6cad355b63c9b3e679cd27ff517742581c494a3f909c92d39d
MD5 d768ea500a3bdbf19ce87b1059db6730
BLAKE2b-256 4516efe7a7ac83f8f27609dabf85746503729d53391e9b5706ba206cf7a41524

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 299.6 kB
  • Tags: CPython 3.12, macOS 11.0+ ARM64
  • 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.9.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b76da06145dc5e149e51894e7935dc2507d7ac6ef2ebbc3941f67e4538538355
MD5 8b4f62f582ede40cfa9de7c7c319c26a
BLAKE2b-256 d21ca39d27ecd36e878fa13d8d988ec0ddc830eb0d9ce52265c41952add8f1e3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp312-cp312-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 381.6 kB
  • Tags: CPython 3.12, macOS 10.9+ 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.9.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f7186c0113f50988f0139e289e6dc18184c7916c06cb8cdf927c9f587a961e46
MD5 0a45f2e0494ad4d35f8937da77e38509
BLAKE2b-256 64ea2bc5697d50cb1c830639d55f262758e8ca6c9f1526cc3f589ee3155dedbc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 217.5 kB
  • Tags: CPython 3.11, Windows 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.9.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5b4ece5e9eafae5c8111d7be77f62bd109e94c78f8b34c6d336eefb3f44adb35
MD5 9079e70c1f781b6e3e11eebef383ac6c
BLAKE2b-256 a0661ed78f5e0e55c7367bf706915f3d339661a02b3be50b57d55adc395a932b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 787391864c89b3f50741d14e1689663cdad599a589fa881625ca38f3dbbb9725
MD5 040498197555c09a47e7ec6aede6c977
BLAKE2b-256 ab2dc2e7d34323c6d672a1b66ece98f55a1d773b07e50f2d8c76eadcabf3e0fb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 301.6 kB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • 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.9.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 33bade8364291c85836648a61e08cab8d46e8b09331b20ce81e6dd6912c20686
MD5 6c5784b8c60f78c4fa99f6fcd9bbe2f5
BLAKE2b-256 5a307daa14af09bbc227d7d3c3163bfddb00c293e7b52f81027375f0c97464fb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp311-cp311-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 383.6 kB
  • Tags: CPython 3.11, macOS 10.9+ 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.9.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fa1006bf8f861987fe44112932195a7c062787b56471c8f93ed084b9bfcbe1c5
MD5 fdd6f451cd516e552af242d333cde738
BLAKE2b-256 5ed92fe1164fb88154a7996090b999b5089b9d8e25647fba487b0062db086f92

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 216.8 kB
  • Tags: CPython 3.10, Windows 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.9.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 26d9a45f31dcff27647ca62bd20c9a8de046d4dab9288cd02d519b99e292233a
MD5 f2c84af87437cbff078a4759503212e0
BLAKE2b-256 270c87c0e6611a245fb673f9af0f9b553f0c4842b1bf650a41659a4b8d00f99b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de84d7266c588e750ba1d57eb2d71b3048e3c494321d56308f24ff1f788a15bc
MD5 6390b1f134a5094c341774f87725f511
BLAKE2b-256 e82dde99c024c15faacf59d689248811807510f86246cdd549939f0ec23457db

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 300.5 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • 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.9.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb01147720fb7c252f4af63aa6f857ad5a6c691105220721109823a6def98d70
MD5 2d36082d5e8a30191d4e3b3a7cd8fede
BLAKE2b-256 f7ed3988e0ea62511235408dd0ffe32c843c9a48f2dcd2472e7664980e1847b2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp310-cp310-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 382.0 kB
  • Tags: CPython 3.10, macOS 10.9+ 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.9.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 69f8f5f978de5c7558f43de413af6248e0d30e147d04ec292e64c1825b041489
MD5 dcf6666794ae631e051f78635d1b5a41
BLAKE2b-256 c2ced7157cb158ddf7e9497817cf3f050600593fe07cda0c669dacadce0ebc34

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 216.3 kB
  • Tags: CPython 3.9, Windows 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.9.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3eaf331344cd672f4790731991736561d47e6044332226f9f515a93c6ce3c4b9
MD5 2f0590a2a75971c7d6e112571219b03c
BLAKE2b-256 20dffcf02b101052405b6438ffec982d5c5b7122d8ae682017f5934e59fca20f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7dd107c9a9eb623e8819b3d19d6f99225f8c26e27dcf42388a80c9d18040a81e
MD5 095122c2c4ad52a07d1e1373fe76cfe8
BLAKE2b-256 289965b1a5130c5eb8bc2acd774f0182295f332e3169541bb11a9ac541ecf649

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 300.6 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • 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.9.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8fa32838340ae0d4b05e974ac1bc5453ab64b896bdd5e668dbecd5d5e3382f23
MD5 b1f0956f1f9672b859479a3307c36314
BLAKE2b-256 b4e99741f686c19b9e1a5a083cf0ec3a757daf58f92a29bbbcfe5314d51f8d74

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 382.3 kB
  • Tags: CPython 3.9, macOS 10.9+ 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.9.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6854d924fc0104456dc5cee58c4bcb555147bec0b5211ec1f50c611207b5416e
MD5 fad88fcc71bbc046893204817190d0c9
BLAKE2b-256 ebf78e3b6b67ac2d7b43f60bafeee1a4d30a23ae6690ed6637ab61958b576455

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 216.9 kB
  • Tags: CPython 3.8, Windows 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.9.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 03ab64f543b50990651a58cf9f8e3407c5cc68ded55408703b48e0aa27fafa76
MD5 a102ec338f16ec8988e9a18265bf38c5
BLAKE2b-256 2125ca220d7ba3db6bec96a9af8c909f3efa5891acf6f91f81be6b0ba3ad0760

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 457d7f4b4c9e26f9fe65cb8866af9bd07560983a4bdf60de7023807da74587c8
MD5 1460456b9e26129ee41cf10f69383465
BLAKE2b-256 2ffd993c7ea57b989851b43e907779f13afa242aeab6ecfaa465ba0d32d18235

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 300.5 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • 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.9.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d642bf05c3ac834d92c808d5e3d15887c2a4a295362edc03e71f05bb02c84301
MD5 ae8dcbd004248b5fa3a2970332e56182
BLAKE2b-256 45cde678170d5b0f4c636a30c48fcccba9834a5d5e22606279977f3017e50bd2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 381.9 kB
  • Tags: CPython 3.8, macOS 10.9+ 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.9.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7fd02e5f500c78041baee1a115c1c852a1f27f48e91c0ac3c89c5b1edb368c3c
MD5 63ecc7e4facc6e15f1da78d372bd1fe6
BLAKE2b-256 d253720132a570f0e04115ee5cbfe285b60ebd05dde9f349cdd62c15ffe5e0e6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 218.0 kB
  • Tags: CPython 3.7m, Windows 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.9.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 623f4e8774e15fea501f66fc55be52c356650aa64cc7b75485fbfe7637e65683
MD5 90326fafc26cd2942ab5c12854879c8c
BLAKE2b-256 2060c6f7385b95c1b36d356c7f358c6fa8d7b7e642d1e35e288a8a1bdc051a5a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.9.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e4db480870279172428531b2593932a7d281fe1e62c1da27b31627c376425f57
MD5 c70b84c81fcf61a4b40f873b15b2eb7a
BLAKE2b-256 f4d11341ea74ae71d280ebb01458988b9099c7b276be06e208ebbf95a9f4626f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 381.6 kB
  • Tags: CPython 3.7m, macOS 10.9+ 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.9.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8bb0449b4335992de32780a456477a90fe10de376132f6d1253d429be784fb64
MD5 ca4ada86468f30c5ddae0b4ab4d8db73
BLAKE2b-256 dba0bb859cb924943ec5d79392f224489e9b7bef75e3ddee62e763d537dcdcd3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 217.9 kB
  • Tags: CPython 3.6m, Windows 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.9.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 160cf8b03e5036f44e8f7c42391f17d8b1163c12ffc099b0c0023f07cd759093
MD5 6e1218a2401c59e37f44cfa6aebe217a
BLAKE2b-256 f0f08836225a217a0db84c1a1bd31aea76190510ae7d4f468ef74cb6a7480d4f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: crackle_codec-0.9.0-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 381.3 kB
  • Tags: CPython 3.6m, macOS 10.9+ 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.9.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 39f64b1a824d89acafbc78e40c2b9279380e315a74b7bf95b41c0c5eb4a47e71
MD5 54ff5f5dd77764edcae44320f6ee5720
BLAKE2b-256 c040516b96497dbe1cac04e3410a7372ed48a5062b55d01e0b9115202fe30b9d

See more details on using hashes here.

Supported by

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