#avif #convert #av1 #png2avif #jpeg2avif

app cavif

Encodes images in AVIF format (image2avif converter) using a pure-Rust encoder

12 stable releases

1.5.0 Dec 11, 2022
1.4.0 Nov 3, 2022
1.3.5 Sep 5, 2022
1.3.4 Feb 16, 2022
0.6.2 Sep 14, 2020

#115 in Images

Download history 42/week @ 2022-11-27 64/week @ 2022-12-04 97/week @ 2022-12-11 54/week @ 2022-12-18 74/week @ 2022-12-25 20/week @ 2023-01-01 33/week @ 2023-01-08 24/week @ 2023-01-15 29/week @ 2023-01-22 29/week @ 2023-01-29 40/week @ 2023-02-05 81/week @ 2023-02-12 47/week @ 2023-02-19 19/week @ 2023-02-26 33/week @ 2023-03-05 31/week @ 2023-03-12

154 downloads per month

BSD-3-Clause and GPL-3.0+

863 lines

cavif — PNG/JPEG to AVIF converter

Encoder/converter for AVIF images. Based on rav1e and avif-serialize, which makes it an almost pure-Rust tool (it uses C LCMS2 for color profiles).


➡️ Download the latest release ⬅️

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


  • Chrome 85+ desktop,
  • Chrome on Android 12,
  • Firefox 91,
  • Safari iOS 16/macOS Ventura.


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. There is no lossless compression support.
  • --speed=n — Encoding speed between 1 (best, but slowest) and 10 (fastest, but a blurry mess), the default value is 4. Speeds 1 and 2 are unbelievably slow, but make files ~3-5% smaller. Speeds 7 and above degrade compression significantly, and are not recommended.
  • --overwrite — Replace files if there's .avif already. By default the existing files are left untouched.
  • -o path — Write images to this path (instead of same-name.avif). If multiple input files are specified, it's interpreted as a directory.
  • --quiet — Don't print anything during conversion.

There are additional options that tweak AVIF color space. The defaults in cavif are chosen to be the best, so use these options only when you know it's necessary:

  • --dirty-alpha — Preserve RGB values of fully transparent pixels (not recommended). By default irrelevant color of transparent pixels is cleared to avoid wasting space.
  • --color=rgb — Encode using RGB instead of YCbCr color space. Makes colors closer to lossless, but makes files larger. Use only if you need to avoid even smallest color shifts.


To build it from source you need:

  • Rust 1.60 or later, preferably via rustup,
  • nasm 2.14 or later.

Then run in a terminal:

rustup update
cargo install cavif


~487K SLoC