How to Batch Convert JPG to AVIF with BatchPhoto

Batch-converting JPG files to AVIF for the web sounds simple but most conversion apps can’t do it. BatchPhoto can — and it handles the whole process in four steps. Here’s a walkthrough of the workflow, the compression setting worth experimenting with, and a folder-structure gotcha that’s easy to miss.

How to Batch Convert JPG to AVIF with BatchPhoto
Text & Photos By David Coleman
Last Revised & Updated:

I MAY get commissions for purchases made through links in this post.

Have Camera Will Travel // Newsletter

Practical field notes, hands-on gear tests.

I routinely work with large numbers of image files, and most editing tools aren’t built for that. They handle a handful of images well, but they don’t offer efficient workflows when you’re dealing with dozens or hundreds at once.

BatchPhoto is built specifically for the opposite problem. As the name makes clear, it’s designed to apply the same edits, transformations, or conversions to many images at once — format conversions, resizing, watermarking, color adjustments, cropping, adding frames, and more. You can also stack these: do a resize, add a watermark, and convert to a different format all in a single pass.

I originally wrote about BatchPhoto several years ago. The developer sent me a copy to try out. Since then, he’s updated it substantially and sent me the latest version, so this is a full revisit with the current version. The workflow and core approach remain the same, but there’s been meaningful polish throughout.

For this walkthrough, I’m focusing on a specific task: batch-converting JPG images to AVIF. It’s something I needed to do for images on this site, and it turned out to be surprisingly hard to find a straightforward GUI tool that handles it well. AVIF has real advantages over JPG for web use, and it’s now widely supported across browsers. But most of the batch conversion apps I already use don’t support AVIF as an output format — XNConvert, for instance, lists AVIF on its formats page but only as a read format, not write. There are powerful command-line options, but not everyone wants to go that route. BatchPhoto fills the gap cleanly.

The same workflow described here applies to any other format conversion BatchPhoto supports — JPG to WebP, HEIC to JPG, 48-bit TIFF to 24-bit TIFF, and so on.

BatchPhoto’s conversion workflow

BatchPhoto works on a simple left-to-right sequence: load your photos, apply any transformations, set up the output. These are the four steps across the top of the app’s interface.

BatchPhoto workflow steps

Step 1: Choose the files

Add the images you want to process — either drag them into the panel or use the Add Photos button. For this example, I’m working on a batch of 17 JPGs exported from Lightroom.

BatchPhoto add photos step

The toolbar at the top right of the panel has buttons for adding, removing, and previewing your selections.

Step 2: Add filters & transformations

This is where most of the image work happens — resizing, cropping, watermarking, color adjustments, filters, and so on. Click Add Filter to see the full list of what’s available.

BatchPhoto Edit Photos section
BatchPhoto filters and transformations list

One of BatchPhoto’s most useful features is that you can stack filters — apply a resize, a watermark, and a color adjustment all in the same pass rather than running separate batches. For a straight format conversion, though, this panel stays empty. The output format is controlled in the next step.

Step 3: Set up the output

The output section is where you set the destination folder and, crucially, the output format. The Format > Output Format selector defaults to keeping the original format — change that to AVIF.

BatchPhoto output format selector

Clicking the selector opens a long list of supported formats. It’s not strictly alphabetical — common formats are prioritized at the top.

BatchPhoto format list

Once selected, the output panel updates to show AVIF as the target format.

BatchPhoto AVIF output format selected

Click the settings button to access the AVIF encoding options. BatchPhoto exposes one control here: compression amount, expressed as a quality percentage on the app’s own scale. The default is 88%.

BatchPhoto AVIF compression settings

There’s no universally correct setting here — it depends on your images and your tolerance for the filesize vs. quality tradeoff. In my testing I’ve found that I can go noticeably lower than 88% without visible quality loss on most web-sized images, but it’s worth running a small test batch first before committing to a setting on hundreds of files. More on this below.

Step 4: Process

Once your output settings and destination folder are confirmed, click Process at the top right. BatchPhoto shows a progress bar and a completion confirmation when it’s done.

BatchPhoto processing progress

Things worth knowing

AVIF doesn’t always mean smaller

AVIF typically produces significantly smaller files than JPG at comparable quality — which is the main reason it’s attractive for web use. But that’s not universal. Images heavy on fine detail, texture, or noise can occasionally encode to a larger AVIF file than the JPG equivalent. A well-optimized JPG can also land surprisingly close to an AVIF in file size.

Services like Shortpixel and Cloudflare have safety nets built in: they only serve WebP or AVIF if the converted version is actually smaller than the original. BatchPhoto has no such check — it converts regardless of the result. That means it’s worth scanning the output folder for any files that are unexpectedly large before deploying them.

It’s also worth experimenting with the compression setting before running a large batch. I’ve consistently found that lower quality settings than the 88% default still produce visually acceptable results on web-sized images, with meaningfully smaller file sizes. A quick test on a representative sample will tell you where the right tradeoff is for your particular images.

Preserving folder structure

If your images are organized into subfolders, BatchPhoto can process them recursively — but pay attention to one setting in the Setup section. The default output option, Use selected folder as output destination, flattens everything into a single folder. To preserve the original directory hierarchy in the output, switch it to Recreate original folder structure in selected folder. Easy to miss, and annoying to discover after the fact on a large batch.

Antarctica-Photo by David Coleman

Have Camera Will Travel // Newsletter

Practical field notes, hands-on gear tests, and the fun of exploring the world with a camera in hand.

RAW file support

If you need to process RAW files, you’ll need at least the Pro license tier. The base version doesn’t include RAW support.

The bigger picture

BatchPhoto is a genuinely capable tool that I’ve found most useful for exactly the kind of repetitive bulk work that other apps handle poorly. The JPG-to-AVIF conversion covered here is actually one of its simpler use cases. Stacking multiple transformations in a single pass — resize, watermark, reformat, rename — is where it really earns its place in a workflow.

There are also some workflow features worth knowing about beyond the basics: rather than saving output to disk, you can have BatchPhoto email results or upload via sFTP directly. At the Enterprise license level, watched folders enable automatic processing when new files arrive. For a local app, that’s a meaningful set of automation options.

It’s a paid app, so it’s not the right tool for someone who needs bulk conversion once a year. But if you routinely work with large numbers of image files — as a photographer, photo editor, or anyone managing image-heavy content — it solves real problems that most other apps either can’t handle or handle awkwardly.

Where to get it

BatchPhoto is available for both Windows and Mac. There’s a free trial, and three license tiers with increasing feature sets — a full comparison chart is here. If you’re working with RAW files, you’ll need at least the Pro version.

Found this helpful? Personalize your search results.
Add as Preferred Source