Key takeaways
- A HEIC needs two layers: libheif reads the HEIF container, and a codec decodes the HEVC image inside. libheif's README names libde265 as the default HEVC decoder, with x265 or kvazaar to encode. No decoder means 'Unsupported codec'.
- Distributions differ. Ubuntu 24.04 packages the decoder as libheif-plugin-libde265, which libheif1 only suggests; Fedora says some codecs, HEVC included, are not in its repositories for patent or licensing reasons and points to RPM Fusion; Arch's libheif depends on libde265 and x265.
- In our tests ImageMagick 6.9.12 on Ubuntu 24.04 failed with 'Unsupported codec' until we loaded the libde265 plugin, then converted both a plain and a tiled HEIC. FFmpeg 6.1.1 could not open HEIC at all; FFmpeg 7.0.2 reads it but wrote only one tile of a tiled file.
- Python's pillow-heif ships its own libheif, libde265 and x265 inside the wheel, so it works regardless of the system libheif. ExifTool reads and writes HEIC.
- If you cannot install packages, or just have a few photos, the browser converter on this site decodes HEIC without any of this and keeps files on your device.
On this page
- How does Linux open a HEIC file?
- Why does Linux say 'unsupported codec' for my HEIC?
- How do I open HEIC on Ubuntu, Linux Mint, Fedora or Arch?
- Which Linux viewers and file managers open HEIC?
- How do I convert HEIC on the Linux command line?
- Does ImageMagick support HEIC?
- Does FFmpeg support HEIC?
- How do I use HEIC in Python (pillow-heif)?
- Does exiftool read HEIC metadata?
- Why do Fedora and Ubuntu handle HEIC differently?
- When should I just use a browser tool instead?
How does Linux open a HEIC file?
Through libheif, an ISO/IEC 23008-12 HEIF and AVIF decoder and encoder. Almost every Linux program that reads HEIC calls it: libheif's own README lists GIMP, Krita, ImageMagick, GraphicsMagick, darktable, digiKam, libvips, pillow-heif, KDE's KImageFormats, XnView and the GNOME desktop through a gdk-pixbuf loader. libheif does not decompress the photo itself. It hands the image to a codec library.
The README's codec table says HEIC is decoded by libde265 or FFmpeg and encoded by x265 or kvazaar; AVIF uses libaom, dav1d, svt-av1 or rav1e. Since libheif 1.14.0 each codec can be a separate plugin loaded from the directories in the LIBHEIF_PLUGIN_PATH environment variable, which is how distributions split them into packages, and the README says the FFmpeg decoder plugin still prefers libde265 when both are present. The README also notes that x265 is GPL and that kvazaar (BSD) is an alternative encoder. Its October 2026 status note says libheif and libde265 are maintained by one independent developer who handled 73 security advisories in 2026, so keep both up to date.
Why does Linux say 'unsupported codec' for my HEIC?
Because libheif found no HEVC decoder. We reproduced it. This machine runs Ubuntu 24.04.5 with libheif 1.17.6 and only the AV1 decoder plugin in its plugin directory, which is what the libheif1 package depends on. The same file opens fine in pillow-heif on the same machine, so the photo is not damaged.
| Command | Environment | What it printed |
|---|---|---|
identify test.heic | ImageMagick 6.9.12-98, libheif 1.17.6, no HEVC plugin | test.heic HEIC 640x480 640x480+0+0 8-bit sRGB 8110B (reading the header works) |
convert test.heic out.jpg | Same | Unsupported feature: Unsupported codec (4.3000) 'test.heic' @ error/heic.c/IsHEIFSuccess/139 and no output file |
heif-info test.heic | libheif-examples 1.17.6, no HEVC plugin | Brand heic, 640x480, 4:2:0, 8-bit, then Could not decode image Unsupported feature: Unsupported codec |
heif-thumbnailer -s 128 test.heic th.png | Same | Could not decode HEIF image : Unsupported feature: Unsupported codec, no thumbnail |
heif-enc photo.jpg -o out.heic | Same | No HEVC encoder available. |
heif-convert test.heic hc.jpg | Same, with the libde265 plugin loaded via LIBHEIF_PLUGIN_PATH | File contains 1 image then Written to hc.jpg |
convert test.heic out.jpg | ImageMagick 6.9.12 with the same plugin path | Exit code 0; a 640x480 JPEG. The tiled grid.heic also converted, to 4032 x 3024 |
heif-thumbnailer -s 128 test.heic th.png | Same plugin path | Exit code 0; a 128 x 96 PNG |
We did not install anything system-wide. We downloaded the Ubuntu .deb files for libheif-plugin-libde265, libde265-0, libheif-examples and heif-thumbnailer from archive.ubuntu.com, unpacked them in a scratch folder and pointed LIBHEIF_PLUGIN_PATH and LD_LIBRARY_PATH at it. The plugin directory on the machine held only libheif-aomdec.so.
How do I open HEIC on Ubuntu, Linux Mint, Fedora or Arch?
| Distribution | HEVC decoder for libheif | What to do | Source |
|---|---|---|---|
| Ubuntu 24.04 | libheif-plugin-libde265 (in main). libheif1 depends on an AV1 plugin and only suggests it; heif-thumbnailer, heif-gdk-pixbuf and libheif-examples depend only on libheif1. The x265 encoder plugin is in universe. | sudo apt install libheif-plugin-libde265 (not run). Add libheif-plugin-x265 only if you want to make HEIC. | Ubuntu archive index |
| Linux Mint 22.x | Mint says 22.x is based on Ubuntu 24.04, so the Ubuntu packages above apply. Mint's release notes say nothing about HEIC, and we did not test Mint's own apps. | Same as Ubuntu 24.04. | Linux Mint release notes |
| Fedora | Not in Fedora's repositories. Fedora's docs say some codecs, HEVC among them, are left out 'due to patent or licensing restrictions'. RPM Fusion's libheif-freeworld 'adds support for H.264, HEVC and VVC-encoded HEIC files'. | Enable the RPM Fusion free repository, then sudo dnf install libheif-freeworld (not run). | Fedora Quick Docs, RPM Fusion |
| Arch Linux | The Extra repository's libheif (1.23.6-1, built 5 October 2026) lists libde265, libx265, libaom, openh264 and x264 among its dependencies. | Nothing extra: sudo pacman -S libheif (not run). | Arch package page |
Other distributions: not verified. To find out whether yours has a decoder, run heif-info photo.heic; the failure above ends with 'Unsupported codec'.
Is there a 'HEIC extension' for Ubuntu? No. There is no Store-style add-on; the pieces are the packages above. In the GNOME desktop, heif-gdk-pixbuf adds the loader that gdk-pixbuf programs use and heif-thumbnailer registers a thumbnailer for image/heif and image/avif. The Ubuntu 24.04 index shows gnome-control-center and Shotwell depending on both, and ubuntu-desktop depending on Eye of GNOME (eog). Those still need an HEVC decoder underneath to show an iPhone photo.
Fedora and the Fedora forum describe the same split from the other side. A forum reply from March 2025 (a user's reading, not a Fedora statement) says libheif-freeworld supplements libheif with components Fedora cannot ship. The RPM Fusion configuration page says its free repository holds open-source software Fedora cannot ship 'for other reasons'.
Which Linux viewers and file managers open HEIC?
- GNOME Loupe and Nautilus: Loupe is GNOME's default Image Viewer and loads images through glycin, whose HEIF loader uses libheif. The glycin README lists Nautilus among its users and ships a thumbnailer. Loupe's own README says which formats work depends on the glycin loaders installed. Ubuntu 24.04 has Loupe 46.2 in universe; its default desktop depends on Eye of GNOME instead.
- Eye of GNOME and gdk-pixbuf programs: the libheif README says the GNOME desktop reads HEIC through the gdk-pixbuf loader that libheif includes. We did not test Eye of GNOME itself.
- KDE: KImageFormats lists HEIC, HEIF and HIF as read and write 'dependent on the HEIF plugins installed'. Upstream, its HEIF plugin is off unless built with
KIMAGEFORMATS_HEIF, because it needs a libheif with HEVC. Ubuntu 24.04'skimageformat-pluginsdepends on the libde265 and x265 plugins. We did not verify Gwenview or Dolphin specifically. - Shotwell: its NEWS file says 'Support HEIF/HEVC files' arrived in 0.31.90 (April 2023) and 'Support more variants of HEIF' in 0.32.0.
- digiKam: the libheif README lists it as a libheif user. digiKam's manual lists HEIF but says no definitive format list is possible, because availability depends on the libraries on your system and how they were compiled.
- GIMP: only if its libheif has an HEVC decoder; see HEIC in Photoshop, Lightroom and GIMP.
How do I convert HEIC on the Linux command line?
Each line below is marked. 'Ran' means we executed it here on 12 October 2026 and report what happened; 'Not run' means it comes from documentation or is a standard shell pattern.
| Task | Command | Status and result |
|---|---|---|
| Convert with libheif's tool | heif-convert photo.heic photo.jpg | Ran (libheif-examples 1.17.6 plus the libde265 plugin): wrote the JPEG; a tiled 4032 x 3024 file came out at 4032 x 3024. |
| Convert with ImageMagick | convert photo.heic photo.jpg | Ran (ImageMagick 6.9.12): works only with a HEVC decoder, otherwise 'Unsupported codec'. ImageMagick 7 uses magick; not tested, there is no magick here. |
| Convert with FFmpeg | ffmpeg -i photo.heic -frames:v 1 -update 1 photo.png | Ran with three builds; see the FFmpeg section. |
| Convert with Python | python3 -c "import pillow_heif; from PIL import Image; pillow_heif.register_heif_opener(); Image.open('photo.heic').convert('RGB').save('photo.jpg')" | Ran as a script making the same calls (pillow-heif 1.8.0): wrote the JPEG. |
| Convert a whole folder | for f in *.heic; do heif-convert "$f" "${f%.heic}.jpg"; done | Not run: a standard shell loop around the command above. |
| Read tags | exiftool -DateTimeOriginal -Make -Model -GPSPosition photo.heic | Ran (ExifTool 13.59) on a sample HEIC: printed the date, make, model and GPS position. |
| Write a tag | exiftool -overwrite_original -Artist="Name" photo.heic | Ran on a copy: '1 image files updated', and reading it back showed the new Artist. |
Convert a copy, never your only original: JPEG is lossy, and a second compression costs detail. Our HEIC vs JPG page has the numbers.
Does ImageMagick support HEIC?
Yes, with a libheif delegate. The ImageMagick format list says HEIC is read and write and 'requires the libheif delegate library', with defines such as heic:speed, heic:chroma and heic:preserve-orientation. Two things in our run are worth knowing.
- Version 6 in Ubuntu 24.04 reads, but does not write:
convert -list formatshowedHEIC r-- Apple High efficiency Image Format (1.17.6). Writing gaveno encode delegate for this image format 'HEIC'as a warning with exit code 0, and the file it left behind named photo.heic was a JPEG (filereported JPEG image data). Check the file type if you rely on the exit code. - The security policy can block it: ImageMagick's recommended strict policy denies all image modules and permits only GIF, JPEG, PNG and WEBP. We copied the policy-websafe.xml shipped with Ubuntu's ImageMagick 6 into a scratch folder and, with a working libde265 plugin, got
attempt to perform an operation not allowed by the security policy 'HEIC'andno decode delegate for this image format 'HEIC'. If HEIC works on the command line but not on a web server, look at policy.xml. ImageMagick's page adds that before 7.1.1-16 policy patterns are case-sensitive, so coder names must be upper case.
Does FFmpeg support HEIC?
Only since version 7.0, and fully only in newer builds. FFmpeg's changelog lists 'Support for HEIF/AVIF still images and tiled still images' under 7.0 and 'ffmpeg CLI tiled HEIF support' under 8.1. FFmpeg decodes HEVC with its own decoder (our 7.0.2 run mapped 'hevc (native)'), so it needs no libde265. The newest stable release on ffmpeg.org is 9.0.2 (18 September 2026), but Ubuntu 24.04 ships 6.1.1.
- FFmpeg 6.1.1 (Ubuntu package):
moov atom not foundthenError opening input: Invalid data found when processing input, exit code 183, on both files. - FFmpeg 7.0.2 (static build): the single image decoded as a 640 x 480 HEVC (Main Still Picture) stream. For the tiled file it listed a 'Tile Grid' stream group of 4032 x 3024 but wrote a 1024 x 1024 PNG, one tile.
- FFmpeg built from master on 11 October 2026: wrote the full 4032 x 3024 PNG.
- Writing HEIC: the master build's muxer list had
avifbut no HEIC or HEIF, andffmpeg -i test.heic out.heicstopped withUnable to choose an output format for 'out.heic'. We found no HEIC muxer in the documentation we read, so use pillow-heif or heif-enc to make HEIC.
So on a stock Ubuntu 24.04 an FFmpeg pipeline cannot read HEIC at all, and with 7.0 it can read most files but may silently return one tile of an iPhone photo. Check the output size against the input.
How do I use HEIC in Python (pillow-heif)?
Install it with pip. pillow-heif's documentation says wheels exist for most popular systems and are built with libheif and its encoders and decoders. We confirmed that on this machine: the wheel's pillow_heif.libs folder holds libheif 1.23.4, libde265 and x265, and pillow_heif.libheif_info() reports the libde265 decoder and the x265 encoder. That is why it opened both test files while ImageMagick, using the system libheif 1.17.6, could not. For Node, Go, Rust, Java and .NET, and for batch recipes, see HEIC for developers.
- Plain Pillow does not read HEIC:
Image.open('test.heic')raisedUnidentifiedImageError: cannot identify image file 'test.heic'untilpillow_heif.register_heif_opener()was called. - Reading and saving: after registering,
Image.openreturned a 640 x 480 RGB image andsave('photo.jpg')worked.im.save('x.heic', quality=70)wrote a HEIC, andtile_size=1024produced the tiled file we used above. - Building from source needs libheif 1.23.4 or newer, libde265 1.0.8 or newer and aom 3.3.0 or newer, according to its documentation, which also says distribution packages are too old for that.
Does exiftool read HEIC metadata?
Yes. ExifTool's supported-types table lists HEIC, HEIF and HIF as read and write. We ran version 13.59 on a sample HEIC with EXIF and GPS and it printed the capture date, make, model and GPS position, then wrote an Artist tag to a copy and read it back. Keep it current: its known-problems list records fixes in 13.09 (an HDR gain-map HEIC could lose its gain map in Apple Preview after XMP was added) and 13.49 (motion-photo HEIC after editing). Our metadata viewer shows the same tags in your browser, and Remove HEIC GPS strips location without any install.
Why do Fedora and Ubuntu handle HEIC differently?
Patents. GIMP's developer documentation puts it bluntly: 'HEVC has patent issues, unlike its AVIF counterpart', which is 'why many Free Software distributors do not wish to package HEIC support'. Fedora's documentation says its repositories leave out some codecs for patent or licensing reasons and sends users who want HEVC to RPM Fusion. Ubuntu ships the libde265 plugin in its main archive component in 24.04. We are not lawyers and this page does not say what is legal where you are; it says what each distribution packages.
When should I just use a browser tool instead?
When you lack root, when the machine is a work laptop, when you have a handful of photos, or when your distribution's libheif is the problem. Our converter decodes HEIC in your browser with WebAssembly, so it behaves the same on every distribution. Limits: 100 MB per file, 100 megapixels per image, and 50 files or 500 MB per batch. Nothing is uploaded. The JPG keeps the capture date and camera details by default, while GPS is left out unless you switch on Include location (GPS).
Try it here
Convert HEIC to JPG here
Drop your HEIC files in. They are decoded in your browser and never leave this device. For larger sets, use the batch converter.
To see why one file opens and another does not, run it through the HEIC file checker and read HEIC vs HEIF for the container-versus-codec split. Windows and Mac readers have their own guides: Open HEIC on Windows and HEIC to JPG on Mac.
Frequently asked questions
Try it yourself
Related reading
- HEIC for developers: Python, Node, ImageMagick, FFmpeg
- HEIC vs HEIF: what's the difference?
- What is HEIC? What's inside a HEIC file
- Open HEIC on Windows 10 and 11: what works
- Convert HEIC to JPG on Mac: every built-in way
- HEIC in Photoshop, Lightroom and GIMP: what works
- Why a HEIC file won't open
- Corrupt or damaged HEIC files
- HEIC thumbnails not showing in Windows
Sources
- libheif — HEIF and AVIF decoder and encoder — strukturag (GitHub), checked
- Ubuntu 24.04 (noble) package indexes: main, universe, multiverse, restricted — Ubuntu archive (Canonical), checked
- Installing plugins for playing movies and music (Fedora Quick Docs) — Fedora Project, checked
- libheif-freeworld (RPM Fusion package listing, Fedora 45 development) — RPM Fusion, checked
- Configuration: enabling the free and nonfree repositories (RPM Fusion) — RPM Fusion, checked
- Libheif vs libheif-freeworld (Ask Fedora) — Fedora Discussion, checked
- libheif 1.23.6-1 (Arch Linux package page) — Arch Linux, checked
- Linux Mint 22.3 'Zena' release notes — Linux Mint, checked
- Supported image formats (ImageMagick) — ImageMagick Studio, checked
- Security policy (ImageMagick) — ImageMagick Studio, checked
- Changelog (FFmpeg master branch) — FFmpeg, checked
- Download FFmpeg — FFmpeg, checked
- Installation (pillow-heif documentation) — pillow-heif, checked
- Supported file types (ExifTool) — Phil Harvey, checked
- glycin README — GNOME (GitLab), checked
- Image Viewer (Loupe) README — GNOME (GitLab), checked
- KImageFormats README — KDE (invent.kde.org), checked
- Shotwell NEWS — GNOME (GitLab), checked
- Image File Formats (GIMP Developer) — GIMP, checked
- Image Files (digiKam manual) — digiKam, checked
How we research and correct: editorial policy.
Written by the heic.fyi team · Last updated: · Spotted an error? Tell us.