Skip to content

Releases: basic-automation/Skidbladnir

v1.4.1 — two Windows fixes found by Windows parity; screen readers and the keyboard in the window

Choose a tag to compare

@physics515 physics515 released this 04 Oct 06:21
82735ac

Skidbladnir 1.4.1 fixes two Windows-only problems in what the installers carry, and makes the window usable with a screen reader in places where it wasn't.

Fixed

  • Windows: HEIC with Sharp YUV. Every Windows build so far left sharp YUV out of its HEIC library, so a HEIC made with Chroma downsampling → Sharp YUV quietly used the default downsampler. It is built in now, and the build fails if it is ever missing again.
  • Windows: AVIF and JPEG input built as release code. The AVIF encoder (libaom and libavif) and the JPEG reader (libjpeg-turbo) were compiled without optimisation and with their internal assertions on. One of those assertions could end the app on an AVIF superres setting. All three are now optimised release builds. Output is unchanged and byte-identical to avifenc, as on the other platforms (Windows speed was not measured).
  • Screen readers: text and number fields. Width, height, crop, every slider's exact-value box, JPEG XL's and HEIC's number fields, compatible brands, the colour hex field and the preset name were missing from what a screen reader is given. They are all there now, with their names and values.
  • Screen readers: selects say what they hold. A select (say, "libwebp preset") gave a screen reader no current choice on Linux. It now carries it ("photo"). On Windows, UI Automation already gave each select's value.
  • Screen readers: clearer buttons. Convert is announced as what it shows, "Convert 2 files". Convert and the preset form's Save are marked unavailable when dimmed, which Windows reports to screen readers (Linux doesn't yet, because of a limitation in the accessibility library). The two "Apply" buttons in the WebP panel are now "Apply the libwebp preset" and "Apply the lossless level", and the sidebar's are "Collapse the sidebar" and "Expand the sidebar". These are the same in the fallback (webview) window.

Checked on every change from now on

  • What a screen reader is given, in ten states of the window, on Linux (AT-SPI) and Windows (UI Automation).
  • That Tab reaches every control in every format's panel, Shift+Tab walks back, and sliders, option groups, selects and check boxes work from the keyboard (Linux).
  • A real file drop onto the window, then a conversion (Linux, X11).
  • Byte-for-byte parity with avifenc and heif-enc on Windows too. Every format's reference tool now runs on Windows in CI, except JPEG XL's EXR input (see below).

Known gaps

  • Nobody has used Skidbladnir with a screen reader yet (Orca, Narrator, NVDA or VoiceOver). What one is given is checked automatically on Linux and Windows, not on macOS.
  • On Windows, cjxl with the OpenEXR CI uses writes different bytes for 10 of the 149 EXR test cases, where on Linux and macOS it matches Skidbladnir. That reference build is being looked into. Skidbladnir's own EXR reading is unchanged.
  • macOS is still experimental: built and tested by CI, never opened by a person. The app is not code-signed on any platform.

Both editions as before: standard (Kvazaar, ISC) and GPL (x265). Installed copies from 0.8.0 on are offered this update in the app.

v1.4.0 — EXR and raw YUV input, JPEG XL re-encoded as cjxl does, per-frame animation options

Choose a tag to compare

@physics515 physics515 released this 03 Oct 05:14
f58ea79

Skidbladnir 1.4.0 adds the last input formats the official encoders read, re-encodes JPEG XL files the way cjxl does, and lets an animation change its settings partway through.

New

  • OpenEXR input. .exr files convert to every format. Half and float RGB, RGBA and gray are supported, including a named layer's channels, and every compression except HTJ2K.
    • To JPEG XL the result is byte for byte what cjxl writes from the same file: linear light, the file's chromaticities and white luminance, premultiplied alpha, and its other channels as named extra channels.
    • The other formats get the image with the sRGB curve, clipped at white.
  • Raw YUV input (.yuv, 8-bit I420), as cwebp -s reads it. Set the size under Raw YUV input in the settings. To WebP the result is byte for byte what cwebp -s writes.
  • JPEG XL to JPEG XL matches cjxl. A .jxl is now decoded as cjxl decodes one: its own colour, extra channels, Exif (with the orientation reset once the pixels are turned upright), XMP, IPTC and other boxes. Re-encoding it at any setting gives cjxl's file. JPEG XL files with several frames or layers are still converted from their pixels.
  • Change an animation's settings from any frame on, as img2webp's frame options do. Under Animation, add a change from a frame: lossy or lossless, quality, method, exact, frame duration.
  • SVG cropped and resized now draws only the crop, at the new size, so its edges stay sharp.

