Releases: basic-automation/Skidbladnir
Release list
v1.4.1 — two Windows fixes found by Windows parity; screen readers and the keyboard in the window
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
avifencandheif-encon 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,
cjxlwith 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
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.
.exrfiles 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
cjxlwrites 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.
- To JPEG XL the result is byte for byte what
- Raw YUV input (
.yuv, 8-bit I420), ascwebp -sreads it. Set the size under Raw YUV input in the settings. To WebP the result is byte for byte whatcwebp -swrites. - JPEG XL to JPEG XL matches
cjxl. A.jxlis now decoded ascjxldecodes 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 givescjxl'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 --rawhas 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
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=webviewset 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.
- Start the app with
-
Updates install the way you installed the app: the AppImage replaces itself;
.deband.rpmupdates 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
.deband.rpmnow 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=webviewto 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
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.rpmand 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
.rpmfor Fedora, openSUSE and other RPM distributions (x86-64 and ARM64), which updates itself with an.rpm, as the.debdoes 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
avifencconverts them, and an 8-bit 4:2:0 one to HEIC exactly asheif-encdoes. - PGX (the JPEG 2000 test format). 8- and 16-bit files convert to JPEG XL exactly as
cjxlconverts them; other depths are read at their right brightness, whichcjxldoes not do.
- SVG and
- 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
img2webporgif2webp. - Start from cwebp's defaults: one button sets every WebP control to what
cwebpdoes with no options, tested againstcwebpitself. - Safer batches: before converting, the window warns when two queued files would be written to the same name (
photo.pngandphoto.jpgboth becomephoto.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
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.appin 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, orchmod +xthe 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
img2webpandgif2webpwrite it. Their-mixed,-min_size,-kmin/-kmax,-loopand 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
avifencusually 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.
cwebpdarkens a TIFF with straight alpha, andheif-encone 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:
cwebpdarkens a TIFF with straight alpha, andheif-encone 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 nocwebporheif-encTIFF result Skidbladnir cannot produce. AVIF and JPEG XL are unaffected (avifencandcjxldo 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
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.appin 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, orchmod +xthe 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
img2webpandgif2webpwrite it. Their-mixed,-min_size,-kmin/-kmax,-loopand 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
avifencusually 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
cwebpdarkens it (on purpose), and a TIFF with premultiplied alpha written to HEIC keeps its true colours whereheif-encdarkens 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
.debon 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
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
cwebpreads them. - Converted to JPEG XL exactly as
cjxlreads them, at the file's own bit depth.
- Converted to WebP exactly as
- PFM input: floating-point images.
- Converted to JPEG XL exactly as
cjxldoes, floats and all. - Other formats get the image clamped to its nominal range.
- Converted to JPEG XL exactly as
- Metadata in animations.
- GIF → animated WebP: a GIF's colour profile and XMP are kept when you ask, as
gif2webp -metadatakeeps them. - Animated WebP re-encoded: its colour profile, Exif and XMP are kept when you ask. Before, they were always dropped.
- GIF → animated WebP: a GIF's colour profile and XMP are kept when you ask, as
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 matchescwebpexactly. - Still GIF → JPEG XL:
- now converts as
cjxldoes; - lossless when no quality is set, as
cjxldefaults for GIF.
- now converts as
- Lossy WebP → HEIC now converts as
heif-encdoes: straight from the WebP's own YCbCr planes, with no RGB round trip. - HEIC → HEIC:
- now converts as
heif-encdoes; - keeps the source's Exif and XMP, which were dropped before.
- now converts as
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
cwebpdarkens it. - A TIFF with premultiplied alpha converted to HEIC keeps its true colours, where
heif-encwould not un-multiply it. This one is pending a decision.
- A TIFF with straight alpha keeps its true colours, where
- 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
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
cwebpflag:-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 everythingavifencoffers 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
cjxloption, including the modular, progressive, filter, colour-space, metadata and container ones, with effort up to 11. -
HEIC exposes every
heif-encoption 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
miniformat
The GPL edition's x265 controls sit in the same panel, as
heif-enc's-Land-poptions. -
JPEG input is decoded the way each tool decodes it: libjpeg-turbo 3.2.0, with
avifenc's andheif-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 -metadatadoes. - AVIF, JPEG XL and HEIC keep it by default, as
avifenc,cjxlandheif-encdo. - Settings saved by 0.12 and 0.13 load into these per-format options.
- WebP keeps it only when asked, as
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
img2webpandgif2webpwrite them. - Animated AVIF, HEIC and JPEG XL, and multi-image files, are not offered yet (ROADMAP Phase 8).
- Animated WebP and GIF convert to animated WebP, as
- 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 -Lcannot 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:
cwebpreads 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
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-decreads 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
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
cwebpin only 17 of 456 tested cases. JPEGs are now decoded with libjpeg-turbo's decoder, ascwebpdecodes 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
img2webpfor every settingimg2webpcan 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.