YOGA - Yummy Optimizer for Gorgeous Assets
|Github| |Discord| |PYPI Version| |Build Status| |Black| |License|
.. figure:: https://github.com/wanadev/yoga/raw/master/logo.png
:alt:
YOGA is a command-line tool and a library that can:
- convert and optimize images from various format to JPEG, PNG and WEBP,
- convert and optimize 3D models from various formats to
glTF and GLB
_.
Images are opened using Pillow_ and optimized using Guetzli_ (for JPEGs),
Zopflipng_ (for PNGs) and libwebp_ (for WEBPs).
3D Models are converted and optimized using assimp_. If models contain or
reference images, they are processed by YOGA's image optimizer.
EXAMPLE: Converting and optimizing an image from CLI::
yoga image input.png output.png
yoga image --output-format=jpeg --jpeg-quality=84 input.png output.jpg
yoga image --help
EXAMPLE: Converting and optimizing a 3D model from CLI::
yoga model input.fbx output.glb
yoga model --no-graph-optimization --no-meshes-optimization --image-output-format=jpeg --image-jpeg-quality=84 input.fbx output.glb
yoga model --help
.. _glTF and GLB: https://www.khronos.org/gltf/
.. _Pillow: https://github.com/python-pillow/Pillow
.. _Guetzli: https://github.com/google/guetzli
.. _Zopflipng: https://github.com/google/zopfli
.. _libwebp: https://chromium.googlesource.com/webm/libwebp/
.. _assimp: https://github.com/assimp/assimp
Install
- See
the install section of the documentation <https://wanadev.github.io/yoga/install.html>
_
Documentation
Command Line Interface (CLI) <https://wanadev.github.io/yoga/cli/index.html>
_Python API <https://wanadev.github.io/yoga/python/index.html>
_Contributing <https://wanadev.github.io/yoga/contributing.html>
_
Changelog
-
[NEXT] (changes on master
that have not been released yet):
-
v1.3.1:
- chore(sdist): Fixed included files in sdist package
-
v1.3.0:
- feat(assimp): Updated assimp to v5.3.1 (fixed build on GCC >= 13)
- chore: Removed a script that is no more needed
- docs: Updated contributing documentation (libraries, supported Python
version, assimp update)
-
v1.2.3:
- Code quality: more robust type comparison (@flozz)
- Code quality: cleanup some Python 2.7 specific code (@flozz)
- Added Python 3.12 support (@flozz)
- Removed Python 3.7 support (@flozz)
-
v1.2.2:
- Updated the code to not use deprecated constants on newer Pillow versions
- Various typo fixed (@kianmeng, #45)
- Added Python 3.11 support
-
v1.2.1:
- No change: fix an upload error on PYPI
-
v1.2.0:
- Add color quantization options (based on libimagequant)
arm64
and universal2
wheels for macOSx86
and x68_64
wheels for musl-based Linux distro (Alpine,...)- MAINTAINERS: New dependency:
imagequant <https://github.com/wanadev/imagequant-python>
_
-
v1.1.2:
- Add flag to CFFI builder to fix MacOS build
-
v1.1.1 (not published):
- JPEG: ignore invalid values for the orientation tag (#38)
- Python 3.10 support and wheels
-
v1.1.0:
-
JPEG Optimization:
- Honor the JPEG orientation EXIF tag
- JPEG optimization has been improved by using some optimizations from
MozJPEG after the Guetzli encoding (from 2.4 % to 7.3 % of additional size
reduction)
-
PNG Optimization:
- YOGA can no more output a PNG larger than the input one when performing
a PNG to PNG optimization
-
CLI:
- Allow to cancel an optimization using Ctrl+C (NOTE: may not work on
Windows)
- Add a
--version
option to get YOGA's version - Improve
yoga --help
usage
-
Python versions:
- Python 2.7 support dropped
-
NOTE for packagers:
- new dependency to
mozjpeg-lossless-optimization <https://github.com/wanadev/mozjpeg-lossless-optimization>
_
-
v1.0.0:
- WEBP (lossy and lossless) images supported as output format
- PNG default optimization preset changed to a 10× faster preset (old preset
still available with
--png-slow-optimization
flag) - New model flag
--no-fix-infacing-normals
to disable Assimp's "fix
infacing normals" postprocess (#32, #33) - Show CLI usage when no parameter given
- Developer documentation improved (#31)
- ASSIMP library updated
- WARNING: This is the last version to actively support Python 2.7!
-
v0.11.1:
- Automated workflow for deploying the PyPI packages
- Wheel are now distributed on PyPI
-
v0.11.0:
- Allows to build YOGA on Windows
- Scripts and workflow to build Windows standalone versions
-
v0.10.2:
- Updates assimp and python libraries
-
v0.10.1:
- Fixes an issue that occurs when output file does not already exist
-
v0.10.0:
- Prevent overwriting of the output file when an error occurs (#17)
- Unicode path support (#16)
-
v0.10.0b1:
- Verbose and quiet modes,
- Allows to pass textures from memory instead of looking on the filesystem,
- Allows to pass a fallback texture instead of raising an error.
-
v0.9.1b1:
- Automatic selection of the output format (png or jpeg),
- Prevent duplication of textures that are shared between materials,
- Fixes Windows paths of textures.
-
v0.9.0b1: First release (only GLB output for models, no image auto
output format)
.. |Github| image:: https://img.shields.io/github/stars/wanadev/yoga?label=Github&logo=github
:target: https://github.com/wanadev/yoga
.. |Discord| image:: https://img.shields.io/badge/chat-Discord-8c9eff?logo=discord&logoColor=ffffff
:target: https://discord.gg/BmUkEdMuFp
.. |PYPI Version| image:: https://img.shields.io/pypi/v/yoga.svg
:target: https://pypi.python.org/pypi/yoga
.. |Build Status| image:: https://github.com/wanadev/yoga/workflows/Python%20CI/badge.svg
:target: https://github.com/wanadev/yoga/actions
.. |Black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://black.readthedocs.io/en/stable/
.. |License| image:: https://img.shields.io/pypi/l/yoga.svg
:target: https://github.com/wanadev/yoga/blob/master/LICENSE