Licences

  • The third-party notices in every installer (and in About) now list the Rust crates and JavaScript packages compiled into the app, with their licence texts.
  • The Linux AppImage now carries the licence of every library it bundles. Earlier AppImages left out the copyright files of 10 of the 110 Ubuntu packages they bundle, such as GLib's networking module, dconf, libdbus and libcap. The release build now adds them and checks that none is missing.

Byte-for-byte parity

4,270 tested cases against cwebp, img2webp, gif2webp, avifenc, cjxl and heif-enc, up from 3,831. Every one runs in CI on Linux x86-64, Linux ARM64 and macOS (Apple silicon). New: Windows too, for all of WebP's and animated WebP's cases and nearly all of JPEG XL's, against reference tools built there.

Known gaps

  • JPEG XL files with several frames or layers, and the other multi-image features of the official tools (animated AVIF and HEIC, grids from several files), are not converted as those tools convert them yet.
  • heif-enc --raw has nothing to match in this build: its HEVC encoders cannot write raw samples.
  • The macOS and Windows builds are built and tested in CI, but the gpui window on those systems has not yet been opened by a person.

v1.3.0 — a native window: faster to start, a third of the memory

Choose a tag to compare

@physics515 physics515 released this 02 Oct 19:06
fda347d

Skidbladnir 1.3.0 draws its window natively. It looks and works the same, starts faster and uses far less memory.

New

  • A native window, drawn with gpui. It replaces the web view the window was drawn in until now, control for control: the same layout, colours, fonts, focus outlines and keyboard behaviour. The difference was measured on Linux:

    1.2.0 1.3.0
    Start-up 976 ms 678 ms
    Memory, idle 380 MB 109 MB
    Memory after a preview 438 MB 147 MB

    Conversions and previews take the same time as before, because the encoders are unchanged.

  • The web-view window is still built in.

    • Start the app with SKIDBLADNIR_UI=webview set to use it.
    • The app also switches to it by itself if the native window can't start, for example on a machine with no usable GPU driver.
  • Updates install the way you installed the app: the AppImage replaces itself; .deb and .rpm updates install through your system's administrator prompt; on Windows the installer runs; on macOS the app bundle is replaced. Every download is checked against the release signing key first, as before.

  • Keyboard and screen readers in the new window:

    • every control has a name and a role;
    • the format rail is a radio group and the queue menu is a menu;
    • number fields step with the arrow keys, Page Up/Down, Home and End;
    • the colour picker works from the keyboard;
    • Escape closes a pop-up and returns focus to the button that opened it;
    • Page Up/Down, Home and End scroll the window.
  • Resize from the window's edges when it is floating, rather than tiled or maximised.

Fixed

  • In the new window, the space under each saved preset was too large.

Packages

  • The Linux .deb and .rpm now depend on xkbcommon, xcb, the Vulkan loader and fontconfig, which the native window draws with. apt and dnf install them.

Known gaps

  • The native window has not yet been opened by a person on macOS or Windows, and no screen reader has been run against it. CI builds and tests it on both, and the Windows installer is installed and launched by CI. If it misbehaves, set SKIDBLADNIR_UI=webview to get the previous window back.
  • The app is not code-signed; the README's "Opening it the first time" shows how to get past each system's warning.
  • macOS builds have still not been opened by a person, and the ARM64 Linux app has not been launched (its packages are installed and checked by CI).
  • Animated AVIF, JPEG XL and HEIC are not written; SVG is read, not written.

v1.2.0 — Y4M, PGX and SVG input, animated WebP options, Linux on ARM64 and .rpm

Choose a tag to compare

@physics515 physics515 released this 02 Oct 05:42
09c224e

Skidbladnir 1.2.0 adds new inputs, the animation encoder's own options, Linux packages for ARM and for Fedora, and a few safety and comfort features in the window.

