Skip to content

v0.12.0 — cwebp parity for every input, and metadata

Pre-release
Pre-release

Choose a tag to compare

@physics515 physics515 released this 29 Sep 05:20
6f44e14

Skidbladnir 0.12.0 — a prerelease of the Tauri app. Installed copies from 0.8.0 on will offer it as an update.

Your conversions now match cwebp, byte for byte

Skidbladnir exists to drive cwebp's full control surface, so its WebP output should be exactly what cwebp writes. For images read from files, it often wasn't. The encoder was right; what differed was how the source image was read:

  • JPEG → WebP matched cwebp in only 17 of 456 tested cases. JPEGs are now decoded with libjpeg-turbo's decoder, as cwebp decodes them. It now matches in all 456.
  • WebP → WebP (re-encoding an existing WebP) matched in 84 of 304 cases. It now takes cwebp's route and matches all 304.
  • 16-bit TIFF → WebP matched in none of 76. It now matches all 76.
  • PNG and 8-bit TIFF already matched. The PNG check now covers every setting.

These results are checked against cwebp itself on Linux and macOS for every change.

There is one deliberate exception. cwebp darkens the semi-transparent pixels of a TIFF with straight (unassociated) alpha. Skidbladnir keeps the colours the file holds.

Keep a photo's colour profile, EXIF and XMP

A new Metadata panel can keep the source's ICC colour profile, EXIF and XMP. All three are off by default, as in cwebp.

Without its profile, a Display P3 or Adobe RGB photo is shown as sRGB and its colours shift.

Output What is kept Checked by
WebP ICC, EXIF and XMP, exactly as cwebp -metadata keeps them cwebp
JPEG XL ICC (labels the image), EXIF, XMP libjxl's djxl
HEIC ICC (labels the image), EXIF, XMP libheif's heif-info
AVIF EXIF only, for now libavif's avifdec

Animations and more inputs

  • Animated WebP converts to animated WebP with every frame, its timing and loop count, and previews as an animation. Output is byte-identical to libwebp's img2webp for every setting img2webp can express.
  • GIF input, still or animated, converts to WebP byte-identically to libwebp's gif2webp.
  • AVIF input:
    • Tiled (grid) AVIFs, as some cameras write them, now decode whole.
    • An AVIF's crop, rotation and mirror are applied, so a sideways-stored portrait converts upright.
  • Fixes:
    • "Do not enlarge" now applies to animations too.
    • Opaque images are written to HEIC without an unnecessary alpha channel.

Known gaps

  • Metadata is not yet kept in animations, and AVIF output cannot store a colour profile or XMP yet.
  • Animations convert to WebP only. The other formats refuse them by name rather than keeping one frame.
  • A target size or PSNR applies to each frame of an animation, not to the whole file.
  • The app is not code-signed. The macOS build has never been launched by a person.