/piuma

:rainbow: Simple and fast image optimizer service you can host on your machine

Primary LanguageGoMIT LicenseMIT

Piuma

Build Status Coverage Status

Simple and fast image optimizer service you can host on your machine

Install

go get github.com/piumaio/piuma

Requirements

Since this project automates two applications, you will need them to be installed on your machine for us to be able to reach them:

Also, dssim, used for adaptive image quality, is suggested but not required.

Run

piuma

You can also change the default port (8080 by default) and mediapath, type

piuma --help

for more info.

Running with Docker

Use the following command to build the Docker image from the root folder:

docker build -t piuma .

Next, you can run the image and provide the port and the mediapath where the optimized images will be stored:

docker run -p 8080:8080 -v $PWD:/data piuma -mediapath /data

Above command will run Piuma on http://localhost:8080 and it's going to store all optimized images in the current directory ($PWD).

Usage

https://yourpiumahost/Options/Image_URL

Where options are values separated by _

width_height_quality

or

width_height_quality:optional_image_format

Where quality is a value between 0 and 100.

To get your image resized to 100 x 100:

https://yourpiumahost/100_100/<Image_URL>

If you want to specify only the width, you'll get a new image keeping the ratio:

https://yourpiumahost/100/<Image_URL>

If you want to specify only the height

https://yourpiumahost/0_100/<Image_URL>

If you want to convert the image to a specific format add a :image_extension where image_extension can be one of the following:

  • jpg or jpeg for JPEG
  • png for PNG
  • webp for WebP
  • webp_lossless same as webp but with lossless conversion
  • avif for AVIF
  • auto that chooses the best supported image format by parsing the Accept request header
    • If you add a colon followed by a comma-separated list of extension you can pass a list of allowed extension (e.g. auto:webp,jpg,png will only select webp, jpeg and png extensions)
https://yourpiumahost/0_0_100:webp/<Image_URL>

Adaptive quality

Also you can add an a after quality value (e.g. 0_0_75a), that means that quality will be choosed following a DSSIM value generated by this expression: 100-quality_value/10000.

Basically it can be used whenever you want to have the same perceived quality among multiple image formats, but requires more time because image needs to be converted more times for searching an optimal quality value.

Running tests

To run the unit tests, change to the directory with tests (files ending with _test.go contain unit tests) and run:

go test -v ./...