Skip to content

v1.10.0

Choose a tag to compare

@Snesnopic Snesnopic released this 16 Aug 21:14
· 24 commits to main since this release

Major release with bug fixes and processor replacements for FLAC and GIF

What's new

GIF

  • New processor: OptigifProcessor replaces the old gifsicle and flexiGIF processors with a single pass (structural rebuild and LZW restart search share one in-memory model instead of handing the file back and forth). On real world test files it beats the old pipeline on both size and time (roughly +0.4 percentage points of compression at about 4.5x less time). Also a lot easier to maintain, as gifsicle wasn't a particularly easy to use codebase.
  • The --max-tokens flag is gone, as it was used for flexigif, and won't be missed.

FLAC

  • New processor: FlacoutProcessor replaces the old encoder, that was based on libFLAC. It searches a much larger part of the LPC, apodization and block size space than libFLAC's own encoder. Thanks to @W-Floyd's PR's (#1, #2, #4), it is a lot more feasible to use, as it was way too slow before.

CFBF (Windows only)

  • Fixed sub-storage class IDs being silently dropped during recompression
  • Fixed creation and modification timestamps never being preserved
  • Implemented integrity verification
  • Fixed corruption when optimizing files on network shares
  • Removed .chm and .mdb from supported extensions

WavPack

  • Fixed the channel mask being dropped during recompression, causing tools like ffmpeg to refuse multichannel and even plain stereo output as "unassigned speakers". Audio itself was never affected, this was metadata related

Processor executor

  • If a file has two or more processors registered, and one of them fails, now the best result from the other processors will be used instead of just returning the original file

Dependencies

  • Updated mp3packercpp to v1.2.1: performance improvements (again, thanks @W-Floyd for #1), fixed output corruption on MPEG2.5 files, fixed silence being truncated away on tracks that are quiet throughout, now also optimizes MPEG2/MPEG2.5 audio
  • Updated mseedout to v1.1.0: fixed an out of memory crash on long seismic traces
  • Updated OptiVorbis to v0.3.2: improves compression removing unused entries in the codebooks
  • Updated libarchive to v3.8.9: fixes CVE-2025-5915 (heap buffer overflow reading RAR archives) plus many of out-of-bounds read, use-after-free and integer-overflow fixes across the tar, zip, iso9660, cpio, warc, cab, xar and 7z readers
  • Updated taglib to v2.3.1: fixes a crash on Matroska files with an invalid or missing seek head, plus a bunch of EBML and MP4 validation fixes
  • Updated libmatroska to release-1.7.2 and libebml to release-1.4.7: better EBML parsing to reject infinite sizes outside Segment/Cluster (per RFC 9559) and fixes a memory leak when an upper element is found inside the last element
  • Updated libogg: fixes a potential integer overflow in ogg_stream_iovecin
  • Updated woff2: fixes non-monotonic glyph contour points plus a related overflow check

Removed

  • vbrfix (the MP3 VBR header fixer) has been dropped. It was previously needed for mp3packer's original implementation in chisel, but since upgrading to mp3packercpp, it is no longer needed

macOS: removing the Gatekeeper quarantine

When downloading binaries from the internet, macOS automatically marks them as “quarantined”.
If you try to run chsl and macOS shows a warning like:

“chsl cannot be opened because it is from an unidentified developer”

…you need to remove the quarantine attribute manually.

How to remove the quarantine flag
Open Terminal in the folder where you downloaded chsl and run:

xattr -d com.apple.quarantine ./chsl

To verify that the quarantine flag is gone:

xattr ./chsl

If com.apple.quarantine no longer appears, you're good to go.
Now you can run:

./chsl ...

Note
This issue does not occur if you compile chsl yourself.