#avif #convert #av1 #png2avif #jpeg2avif

app cavif

Encodes images in AVIF format (image2avif converter). Pure Rust.

7 releases (4 breaking)

new 0.6.4 Jan 12, 2021
0.6.2 Sep 14, 2020
0.5.1 Sep 9, 2020
0.4.0 Aug 29, 2020
0.1.0 Aug 26, 2020

#138 in Images

Download history 22/week @ 2020-09-28 14/week @ 2020-10-05 7/week @ 2020-10-12 40/week @ 2020-10-19 16/week @ 2020-10-26 13/week @ 2020-11-02 40/week @ 2020-11-09 13/week @ 2020-11-16 17/week @ 2020-11-23 20/week @ 2020-11-30 21/week @ 2020-12-07 5/week @ 2020-12-14 7/week @ 2020-12-21 2/week @ 2020-12-28 27/week @ 2021-01-04 35/week @ 2021-01-11

76 downloads per month


486 lines

cavif — PNG/JPEG to AVIF converter

Encoder/converter for AVIF images. Based on rav1e and avif-serialize, which makes it pure Rust, with no C code!


➡️ Download the latest release ⬅️

The pre-built zip includes a Debian package and a portable static executable, with no dependencies, that runs on any Linux distro. It also includes executables for macOS and Windows.



To build it from source you need:

  • Rust 1.45 or later, preferably via rustup
  • nasm 2.14 or later

Then run in a terminal:

cargo install cavif


Run in a terminal (hint: you don't need to type the path, terminals accept file drag'n'drop)

cavif image.png

It makes image.avif. You can adjust quality (it's in 1-100 scale):

cavif --quality 60 image.png


You can also specify multiple images (encoding is multi-threaded, so the more, the better!).

  • --quality=n — Quality from 1 (worst) to 100 (best), the default value is 80. The numbers have different meaning than JPEG's quality scale. Beware when comparing codecs.
  • --speed=n — Encoding speed between 1 (best, but slowest) and 10 (fastest, but a blurry mess), the default value is 1. Encoding of AVIF is pretty slow, so you need either a) beefy multicore machine b) avoid large images c) patience.
  • --overwrite — Replace files if there's .avif already. By default existing files are left untouched.
  • -o path — Write output to this path instead of samefile.avif. If multiple input files are specified, it's interpreted as a directory.
  • --quiet — Don't print anything during conversion.
  • --premultiplied-alpha — Warning: currently incompatible with libavif. Improves compression of transparent images by clearing RGB of fully transparent pixels and lowering quality of semi-transparent colors.
  • --dirty-alpha — Don't change RGB values of transparent pixels. By default irrelevant color of transparent pixels is cleared to avoid wasting space.
  • --color=rgb — encode using RGB color space instead of YCbCr color space. Makes color closer to lossless, but makes files larger.


~241K SLoC