New

  • Linux on 64-bit ARM. A .deb, an .rpm and an AppImage for aarch64 (Raspberry Pi 4/5 on a 64-bit system, ARM laptops and servers), in both editions. They are built and install-tested by CI; nobody has launched the ARM app yet.
  • An .rpm for Fedora, openSUSE and other RPM distributions (x86-64 and ARM64), which updates itself with an .rpm, as the .deb does with a .deb.
  • New input formats
    • SVG and .svgz, drawn at their own size, or straight at the size a resize asks for so edges stay sharp. Only images embedded in the SVG are drawn: a file an SVG links to is never opened.
    • Y4M video frames (the first frame). Converted to AVIF exactly as avifenc converts them, and an 8-bit 4:2:0 one to HEIC exactly as heif-enc does.
    • PGX (the JPEG 2000 test format). 8- and 16-bit files convert to JPEG XL exactly as cjxl converts them; other depths are read at their right brightness, which cjxl does not do.
  • Animated WebP options (Animation, in the WebP panel): minimise size, mixed lossy and lossless, keyframe spacing, a loop count of your own, GIF loop compatibility, and one duration for every frame. Each is tested byte for byte against img2webp or gif2webp.
  • Start from cwebp's defaults: one button sets every WebP control to what cwebp does with no options, tested against cwebp itself.
  • Safer batches: before converting, the window warns when two queued files would be written to the same name (photo.png and photo.jpg both become photo.webp) and when outputs already exist. A new Replace existing files switch (in the app settings, on by default as before) can keep existing files instead.
  • About and licences, in the app settings: the version, the edition, and the licence texts and notices the app carries.
  • GPL edition: any x265 parameter, by name, under "Other x265 parameters" (-p x265:KEY=VALUE).
  • Software centres (GNOME Software, KDE Discover) now show a description and screenshots for the Linux packages.

Fixed

  • A HEIC conversion could fail with a "security limit exceeded" memory error when it ran alongside another HEIC encode that read a HEIC file (for example a preview and a conversion at once).
  • In the app settings, the description of a switch that is not available (such as "Recreate folder structure") was too faint to read comfortably; it now meets WCAG AA contrast.

Checked more widely

The byte-for-byte comparison with the official tools now covers 3,831 cases and runs on Linux x86-64, Linux ARM64 and macOS (Apple silicon) for every change.

Known gaps

  • The app is not code-signed; the README's "Opening it the first time" shows how to get past each system's warning.
  • macOS builds have still not been opened by a person, and the ARM64 Linux app has not been launched (its packages are installed and checked by CI).
  • On ARM Linux the GPL edition's x265 runs without its assembly, so HEIC encodes there are slower (the files are the same).
  • Animated AVIF, JPEG XL and HEIC are not written; SVG is read, not written.

v1.1.0 — TIFF transparency: correct by default, or exactly as the official tools read it

Choose a tag to compare

@physics515 physics515 released this 01 Oct 20:56
5b48c9b

Skidbladnir 1.1.0 is a free, open-source desktop app for Windows, Linux and macOS (experimental) that converts images to WebP, AVIF, JPEG XL and HEIC. Copies installed from 0.8.0 onwards offer it as an update, each to its own edition.

Download

Your computer File
Windows 10 or 11, 64-bit Skidbladnir_1.1.0_x64-setup.exe
Mac with Apple silicon (experimental) Skidbladnir_1.1.0_aarch64.dmg
Mac with an Intel processor (experimental) Skidbladnir_1.1.0_x64.dmg
Ubuntu 22.04+, Debian 12+, Linux Mint 21+ Skidbladnir_1.1.0_amd64.deb
Any other 64-bit Linux with glibc 2.35+ Skidbladnir_1.1.0_amd64.AppImage

Not sure which edition? Take the files above, the standard edition. The files named Skidbladnir-GPL_… are the GPL edition: the same app, with x265 writing its HEIC (-L lossless, 4:4:4 and 4:2:2 chroma, 10-bit). Both are free; the licence matters only if you redistribute the app (Editions).

The other files are not installers. The .app.tar.gz files are for the in-app updater on a Mac. Skidbladnir-1.1.0-source.tar.gz is the complete source with every submodule, which GitHub's own "Source code" archives leave out. GitHub shows each file's SHA-256 beside it, for checking a download.

Opening it the first time

Nothing is code-signed yet, so Windows and macOS warn before they open it.

  • Windows: SmartScreen says Windows protected your PC. Click More info, then Run anyway. It installs for your account only, without administrator rights. With Smart App Control turned on, Windows blocks unsigned apps and offers no way past.
  • macOS (experimental): drag Skidbladnir to Applications and open it. When macOS says it cannot verify the app, close the message, open System Settings > Privacy & Security and click Open Anyway. If it says the app is damaged, run xattr -dr com.apple.quarantine /Applications/Skidbladnir.app in Terminal. CI builds the Mac app and launches it, but nobody has opened it on a real Mac yet, so Mac reports are very welcome.
  • Linux: sudo apt install ./Skidbladnir_1.1.0_amd64.deb, or chmod +x the AppImage and run it (it needs FUSE; otherwise run it with --appimage-extract-and-run).

