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
crackle -m 0 data.ckl # change markov model order
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")

# Save a crackle array as a numpy array
# in a memory efficient manner.
crackle.save(binary, "example.npy.gz")

arr = crackle.CrackleArray(binary)
res = arr[:10,:10,:10] # array slicing (efficient z ranges)
arr[:,:,30] = 20 # write to a crackle array (whole z slices write faster)
20 in arr # log(N) check
arr = arr.numpy() # convert to a numpy array

# low memory extraction of point clouds
ptc = crackle.point_cloud(binary) # { label: np.ndarray, ... }
ptc = crackle.point_cloud(binary, label=777)

# building big arrays with low memory
binary = crackle.zeros([5000,5000,5000], dtype=np.uint64, order='F')

part1 = np.zeros([1000, 1000, 1000], dtype=np.uint32)
part2 = crackle.ones([1000, 1000, 1000], dtype=np.uint32)

binary = crackle.asfortranarray(binary)
binary = crackle.ascontiguousarray(binary)

# creates a crackle binary with part1 stacked atop part2
# in the z dimension. x and y dimensions must match
# without needing to decompress anything.
binary = crackle.zstack([ part1, part2 ])

# splits a crackle binary into before, middle (single slice),
# and after sections without decompressing.
before, middle, after = crackle.zsplit(binary, z=742)

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

| Format Version | Description | |---------------|----------------|----------------------------------------------------------------| | 0 | Initial release w/ flat, pins, crack codes with finite context modeling. Beta. | | 1 | Incr. header to 30 bytes from 24. num_label_bytes u32->u64, adds crc8 to protect header. |

Stream Format

Section Bytes Description
Header v0: 24, v1: 29 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. u64 Number of bytes of the labels section. Note the labels come in at least two format types.
crc8 Any. u8 CRC8 of format_field thru num_label_bytes using polynomial 0xe7 (implicit) and 0xFF initialization.

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

