-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow users to pass max_threads to the avif encoder via Image.save #49
Conversation
CI failures seem unrelated to my changes. |
I think the rav1e and SVT-AV1 codecs probably make better use of max_threads. Could you run your script and post the results when you pass |
|
@fdintino ping. This PR makes the plugin much more usable for large-scale image compression and does not alter the default behaviour. Please let us know if there's anything else you'd like to see. |
@fdintino gentle bump |
Looks like the issue was closed by accident and moved to #54 |
Yes, I cross-referenced it in the PR description there, but should have commented here as well. Thanks. |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [pillow-avif-plugin](https://togithub.com/fdintino/pillow-avif-plugin) | `1.4.3` -> `1.4.4` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/pillow-avif-plugin/1.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pillow-avif-plugin/1.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pillow-avif-plugin/1.4.3/1.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pillow-avif-plugin/1.4.3/1.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>fdintino/pillow-avif-plugin (pillow-avif-plugin)</summary> ### [`v1.4.4`](https://togithub.com/fdintino/pillow-avif-plugin/releases/tag/v1.4.4) [Compare Source](https://togithub.com/fdintino/pillow-avif-plugin/compare/v1.4.3...v1.4.4) #### What's Changed - chore(ci): bump libavif to [`e10e6d9`](https://togithub.com/fdintino/pillow-avif-plugin/commit/e10e6d9)-2024-07-01; fix CI build issues by [@​fdintino](https://togithub.com/fdintino) in [fdintino/pillow-avif-plugin#53. See table below for new versions (all versions are upgrades from the 1.4.3 release). | | | |-------------|------------| | **libavif** | <b>1.0.3 ([e10e6d9](https://togithub.com/AOMediaCodec/libavif/commit/e10e6d98e6d1dbcdd409859a924d1b607a1e06dc))</b> | | **libaom** | **3.9.1** | | **dav1d** | **1.4.3** | | **SVT-AV1** | **2.1.1** | | **rav1e** | **0.7.1** | - feat: Allow users to pass `max_threads` to the avif encoder via `Image.save` by [@​yit-b](https://togithub.com/yit-b) in [fdintino/pillow-avif-plugin#54, originally in [fdintino/pillow-avif-plugin#49 - feat: Let users pass `max_threads` as an argument to `_avif.AvifDecoder` by [@​yit-b](https://togithub.com/yit-b) in [fdintino/pillow-avif-plugin#50 - chore(ci): build SVT-AV1 for aarch64 or arm64 by [@​RaphaelVRossi](https://togithub.com/RaphaelVRossi) in [fdintino/pillow-avif-plugin#38 - fix: keep alpha channel for images with mode P and custom transparency by [@​fdintino](https://togithub.com/fdintino) in [fdintino/pillow-avif-plugin#56; fixes [fdintino/pillow-avif-plugin#48 - fix: disable decoder strictness for `clap` and `pixi` properties by [@​fdintino](https://togithub.com/fdintino) in [fdintino/pillow-avif-plugin#57. fixes [fdintino/pillow-avif-plugin#13, fixes [fdintino/pillow-avif-plugin#28 - fix(ci): lint secrets permission error and macOS GHA runner homebrew `PATH` bug by [@​fdintino](https://togithub.com/fdintino) in [fdintino/pillow-avif-plugin#55 #### New Contributors - [@​RaphaelVRossi](https://togithub.com/RaphaelVRossi) made their first contribution in [fdintino/pillow-avif-plugin#38 **Full Changelog**: fdintino/pillow-avif-plugin@v1.4.3...v1.4.4 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/BSStudio/bss-web-file-api). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
It's not always desirable to set max_threads equal to the number of cpus on the host machine - especially in shared or containerized environments. Performance is often significantly worse if you have too many CPUs (see benchmarks below).
This PR gives users control over how many threads will be used for encoding by adding a max_threads argument accepted by Image.save(). Example:
save_test.py
Output:
The default behavior remains unchanged. It is 0 if not specified which is set to the cpu count.
Maybe this should be changed to a more reasonable default since performance seems the same with max_threads=0 (all CPUs) as it does with just 2 - probably because of contention? Maybe changing the default is outside the scope of this PR but I'd like to be able to tailor the parallelism to my compute environment.
Reproduce my tests: