Skip to content
HarpePluie edited this page Oct 8, 2026 · 3 revisions

FAQ

Do I need to rotate the image using the EXIF orientation?

No. In HEIF, rotation and mirroring are stored as irot/imir properties, and heifer already applies them. The EXIF orientation tag is informative only. Applying it again would rotate the image twice. With the image crate integration, orientation() reports no remaining transform for the same reason.

My iPhone photo looks a bit dull compared with the Photos app

Recent iPhones store an HDR gain map next to the normal image. heifer decodes the normal (SDR) image, which is correct but less bright on HDR screens. Applying gain maps is on the Roadmap.

Colours differ slightly from another viewer

Viewers that apply the embedded ICC profile (often Display P3 on iPhones) can show more saturated colours. heifer exposes the profile (read_metadata(...).icc_profile) but does not convert colours yet. The decoded pixel values themselves match ffmpeg; see Validation.

Is it safe to decode files uploaded by users?

heifer contains no unsafe code, and it is fuzzed every night. Malformed files return an Err; they do not panic or read out of bounds. To bound memory, set Options::max_pixels (see Getting Started).

Does it work in the browser?

Yes. heifer compiles to wasm32-unknown-unknown with no special setup. The online demo is built that way (≈ 200 KB after wasm-opt). In the browser, decoding runs on a single thread.

How fast is it?

On a multi-core machine it decodes phone photos faster than ffmpeg, because grid tiles are decoded in parallel (a 12 MP iPhone photo takes about 35 ms on a 10-core Mac). Single-threaded decoding is slower than ffmpeg; see Validation for numbers.

What about patents?

HEVC is covered by patents. heifer is an independent implementation for research and interoperability. Users are responsible for complying with patent licensing where they live.

Clone this wiki locally