Fanbase
48 Fandango input specifications of 12 formats: grammars that make files of a format, to share, install, combine and improve. index.json has the same for machines.
Formats
- Windows Bitmap (bmp, 3 specs)
- Graphics Interchange Format (gif, 3 specs)
- High Efficiency Image File Format (heic, 4 specs)
- JPEG File Interchange Format (jpeg, 3 specs)
- JPEG XL (jxl, 3 specs)
- Portable Network Graphics (png, 6 specs)
- Portable Pixmap (ppm, 4 specs)
- Scalable Vector Graphics (svg, 7 specs)
- Tagged Image File Format (tiff, 4 specs)
- WebP (webp, 3 specs)
- X BitMap (xbm, 4 specs)
- X PixMap (xpm, 4 specs)
All specs
| Spec | What it is | Version | Status | How it does |
|---|---|---|---|---|
| bmp/bmp | BMP with twelve header and depth layouts (OS/2, INFO, V3 to V5, RLE, bitfields, CMYK) | 1.0 | accepts 73%, covers 55.4%, 121/s | |
| bmp/bmp-constraints | BMP with core, info, V4 and V5 headers and RLE8, sizes tied together with constraints | 1.0 | accepts 100%, covers 37.2%, 4.4/s | |
| bmp/bmp-edge | BMP at 1 to 32 bits with top-down heights, short palettes and V4/V5 masks | 1.0 | accepts 100%, covers 49.2%, 0.97/s | |
| gif/gif | GIF87a and GIF89a with all extension types, local color tables and several images | 1.0 | accepts 75%, covers 51.8%, 23/s | |
| gif/gif-boundary | GIF built from fixed edge-case values (huge screens, flag combinations, unknown extensions) | 1.0 | accepts 12%, covers 48.1%, 90/s | |
| gif/gif-minimal | 1x1 GIF87a/GIF89a with valid LZW data, covering every extension block | 1.0 | accepts 100%, covers 28.3%, 56/s | |
| heic/heic | A single HEVC-coded still image in the real ISOBMFF/HEIF box layout (ftyp, meta/hdlr/pitm/iloc/iinf/infe, iprp/ipco/ispe/hvcC/pixi/colr, idat); the HEVC NAL payloads are container-correct shells, not a decodable bitstream | 1.0 | accepts 0%, covers 7.8%, 12/s | |
| heic/heic-boundary | Same as heic, with values taken from the edges of what the format allows (degenerate/overflow spatial extents, extreme HEVC profile/level bytes, a hidden-item flag, ICC-embedded colr, and the irot/imir/pasp/clap transformative properties) | 1.0 | accepts 0%, covers 5.9%, 9.4/s | |
| heic/heic-box-sizes | Six concrete file layouts (plain, extended item, transform, legacy, sequence, size-extreme) exercising ISOBMFF's zero-size ("extends to EOF") and largesize box-size conventions alongside boundary offset/length values | 1.0 | accepts 0%, covers 2.8%, 101/s | |
| heic/heic-sequence | Same as heic, plus item references/entity grouping/protection boxes and the full timed-image-sequence (moov/trak/mdia/minf/stbl) layout used for HEIC bursts and live photos, not just a single still | 1.0 | accepts 0%, covers 2.1%, 4.3/s | |
| jpeg/jpeg | Baseline grayscale 8x8 JPEG with a JFIF header | 1.0 | accepts 100%, covers 25.7%, 37/s | |
| jpeg/jpeg-exotic | JPEG with unusual features (12-bit samples, 16-bit tables, arithmetic, lossless, DNL); files do not decode | 1.0 | accepts 1%, covers 11.2%, 6.2/s | |
| jpeg/jpeg-markers | JPEG at the marker level (APPn, COM, DQT, DHT, DRI, SOF0-2, SOS); tables and scan data are random, so files rarely decode | 1.0 | accepts 9%, covers 20.0%, 14/s | |
| jxl/jxl | Raw JPEG XL codestreams with a real bit-packed header and metadata; the entropy-coded frame body is a structurally-framed stub, so files do not decode | 1.0 | accepts 0%, covers 15.7%, 19/s | |
| jxl/jxl-frames | Spells out frame internals that jxl stubs out (TOC, LFGlobal, VarDCT/Modular groups, entropy streams); uses placeholder ASCII tag bytes instead of real bit-packed encoding, so files do not decode yet | 1.0 | accepts 0%, covers 10.0%, 53/s | |
| jxl/jxl-frames-boundary | Same as jxl-frames, with values taken from the edges of what the format allows (multiple frame types, colour spaces and extension bundles); fields use fixed byte-aligned approximations rather than true bit-level packing, so files do not decode | 1.0 | accepts 0%, covers 7.2%, 66/s | |
| png/png | Valid PNGs of every colour type with all the standard chunks | 1.0 | accepts 96%, covers 23.0%, 22/s | |
| png/png-32x32 | 32x32 RGB PNG with lengths and CRCs written as constraints | 1.0 | accepts 100%, covers 11.0%, 0.85/s | |
| png/png-apng | Animated PNG (APNG) with the usual ancillary chunks | 1.0 | accepts 100%, covers 20.0%, 1.1/s | |
| png/png-boundary | Same as png, with values taken from the edges of what the format allows | 1.0 | accepts 91%, covers 22.4%, 71/s | |
| png/png-container | PNG chunk structure only; image data is arbitrary bytes, so most files do not decode | 1.0 | accepts 0%, covers 13.8%, 4.6/s | |
| png/png-extensions | 1x1 PNGs with the registered extension chunks, APNG included | 1.0 | accepts 100%, covers 26.6%, 16/s | |
| ppm/ppm | P3 (ASCII) and P6 (raw) PPMs with 8-bit and 16-bit samples, header comments and whitespace | 1.0 | accepts 100%, covers 23.1%, 46/s | |
| ppm/ppm-boundary | Same as ppm, with values taken from the edges of what the format allows (maxval 1, 255, 256 and 65535; leading-zero dimensions; every whitespace flavour) | 1.0 | accepts 92%, covers 24.6%, 54/s | |
| ppm/ppm-stream | A PPM image followed by zero or more further images concatenated in the same file, covering maxval's full normative range | 1.0 | accepts 73%, covers 36.8%, 1.4/s | |
| ppm/ppm-stream-boundary | Same as ppm-stream, with concatenated P3/P6 images and sample bytes taken from the edges of what the format allows | 1.0 | accepts 96%, covers 34.5%, 72/s | |
| svg/svg | Core SVG 1.1 elements (shapes, paths, text, gradients, filters, clipping/masking, markers, style/script, animation) | 1.0 | accepts 85%, covers 80.6%, 53/s | |
| svg/svg-boundary | Same as svg, with values taken from the edges of what the format allows (huge/negative coordinates, deprecated DOCTYPEs and attributes, every legacy colour syntax, foreignObject, SMIL timing edge cases) | 1.0 | accepts 6%, covers 31.6%, 48/s | |
| svg/svg-doctype | Same as svg, with every element's optional presentation attributes toggled individually and a choice of legacy DOCTYPE/DTD declarations (or none) | 1.0 | accepts 2%, covers 63.6%, 43/s | |
| svg/svg-extensions | Same as svg, plus legacy SVG 1.1 font/glyph elements, draft SVG 2 paint servers (meshGradient, hatch, solidColor) and a few non-SVG embedded tags (audio/video/canvas/iframe) that real renderers treat as inert unknown elements | 1.0 | accepts 98%, covers 72.5%, 39/s | |
| svg/svg-kitchen-sink | A single, almost entirely fixed document that packs nearly every SVG feature into one file; useful as one maximally-featured compatibility sample, not as a randomized fuzzer (little varies between runs) | 1.0 | accepts 100%, covers 86.3%, 65/s | |
| svg/svg-nested-animation | Same as svg, grounded directly in the SVG 2 recommendation, with SMIL <animate> elements nested as children of the shape they animate instead of appearing as unrelated top-level siblings | 1.0 | accepts 22%, covers 70.4%, 53/s | |
| svg/svg-rare-features | Same as svg, biased toward obscure and rarely-implemented corners of the spec (mesh gradients, uncommon filter primitives, baseProfile/contentScriptType and other seldom-used root attributes) | 1.0 | accepts 63%, covers 78.5%, 41/s | |
| tiff/tiff | TIFF in eight fixed layouts: both byte orders, tiled, palette, multi-page, SubIFD, BigTIFF | 1.0 | accepts 100%, covers 10.8%, 63/s | |
| tiff/tiff-all-tags | One grayscale TIFF with a 55 entry IFD: every field type, Exif, GPS, ICC, XMP, SubIFD | 1.0 | accepts 100%, covers 13.1%, 6.0/s | |
| tiff/tiff-baseline | Baseline TIFF 6.0: bilevel, gray, RGB, palette and big endian gray | 1.0 | accepts 100%, covers 9.3%, 34/s | |
| tiff/tiff-edge | TIFF with tiles, two pages, 1/4/8 bit samples, FillOrder 2 and rare field types | 1.0 | accepts 100%, covers 9.4%, 56/s | |
| webp/webp | WebP with real 2x2 image data: lossy, lossless, alpha, animation and metadata | 1.0 | accepts 100%, covers 37.2%, 28/s | |
| webp/webp-bitstream | WebP with the VP8 and VP8L internals spelled out; files do not decode | 1.0 | accepts 18%, covers 15.5%, 103/s | |
| webp/webp-container | WebP RIFF container in all five file shapes; image data is filler, so files do not decode | 1.0 | accepts 100%, covers 29.2%, 35/s | |
| xbm/xbm | X11 (unsigned char/char) and X10 (short) XBM dialects, with and without a cursor hotspot | 1.0 | accepts 100%, covers 86.7%, 1.6/s | |
| xbm/xbm-boundary | Same as xbm, with values taken from the edges of what the format allows (dimensions that stress ceil() row padding, a degenerate 0x0 bitmap, and hotspot values parsers rarely range-check) | 1.0 | accepts 100%, covers 88.3%, 2.7/s | |
| xbm/xbm-guards | Same dialects as xbm, wrapped in #ifndef include guards or nested #if preprocessor conditionals, with both hotspot-define orderings and large/asymmetric geometries | 1.0 | accepts 100%, covers 86.7%, 91/s | |
| xbm/xbm-lexical | Same dialects as xbm, with the surrounding C lexical detail varied instead of the geometry (arbitrary identifier stems, inline comments, variable-width hex literals, optional trailing comma) | 1.0 | accepts 0%, covers 66.7%, 0.05/s | |
| xpm/xpm | Core XPM3 features one at a time (hex colours, multi-char pixels, cursor hotspot, multi-visual colour keys, XPMEXT, named colours, transparency) | 1.0 | accepts 100%, covers 71.5%, 0.05/s | |
| xpm/xpm-catalog | A curated, mostly-fixed catalogue of representative example files spanning the XPM3, XPM2 and XPM1 dialects; useful as compatibility samples, with far less per-run variation than xpm or xpm-legacy | 1.0 | accepts 94%, covers 76.8%, 4.2/s | |
| xpm/xpm-legacy | Same as xpm, plus the deprecated XPM1 (#define + _colors[]/ _pixels[] arrays) and XPM2 (plain-text "! XPM2") dialects, with boundary hex-width colour values and large hotspot coordinates | 1.0 | accepts 51%, covers 74.8%, 61/s | |
| xpm/xpm-lexical | Same as xpm, with the surrounding C lexical detail varied instead (storage-class spelling, optional const qualifier, arbitrary identifiers, interspersed comments) and the fuller X colour notation catalogue (rgb:/rgbi) intensities alongside hex and named colours) | 1.0 | accepts 100%, covers 68.2%, 51/s |