The Mauritius oil spill is an ecological disaster impacting livelihoods.
Please donate to Eco-Sud's cleanup fund

Non-iPhone burst photos in Apple's Photos apps

Or, how to make a set of burst photos from a GoPro or other camera appear in a nice little stack in the Photos app on your Apple devices.


When you take burst mode photos on an iOS device, they appear in a nice little stack in the Photos app:

Burst photos in a stack in Apple Photos grid view

And you get this neat UI to select the best of your burst:

Apple Photos burst selection UI

But if you import burst photos from another camera (e.g. a GoPro, DSLR or mirrorless camera) you enter Burst Mode Hell πŸ”₯πŸ”₯πŸ”₯

Burst photos from another camera in Apple Photos

So annoying to browse! So much unnecessary scrolling! Memories that are basically just the same photo over and over again!

So how does the Photos app know that a burst of iPhone photos should be grouped together? And can we trick it into grouping bursts from other cameras?

The Exif MakerNote tag

There's no standard Exif tag specifically for burst photo metadata, however there is an interesting tag called Exif.Photo.MakerNote:

A tag for manufacturers of Exif writers to record any desired information. The contents are up to the manufacturer.

So what does an iPhone burst mode photo store in MakerNote? Using The Photo Investigator we find this:

1: 10
11: EB64C1E0-0922-4E67-8433-6BB057AC1CB9
14: 4
2: {length = 512, bytes = 0x15123a02...}
20: 1
25: 512
3:
epoch: 0
flags: 1
timescale: 1000000000
value: 36189806506333
31: 0
37: 0
38: 0
39: 0
4: 1
5: 190
6: 180
7: 1
8: ("-0.9835601", "0.02229829", "0.00934786")

Interesting! Other people have already figured out what some of these fields are used for:

  • 8 holds the values from the iPhone's three accelerometers, telling us how it was oriented when the photo was taken.
  • 3 appears to record "active time since last reboot", which is kind of a weird thing to record in photo metadata…
  • 17 (not in my burst example) contains a UUID which maps to a corresponding video file's com.apple.quicktime.content.identifier. Together they form a Live Photo.
  • 2 is a big binary-encoded string. Nobody knows what it is.

The interesting one for us is key 11 ⁠— this UUID is shared by all photos taken in a single iPhone burst and is what the Photos app uses to identify and group multiple photos into a single burst.

Writing a Burst UUID to non-iPhone photos

To fool Photos into recognising our non-iPhone burst, we need to add an iPhone-ish MakerNote field to those photos' Exif data, giving each one the same UUID in key 11.

exiftool is the only tool I've found that can do this. It's also one of those immensely powerful command line tools that is capable of doing everything in the universe and has quite a steep learning curve as a result (πŸ‘‹ hi ffmpeg and webpack!)

brew install exiftool

Step 1: Add MakerNote to your photos

exiftool will let us write a BurstUUID to field 11, but only if the Exif data already contains a MakerNote that looks like it came from an iPhone.

The easiest way to get one of those is to just copy it from an existing iPhone burst photo onto your target photos. Export an unmodified original burst photo from the Photos app, then:

exiftool -tagsfromfile ./iphone_burst.jpeg -makernotes ./target_photos

You can verify that the MakerNote was copied across, while the rest of your photo's original metadata remains intact.

exiftool -G ./target_photos/gopro_burst_1.JPG
# You should see something like this in the output
# alongside all your photo's original metadata
# [MakerNotes] Burst UUID : EB64C1E0-0922-4E67-8433-6BB057AC1CB9

Step 2: Update the Burst UUID

Now that your photos have an iPhone-ish MakerNote, you can replace the Burst UUID from our source photo with a fresh one for your burst set.

exiftool -BurstUUID="$(uuidgen)" ./target_photos -overwrite_original_in_place
# You probably have uuidgen installed already, but you can get a UUID from wherever you like
# -overwrite_original_in_place stops exiftool making copies and renaming your original files with an _original suffix

To verify it worked, you can read back the BurstUUID from your photos:

exiftool -BurstUUID ./target_photos

Step 3: Import into Photos

That's it! Your non-iPhone burst photos are now recognised as a burst!

GoPro burst photos in a stack in Apple Photos grid view

A note about HEIF

Since iOS 11, iPhones >7 have captured images in HEIF rather than JPEG by default (and call it HEIC instead of HEIF because πŸŽπŸ€·β€β™‚οΈ).

The HEIF format can store multiple images (like bursts) in a single file, but it doesn't look like Apple devices are doing that.