📦 Minecraft: Java Edition resource and data pack optimizer which aims to achieve the best possible compression, performance and protection, improving pack distribution, storage and in-game load times.
For information about how to use PackSquash, please check out the getting started guide and the options files documentation.
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!
Starting with this release, we are keeping changelogs in a repository file. Please check it out to see what has changed.
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.
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.
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.
force_include
to true
. 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..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.color_quantization_target
option value to the new default of auto
, 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 setting color_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.color_quantization_dithering_level
option. This is meant to balance visual quality with size savings better.image_data_compression_iterations
option was increased to 5
to reflect this change and allow reducing it even more.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 the sampling_frequency
option.pack.mcmeta
file, for example. The automatic_asset_types_mask_detection
option was added to control how this asset type mask feature operates. Setting the validate_pack_metadata_file
option to false
will now only work if automatic_asset_types_mask_detection
is set to false
, too, as this feature needs to validate the pack metadata file too.always_allow_json_comments
JSON-specific file option to control whether PackSquash allows comments in the matched files or not. The default value is true
, which allows and removes comments from JSON files. When this option is set to false
, comments will only be accepted in files whose usual extension ends with an extra c
letter, such as .jsonc
, .mcmetac
or .jpmc
.zip_spec_conformance_level
and percentage_of_zip_structures_tuned_for_obfuscation_discretion
options are set to disregard
and 0
, respectively. Thank you @Aiamded for reporting this issue.restrictive_banner_layer_texture_format_check
and bad_entity_eye_layer_texture_transparency_blending
quirks, respectively, which PackSquash automatically applies when necessary by default. Thanks to ! " Marco Pollo#1898 and @Aiamded, respectively, for reporting these problems..jsonc
files to .json
, an error will now happen again, as it did in v0.2.1. v0.3.0 introduced a regression that made it possible to leverage this normalization to store two files with the same name on the generated ZIPs, negatively impacting their sizes for no good reason.output_file_path
option points to an existing directory, and thus it cannot be a normal file. Experience has shown that this is a common mistake, and Windows reported a generic "access denied" error message after the whole pack was optimized, confusing users.pack.mcmeta
file that does not contain a valid pack_format
key now correctly points to that key instead of pack_format_version
.musl
Linux environments, such as Alpine, but it's necessary to extract them beforehand on a glibc
environment in this case. AppImages are now the recommended way to run PackSquash when more environment-specific packages are not provided or can't be used.glibc
versions than most other distros). This change should also make it easier to replicate the PackSquash build environment for private builds. However, executables built in Debian Bullseye are not compatible with Ubuntu 18.04 or any distro that uses a glibc
version older than 2.31. The recommended migration path for cases where upgrading is not feasible is to use the PackSquash AppImage.rust-toolchain
rustup override file was checked-in to the repository, making the nightly Rust toolchain requirement much more transparent for fellow developers and automated tools.cargo-deny
Cargo plugin was added.cargo-deny
checks. These patches streamlined executable sizes.audio-transcoding
Cargo feature was added to choose at compile time whether PackSquash implements audio transcoding functionality using GStreamer. This feature is enabled by default, and all official builds have this feature enabled. Disabling the feature stops the PackSquash executable from linking to GStreamer libraries, which may be helpful for some advanced use cases, but disables parsing of audio file optimization options and the optimizations themselves, turning audio files into assets that are merely copied as-is.PACKSQUASH_LOG
environment variable can be used to customize what logging messages are shown, whose contents are parsed by the env_logger
library, but this is considered for now an implementation detail that may change in the future. @sya-ri did this change as a part of PR #46.automatic_asset_types_mask_detection
color_quantization_dithering_level
always_allow_json_comments
minify_legacy_language
strip_legacy_language_bom
minify_command_function
force_include
color_quantization_target
option:
auto
(new default value)work_around_minecraft_quirks
option:
restrictive_banner_layer_texture_format_check
bad_entity_eye_layer_texture_transparency_blending
allow_mods
option:
Minecraft Transit Railway 3
image_data_compression_iterations
was changed to 5
from 3
.As usual, we're very grateful for the community support we've received during the development of this release. Some highlights include:
Check out some of those who helped out below!
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.
# 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.mcmeta
file is now validated for egregious errors by default, like missing pack_format
or description
keys. This validation can be disabled if necessary.#elif
preprocessor directive can now be parsed and optimized by PackSquash. The non-standard #elseif
preprocessor directive is no longer accepted.#moj_import
preprocessor directive added in Minecraft 1.17 not being supported in shaders.-v
command line switch.ignore_system_and_hidden_files
is set to true
was expanded and improved.README.md
file. A FUNDING.yml
file was also added so that GitHub displays a relevant "Sponsor" button in its web interface.zip_compression_iterations
work_around_minecraft_quirks
size_increasing_zip_obfuscation
percentage_of_zip_structures_tuned_for_obfuscation_discretion
never_store_squash_times
spooling_buffers_size
open_files_limit
zip_spec_conformance_level
validate_pack_metadata_file
automatic_minecraft_quirks_detection
color_quantization_target
image_data_compression_iterations
skip_alpha_optimizations
minify_json
delete_bloat_keys
maximum_width_and_height
minify_shader
minify_properties
strict_zip_spec_compliance
, by zip_spec_conformance_level
quantize_image
, by color_quantization_target
resource_pack_directory
→ pack_directory
compress_already_compressed_files
→ recompress_compressed_files
allowed_mods
→ allow_mods
pack.mcmeta
file is now validated for egregious errors by default, like missing pack_format
or description
keys. This validation can be disabled if necessary.zip_spec_conformance_level
option is set to disregard
no longer fail to load sometimes with older Minecraft versions, if PackSquash is instructed to work around a newly-added quirk. (Thanks Dvalin#5304 for reporting this over Discord)#elif
preprocessor directive can now be parsed and optimized by PackSquash. The non-standard #elseif
preprocessor directive is no longer accepted.#moj_import
preprocessor directive added in Minecraft 1.17 not being supported in shaders..
and ..
are now properly dealt with, like they were on v0.2.1..tmp
extension was added to the hardcoded list of system files extensions that ignore_system_and_hidden_files
uses when set to true
.maximum_width_and_height
was changed to 8192
, as a compromise between rejecting too big single textures and allowing PackSquash to work with most animated textures and atlases by default.grayscale_textures_gamma_miscorrection
quirk was renamed to grayscale_images_gamma_miscorrection
to be more consistent with the names PNG files receive in the documentation.java8_zip_parsing
quirk.validate_pack_metadata_file
automatic_minecraft_quirks_detection
image_data_compression_iterations
skip_alpha_optimizations
Thanks to sponsors like Silmarost, who did a fantastic job at motivating PackSquash development; sya-ri, who shared candid feedback and did notable code contributions on the sister GitHub action project; pau101, who submitted a PR in the glsl fork repository that PackSquash uses implementing some shader optimization fixes and improvements, and everyone else who reached out in one way or another to make PackSquash better!
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.
# 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.-v
command line switch.ignore_system_and_hidden_files
is set to true
was expanded and improved.README.md
file. A FUNDING.yml
file was also added so that GitHub displays a relevant "Sponsor" button in its web interface.zip_compression_iterations
work_around_minecraft_quirks
size_increasing_zip_obfuscation
percentage_of_zip_structures_tuned_for_obfuscation_discretion
never_store_squash_times
spooling_buffers_size
open_files_limit
zip_spec_conformance_level
color_quantization_target
minify_json
delete_bloat_keys
maximum_width_and_height
minify_shader
minify_properties
strict_zip_spec_compliance
, by zip_spec_conformance_level
quantize_image
, by color_quantization_target
resource_pack_directory
→ pack_directory
compress_already_compressed_files
→ recompress_compressed_files
allowed_mods
→ allow_mods
Thanks to everyone who contributed to this release in one way or another! Feel free to give some feedback about the new version!
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:
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.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:
-v
and substantially improved.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.
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.
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.