# Changelog of HEIC to JPG Converter - HEIF & AVIF to JPEG (`marcel-rbro/heic-to-jpg`) Actor

- **URL**: https://apify.com/marcel-rbro/heic-to-jpg/changelog.md
- **Full Actor documentation**: https://apify.com/marcel-rbro/heic-to-jpg.md

## Changelog

### 0.2 - 2026-08-26

Batch conversion, and a fix for transparent images coming out black.

- **Fixed: a transparent HEIC or AVIF converted to JPEG came back black.** Debian bookworm's libheif
  1.15.1 drops the alpha channel across the whole HEIF family in both directions, with exit code 0
  and every format and delegate check passing, so the flattening this Actor does onto white had
  nothing to work with. The base image moves to `node:22-trixie-slim` (ImageMagick 7.1.1, libheif
  1.19.8) with libheif's codec plugins, which trixie splits out of the base package. The build now
  asserts the pixels rather than the format table: that a transparent image flattens to white, and
  that alpha survives a round trip through PNG, WebP, AVIF and TIFF. Affected `avif to jpg`,
  `avif to png` and any transparent HEIC in 0.1.

- Converts up to 100 files in one run. The new `files` input is a multi-file upload in Console and an
  array of URLs from the API; `filesBase64` is its base64 equivalent. The single-file `file` and
  `fileBase64` inputs still work and can be mixed with the new ones.

- A file that cannot be converted no longer fails the run. It gets a dataset record with `ok: false`
  and the reason, and the rest of the batch converts. The run only fails if nothing converted.

- `OUTPUT`, which is what `run-sync` returns, is now the converted image when the run produced one
  and `converted-images.zip` when it produced several. The archive is written by a small in-repo ZIP
  writer shared with the sibling converters, so there is still exactly one runtime dependency. Past
  192 MB of images it is skipped and `OUTPUT` lists the individual records instead.

- Output keys no longer overwrite each other. A second `IMG_1234.heic` is stored as `IMG_1234-2.jpg`.

- `allImages` combines with a batch: inside the ZIP, a source file that produced several images gets
  a folder of its own, so two bursts in one run cannot bury each other's frames.

- The dataset holds one record per source file rather than one per run, with `ok` and `error` fields.

- `outputFilename` is ignored when converting more than one file, since it would name them all the same.

- A run has a budget: 100 files, 512 MB of input in total, 100 MB for one file, 100 MP for one image
  and 4 GP of decoded pixels across the run. Exceeding one says which limit was hit and at what
  number, instead of timing out halfway, and fails only the file that hit it.

- Downloads have a two-minute timeout, so one unresponsive URL cannot stall a batch.

### 0.1 - 2026-08-26

Initial version.

- Converts HEIC, HEIF, HIF and AVIF images to JPEG, PNG, WebP, AVIF or TIFF with ImageMagick.
- Accepts the source file as a URL (including the Apify Console file upload field) or as base64.
- Applies EXIF orientation, optional downscaling, and optional stripping of EXIF, XMP and IPTC while
  keeping the ICC colour profile.
- Reads the ISOBMFF `ftyp` box to tell a HEIC apart from an MP4 or MOV in the same container, and
  fails with an explanation instead of an ImageMagick delegate error.
- Extracts every image from multi-image containers such as bursts when `allImages` is set.
- Writes the result to the key-value store under both `OUTPUT` and its filename, and pushes one
  dataset record per conversion.