CRC8 only covers the header. It doesn't cover the magic number or format version since those are easily human correctable if needed.

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.17.3.tar.gz (113.6 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.17.3-cp313-cp313-win_amd64.whl (236.0 kB view details)

Uploaded CPython 3.13Windows x86-64

crackle_codec-0.17.3-cp313-cp313-win32.whl (223.2 kB view details)

Uploaded CPython 3.13Windows x86

crackle_codec-0.17.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (367.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

crackle_codec-0.17.3-cp313-cp313-macosx_11_0_arm64.whl (320.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

crackle_codec-0.17.3-cp313-cp313-macosx_10_13_x86_64.whl (394.0 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

crackle_codec-0.17.3-cp312-cp312-win_amd64.whl (236.0 kB view details)

Uploaded CPython 3.12Windows x86-64

crackle_codec-0.17.3-cp312-cp312-win32.whl (223.2 kB view details)

Uploaded CPython 3.12Windows x86

crackle_codec-0.17.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (366.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

crackle_codec-0.17.3-cp312-cp312-macosx_11_0_arm64.whl (320.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

crackle_codec-0.17.3-cp312-cp312-macosx_10_13_x86_64.whl (394.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

crackle_codec-0.17.3-cp311-cp311-win_amd64.whl (235.9 kB view details)

Uploaded CPython 3.11Windows x86-64

crackle_codec-0.17.3-cp311-cp311-win32.whl (223.3 kB view details)

Uploaded CPython 3.11Windows x86

crackle_codec-0.17.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (365.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

crackle_codec-0.17.3-cp311-cp311-macosx_11_0_arm64.whl (320.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

crackle_codec-0.17.3-cp311-cp311-macosx_10_9_x86_64.whl (392.9 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

crackle_codec-0.17.3-cp310-cp310-win_amd64.whl (234.9 kB view details)

Uploaded CPython 3.10Windows x86-64

crackle_codec-0.17.3-cp310-cp310-win32.whl (222.2 kB view details)

Uploaded CPython 3.10Windows x86

crackle_codec-0.17.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (365.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

crackle_codec-0.17.3-cp310-cp310-macosx_11_0_arm64.whl (319.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

crackle_codec-0.17.3-cp310-cp310-macosx_10_9_x86_64.whl (391.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

crackle_codec-0.17.3-cp39-cp39-win_amd64.whl (234.2 kB view details)

Uploaded CPython 3.9Windows x86-64

crackle_codec-0.17.3-cp39-cp39-win32.whl (222.3 kB view details)

Uploaded CPython 3.9Windows x86

crackle_codec-0.17.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (365.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

crackle_codec-0.17.3-cp39-cp39-macosx_11_0_arm64.whl (319.6 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

crackle_codec-0.17.3-cp39-cp39-macosx_10_9_x86_64.whl (391.5 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

crackle_codec-0.17.3-cp38-cp38-win_amd64.whl (234.8 kB view details)

Uploaded CPython 3.8Windows x86-64

crackle_codec-0.17.3-cp38-cp38-win32.whl (222.2 kB view details)

Uploaded CPython 3.8Windows x86

crackle_codec-0.17.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (364.2 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

crackle_codec-0.17.3-cp38-cp38-macosx_11_0_arm64.whl (319.3 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

crackle_codec-0.17.3-cp38-cp38-macosx_10_9_x86_64.whl (391.2 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

crackle_codec-0.17.3-cp37-cp37m-win_amd64.whl (235.8 kB view details)

Uploaded CPython 3.7mWindows x86-64

crackle_codec-0.17.3-cp37-cp37m-win32.whl (223.6 kB view details)

Uploaded CPython 3.7mWindows x86

crackle_codec-0.17.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (370.2 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

crackle_codec-0.17.3-cp37-cp37m-macosx_10_9_x86_64.whl (390.6 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

crackle_codec-0.17.3-cp36-cp36m-win_amd64.whl (235.7 kB view details)

Uploaded CPython 3.6mWindows x86-64

crackle_codec-0.17.3-cp36-cp36m-win32.whl (223.3 kB view details)

Uploaded CPython 3.6mWindows x86

crackle_codec-0.17.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (370.2 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

crackle_codec-0.17.3-cp36-cp36m-macosx_10_9_x86_64.whl (389.7 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

Details for the file crackle_codec-0.17.3.tar.gz.

File metadata

  • Download URL: crackle_codec-0.17.3.tar.gz
  • Upload date:
  • Size: 113.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.1

File hashes

Hashes for crackle_codec-0.17.3.tar.gz
Algorithm Hash digest
SHA256 eb2895135c587fe9f3ca41219d957d18e228aca92acf46a3995ecdfbe6171452
MD5 3677c687ec25f949d773547e23909d3f
BLAKE2b-256 a29453e41b5cb4b8c7092f3514c946e3aca80caeef86875b84801e7a22ded439

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 12d55c62beb965626742b4e155045fa1952dfc800453f743ed7c5168f5409b6f
MD5 fd6829194fdfdb2490d4ab33aabf2a4a
BLAKE2b-256 b25b6878580882913f2b5408dbf7ac36e5764916d4a8ed2804f30b9f2314ddd7

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp313-cp313-win32.whl.

File metadata

  • Download URL: crackle_codec-0.17.3-cp313-cp313-win32.whl
  • Upload date:
  • Size: 223.2 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.1

File hashes

Hashes for crackle_codec-0.17.3-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 6b3b3c5087dac568d2b4f2970156c7841f9ff2dec2b8e921b3fae0845377fddb
MD5 fb9c9a72efdcfbf386a4790414336c08
BLAKE2b-256 bbf4a42fe17041c156160e81d790f4d897cf2642b024f58c620a0eaa74b7b20a

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 289e7fac807c9688086d227eb7191a12046f0f30b7f550013063ced303f7becf
MD5 d9e45e88228d6f380f946363657055aa
BLAKE2b-256 8f56aaa845f2cd3ec57ed3fc3203d3ac41c103d0eff761409af4217dbda79685

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 188cd5ca98c7e5be3b3800225af0357e1830925f5a248cf6e6b9c0a941cc066a
MD5 f9f325f91b419bb3110cdf7d0178852a
BLAKE2b-256 d3ffbbf89000fe5c1b8d8791d069bcf8cbeaf71e1779e150767bbc4fa18db023

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 053aef10d17f52885c439c3ed34af2c07f465855ff012483599f48092ed42516
MD5 d6398db9734783ddf47d978602900a25
BLAKE2b-256 665cc20674823e7a076fb6559eebe3837c5b92616cc0bce0472319a0b146343d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b0b506a9aa54c8e977ff7e13116048c77279eb3e96c09fb5bf74775377fa2e4b
MD5 cba24aed09d68b9efc9d76b43cd047d7
BLAKE2b-256 e2957dc48fd8403ff544e4156637fb31c4952d1240cf01e16eb202118454d6f9

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp312-cp312-win32.whl.

File metadata

  • Download URL: crackle_codec-0.17.3-cp312-cp312-win32.whl
  • Upload date:
  • Size: 223.2 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.1

File hashes

Hashes for crackle_codec-0.17.3-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 2fcaa4c355ab303dc207a1be4a48d5ce06b9b9e0115407ec7295937e05859d25
MD5 5c998d05ffcce5fac1b3dc0887c5ecbd
BLAKE2b-256 32de4c73fb4e920391f6bc0d83fd64fac8fa3f750bb9b47150b0c40bb8f9e0a4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f69255b4ee7da9e15db21ba9104ffdf7ac6ef3df6902ecbd8599988daf54c5ff
MD5 504d0883b7f1ebfaa038a6f72c2b1af6
BLAKE2b-256 e0d31772ed5520664be180527edf1fc24ea65fe34ff792366889a12562a752df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eac70c199ac8d243444371ca1e7dd9e324d296ee41ab432127b15d281ba6763d
MD5 7bf5d198940cd2b1f86c7a30803bcfd4
BLAKE2b-256 898a6280e91f0c138c8d444b140f28cde2b0f140e0cd754815ddeb52f97b7834

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ad6f98a08a8d965884c5f642ab521a7f441697f9ffcfd9058b4f5e7de042ed19
MD5 555a29dd6d2d78435d3a8cc01eae023d
BLAKE2b-256 9a2a11c653a07986a7727b07d7b29c1bbe365fd37a15f44ca44403fe7faa72a3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2ebf84214127bbb018122b478a4bb2c0e3de51d4ed8899734534e2d7320f31f0
MD5 a063db378859a7ed165945185ff9d9e4
BLAKE2b-256 d5842b6db8cea0693a2111f29dd2c03a6a8100b556b7724cbacddccd0126290a

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp311-cp311-win32.whl.

File metadata

  • Download URL: crackle_codec-0.17.3-cp311-cp311-win32.whl
  • Upload date:
  • Size: 223.3 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.1

File hashes

Hashes for crackle_codec-0.17.3-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 0a1ad8a962ccbcda85cc33f026980e95f9f5a50458926702157e09fd25989207
MD5 8fdc2ace9bd8a7fdb00bd607059938d7
BLAKE2b-256 07a531888f2c7483a13e9e19e949c3d4c2a77815bac2729ce8bab92466e02e79

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 50fd965669a27fe8cc8fce6a7719c5781dceb87999b231d8f70dd4247579df43
MD5 c5683fb6ba6cb26969835235dafe035c
BLAKE2b-256 de22025927d3e46f88b2d193dd2f560e42d28a2fb0d71d20137380eef0f715ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d3056d40e63fc1d3d5d1d5564e5a3cc113ae610d5386e1000017f06fc89c04d0
MD5 710dec295276ad4edab629e34641abd1
BLAKE2b-256 9a27789829e0e3ae752083e8592e17e0d70f7240d049d6b05e525b4b7581eba9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7a86138c53eae246d9c7568bc22638ed3e37834f476130a7ba2497741be76b6a
MD5 42c592ad038dcce8a37ece008b86739d
BLAKE2b-256 0b9ca70b99e991bd2b14042fbdf29a7677b51f5579bcbed0fc89191481320b4d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0e91955a6fa7cf0f51e36b30726345011a757849e0e0fb644143e220c1320754
MD5 5e355c234048a31055b561746db8955e
BLAKE2b-256 1d503f720471e41b71dcc855f57c0f96cac148a2ca12997832e6eb932d7f3ade

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp310-cp310-win32.whl.

File metadata

  • Download URL: crackle_codec-0.17.3-cp310-cp310-win32.whl
  • Upload date:
  • Size: 222.2 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.1

File hashes

Hashes for crackle_codec-0.17.3-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 32f12668f6a802c042aa6ca90744dd96b89a315d9a17e47bd9ceace149d054b1
MD5 13cca2705ac972e12e947087f8ec456b
BLAKE2b-256 ba3ec24b4adee1e33b61ab8d242f4efac74ad0be019eda46aaeb64897dd1e11a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5f4f715e0ce59bb611da2668933f44531a8e08999d69efc2e0937f90a6874b19
MD5 1b35023219a6aba5441b0bd28d2bd6bd
BLAKE2b-256 0c3e0f6ded3b142d3a43d4d0048668634e3b3d86cfb7aec0eb043086b5ac5d67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d0fa63185db6f9cf930d54aa29aa2fbca95ae2f4741e2f1494f3a54189528970
MD5 87602119ac9bd278965099b1bdab9969
BLAKE2b-256 79a9add28909e2e5a7675b02a818bd19c6c2e5f76bfc30603fa3c9c6f670405a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9779026400900cb95d7e5e4a69ffb95f6efeb7b37877bf762a83065f945b55fc
MD5 175c9cd52b324ef701d8eb3be2c118f0
BLAKE2b-256 3fedca6dae77e63bcff216dbf5b3585c278ff50dd3057ce9854abb51b39bcc7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 48667594cfe23b96540aec6dbf96810cd0609b70a5352ab7c04eded96fa0f94b
MD5 bfd33a1307f5c2cc4441206a509b9136
BLAKE2b-256 0f41da8b16d9cb66b71b7dd10ddb67b8ed77101df6c1abe34fba300853f0561b

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp39-cp39-win32.whl.

File metadata

  • Download URL: crackle_codec-0.17.3-cp39-cp39-win32.whl
  • Upload date:
  • Size: 222.3 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.1

File hashes

Hashes for crackle_codec-0.17.3-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 366033f260668639ae43c131d1c35adb987be2448660ffb9eb3086e8129dc02d
MD5 9f9f06b1e39a66431042a97920b27732
BLAKE2b-256 54bdc1c3191dfbffb00a99c5e6d5bb93683c600ee0d9f6f628d7fa2ae588fca9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8c9d53e00994fa6d1eae37b6eb1128ace32c777a906191615d53b1c0bbdcfeb5
MD5 a01360100acd9e4a440f953f0e44f7a8
BLAKE2b-256 dbaeffac0f441913859ff06dc95e0ff48b5f7cacda17af692a078d5652ef1416

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b827656e7a462e620482d262374ddc7d525d13c7b495ad9b819f575a8015003c
MD5 6d19f0af8ee06493d9889345ebcccd97
BLAKE2b-256 b16e8c62187ba1d813de644cb3c692d6ef73bde5dc7015d6788bd9ab12425f23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 50628f66d3d22236a1509c8ee9fe903156e276f5a2fcdd520de7d1e2c66c1277
MD5 9e72cd79cc15a80af76074caa43f3bd0
BLAKE2b-256 cca6467f5b79f7a240f0a3ecd15c896d82bd8111921ffe9a66f5717bc4e72240

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 dc5fab7d44947e33ec4ce106f0ef52a1474a2762052ded1c952b128f42c89e64
MD5 21252c42a882d35842614dd435093c2e
BLAKE2b-256 a4673c86270136056d949f1ed0540308681097444322e30d0b9c0148b8c1091f

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp38-cp38-win32.whl.

File metadata

  • Download URL: crackle_codec-0.17.3-cp38-cp38-win32.whl
  • Upload date:
  • Size: 222.2 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.1

File hashes

Hashes for crackle_codec-0.17.3-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 6ee4f333b040f7cc03bc17ac22c21c5c3aedb9d3ccfc3a2d6c96372023e2d302
MD5 28b038c484b8c33e1418b169184e9003
BLAKE2b-256 1b3d75ebc936ce90f6b3224618b94d7b4663eff78cf67d1ef088aec4abbde22f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fe229fc5c14d0cc62272b93023a5798cf5abc17f5b34550857ff731b22958d5e
MD5 b14a73a43f338fdaed2a311eaa1a4fdd
BLAKE2b-256 f93d2b0b33f0bd2a22279d64fa25eb972f60aaeaad1ef797844ff9c62736b431

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3f7b820bff74a42c18d8abba97bb752847ae6037f1acbe434fc7c93b06efd2b2
MD5 32d0f059e8266c44639f6cdf39e09e3d
BLAKE2b-256 10a85ba8d0f5e0e088c2a7a8ea3c2d810d191cf85440d8dd601c906e93d717b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e5be89fee3f27930a6bf2f9e9321f0c22b196fb975d61695f88a5af8d4c22abd
MD5 a1634c49a0c6311543da69f848689e96
BLAKE2b-256 5beb07827298ac61ecf1a36a2405c2f076faadd1e6203ead4bbfbebcff4d5364

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 1875b618b8cb7c62b54f0bc927985c2dd57ac4881906678a7fb2cf36edec198c
MD5 231ee2aa6a9031c52ce6ca4083625794
BLAKE2b-256 a2b44c028f587b7227833c28f03cbc8875be7b3d381c996e3e818d43201963a9

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp37-cp37m-win32.whl.

File metadata

  • Download URL: crackle_codec-0.17.3-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 223.6 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.1

File hashes

Hashes for crackle_codec-0.17.3-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 ff7e67d00f78430b6e38af2b522a384c7a080951f9418c30f65c01767ad555ab
MD5 25871ca2ad9f1af6e4b18ad67c46043f
BLAKE2b-256 744c3c465f6b364fc660366d022e658f3bcfc26c4d5dac3e1ffcd45da1a5d4ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3f87e404c52cd78efd8d40e5c45fdcdaf44d3e32ddd9b8393bd590ae820cdca4
MD5 37097a9c475b0e84af3911fc49598bbb
BLAKE2b-256 eea8d5f3cadaea07b68e12c4a62409e4a70a5a5e32738eeee56ba8788b34d1d2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b23d60e5e16b27c9d78e8e99b7879cd3c66fd984400733fdb1b6e70b2351a93c
MD5 39f1e3673146e96fc0e5de1f2ea93df1
BLAKE2b-256 c046b7c78d0e32cd2dceb0a85a321e4bb9333fe04a6be6f77c903d6e40652a6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 4e9a8e8bc24890fd6daa3dd32ade15be61a2108487b1ee257267c2404a02b13f
MD5 722babd3dd7c3d0325c936a062ddc037
BLAKE2b-256 cf5eeedbc6c3bb5988f8aa1916e9fd220e7dd5cf531c60b2b9bb1ae699ca8734

See more details on using hashes here.

File details

Details for the file crackle_codec-0.17.3-cp36-cp36m-win32.whl.

File metadata

  • Download URL: crackle_codec-0.17.3-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 223.3 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.1

File hashes

Hashes for crackle_codec-0.17.3-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 97dad36eeea72a03c0015fb7ab05b06660cbc9fc713d97ab37874f2c1871a449
MD5 decff4630697644d496e9512d41f2dd8
BLAKE2b-256 a3df3e52f23f3fe067ba6a2f86700f5f82222946e733dd3022a829b5002f31e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ed596685dc6ddecfae9c950b66ba159733632b0b9bc11456cd918298f322ff60
MD5 94adc3ebd6f4a103e47c514931340a6f
BLAKE2b-256 398613d82fd126ea8a678b2d19dc77a95ecdc009c740ee907092b5616527a870

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for crackle_codec-0.17.3-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c918b06858e596a90d02fd83d8678a8630a4505df0794c81935a6b4499c36c5f
MD5 2f0517d42a74c8a2bfc4e9eb45aaf9b2
BLAKE2b-256 a8314c5541ff7f7c86f1bd330906fc346e84fadf4032fd47cd0c8e11a8e800fe

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