Releases: ComunidadAylas/PackSquash
v0.4.0
For information about how to use PackSquash, please check out the getting started guide and the options files documentation.
🔍 Overview
v0.4.0 is a major update to PackSquash. Originally planned as a fundamental update that would include a new, easy-to-use graphical user interface and extensive redesigns to the code structure and compression techniques, we have decided to scale it back due to the long development cycle of the planned changes to keep a healthy release cadence, and to address some of the user needs and feedback that has accumulated during this time. Nevertheless, v0.4.0 still packs a punch, including significant fixes and texture and sound processing improvements that significantly reduce run times and pack sizes: a 50% improvement in runtime is common for packs with lots of textures and sound files. Rest assured that the changes we had originally planned for v0.4.0 are still being worked on and will make it to future releases.
By the way, we have posted several development announcements on our Discord server since the last release was made, so please consider joining if you want to stay on top of the latest PackSquash news. Joining our Discord server is also a great way to get in touch with us to collaborate: any contributions are welcome!
📌 Changelog
Starting with this release, we are keeping changelogs in a repository file. Please check it out to see what has changed.
⬆️ Upgrading from v0.3.1
PackSquash v0.4.0 no longer requires GStreamer to work, but makes several incompatible changes to the options file format and drops AppImages in favor of static binaries for Linux platforms. Please see the updated documentation and the changelog for more details on how to get PackSquash and what options have changed. After upgrading to v0.4.0, feel free to uninstall GStreamer if no other application on your system depends on a system-wide GStreamer installation.
The PackSquash GitHub action has also been updated to work with this release.
📝 Acknowledgements
We are so appreciative of the support and constructive feedback we have received from the community during this journey ❤️
To that end, we are adopting the All Contributors specification to recognize and visibilize the efforts of our contributors in helping the project. You can find a beautiful list of awesome people who have contributed to the project here. If we have not added you there, but you think you should be credited as a contributor, please contact us.
v0.3.1
These are the downloads and release notes for the PackSquash v0.3.1 release.
For information about how to install and use PackSquash, please see the installation guide and the options files documentation.
v0.3.1 is a patch update for v0.3.0, focused on fixing most known defects, introducing backward-compatible tweaks and improvements, and preparing its codebase for more extensive upgrades that will come in the future. Most users are encouraged to update to v0.3.1 at their convenience, which is meant to be a drop-in replacement for v0.3.0.
Nonetheless, those using PackSquash on computers with so underpowered x64 CPUs, in unsupported scenarios (i.e., for Bedrock Edition packs), passing uncommon combinations of non-default values for some options, optimizing packs that contain audio files encoded with uncommon parameters, or using PackSquash on Linux distros that ship older software may find incompatibilities. Please check the changelog below for more detailed information about these incompatibilities.
📌 Changelog from v0.3.0
Additions
- As requested in #44, basic support for Minecraft 1.17 include shaders was added. Please note that PackSquash is, for now, more restrictive than Minecraft when parsing these files, imposing that they must be a syntactically valid translation unit by themselves. In other words, include shaders that would only be valid within an external declaration of another shader, such as those containing only variable assignment expressions, are not accepted. We are looking forward to lifting this restriction in the future. Thanks to Ancientkingg#0420 over Discord for making me notice this quirk.
- Language files used in Minecraft 1.12.2 and older versions are now fully supported. Thanks to a Discord user whose nickname I can't find right now for bringing this to my attention.
- Added support for the resource pack assets used by the Custom Resources feature of the Minecraft Transit Railway mod, major version 3. Thank you @Kenny-Hui for getting in touch over Discord to suggest this improvement and for your keenness to answer technical questions about the mod. The tracking issue for this feature is #42.
- Custom assets can now be defined in options files by setting the file-specific option
force_include
totrue
. This option is honored by PackSquash for files that would otherwise be unrecognized and skipped from the generated ZIP file, and it can be used to include files that are not read by the game in the generated pack, such as credits or license information. Please get in touch if you feel the urge to use this feature to compensate for PackSquash lacking proper support for asset files used by the game, though! Thank you @MinecraftAdmin for suggesting this improvement on issue #40.
Compression improvements
- PackSquash now only processes files whose path in the pack matches a hardcoded list of path patterns. Previously, any file that had a recognized extension, such as
.json
, was optimized and included in the generated ZIP file, even if there was no way for Minecraft to read it. This improvement allows PackSquash to recognize different asset types much more precisely, enabling more specific and advanced optimizations. It also allowed the PackSquash codebase to be greatly refactored and simplified. However, this is a breaking change for users relying on PackSquash to optimize files that are not used by Minecraft: Java Edition, or only used by unsupported mods that do not follow the same asset location scheme as vanilla Minecraft. - Merged @sya-ri's PR #45, which ensures that Blockbench cube groups data is removed from JSON model files when debloating is enabled. Thank you very much for the PR!
- The JSON model debloat code now removes keys conventionally used by some authors to hold comment text, but completely ignored by the game.
- The Ogg Vorbis encoder used is now told to disregard ease of seeking of the files it generates, as Minecraft does not need to rewind or fast forward audio. Consequently, longer sounds are now more likely to be transcoded to files with less muxing overhead, slightly reducing their size with no changes to audio quality.
- When keeping the
color_quantization_target
option value to the new default ofauto
, now PackSquash won't use the color-quantized representation of a texture if it does not yield space savings. The previous behavior of always quantizing to 256 colors can be restored by explicitly settingcolor_quantization_target
to the previous default value. In addition, a quick, never size-increasing first optimization pass is now done on PNG files, and unless expressly requesting color quantization to be done, its results will be used if PackSquash can't figure out how to make the input PNG smaller. Thanks Mergu#0001 for sharing a previously problematic texture for analysis. - The dithering effect introduced while performing color quantization on textures is now slightly less intense and can be configured via the
color_quantization_dithering_level
option. This is meant to balance visual quality with size savings better. - Several tweaks were made to the Zopfli iteration count calculation code for PNG files to make it behave more as originally envisioned. PackSquash should now spend a bit more time optimizing smaller PNG images as it did on v0.2.1 while still hurrying up for bigger images as introduced on v0.3.0. The default value of the
image_data_compression_iterations
option was increased to5
to reflect this change and allow reducing it even more. - Command function files in data packs are now minified by PackSquash, removing comments and empty lines. Thank you @sya-ri for submitting this improvement on PR #68!
- The
sampling_frequency
option value can now only lower the sampling frequency of audio files, not increase it. The rationale for the new behavior is that upsampling sounds of an initially lower sampling frequency increases file sizes due to the need to store data about the additional samples, but no audio information is added. However, if the lowest sampling frequency chosen for an audio file is not supported by the encoder used by PackSquash, it will error out. This could also happen before when using certain values for thesampling_frequency
option. - Introduced the internal asset type mask abstraction, used throughout the source code to know what asset types are appropriate for the targeted Minecraft versions. Thanks to this abstraction, PackSquash can skip files only used in older Minecraft versions when the pack targets newer versions according to its
pack.mcmeta
file, for example. Theautomatic_asset_types_mask_detection
option was added to control how this asset type mask feature operates. Setting thevalidate_pack_metadata_file
option tofalse
will now only work ifautomatic_asset_types_mask_detection
is set tofalse
, too, as this feature needs to validate the pack metadata file too.
Performance improvements
- The thread synchronization primitives used internally were replaced with more efficient implementations, yielding modest total pack processing time savings. Thanks to @clrxbl and jilchu#4474 for your spot-on comments about PackSquash's performance which lead me to make this and other performance-related changes.
- JSON debloating is now limited to files that contain a known-debloatable asset type, and any debloating done is specific to the asset type. In addition to improving performance by doing less unnecessary work, this behavior is more accurate than the previous one of applying every debloating technique to every JSON file. End-users can know whether a JSON file was debloated or not thanks to a different optimization strategy message, which will now have the "and debloated" suffix when debloating.
- Output ZIP file operations now use a single lock to synchronize access to their mutable state instead of several locks acquired in succession, slightly reducing the synchronization cost of these operations.
- The official Linux and Windows PackSquash executables for x64 CPUs now target the second microarchitecture level of x64, allowing PackSquash to use more efficient instructions found on most, but not all, x64 processors. Any full-featured desktop, laptop, workstation, or server CPU manufactured on or after 2009-2010 should be compatible.
- Other minor micro-optimizations.
Pack file validation improvements
- PackSquash now sanity-checks that JSON files belonging to a known asset type (Minecraft model, etc.) are JSON objects. Minecraft and some JSON standards expect JSON data to be contained within a JSON object.
- Added an
always_allow_json_comments
JSON-specific file option to control whether PackSquash allows comments in the matched files or not. The default value istrue
, which allows and removes comments from JSON files. When this option is set tofalse
, comments will only be accepted in files whose usual extension ends with an extrac
letter, such as.jsonc
,.mcmetac
or.jpmc
.
Fixes
- Fixed issue #43 about shaders containing functions with parameters or a single statement being broken by PackSquash when minifying them. Thanks to @tomlister and @Aiamded for reporting this.
- Shaders that contain a preprocessor directive following an external declaration, such as a variable declaration, are no longer corrupted by PackSquash minifications. Thank you Esron#1571 for reporting this issue over Discord.
- Fixed sounds in resource packs not playing when the
zip_spec_conformance_level
andpercentage_of_zip_structures_tuned_for_obfuscation_discretion
options are set todisregard
and0
, respectively. Thank you @Aiamded for reporting this issue....
v0.3.0
These are the pre-built PackSquash executables for x64 Linux, macOS and Windows, and AArch64/ARM64 Linux.
For information about how to install and use PackSquash, please see the installation guide and the options files documentation.
Options files for v0.2.1 or v0.3.0-rc.1 are incompatible with v0.3.0.
📌 Changelog from v0.2.1
Additions
- Text files used by Minecraft that contain the End Poem, credits and main screen splashes are now supported.
- Initial support for data packs was added, by handling .nbt and .mcfunction files. Currently, these data pack specific files are just copied to the generated ZIP file, but improved file-specific optimization techniques will be introduced in the future.
- JSON files (.json, .mcmeta and, if OptiFine is allowed, .jem and .jpm) can now contain Unix shell style line comments (
# line comment
), C style block comments (/* block comment */
), and C style line comments (// line comment
). Comments are ignored and removed from the optimized JSON that is stored in the ZIP file. JSON with comments files (.jsonc) are now supported, and their extension is canonicalized to .json in the generated ZIP file, as Minecraft expects. - Pack file names can now at least contain every character in the Unicode Basic Multilingual Plane. This is a substantial improvement from the previous limitation of only ASCII characters.
- The
pack.mcmeta
file is now validated for egregious errors by default, like missingpack_format
ordescription
keys. This validation can be disabled if necessary. - An APT repository was created, to make it easier to install PackSquash and keep it updated on Debian-like Linux distros on the officially supported architectures. This is now the recommended method to install PackSquash on distros that can use this repository, like Debian and Ubuntu.
Compression improvements
- The PackSquash ZIP compressor was greatly revamped to allow for identical file deduplication and a greater range of ZIP specification conformance levels, so you can now choose the right balance between optimization and interoperability for your needs in a more precise way.
- Key-value pairs in JSON files that are known to be ignored by Minecraft, but usually present anyway, are now removed. This behavior can be disabled.
- The number of Zopfli compression iterations applied to pack files to store them in the generated ZIP file is now variable and configurable. This is useful to customize the desired tradeoff between compression and performance. The precise number of iterations done to a file depends on its size, with smaller files being compressed more, and larger files being compressed less, so performance is more predictable and consistent. As packs used with PackSquash tend to contain lots of small files but only a handful of big ones that are not already compressed, this new behavior can yield more space savings.
- PNG files can now be quantized to 2, 4 and 16 colors, in addition to the previously hardcoded, but still default, 256 colors.
- Improved shader minification. The exact savings depend on the input file, with bigger and more intrincate files being subject to more savings, but some test cases have shown a more than 10% optimized size decrease, compared to the previous shader minification technique.
- The generated ZIP files can now make use of ZIP64 extensions when needed to overcome certain limits of the original ZIP file format, like a maximum of 65535 files, or a total of less than 4 GiB of compressed data. Note that this ZIP64 support does not improve the per-file 4 GiB limit, because such big files do not make sense to use with Minecraft.
Performance improvements
- ZIP files that PackSquash has generated in previous runs can now be automatically used to vastly speed up next runs, as unchanged files can just be copied from that ZIP file instead of being processed again. PackSquash relies on the file modification timestamps provided by the filesystem to quickly deduce if a file may have been changed.
- Gigantic images (> 8192x8192) are now rejected by default, because they usually make little sense to use with Minecraft, unless they are atlases or animated textures. Limiting this ensures that PackSquash does not take too long processing them and helps authoring resource packs that work well accross a wide range of maximum GPU texture sizes.
- Images that have a lot of pixels are now optimized much faster, thanks to an adaptative compression strategy that calculates an appropriate number of Zopfli compression iterations beforehand to meet acceptable performance targets. This behavior can be tuned to be even faster in exchange for worse compression, or prioritize compression at the expense or performance.
- Buffering is now used by default in a way that is better adapted to the device PackSquash runs on and can be configured by the user. This substantially improves performance when dealing with big (> 64 MiB) packs if there is plenty of available memory, while also improving stability in environments with low available memory. When a buffer gets rolled over to disk because the available memory is exhausted, now it will be replaced by a much smaller buffer, so performance does not drop as much as it did before.
- PackSquash is now designed around a multithreaded asynchronous programming model, as opposed to the previously used multithreaded synchronous programming model. This new model leverages cooperative task scheduling to improve thread utilization. Some internal tests showed that the total execution time was reduced by ≈5%, but this figure may change depending on the contents of your pack and the device you run PackSquash on.
- Lots of micro-optimizations in regards to both memory and CPU usage.
Extraction protection improvements
- Now PackSquash uses much more sophisticated extraction protection techniques, with additional configuration knobs that allow tuning the generated ZIP file for increased compressibility or obfuscation. These extraction protection techniques were possible to implement thanks to original research on Minecraft internals, in addition to suggestions and ideas from some Discord users.
Fixes
- Allowing the OptiFine mod now properly deals with the Custom Entity Models feature, which adds .jem and .jpm files to resource packs. Previously these files were treated as unknown junk files and skipped.
- Fixed issue #12, which made grayscale-looking color images look wrong on older versions of Minecraft, by working around the underlying Minecraft quirk.
- Input PNG files with embedded gamma information are now corrected to a display gamma value of 2.2, which closely matches that of the sRGB color space, because this is the gamma that Minecraft and most other end-user applications and devices assume and use. Previously, input images with an unconventional gamma would have that gamma information stripped without their colors being corrected, which led to wrong-looking results down the line.
- Fixed issue #13 as much as possible.
- JSON, shader and OptiFine-added text files with a UTF-8 BOM now work with PackSquash. The BOM is routinely added to UTF-8 text files by some editors, like Windows Notepad, but it serves no purpose within a pack, so it is now ignored and removed.
- Audio files are no longer downmixed to mono by default, because the different 3D effects that downmixing may imply can be inappropriate, and doing so did not yield very significant space savings anyway, due to Ogg Vorbis joint encoding.
- Shader files with Windows (CR + LF) line endings now work fine with PackSquash.
- Shaders that contain the
#elif
preprocessor directive can now be parsed and optimized by PackSquash. The non-standard#elseif
preprocessor directive is no longer accepted. - Fixed issue #34 about the
#moj_import
preprocessor directive added in Minecraft 1.17 not being supported in shaders. - Some GLSL statements are no longer broken by PackSquash optimizations.
- The OxiPNG library is now told to stop trying further optimizations on images if the process has been running for more than ten minutes. This deadline is just a best-effort.
Stability improvements
- PackSquash' software architecture was reworked to support dealing with files larger than the available memory. Nevertheless, the usefulness of this change is limited in practice by libraries that require the entire file to be addressable in main memory to be processed. Currently, only audio and copied files can be processed without storing their entire contents in memory.
- Now PackSquash aborts its execution if an error occurs while processing the pack, instead of continuing and risking generating corrupt or incomplete ZIP files. This behavior also allows using PackSquash as a pack validator more efficiently.
- A configurable limit of simultaneously open files was introduced. This avoids errors caused by the open file limit imposed by the operating system being reached, which can happen in big packs if lots of threads are used.
Codebase changes
- The entire codebase was refactored to be much more modular, testable, and maintainable. In particular, the application and logic code were separated in two binary and library crates, respectively, promoting separation of concerns and paving the way for a future API.
- Automated unit tests were added for the most critical components of PackSquash. This increases the confidence that those components work okay, and continue to work fine after changes. These tests are run automatically for each build.
- Improved build reproducibility by checking in to the repository the Cargo.lock file.
- Improved the GitHub Actions workflow, fixing semantic version...
v0.3.0-rc.1
These are the pre-built PackSquash executables for x64 Linux, macOS and Windows, and AArch64/ARM64 Linux.
For information about how to install and use PackSquash, please see the installation guide and the options files documentation.
This is a release candidate version, not a final release. However, it is deemed to be extremely close to the final v0.3.0 release, and should be stable enough to use on your pack. The main reasons for this version to exist are that it helps giving other projects time to migrate, and allows fixing any showstopper bugs that may be reported by users. After some time has passed without known critical bugs, the final v0.3.0 version will be released.
Settings files for v0.2.1 are incompatible with v0.3.0.
📌 Changelog from v0.2.1
Additions
- Initial support for data packs was added, by handling .nbt and .mcfunction files. Currently, these data pack specific files are just copied to the generated ZIP file, but improved file-specific optimization techniques will be introduced in the future.
- JSON files (.json, .mcmeta and, if OptiFine is allowed, .jem and .jpm) can now contain Unix shell style line comments (
# line comment
), C style block comments (/* block comment */
), and C style line comments (// line comment
). Comments are ignored and removed from the generated ZIP file. JSON with comments files (.jsonc) are now supported, and their extension is canonicalized to .json in the generated ZIP file, as Minecraft expects. - Pack file names can now at least contain every character in the Unicode Basic Multilingual Plane. This is a substantial improvement from the previous limitation of only ASCII characters.
Compression improvements
- The PackSquash ZIP compressor was greatly revamped to allow for identical file deduplication and a greater range of ZIP specification conformance levels, so you can now choose the right balance between optimization and interoperability for your needs in a more precise way.
- Key-value pairs in JSON files that are known to be ignored by Minecraft, but usually present anyway, are now removed. This behavior can be disabled.
- The number of Zopfli compression iterations applied to pack files to store them in the generated ZIP file is now variable and configurable. This is useful to customize the desired tradeoff between compression and performance. The precise number of iterations done to a file depends on its size, with smaller files being compressed more, and larger files being compressed less, so performance is more predictable and consistent. As packs used with PackSquash tend to contain lots of small files but only a handful of big ones that are not already compressed, this new behavior can yield more space savings.
- PNG files can now be quantized to 2, 4 and 16 colors, in addition to the previously hardcoded, but still default, 256 colors.
- The generated ZIP files can now make use of ZIP64 extensions when needed to overcome certain limits of the original ZIP file format, like a maximum of 65535 files, or a total of less than 4 GiB of compressed data. Note that this ZIP64 support does not improve the per-file 4 GiB limit, because such big files do not make sense to use with Minecraft.
Performance improvements
- ZIP files that PackSquash has generated in previous runs can now be automatically used to vastly speed up next runs, as unchanged files can just be copied from that ZIP file instead of being processed again. PackSquash relies on the file modification timestamps provided by the filesystem to quickly deduce if a file may have been changed.
- Gigantic textures (> 4096x4096) are now rejected by default, because they usually make little sense to use with Minecraft, unless they are atlases. Limiting this ensures that PackSquash does not take too long processing them and helps authoring resource packs that work well accross a wide range of maximum GPU texture sizes.
- Buffering is now used by default in a way that is better adapted to the device PackSquash runs on and can be configured by the user. This substantially improves performance when dealing with big (> 64 MiB) packs if there is plenty of available memory, while also improving stability in environments with low available memory. When a buffer gets rolled over to disk because the available memory is exhausted, now it will be replaced by a much smaller buffer, so performance does not drop as much as it did before.
- PackSquash is now designed around a multithreaded asynchronous programming model, as opposed to the previously used multithreaded synchronous programming model. This new model leverages cooperative task scheduling to improve thread utilization. Some internal tests showed that the total execution time was reduced by ≈5%, but this figure may change depending on the contents of your pack and the device you run PackSquash on.
- Lots of micro-optimizations in regards to both memory and CPU usage.
Extraction protection improvements
- Now PackSquash uses much more sophisticated extraction protection techniques, with additional configuration knobs that allow tuning the generated ZIP file for increased compressibility or obfuscation. These extraction protection techniques were possible to implement thanks to original research on Minecraft internals, in addition to suggestions and ideas from some Discord users.
Fixes
- Allowing the OptiFine mod now properly deals with the Custom Entity Models feature, which adds .jem and .jpm files to resource packs. Previously these files were treated as unknown junk files and skipped.
- Fixed issue #12, which made grayscale-looking color images look wrong on older versions of Minecraft, by working around the underlying Minecraft quirk. This workaround must be explicitly enabled in the options file because it may hurt compression.
- Input PNG files with embedded gamma information are now corrected to a display gamma value of 2.2, which closely matches that of the sRGB color space, because this is the gamma that Minecraft and most other end-user applications and devices assume and use. Previously, input images with an unconventional gamma would have that gamma information stripped without their colors being corrected, which led to wrong-looking results down the line.
- Fixed issue #13 as much as possible.
- JSON, shader and OptiFine-added text files with a UTF-8 BOM now work with PackSquash. The BOM is routinely added to UTF-8 text files by some editors, like Windows Notepad, but it serves no purpose within a pack, so it is now ignored and removed.
- Audio files are no longer downmixed to mono by default, because the different 3D effects that downmixing may imply can be inappropriate, and doing so did not yield very significant space savings anyway, due to Ogg Vorbis joint encoding.
- Shader files with Windows (CR + LF) line endings now work fine with PackSquash.
- The OxiPNG library is now told to stop trying further optimizations on images if the process has been running for more than ten minutes. This deadline is just a best-effort, and does not fully address the fact that some images still take too long to optimize in a way that is not affected by this change.
Stability improvements
- PackSquash' software architecture was reworked to support dealing with files larger than the available memory. Nevertheless, the usefulness of this change is limited in practice by libraries that require the entire file to be copied to memory to be processed. Currently, only audio and copied files can be processed without storing their entire contents in memory.
- Now PackSquash aborts its execution if an error occurs while processing the pack, instead of continuing and risking generating corrupt or incomplete ZIP files. This behavior also allows using PackSquash as a pack validator more efficiently.
- A configurable limit of simultaneously open files was introduced. This avoids errors caused by the open file limit imposed by the operating system being reached, which can happen in big packs if lots of threads are used.
Codebase changes
- The entire codebase was refactored to be much more modular, testable, and maintainable. In particular, the application and logic code were separated in two binary and library crates, respectively, promoting separation of concerns and paving the way for a future API.
- Automated unit tests were added for the most critical components of PackSquash. This increases the confidence that those components work okay, and continue to work fine after changes. These tests are run automatically for each build.
- Improved build reproducibility by checking in to the repository the Cargo.lock file.
- Updated build environment software. This included updating Linux build runners from Ubuntu 18.04 to 20.04.
- Improved the GitHub Actions workflow, fixing semantic version calculations, build artifacts caching, and other changes.
- Visual Studio Code configuration files were checked in to the repository. This should help new contributors configure their development environment more easily.
- An .editorconfig file was added to improve code readability in the GitHub website.
- Updated libraries and toolchain components for the latest fixes and improvements.
Miscellaneous
- JSON files can now be prettified instead of minified before storing them in the generated ZIP file in a per-file basis. This may be useful for packs under a permissive license that wants to encourage contributions from its users. Similarly, minification of shader and .properties files can now be disabled.
- Opus audio files are now supported as input files in resource packs. They are transcoded to Ogg so that Minecraft can read them.
- Several tidy...
v0.2.1
These are the pre-built PackSquash executables for x64 Linux, macOS and Windows.
For information about how to install and use PackSquash, please see the installation guide and the settings file format documentation.
Changelog from v0.2.0:
- Added the
target_pitch
setting for audio files. This introduced an additional dependency on the GStreamer SoundTouch plugin, which is included in the "bad" GStreamer plugins release. Windows users will need to replace the MSVC version of the GStreamer runtime with the equivalent MinGW version, due to SoundTouch incompatibility problems with MSVC. Linux and macOS users just need to make sure that the "bad" plugins package they have installed includes this plugin. The installation guide was updated to reflect these changes. - Unrecognized keys in settings files are now rejected instead of just being ignored, for the sake of making future expansions easier.
- Minor tidy ups to the code and documentation.
v0.2.0
These are the pre-built PackSquash executables for x64 Linux, macOS and Windows.
For information about how to install and use PackSquash, please see the installation guide and the settings file format documentation.
Changelog from v0.1.2:
- The configuration is now read from a settings file instead from command-line switches. This allowed to drop a dependency and reduce the PackSquash executable size by 400 KiB.
- Per-file compression settings for PNG and audio files were added. Files can be matched in the settings file by glob patterns.
- Added per-file compression settings to allow upmixing or downmixing sound files, and customizing their bitrates and sampling frequencies.
- Now GLSL shaders (VSH and FSH files) are compacted.
- The Windows executable now has an icon and metadata.
- The command line switch that shows version information was renamed to
-v
and substantially improved. - Improvements to documentation.
- Several minor changes to the build toolchain, dependencies and source code to slightly improve performance.
v0.1.2
These are the pre-built PackSquash executables for x64 Linux, macOS and Windows.
For information about how to install and use PackSquash, please see the installation guide.
v0.1.1
These are the pre-built PackSquash executables for x64 Linux, macOS and Windows.
For information about how to install and use PackSquash, please see the installation guide.
v0.1.0
These are the pre-built PackSquash executables for x64 Linux, macOS and Windows.
For information about how to install and use PackSquash, please see the installation guide.