webp-corners: cases

Every bitstream in one file: webp-corners.tgz.

A case describes the content of a bitstream as text, and is assembled into the .webp of the same name in files/. The field names are the specifications' own: RFC 6386 for the lossy frame, RFC 9649 for the container. reject means a compliant decoder must refuse it. SYNTAX.md is the vocabulary, HOWTO.md the walk-through.

caseexpectedwhat it is
alph-after-imageokAn ALPH chunk placed after the image chunk instead of before it.
alph-compression-invalidrejectA compression method of 2, past the lossless one.
alph-empty-payloadrejectAn ALPH chunk holding its header byte and nothing else.
alph-lossless-byte-flippedrejectThe same plane with its last byte replaced.
alph-lossless-paletteokA losslessly compressed alpha plane carrying a palette transform, from a cwebp encode of a two-valued plane.
alph-lossless-predictorokA losslessly compressed alpha plane carrying a predictor transform, from a cwebp encode of a gradient.
alph-lossless-truncatedrejectThe predictor-transform plane cut to ten bytes.
alph-no-vp8xrejectAn ALPH chunk in a RIFF file with no VP8X ahead of it.
alph-plane-cacheokA palette-coded alpha plane that also declares a colour cache.
alph-plane-filteredokA compressed alpha plane with the gradient filter on top.
alph-plane-literalsokA compressed alpha plane written as plain green literals.
alph-plane-lz77okAn alpha plane whose second half is a back-reference to its first.
alph-plane-lz77-dist-2okAn alpha plane back-reference at distance 2.
alph-plane-lz77-dist-4okAn alpha plane back-reference at distance 4.
alph-plane-lz77-past-startrejectAn alpha plane copying from before its own beginning.
alph-plane-lz77-plainokTwo alpha-plane back-references that take neither pattern arm: one at distance 3, one shorter than its own distance.
alph-plane-lz77-unalignedokAn alpha plane back-reference starting one byte off a word boundary.
alph-plane-meta-huffmanokA palette-coded alpha plane with an entropy image inside it.
alph-plane-nontrivial-redokA palette-coded alpha plane whose red code carries two symbols.
alph-plane-oversubscribedrejectAn alpha plane whose green code is over-subscribed.
alph-plane-paletteokA compressed alpha plane of three values, through a palette.
alph-plane-preprocessedokA compressed alpha plane flagged as level-reduced.
alph-plane-two-transformsokAn alpha plane carrying a palette and a subtract-green transform.
alph-preprocessing-invalidrejectA pre-processing value of 2, past level reduction.
alph-raw-filter-gradientokAn uncompressed alpha plane under the gradient filter.
alph-raw-filter-horizontalokAn uncompressed alpha plane under the horizontal filter.
alph-raw-filter-noneokAn uncompressed alpha plane under the none filter.
alph-raw-filter-verticalokAn uncompressed alpha plane under the vertical filter.
alph-raw-oversizedokAn uncompressed plane 44 bytes longer than the picture needs.
alph-raw-preprocessingokAn uncompressed plane declaring the level-reduction pre-processing.
alph-raw-shortrejectAn uncompressed plane one byte short of the picture.
alph-reserved-setrejectThe two reserved bits of the ALPH header byte set.
alph-without-vp8x-flagokAn ALPH chunk with the VP8X alpha flag left clear.
anim-alph-after-imagereject, anim_dump rejectA frame whose alpha chunk comes after its image.
anim-alpha-flag-missingreject, anim_dump ok, webpinfo rejectFrames with transparency in a file whose VP8X does not admit it.
anim-alpha-lossless-framereject, anim_dump okAn animation frame whose alpha plane is a compressed image stream.
anim-alpha-raw-framereject, anim_dump okAn animation frame carrying an uncompressed ALPH chunk beside its lossy image.
anim-anim-chunk-paddedreject, anim_dump ok, webpinfo rejectAn ANIM chunk with four bytes of padding after its two fields.
anim-anim-chunk-shortreject, anim_dump rejectAn ANIM chunk of two bytes.
anim-anmf-header-truncatedreject, anim_dump rejectAn ANMF chunk declaring fewer bytes than its own header needs.
anim-anmf-odd-sizereject, anim_dump rejectAn ANMF chunk whose declared length is odd.
anim-anmf-size-past-endreject, anim_dump rejectAn ANMF chunk claiming to be far longer than the file.
anim-anmf-size-shortreject, anim_dump rejectAn ANMF chunk declaring less than the image inside it takes up.
anim-background-colorreject, anim_dump okA background colour that is neither white nor transparent.
anim-blend-nonereject, anim_dump okA half-transparent frame that says not to blend it.
anim-blend-overreject, anim_dump okThe same half-transparent frame, blended.
anim-blend-rangesreject, anim_dump okThree frames arranged so the blended region is split in two.
anim-canvas-larger-than-framesreject, anim_dump okA canvas bigger than any frame in it.
anim-dispose-backgroundreject, anim_dump okA partial frame that asks to be cleared away after it is shown.
anim-dispose-blend-matrixreject, anim_dump okThe four combinations of the disposal and blending bits, in one sequence.
anim-duplicate-animreject, anim_dump okA second ANIM chunk between the frames.
anim-duration-extremesreject, anim_dump okOne frame of zero milliseconds and one of the longest the field can say.
anim-eight-framesreject, anim_dump okEight frames, each a different flat colour.
anim-empty-framereject, anim_dump ok, webpinfo rejectAn ANMF chunk holding its header and nothing else, followed by a real frame.
anim-empty-frame-alonereject, anim_dump rejectAn animation whose only frame carries no image.
anim-frame-1x1reject, anim_dump okA single-pixel frame in the middle of a canvas.
anim-frame-alpha-onlyreject, anim_dump rejectA frame carrying an alpha chunk and no image.
anim-frame-area-overflowreject, anim_dump rejectAn ANMF header claiming a frame of sixteen million by sixteen million, inside a canvas of sixteen by sixteen.
anim-frame-image-past-canvasreject, anim_dump rejectA frame whose header fits the canvas but whose image does not.
anim-frame-offsetsreject, anim_dump okA second frame smaller than the canvas, placed at an offset.
anim-frame-past-canvasreject, anim_dump rejectA frame whose rectangle runs off the edge of the canvas.
anim-frame-reserved-bitsreject, anim_dump okThe six reserved bits of the ANMF flag byte all set.
anim-frame-size-mismatchreject, anim_dump ok, webpinfo rejectAn ANMF header claiming a size its own image disagrees with.
anim-frames-without-flagreject, anim_dump rejectA full animation whose VP8X does not claim to be one.
anim-image-chunk-beside-framesreject, anim_dump rejectA top-level image chunk in a file that also has frames.
anim-loop-count-maxreject, anim_dump okLoop count 65535, the largest the field holds.
anim-lossy-framesreject, anim_dump okTwo lossy frames rather than lossless ones.
anim-metadata-chunksreject, anim_dump okAn animation carrying an ICC profile and both metadata chunks.
anim-metadata-without-flagsreject, anim_dump ok, webpinfo rejectICCP and EXIF chunks in an animation that declares neither.
anim-mixed-formatsreject, anim_dump okA lossy frame and a lossless one in the same animation.
anim-nested-anmfreject, anim_dump rejectAn ANMF chunk inside another ANMF chunk.
anim-no-anim-chunkreject, anim_dump rejectFrames with no ANIM chunk in front of them.
anim-no-vp8xreject, anim_dump rejectANIM and ANMF chunks with no VP8X in front of them.
anim-riff-size-past-endreject, anim_dump rejectA RIFF size claiming more bytes than the file has.
anim-riff-size-truncates-framesreject, anim_dump rejectA RIFF size that stops in the middle of the last frame.
anim-second-vp8xreject, anim_dump rejectA second VP8X chunk after the frames have started.
anim-single-framereject, anim_dump okAn animation of one frame.
anim-two-framesreject, anim_dump okTwo full-canvas lossless frames, the plain animation everything else here is a variation on.
anim-two-images-in-framereject, anim_dump rejectOne ANMF carrying two image chunks.
anim-unknown-chunk-between-framesreject, anim_dump okAn unrecognised chunk sitting between two frames.
anim-vp8l-with-alphreject, anim_dump rejectA frame carrying both an alpha chunk and a lossless image.
cache-bits-0-invalidrejectColor cache flagged as present but with 0 bits.
cache-bits-1okColor cache with the minimum size, 1 bit (2 entries).
cache-bits-11okColor cache with the maximum size, 11 bits (2048 entries).
cache-bits-12-invalidrejectColor cache with 12 bits, one past MAX_CACHE_BITS.
cache-index-literalokA pixel coded as a color-cache index rather than as a literal.
codelen-all-zero-lengthsrejectA code-length stream that assigns length 0 to every symbol.
codelen-depth-15okA green code containing a symbol of depth 15, MAX_ALLOWED_CODE_LENGTH.
codelen-incompleterejectA code whose lengths leave the tree incomplete (two symbols of depth 2).
codelen-max-symbol-early-stopokCode-length stream with an explicit max_symbol far below the alphabet size.
codelen-max-symbol-too-bigrejectExplicit max_symbol greater than the alphabet size.
codelen-num-codes-19okAll 19 code-length codes declared.
codelen-num-codes-4okOnly 4 code-length codes declared, the minimum the 4-bit field allows.
codelen-over-capacityrejectThree symbols of depth 1, more than the two codes of that length that exist.
codelen-oversubscribedrejectLengths 1, 2, 2, 2: each length is individually possible, but together they over-subscribe the tree.
codelen-repeat-past-endrejectA repeat run that would write past the end of the alphabet.
codelen-repeat16-no-previousokCode-length stream starting with code 16 (repeat previous), before any non-zero length was seen.
codelen-repeat17-short-zerosokCode-length stream using code 17 (3..10 zeros) rather than 18.
codelen-repeat18-138-zerosokCode-length stream using code 18 with its maximum run of 138 zeros.
codelen-single-symbol-complex-formokThe complex form used to describe a code with exactly one symbol.
codelen-two-level-tableokA green code with depths up to 10, past the 8-bit root table.
container-chunk-header-truncatedrejectThe file cut four bytes into the last chunk header.
container-duplicate-image-chunkokTwo VP8 chunks, one after the other.
container-metadata-chunksokICCP, EXIF and XMP chunks around the frame.
container-no-image-chunkrejectA VP8X chunk and some metadata, and no image chunk at all.
container-odd-chunk-no-padrejectAn odd-sized chunk whose header rounds its length up, taking the pad byte away.
container-odd-chunk-payloadokAn optional chunk with an odd-sized payload, and the pad byte that must follow it.
container-riff-size-past-endreject, incremental okA RIFF header claiming far more bytes than the file holds.
container-riff-size-shortrejectA RIFF header claiming 11 bytes, one less than the smallest legal value.
container-riff-size-truncates-chunksrejectA RIFF size that stops in the middle of the chunks behind it.
container-trailing-bytesokBytes after the last chunk that the RIFF size does not account for.
container-unknown-chunkokA chunk with a fourcc the format does not define, ahead of the frame.
container-vp8xokThe extended format: a VP8X chunk ahead of the frame.
container-vp8x-animationrejectThe VP8X animation flag set on a file with no animation chunks.
container-vp8x-area-overflowrejectA VP8X canvas of 16777216 by 16777216, the largest the two 24-bit fields can describe.
container-vp8x-canvas-mismatchrejectA VP8X canvas of 64x64 in front of a 32x32 frame.
container-vp8x-reserved-bitsokThe reserved bits of the VP8X flags field all set.
container-vp8x-still-flagsokThe four still-image VP8X flags set, with none of the chunks they promise.
container-vp8x-wrong-sizerejectA VP8X chunk whose header claims 9 bytes rather than 10.
container-zero-size-chunkokAn optional chunk declaring a zero-length payload.
header-alpha-is-usedokThe alpha_is_used hint set on an image whose every pixel is opaque.
header-magic-wrongrejectSignature byte 0x2e instead of the 0x2f the format defines.
header-max-area-bombok34 bytes declaring 16384x16384, every pixel one color.
header-max-area-truncatedrejectThe same 16384x16384 header, cut off before the Huffman codes.
header-version-maxrejectHeader with the 3-bit version field at 7, the largest it holds.
header-version-nonzerorejectHeader with the 3-bit version field set to 1.
header-width-16384okWidth 16384, one past WEBP_MAX_DIMENSION.
lossless-all-featuresokEvery optional part of the lossless format in one image.
lossless-plainokAn ordinary lossless image, with none of the corners.
lossy-coeff-all-typesokAll four coefficient types in one macroblock, and both luma types across two.
lossy-coeff-bands-chromaokThe same sweep across the four blocks of a chroma plane.
lossy-coeff-bands-i16okThe same sweep for the two block kinds a 16x16 macroblock has: the Y2 block and the luma blocks that follow it.
lossy-coeff-bands-i4okThree 4x4 luma blocks that sweep every coefficient band, one per context.
lossy-coeff-cat3okCategory-3 coefficients: 11 to 18, three extra bits each.
lossy-coeff-cat4okCategory-4 coefficients: 19 to 34, four extra bits.
lossy-coeff-cat5okCategory-5 coefficients: 35 to 66, five extra bits.
lossy-coeff-cat6okCategory-6 coefficients: 67 upwards, eleven extra bits.
lossy-coeff-cat6-maxokThe largest coefficient the format can encode: 2114.
lossy-coeff-contextokNeighbouring blocks with and without coefficients, so that every context value from 0 to 2 is used.
lossy-coeff-empty-blocksokEvery one of the 25 blocks empty, but the macroblock not skipped.
lossy-coeff-full-blockokA block with all sixteen coefficients non-zero, so the loop ends by running out of positions rather than on an end-of-block.
lossy-coeff-medium-magnitudesokCoefficients of 5 through 10, coded with the fixed probabilities 159, 165 and 145.
lossy-coeff-small-magnitudesokCoefficients of 1, 2, 3 and 4, the magnitudes with their own tree branches.
lossy-coeff-wht-fullokA Y2 block with more than one coefficient, next to one with only a DC.
lossy-coeff-zero-runsokSingle coefficients at positions 15, 12, 8 and 1, each behind a run of zeros.
lossy-combo-all-featuresokEvery optional tool switched on in one frame at once.
lossy-filter-lf-deltaokLoop-filter deltas: 63 and -63 on the reference deltas, and a delta on the 4x4 mode.
lossy-filter-lf-delta-extremesokLoop-filter mode deltas at -63 and 63.
lossy-filter-normal-maxokThe normal loop filter at level 63, sharpness 0.
lossy-filter-sharpness-4okSharpness 4, the last level that halves the interior limit.
lossy-filter-sharpness-5okSharpness 5, the first level that quarters it.
lossy-filter-simple-maxokThe simple loop filter at level 63 and sharpness 7.
lossy-frame-bad-start-coderejectThe three-byte start code changed from 9d 01 2a to 9d 01 29.
lossy-frame-colorspace-clampokThe colour-space and clamping-type bits both set.
lossy-frame-interframerejectThe key-frame bit cleared, so the frame claims to be an inter frame.
lossy-frame-not-shownrejectA key frame with the show_frame bit cleared.
lossy-frame-part0-emptyrejectThe frame tag claims a zero-byte partition 0.
lossy-frame-part0-past-endrejectThe frame tag claims a partition 0 far larger than the file.
lossy-frame-scale-1okA horizontal upscaling hint of 1 and a vertical one of 3.
lossy-frame-scale-2okA horizontal upscaling hint of 2 and a vertical one of 1.
lossy-frame-scaledokHorizontal and vertical upscaling hints of 3 (2x) in the top bits of the dimension fields.
lossy-frame-version-1okA frame declaring profile 1 instead of 0.
lossy-frame-version-2okProfile 2, one of the four values the decoder accepts.
lossy-frame-version-3okProfile 3, the largest the decoder accepts.
lossy-frame-version-4rejectProfile 4, one past the last valid value.
lossy-frame-version-7rejectProfile 7, the largest the 3-bit field can hold.
lossy-frame-width-16383okThe widest frame the 14-bit field can describe, one macroblock tall.
lossy-frame-zero-widthrejectA frame whose width field is zero, with a height of 32.
lossy-mode-i16-all-fourokThe four 16x16 luma modes, one per macroblock.
lossy-mode-i4-all-tenokAll ten 4x4 luma modes inside one macroblock, twice over.
lossy-mode-i4-contextokFour B_PRED macroblocks whose 4x4 modes walk the [above][left] probability table.
lossy-mode-mixedok16x16 and 4x4 macroblocks alternating, in both directions.
lossy-mode-uv-all-fourokThe four chroma modes, one per macroblock.
lossy-parts-2-wrapokFour rows over two partitions, so each partition holds two non-adjacent rows.
lossy-parts-8-rowsokEight macroblock rows over eight token partitions, one row each, every row different.
lossy-parts-last-emptyrejectFour partitions whose declared sizes leave nothing for the last one.
lossy-parts-size-past-endrejectFour partitions, the first declaring 16 MB of data.
lossy-parts-table-too-smallrejectEight partitions declared in a frame with only ten bytes left for the twenty-one-byte size table.
lossy-proba-all-updatedokEvery one of the 1056 coefficient probabilities updated.
lossy-proba-one-updateokA single coefficient probability updated, the other 1055 left alone.
lossy-proba-refresh-and-skip-zerookThe entropy-refresh bit set, and a skip probability of 0.
lossy-proba-skip-extremesokA skip probability of 255 with nothing skipped, and the flag itself written out.
lossy-proba-zerookCoefficient probabilities of 0 and of 255, the ends of the range.
lossy-quant-deltasokAll five quantizer deltas present, at the ends of their 4-bit range.
lossy-quant-deltas-mirroredokThe five quantizer deltas at the ends lossy-quant-deltas does not use.
lossy-quant-dequant-overflowokA coefficient of 2114 at the coarsest quantizer, so the dequantized value does not fit the int16 it is stored in.
lossy-quant-maxokThe frame quantizer at 127, the coarsest.
lossy-quant-minokThe frame quantizer at 0, the finest the format allows.
lossy-quant-uv-dc-clampokA chroma DC quantizer index pushed past 117, where it is clamped rather than at 127.
lossy-segment-delta-quantizersokSegment quantizers read as deltas on the frame quantizer instead of absolute values.
lossy-segment-filter-strengthsokPer-segment loop-filter strengths, from 0 to 63, under a frame filter level of 40.
lossy-segment-four-quantizersokFour segments with four different absolute quantizers, one macroblock each.
lossy-segment-map-onlyokA segment map with no segment data behind it.
lossy-segment-no-mapokSegmentation on, quantizers given, but no segment map: every macroblock is segment 0.
lossy-segment-prob-extremesokSegment probabilities of 0 and 255, and loop-filter updates at both ends of their range.
lossy-segment-quant-extremesokSegment quantizers at 127, -127, 0 and absent.
lossy-skip-allokEvery macroblock skipped.
lossy-skip-i4x4-nz-dcokA skipped 4x4 macroblock between two 16x16 ones that both carry a Y2 block.
lossy-skip-mixedokSkipped and coded macroblocks alternating, with a skip probability of 1.
lossy-truncated-headerrejectPartition 0 cut to two bytes, which is enough for the segment header and not for the filter header.
lossy-truncated-modesrejectPartition 0 long enough for the whole frame header and not for the macroblock modes that follow it.
lossy-truncated-short-modesokMode data for 15 macroblocks in a frame whose dimensions call for 16.
lossy-truncated-tokensrejectPartition 0 intact, the token partition cut in half.
lz77-distance-1-runokA single literal followed by a length-8 copy at distance 1.
lz77-distance-2-patternokA back-reference at distance 2, five pixels long.
lz77-distance-3-overlapokA ten-pixel back-reference at distance 3.
lz77-distance-direct-121okPlane code 121, the first value past the table.
lz77-distance-past-startrejectA back-reference pointing further back than the pixels decoded so far.
lz77-length-past-endrejectA copy whose length runs past the last pixel of the image.
lz77-max-length-symbolokA back-reference using length symbol 23, the largest the format defines.
lz77-plane-code-1okBack-reference with plane code 1, which means "the pixel directly above".
lz77-plane-code-120okPlane code 120, the last entry of the 2-D offset table.
lz77-plane-code-clamped-to-1okPlane code 4 on a 1-pixel-wide image, where the 2-D offset computes to 0.
meta-huffman-1001-groupsokEntropy image whose highest group index is 1000, one past the decoder's arbitrary limit.
meta-huffman-groups-truncatedrejectAn entropy image naming group 1 when only one group of codes follows.
meta-huffman-per-tile-dataokTwo Huffman groups that both carry real data, so the code in use changes four pixels into every row.
meta-huffman-precision-maxokMeta Huffman with the largest tile size (precision 9, 512x512 pixels).
meta-huffman-precision-minokMeta Huffman with the smallest tile size (precision 2, 4x4 pixels).
meta-huffman-sparse-groupsokEntropy image referencing groups 0 and 900 only, leaving a 900-entry hole.
meta-huffman-two-groupsokTwo Huffman groups selected per tile by the entropy image.
predictor-all-16-modesokOne tile per predictor index, 0 to 15, across a 64x4 image.
predictor-mode-11-selectokPredictor 11 (Select) over the whole image.
predictor-mode-13-clamp-halfokPredictor 13 (ClampAddSubtractHalf) over the whole image.
predictor-mode-14-undefinedokEvery tile selects predictor 14, which the format does not define.
predictor-mode-15-undefinedokEvery tile selects predictor 15, the other undefined index.
predictor-single-rowokA predictor transform on a one-row image.
predictor-tile-bits-minokPredictor tiles of 4x4 pixels, the smallest the format allows.
simple-dist-1sym-oobrejectDistance code: simple form, single symbol 255, alphabet_size is 40.
simple-dist-2sym-both-oobrejectDistance code: both simple-form symbols out of range (200, 201).
simple-dist-2sym-duplicateokDistance code: simple form declaring 2 symbols that are the same (5, 5).
simple-dist-2sym-first-oobokDistance code: simple form, 2 symbols, the first one 200 >= alphabet_size 40.
simple-dist-2sym-second-oobokDistance code: simple form, 2 symbols, the second one 200 >= 40.
simple-dist-sym-39-last-validokDistance code: single symbol 39, the last in-range value.
simple-dist-sym-40-first-oobrejectDistance code: single symbol 40, the first out-of-range value.
simple-green-1bit-symbolokGreen code: simple form with first_symbol_len_code = 0, so the symbol is 1 bit wide.
simple-green-2sym-1bit-eachokGreen code with two real symbols, so every pixel costs exactly 1 bit.
subimage-cache-12-invalidrejectA sub-image color cache of 12 bits, one past MAX_CACHE_BITS.
subimage-cache-entropy-imageokA color cache inside the entropy image itself.
subimage-cache-palette-maxokA color cache of 11 bits inside the palette sub-image of the color-indexing transform.
subimage-cache-predictor-minokA color cache declared inside the predictor transform's sub-image, 1 bit.
subimage-cache-zero-invalidrejectA sub-image color cache flagged present but with 0 bits.
subimage-code-complex-formokThe predictor sub-image's green code written with the code-length repeat escapes.
subimage-code-emptyrejectA sub-image code-length stream that really does assign length 0 to all 280 symbols.
subimage-code-max-symbolokA sub-image code using the explicit max_symbol early stop.
subimage-code-oversubscribedrejectA sub-image Huffman code with lengths 1, 2, 2, 2, which over-subscribes the tree.
transform-all-fourokAll four transforms present in one stream.
transform-cross-color-bits-maxokCross-color transform with bits = 9, the largest tile size.
transform-cross-color-multipliersokA cross-color transform with real multipliers rather than the identity.
transform-palette-1-colorokPalette with a single color, the smallest the 8-bit field can express.
transform-palette-16-colorsokPalette of 16 colors, so indices are 4 bits and 2 pixels share a byte.
transform-palette-2-colorsokColor-indexing transform with 2 colors, so 8 pixels are packed per byte.
transform-palette-256-colorsokColor-indexing transform with the full 256-entry palette.
transform-palette-3-colorsokPalette of 3 colors, so indices are 2 bits and 4 pixels share a byte.
transform-palette-index-past-endokPalette of 3 colors addressed with index 3, which does not exist.
transform-predictor-bits-maxokPredictor transform with bits = 9, the maximum tile size.
transform-repeatedrejectThe subtract-green transform declared twice.