What it is

Each of these formats has an official encoder, and each is a command-line tool with dozens of options. For a still image, every option of cwebp, avifenc (with libaom), cjxl and heif-enc (with Kvazaar) is a control in Skidbladnir, labelled with the flag it sets, and Skidbladnir writes the same bytes those tools write, built from the same library versions. CI checks that on every change: 3,665 conversions run through both the tools and Skidbladnir and must come out identical.

It reads PNG, JPEG (including Photoshop's CMYK), TIFF, WebP, GIF, AVIF, JPEG XL, HEIC, PNM/PAM and PFM; converts animated GIF and WebP to animated WebP; keeps colour profiles, Exif and XMP the way each tool keeps them; and shows the result beside the original before anything is written. Conversion happens on your computer: the app's one network request is the update check at startup.

Where the claim stops

The README lists the limits under What "every option" means. In short:

  • Still images, plus animated WebP as img2webp and gif2webp write it. Their -mixed, -min_size, -kmin/-kmax, -loop and per-frame options are not offered yet, and neither are animated AVIF, JPEG XL or HEIC, or files built from several images.
  • The same encoders, built the same way: libwebp 1.6.0, libavif 1.4.2 with libaom 3.15.1, libjxl 0.12.0, libheif 1.23.5 with Kvazaar 2.3.2. A packaged avifenc usually links libyuv and writes other bytes.
  • Bytes are compared on Linux x86-64. The Windows and macOS builds link the same sources.
  • TIFF transparency is read correctly by default. cwebp darkens a TIFF with straight alpha, and heif-enc one with premultiplied alpha. To get exactly their results, turn on TIFF input → Read transparency as the official tool does.
  • The GPL edition's HEIC is checked by decoding it, not byte for byte.
  • Y4M, PGX, EXR and raw-pixel input are not read yet.

New since 1.0.0

  • TIFF transparency, your choice. Skidbladnir still reads a semi-transparent TIFF correctly by default. Two official tools misread it: cwebp darkens a TIFF with straight alpha, and heif-enc one with premultiplied alpha. The new setting TIFF input → Read transparency as the official tool does (beside Crop and Resize) reproduces their output byte for byte; with it, there is no cwebp or heif-enc TIFF result Skidbladnir cannot produce. AVIF and JPEG XL are unaffected (avifenc and cjxl do not read TIFF). It is off by default and saved with your presets.
  • 278 more byte-for-byte comparisons in CI cover it, for 3,665 in all.

Known gaps

  • Not code-signed on any platform.
  • macOS is experimental until a person has run it on a real Mac.
  • An AVIF, JPEG XL or HEIC encode cannot be cancelled mid-file.
  • No builds for 32-bit systems, Linux on ARM or Windows on ARM.

v1.0.0 — every option of the official image encoders, in one window

Choose a tag to compare

@physics515 physics515 released this 01 Oct 20:09
c3d44c5

Skidbladnir 1.0.0 is a free, open-source desktop app for Windows, Linux and macOS (experimental) that converts images to WebP, AVIF, JPEG XL and HEIC. It is the first Skidbladnir release that is not a prerelease. Copies installed from 0.8.0 onwards offer it as an update, each to its own edition.

Download

Your computer File
Windows 10 or 11, 64-bit Skidbladnir_1.0.0_x64-setup.exe
Mac with Apple silicon (experimental) Skidbladnir_1.0.0_aarch64.dmg
Mac with an Intel processor (experimental) Skidbladnir_1.0.0_x64.dmg
Ubuntu 22.04+, Debian 12+, Linux Mint 21+ Skidbladnir_1.0.0_amd64.deb
Any other 64-bit Linux with glibc 2.35+ Skidbladnir_1.0.0_amd64.AppImage

Not sure which edition? Take the files above, the standard edition. The files named Skidbladnir-GPL_… are the GPL edition: the same app, with x265 writing its HEIC (-L lossless, 4:4:4 and 4:2:2 chroma, 10-bit). Both are free; the licence matters only if you redistribute the app (Editions).

The other files are not installers. The .app.tar.gz files are for the in-app updater on a Mac. Skidbladnir-1.0.0-source.tar.gz is the complete source with every submodule, which GitHub's own "Source code" archives leave out. GitHub shows each file's SHA-256 beside it, for checking a download.

Opening it the first time

Nothing is code-signed yet, so Windows and macOS warn before they open it.

  • Windows: SmartScreen says Windows protected your PC. Click More info, then Run anyway. It installs for your account only, without administrator rights. With Smart App Control turned on, Windows blocks unsigned apps and offers no way past.
  • macOS (experimental): drag Skidbladnir to Applications and open it. When macOS says it cannot verify the app, close the message, open System Settings > Privacy & Security and click Open Anyway. If it says the app is damaged, run xattr -dr com.apple.quarantine /Applications/Skidbladnir.app in Terminal. CI builds the Mac app and launches it, but nobody has opened it on a real Mac yet, so Mac reports are very welcome.
  • Linux: sudo apt install ./Skidbladnir_1.0.0_amd64.deb, or chmod +x the AppImage and run it (it needs FUSE; otherwise run it with --appimage-extract-and-run).

What it is

Each of these formats has an official encoder, and each is a command-line tool with dozens of options. For a still image, every option of cwebp, avifenc (with libaom), cjxl and heif-enc (with Kvazaar) is a control in Skidbladnir, labelled with the flag it sets, and Skidbladnir writes the same bytes those tools write, built from the same library versions. CI checks that on every change: 3,387 conversions run through both the tools and Skidbladnir and must come out identical.

It reads PNG, JPEG (including Photoshop's CMYK), TIFF, WebP, GIF, AVIF, JPEG XL, HEIC, PNM/PAM and PFM; converts animated GIF and WebP to animated WebP; keeps colour profiles, Exif and XMP the way each tool keeps them; and shows the result beside the original before anything is written. Conversion happens on your computer: the app's one network request is the update check at startup.

Where the claim stops

The README lists the limits under What "every option" means. In short:

  • Still images, plus animated WebP as img2webp and gif2webp write it. Their -mixed, -min_size, -kmin/-kmax, -loop and per-frame options are not offered yet, and neither are animated AVIF, JPEG XL or HEIC, or files built from several images.
  • The same encoders, built the same way: libwebp 1.6.0, libavif 1.4.2 with libaom 3.15.1, libjxl 0.12.0, libheif 1.23.5 with Kvazaar 2.3.2. A packaged avifenc usually links libyuv and writes other bytes.
  • Bytes are compared on Linux x86-64. The Windows and macOS builds link the same sources.
  • Two TIFF-alpha cases differ: a TIFF with straight alpha keeps its true colours where cwebp darkens it (on purpose), and a TIFF with premultiplied alpha written to HEIC keeps its true colours where heif-enc darkens it (not decided yet).
  • The GPL edition's HEIC is checked by decoding it, not byte for byte.
  • Y4M, PGX, EXR and raw-pixel input are not read yet.

New since 0.15.0

  • Linux: the installers are now built on Ubuntu 22.04, so they run on Ubuntu 22.04, Debian 12, Linux Mint 21 and newer. 0.14.0 and 0.15.0 needed glibc 2.39 and did not start there. Every release run now checks the floor, and installs the .deb on Ubuntu 22.04 and Debian 12.
  • macOS: the app is now signed ad hoc, so macOS offers Open Anyway instead of calling it damaged. Every release run checks the signature, launches the app on macOS (the Intel build under Rosetta) and checks that it keeps running.
  • Releases are stable from this one, so the latest release link always works. The release page now carries only the installers and the source.
  • The README now opens with what Skidbladnir is, which file to download, and how to open it the first time on each system.
  • A security policy with private reporting, and issue forms for bug reports and for output that differs from a reference tool's.

0.15.0's fixes are included: a premultiplied-alpha TIFF to WebP, a lossy WebP or a HEIC to HEIC, and a still GIF to JPEG XL now match their tool byte for byte. 0.14.0 had claimed them early.

Known gaps

  • Not code-signed on any platform.
  • macOS is experimental until a person has run it on a real Mac.
  • An AVIF, JPEG XL or HEIC encode cannot be cancelled mid-file.
  • No builds for 32-bit systems, Linux on ARM or Windows on ARM.

v0.15.0 — PNM and PFM input, metadata for animations, four conversions brought to parity

Choose a tag to compare

@physics515 physics515 released this 01 Oct 18:04
4bf3a01

Skidbladnir 0.15.0 adds new input formats, keeps metadata for animations, and fixes four conversions so their output matches the official encoder byte for byte. It is a prerelease, like every release since the move to Tauri.

New

  • PNM input: binary PGM, PPM and PAM, 8 or 16 bits, with or without alpha.
    • Converted to WebP exactly as cwebp reads them.
    • Converted to JPEG XL exactly as cjxl reads them, at the file's own bit depth.
  • PFM input: floating-point images.
    • Converted to JPEG XL exactly as cjxl does, floats and all.
    • Other formats get the image clamped to its nominal range.
  • Metadata in animations.
    • GIF → animated WebP: a GIF's colour profile and XMP are kept when you ask, as gif2webp -metadata keeps them.
    • Animated WebP re-encoded: its colour profile, Exif and XMP are kept when you ask. Before, they were always dropped.

Fixed (output now matches the official tool)

  • TIFF with premultiplied alpha → WebP came out darker than cwebp's conversion wherever the image was semi-transparent. It now matches cwebp exactly.
  • Still GIF → JPEG XL:
    • now converts as cjxl does;
    • lossless when no quality is set, as cjxl defaults for GIF.
  • Lossy WebP → HEIC now converts as heif-enc does: straight from the WebP's own YCbCr planes, with no RGB round trip.
  • HEIC → HEIC:
    • now converts as heif-enc does;
    • keeps the source's Exif and XMP, which were dropped before.

Under the hood

  • Tauri 2.12.1, plus current dependencies.
  • The Windows build now links a single C runtime (the static one) instead of a mix of static and dynamic. CI builds and drives it; it has not been run on a machine outside CI.
  • Byte-for-byte parity tests against the official encoders now number 3,387 cases, up from 2,861.

Known gaps (unchanged unless noted)

  • macOS: the .dmgs are built by CI but have never been launched.
  • No code signing on any platform.
  • TIFF alpha, two deliberate differences from the official tools:
    • A TIFF with straight alpha keeps its true colours, where cwebp darkens it.
    • A TIFF with premultiplied alpha converted to HEIC keeps its true colours, where heif-enc would not un-multiply it. This one is pending a decision.
  • Animations: AVIF, JPEG XL and HEIC output take still images only.
  • Inputs not yet read: Y4M, raw pixels, PGX and EXR.

v0.14.0 — every option of the official encoders, byte for byte

Choose a tag to compare

@physics515 physics515 released this 29 Sep 08:28
03a328e

Skidbladnir 0.14.0 is a prerelease of the Tauri app. Copies installed from 0.8.0 onwards will offer it as an update, each to its own edition.

Every option of the official encoders

For a still image, any file the official command-line encoder can write, Skidbladnir can now write too, byte for byte: cwebp for WebP, avifenc (with libaom) for AVIF, cjxl for JPEG XL and heif-enc with Kvazaar for HEIC. Every option those tools have for one image is a control in the window, and each control's help names the flag it sets.

  • WebP gains every remaining cwebp flag: -exact, -z, -qrange, -pre, -jpeg_like, -alpha_method, -noalpha, -blend_alpha, -resize_mode, crop, and fractional quality.

  • AVIF now encodes with libavif and libaom, replacing ravif, so everything avifenc offers is available:

    • bit depths from 8 to 12 and the 16-bit extension
    • 4:4:4, 4:2:2, 4:2:0 and 4:0:0 chroma
    • CICP and range, target size, progressive layers, grids, tiling and scaling
    • quantizers and libaom's own options
    • pixel aspect, clean aperture, rotation and mirroring, content light level
    • ICC, Exif and XMP, each kept, dropped or read from a file
  • JPEG XL exposes every cjxl option, including the modular, progressive, filter, colour-space, metadata and container ones, with effort up to 11.

  • HEIC exposes every heif-enc option Kvazaar can honour:

    • Kvazaar's lossless coding and chroma downsampling
    • the colour-profile presets and custom code points
    • thumbnails, premultiplied alpha, rotation and mirroring
    • tiles, 360° projection, a description, compatible brands and the compact mini format

    The GPL edition's x265 controls sit in the same panel, as heif-enc's -L and -p options.

  • JPEG input is decoded the way each tool decodes it: libjpeg-turbo 3.2.0, with avifenc's and heif-enc's own JPEG readers built in.

  • PNG gamma is corrected as cwebp's libpng corrects it.

  • Metadata follows each tool:

    • WebP keeps it only when asked, as cwebp -metadata does.
    • AVIF, JPEG XL and HEIC keep it by default, as avifenc, cjxl and heif-enc do.
    • Settings saved by 0.12 and 0.13 load into these per-format options.

The evidence

2,861 conversions are compared byte for byte against the real tools on every change, each tool built from the same source as the library the app links:

Output Reference Cases
WebP cwebp 2,254, through PNG, JPEG, TIFF and WebP files, and -metadata
Animated WebP img2webp, gif2webp 67
AVIF avifenc 191
JPEG XL cjxl 202
HEIC heif-enc -e kvazaar 147

Where the claim stops

  • Still images:
    • Animated WebP and GIF convert to animated WebP, as img2webp and gif2webp write them.
    • Animated AVIF, HEIC and JPEG XL, and multi-image files, are not offered yet (ROADMAP Phase 8).
  • Input formats: PNG, JPEG, TIFF, WebP, AVIF, JPEG XL, HEIC and GIF. PNM, Y4M, EXR and the like are not read yet.
  • AVIF: with libaom, avifenc's default codec.
  • HEIC: with Kvazaar in the standard edition, where heif-enc -L cannot work, so lossless is Kvazaar's own. The GPL edition's x265 output is checked by decoding it, not byte for byte.
  • One deliberate exception: cwebp reads a TIFF with straight alpha premultiplied and darkens its semi-transparent pixels. Skidbladnir keeps the colours.

Known gaps

  • Unsigned app: the app is not code-signed, and the macOS build has never been launched by a person.
  • Cancel: an AVIF, JPEG XL or HEIC encode cannot be cancelled mid-file.

v0.13.0 — a GPL edition, with HEIC through x265

Choose a tag to compare

@physics515 physics515 released this 29 Sep 06:13
5575acf

Skidbladnir 0.13.0 is a prerelease of the Tauri app. Copies installed from 0.8.0 onwards will offer it as an update.

Two editions

From this release, every build comes in two editions. They differ only in how they write HEIC, and so in their licence.

Standard (Skidbladnir_*) GPL (Skidbladnir-GPL_*)
HEIC encoder Kvazaar x265, the better encoder
HEIC controls quality the full list below
Licence of the build ISC GPL-3.0-or-later, as a whole
  • The same otherwise: WebP, AVIF, JPEG XL, metadata and HEIC input are identical in both.
  • Updates: an installed copy updates only to its own edition. To switch, install the other edition over it.
  • Source code: Skidbladnir's own source stays ISC. Because the GPL edition contains x265, this release attaches Skidbladnir-0.13.0-source.tar.gz. It is the complete source, including the pinned x265, libheif, libde265 and Kvazaar sources that GitHub's own "Source code" download leaves out.

HEIC through x265 (GPL edition)

  • Lossless: every pixel is kept exactly, stored as RGB at 4:4:4.
  • Chroma: 4:2:0 (what phones write), 4:2:2 or 4:4:4. At 4:4:4, red text and pixel art stay sharp.
  • 10-bit (HEVC Main 10): this is how phones store HDR photos. It keeps more precision through the colour conversion, so gradients band less, even from an 8-bit image.
  • Speed and tuning: x265's ten speed presets (ultrafast to placebo) and four tunings (SSIM, PSNR, grain, fast decode).
  • Expert controls: transform-unit intra depth, adaptive quantisation mode and strength, psy-RD and psy-RDOQ, deblocking with its strength and threshold offsets, and SAO.
  • Checks: every one of these is tested. libheif's own heif-dec reads the lossless output exactly, and reads the 4:4:4, 4:2:2 and 10-bit output correctly, on Linux and macOS.

Known gaps

  • Transparency: libheif encodes it as a second image, and passes x265's expert controls (quantisation, psy, deblocking, SAO) only to the colour image.
  • Placebo: x265's placebo preset cannot encode a transparent image smaller than 32 pixels on a side. Skidbladnir says so and suggests veryslow.
  • 12-bit HEIC: not offered by either edition.
  • HEVC patents: the standard edition was already in the same position, since HEIC is HEVC either way.
  • Unsigned app: the app is not code-signed, and the macOS build has never been launched by a person.

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

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.