mirror of
https://github.com/imgproxy/imgproxy.git
synced 2025-01-08 10:45:04 +02:00
128 lines
4.2 KiB
Markdown
128 lines
4.2 KiB
Markdown
# Autoquality![pro](./assets/pro.svg)
|
|
|
|
imgproxy can calculate quality for your resultant images so they best fit the selected metric. The supported methods are [none](#none), [size](#autoquality-by-file-size), [dssim](#autoquality-by-dssim), and [ml](#autoquality-with-ml).
|
|
|
|
**⚠️ Warning:** Autoquality requires an image to be saved several times. Use it only when you prefer the resultant quality and size over speed.
|
|
|
|
You can enable autoquality using [config options](configuration.md#autoquality) (for all images) or with [processing options](generating_the_url.md#autoquality) (for each image individually).
|
|
|
|
## None
|
|
|
|
Disable the autoquality.
|
|
|
|
**Method name:** `none`
|
|
|
|
#### Config example
|
|
|
|
```bash
|
|
IMGPROXY_AUTOQUALITY_METHOD="none"
|
|
```
|
|
|
|
#### Processing options example
|
|
|
|
```
|
|
.../autoquality:none/...
|
|
```
|
|
|
|
## Autoquality by file size
|
|
|
|
With this method, imgproxy will try to degrade the quality so your image fits the desired file size.
|
|
|
|
**Method name:** `size`
|
|
|
|
**Target:** the desired file size
|
|
|
|
#### Config example
|
|
|
|
```bash
|
|
IMGPROXY_AUTOQUALITY_METHOD="size"
|
|
# Change value to the desired size in bytes
|
|
IMGPROXY_AUTOQUALITY_TARGET=10240
|
|
IMGPROXY_AUTOQUALITY_MIN=10
|
|
IMGPROXY_AUTOQUALITY_MAX=80
|
|
# Quality 50 for AVIF is pretty the same as 80 for JPEG
|
|
IMGPROXY_AUTOQUALITY_FORMAT_MAX="avif=50"
|
|
```
|
|
|
|
#### Processing options example
|
|
|
|
```
|
|
.../autoquality:size:10240:10:80/...
|
|
```
|
|
|
|
## Autoquality by DSSIM
|
|
|
|
With this method imgproxy will try to select a level of quality so that the saved image will have the desired [DSSIM](https://en.wikipedia.org/wiki/Structural_similarity#Structural_Dissimilarity) value.
|
|
|
|
**Method name:** `dssim`
|
|
|
|
**Target:** the desired DSSIM value
|
|
|
|
#### Config example
|
|
|
|
```bash
|
|
IMGPROXY_AUTOQUALITY_METHOD="dssim"
|
|
# Change value to the desired DSSIM
|
|
IMGPROXY_AUTOQUALITY_TARGET=0.02
|
|
# We're happy enough if the resulting DSSIM will differ from the desired by 0.001
|
|
IMGPROXY_AUTOQUALITY_ALLOWED_ERROR=0.001
|
|
IMGPROXY_AUTOQUALITY_MIN=70
|
|
IMGPROXY_AUTOQUALITY_MAX=80
|
|
# Quality 50 for AVIF is pretty the same as 80 for JPEG
|
|
IMGPROXY_AUTOQUALITY_FORMAT_MIN="avif=40"
|
|
IMGPROXY_AUTOQUALITY_FORMAT_MAX="avif=50"
|
|
```
|
|
|
|
#### Processing options example
|
|
|
|
```
|
|
.../autoquality:dssim:0.02:70:80:0.001/...
|
|
```
|
|
|
|
## Autoquality with ML
|
|
|
|
This method is almost the same as autoquality with [DSSIM](#autoquality-by-dssim) but imgproxy will try to predict the initial quality using neural networks. This requires neural networks to be configured (see the config examlpe or the config documentation). If a neural network for the resulting format is not provided, the [DSSIM](#autoquality-by-dssim) method will be used instead.
|
|
|
|
**📝 Note:** When this method is used, imgproxy will save JPEG images with the most optimal [advanced JPEG compression](configuration.md#advanced-jpeg-compression) settings, ignoring config and processing options.
|
|
|
|
**Method name:** `ml`
|
|
|
|
**Target:** the desired DSSIM value
|
|
|
|
#### Config example
|
|
|
|
```bash
|
|
IMGPROXY_AUTOQUALITY_METHOD="ml"
|
|
# Change value to the desired DSSIM
|
|
IMGPROXY_AUTOQUALITY_TARGET=0.02
|
|
# We're happy enough if the resulting DSSIM will differ from the desired by 0.001
|
|
IMGPROXY_AUTOQUALITY_ALLOWED_ERROR=0.001
|
|
IMGPROXY_AUTOQUALITY_MIN=70
|
|
IMGPROXY_AUTOQUALITY_MAX=80
|
|
# Quality 50 for AVIF is pretty the same as 80 for JPEG
|
|
IMGPROXY_AUTOQUALITY_FORMAT_MIN="avif=40"
|
|
IMGPROXY_AUTOQUALITY_FORMAT_MAX="avif=50"
|
|
# Neural networks paths for JPEG, WebP, and AVIF
|
|
IMGPROXY_AUTOQUALITY_JPEG_NET="/networks/autoquality-jpeg.pb"
|
|
IMGPROXY_AUTOQUALITY_WEBP_NET="/networks/autoquality-webp.pb"
|
|
IMGPROXY_AUTOQUALITY_AVIF_NET="/networks/autoquality-avif.pb"
|
|
```
|
|
|
|
**📝 Note:** If you trust your neural network's autoquality, you may want to set `IMGPROXY_AUTOQUALITY_ALLOWED_ERROR` to 1 (the maximum possible DSSIM value). In this case, imgproxy will always use the quality predicted by the neural network.
|
|
|
|
#### Processing options example
|
|
|
|
```
|
|
.../autoquality:ml:0.02:70:80:0.001/...
|
|
```
|
|
|
|
### Neural networks format
|
|
|
|
Neural networks should fit the following requirements:
|
|
* Tensorflow frozen graph format
|
|
* Input layer size is 416x416
|
|
* Output layer size is 1x100
|
|
* Output layer values are logits of quality probabilities
|
|
|
|
If you're an imgproxy Pro user and you want to train your own network but you don't know how, feel free to contact the imgproxy team for instructions.
|