Skip to main content

๐Ÿ“‡ Exif Data

Compatibilityโ€‹

Exif FieldRepresentationReadWriteExplanation
RatingFavoritesโœ”๏ธโœ”๏ธSettable via "Minimum image rating to interpret as favorite". Written back when you change a rating or favorite a photo, but only if "Write edits to files" is enabled. Favoriting a selection writes the ratings in the background, so the files can lag the library by a moment. A scan only reads the rating and never writes it back. Not released yet: up to 1.3.0, a scan wrote a rating it found in the file back to disk, which in sidecar mode created an .xmp holding just that rating; such sidecars are harmless unless the rating is later changed in the original by another app.
ImageHeightHeightโœ”๏ธโŒUsed for aspect ratio calculation
ImageWidthWidthโœ”๏ธโŒUsed for aspect ratio calculation
Composite:RotationWidth and heightโœ”๏ธโŒA video recorded upright on a phone is stored landscape with a rotation of 90 or 270 degrees; its width and height are then swapped, so Info shows the size it plays at. Not released yet; the update fixes the size of videos scanned before.
EXIF:DateTimeOriginalTimestampโœ”๏ธโŒParsing rules settable in settings. Dates you edit are written back to XMP:DateCreated, never to an EXIF date tag.
XMP:DateCreatedTimestampโœ”๏ธโœ”๏ธThe only tag LibrePhotos writes dates to. It is used instead of an EXIF date tag because EXIF tags cannot be written into an XMP sidecar, and because writing it leaves the camera's original EXIF:DateTimeOriginal untouched. Highest-priority date parsing rule.
EXIF:ModifyDateTimestampโœ”๏ธโŒRead-only. Parsing rules settable in settings; dates you edit are written back to XMP:DateCreated.
QuickTime:CreateDateTimestampโœ”๏ธโŒParsing rules settable in settings. Dates you edit are written back to XMP:DateCreated, never to an EXIF date tag.
QuickTime:CreationDateTimestampโœ”๏ธโŒThe local time a phone (iPhone, many Android phones) recorded a video at, with its UTC offset. Used as is by the date rule "Local time from the video's QuickTime:CreationDate tag (phones)", ranked above the UTC QuickTime:CreateDate. Not released yet.
Matroska:DateTimeOriginalTimestampโœ”๏ธโŒThe creation date of MKV and WebM files, in UTC. Converted to local time with the time zone of the video's position, or else your default time zone. Not released yet; before, only a date in the file name could date these files.
QuickTime:DurationVideo lengthโœ”๏ธโŒUsed for video length on video tiles
Matroska:DurationVideo lengthโœ”๏ธโŒVideo length of MKV and WebM files, which carry no QuickTime:Duration. Since 1.3.0; videos scanned by an older version get it with a Rescan from the Library page.
Composite:GPSLatitudeGPS_latโœ”๏ธโœ”๏ธUsed for photo label on map. A location you set or remove is written back when "Write edits to files" is enabled; see What LibrePhotos writes for the tags. Not released yet.
Composite:GPSLongitudeGPS_lonโœ”๏ธโœ”๏ธUsed for photo label on map. Written back together with the latitude.
Composite:GPSDateTimeTimestampโœ”๏ธโŒUsed by the GPS-based timestamp parsing rules.
EXIF:ModelCamera Modelโœ”๏ธโŒCamera model in Info
QuickTime:Make, QuickTime:ModelCameraโœ”๏ธโŒCamera maker and model of a video, which carries no EXIF:Make or EXIF:Model. Not released yet; videos scanned before get them with a Rescan from the Library page.
EXIF:LensModelLensโœ”๏ธโŒLens in Info
EXIF:Make, EXIF:LensMakeCamera and lens makerโœ”๏ธโŒShown in front of the camera model and lens in Info ("Fujifilm X-T5"), unless the model already starts with it ("NIKON D850", not "NIKON CORPORATION NIKON D850"). Corporate words at the end of a maker's name are left out there ("OLYMPUS IMAGING CORP." shows as "OLYMPUS"). Not released yet; photos scanned by an older version get it with a Rescan from the Library page.
EXIF:SerialNumberCamera serial numberโœ”๏ธโŒStored in the photo's metadata (/api/photos/{id}/metadata/), not shown in Info and not sent with every photo. Not released yet; photos scanned by an older version get it with a Rescan from the Library page.
EXIF:ExposureCompensation, EXIF:Flash, EXIF:MeteringMode, EXIF:WhiteBalanceExposure compensation, flash fired, metering mode, white balanceโœ”๏ธโŒStored in the photo's metadata; metering mode and white balance under the names ExifTool prints (Multi-segment, Auto, ...). Not released yet; photos scanned by an older version get it with a Rescan from the Library page.
EXIF:ColorSpace, File:BitsPerSampleColour space, bit depthโœ”๏ธโŒStored in the photo's metadata. Bit depth is read from JPEG files only. Not released yet; photos scanned by an older version get it with a Rescan from the Library page.
Composite:GPSAltitudeAltitudeโœ”๏ธโŒAltitude in metres, negative below sea level, stored in the photo's metadata. Not released yet; photos scanned by an older version get it with a Rescan from the Library page.
EXIF:SubjectDistance, EXIF:DigitalZoomRatioSubject distance, digital zoomโœ”๏ธโŒShown under "Show more" in Info. 0, which EXIF uses for "unknown" and "not used", is left empty. Not released yet; photos scanned by an older version get it with a Rescan from the Library page.
File:FileSizeFile Sizeโœ”๏ธโŒFile Size in Info
EXIF:FNumberF Stopโœ”๏ธโŒF Stop in Info
EXIF:ExposureTimeShutter Speedโœ”๏ธโŒShown as Shutter Speed in Info the way ExifTool prints it: 1/4000 up to a quarter second, then seconds (0.3 s, 2.5 s, 30 s). Not released yet: up to 1.3.0, anything faster than about 1/2000 s was stored as 0, 1/1250 to 1/2000 s as 1/1000, and long exposures as fractions such as 5/2. python manage.py refresh_exposure_time reads just the exposure time of those photos again; a Rescan from the Library page also fixes them.
EXIF:ISOSpeedRatingsISOโœ”๏ธโŒISO in Info
EXIF:FocalLengthFocal Lengthโœ”๏ธโŒFocal Length in Info
EXIF:FocalLengthIn35mmFilmFocal Length in 35mm โœ”๏ธโŒFocal Length in 35mm Film in Info
XMP:RegionInfoFacesโœ”๏ธโœ”๏ธFaces and people are read from XMP:RegionInfo. Writing is opt-in via the "Write face tags to image files" setting (off by default); when enabled and "Write edits to files" is set to a sidecar or the media file, labelling a face writes MWG regions as XMP-mwg-rs:RegionInfo (with AppliedToDimensions and normalized areas) to the image file or XMP sidecar. Only manually labelled people are given a name; auto-detected faces are written as unnamed regions. The areas are in the coordinates of the stored image, as the standard asks, so on a rotated photo (most phone portraits, and photos you turned in LibrePhotos) other apps show them on the faces. Not released yet: earlier versions wrote the regions of rotated photos in the wrong place, and read the regions of photos turned in LibrePhotos onto the wrong spot; python manage.py save_metadata --types face_tags rewrites them.
XMP:SubjectKeywords / Peopleโœ”๏ธโœ”๏ธRead and merged with IPTC:Keywords, XMP-iptcExt:PersonInImage and XMP-lr:HierarchicalSubject into the photo's keywords. Written alongside face regions: the names of manually labelled people are added as keywords for Lightroom compatibility. The photo's other keywords stay, and relabelling a face removes the previous name. A new XMP sidecar starts from the photo's own keywords (XMP:Subject and IPTC:Keywords), so they are not hidden behind it. Not released yet: earlier versions replaced the keywords with the names. Your tags are written here too when "Write edits to files" is enabled; see What LibrePhotos writes. Not released yet.
IPTC:KeywordsKeywordsโœ”๏ธโœ”๏ธMerged with XMP:Subject into the photo's keywords. With "Save to media file", your tag edits reach it too, but only in a file that already has IPTC data. Not released yet.
XMP-iptcExt:PersonInImageKeywordsโœ”๏ธโŒNames of the people shown (without face regions), added to the photo's keywords and so its tags. Not linked to people in LibrePhotos, which come from faces. Not released yet; photos scanned by an older version get it with a Rescan from the Library page. Never written: removing such a tag leaves the name here.
XMP-lr:HierarchicalSubjectKeywordsโœ”๏ธโŒHierarchical keywords as written by Lightroom, digiKam and darktable. The last level of each path becomes a keyword: Places|USA|San Francisco adds San Francisco. Not released yet; photos scanned by an older version get it with a Rescan from the Library page. Never written: removing such a tag leaves the path here.
XMP:DescriptionCaptionโœ”๏ธโœ”๏ธThe photo's description becomes its caption: the default-language entry first, else any language entry. A caption you typed is never replaced, and one you cleared stays cleared. A caption you type is written back as the description when "Write edits to files" is enabled. Not released yet.
IPTC:Caption-AbstractCaptionโœ”๏ธโŒCaption fallback when the file has no XMP description (older Photoshop and Lightroom, Picasa, newsroom tools). Not released yet; photos scanned by an older version get it with a Rescan from the Library page. With "Save to media file", a caption you type replaces it, but only in a file that already has an IPTC block.
EXIF:ImageDescriptionCaptionโœ”๏ธโŒLast caption fallback. Placeholders cameras write there, such as OLYMPUS DIGITAL CAMERA or SONY DSC, and a description that only repeats the camera model are skipped. Not released yet; photos scanned by an older version get it with a Rescan from the Library page. With "Save to media file", a caption you type replaces it.
XMP:Title, XMP:Headline, IPTC:ObjectNameTitleโœ”๏ธโŒThe title, from the first of these tags that has one. A title you edit is kept on later scans until you restore the photo from its file. Not released yet; photos scanned by an older version get it with a Rescan from the Library page.
XMP:Creator, IPTC:By-line, EXIF:ArtistCreatorโœ”๏ธโŒThe creator, from the first of these tags that has one (the first name when there are several). An edit of yours is kept on later scans. Not released yet; photos scanned by an older version get it with a Rescan from the Library page.
XMP:Rights, IPTC:CopyrightNotice, EXIF:CopyrightCopyrightโœ”๏ธโŒThe copyright notice, from the first of these tags that has one. An edit of yours is kept on later scans. Not released yet; photos scanned by an older version get it with a Rescan from the Library page.
EXIF:OrientationOrientationโœ”๏ธโœ”๏ธRead to transform face-region coordinates, and to store the size a photo is shown at: an orientation of 5-8 turns the photo a quarter, so its width and height are swapped, as they are when you rotate it a quarter yourself. Not released yet; the update fixes the size of photos scanned before. Written back (composed with your rotation) when you rotate a photo, but only if "Write edits to files" is enabled: into the original for JPEG, PNG, TIFF and WebP, as XMP-tiff:Orientation into the sidecar for every format (for HEIC and AVIF composed with the file's irot/imir, which is what the photo is shown under). HEIC, AVIF and RAW originals are not rewritten. LibrePhotos does not read the sidecar's orientation back. Not released yet: earlier versions wrote no orientation into sidecars and a wrong one into HEIC, AVIF and RAW originals.
EXIF:SubSecTimeOriginalSub-second timeโœ”๏ธโŒRead on every metadata extract; used for burst/sequence detection.
EXIF:ImageNumberImage sequenceโœ”๏ธโŒRead on every metadata extract; used for burst/sequence detection.

XMP sidecarsโ€‹

A sidecar (photo.xmp or photo.jpg.xmp next to photo.jpg) is read together with the photo, and a value found in the sidecar wins over the one embedded in the file. Apps that leave the original untouched (geotaggers, digiKam, darktable, Lightroom) store EXIF properties in the sidecar under their XMP names, and LibrePhotos reads these there too:

FieldRead from the sidecar as
EXIF:DateTimeOriginalexif:DateTimeOriginal
Composite:GPSLatitude, Composite:GPSLongitudeexif:GPSLatitude, exif:GPSLongitude
Composite:GPSDateTimeexif:GPSTimeStamp
EXIF:Modeltiff:Model
EXIF:LensModelexifEX:LensModel
EXIF:FNumber, EXIF:ExposureTime, EXIF:ISO, EXIF:FocalLength, EXIF:FocalLengthIn35mmFormatexif:FNumber, exif:ExposureTime, exif:ISOSpeedRatings, exif:FocalLength, exif:FocalLengthIn35mmFilm
EXIF:Make, EXIF:LensMaketiff:Make, exifEX:LensMake (not released yet)
EXIF:ExposureCompensation, EXIF:MeteringMode, EXIF:WhiteBalance, EXIF:SubjectDistance, EXIF:DigitalZoomRatioexif:ExposureBiasValue, exif:MeteringMode, exif:WhiteBalance, exif:SubjectDistance, exif:DigitalZoomRatio (not released yet)

Not released yet: before this, only the XMP-native fields (rating, keywords, description, XMP:DateCreated, face regions) were taken from a sidecar. Photos already in your library pick up a sidecar's date and camera with a Rescan from the Library page; a position in the sidecar of a photo that is already in the library does not reach the map yet (#2264). A sidecar's modify date and orientation are never read: they describe the last edit, not the photo.

Rulesโ€‹

Some tags are only read when a matching rule is active. The burst/stacking detection rules read MakerNotes:BurstMode, MakerNotes:ContinuousDrive and MakerNotes:SequenceNumber only when the corresponding stack-detection rule is enabled in your settings.

To back-fill an existing library with face tags, run python manage.py save_metadata --types face_tags. Each photo is written where its owner's "Write edits to files" setting says (XMP sidecar or media file), and photos of users who have it Off are skipped. --sidecar or --media-file overrides the setting for the one user named with --user.

What LibrePhotos writesโ€‹

With Settings โ†’ Metadata Options โ†’ Write edits to files set to Save to sidecar or Save to media file, these edits are also written to the photo's .xmp sidecar or into the photo file itself. With Off, the default, nothing is written. Not released yet: up to 1.3.0, the setting was called "Synchronize metadata to disk".

EditWrittenTag
Rating and favoriteyesRating
Date and timeyesXMP:DateCreated
Rotationyes, except into HEIC, AVIF and RAW originalsXMP-tiff:Orientation in the sidecar, EXIF:Orientation in the file
Captionyes (not released yet)XMP-dc:Description in the sidecar; in the file XMP-dc:Description and EXIF:ImageDescription, and IPTC:Caption-Abstract if the file already has IPTC data
Locationyes (not released yet)XMP-exif:GPSLatitude/GPSLongitude in the sidecar; in an image file GPS:GPSLatitude/GPSLongitude with their N/S and E/W references; in an MP4 or MOV Keys:GPSCoordinates
Face names and areasonly with "Write face tags to image files"XMP-mwg-rs:RegionInfo, names added to XMP:Subject
Tagsyes (not released yet)XMP-dc:Subject in the sidecar; in the file XMP-dc:Subject, and IPTC:Keywords if the file already has IPTC data

A caption keeps its line breaks. Clearing the caption removes the description, and removing a location removes the position tags. Setting a location in a photo file also removes the file's old altitude, which belonged to the old position. The place name (city, country) is never written: it is looked up from the position again. A generated caption is never written, only one you type.

Tags are written as keywords, one change at a time: adding a tag adds that keyword (once, never twice), removing it removes that keyword, and the file's other keywords stay. Renaming, merging or deleting a tag on the Albums page changes the keyword in the files of every photo that carries the tag, in one background job. The names of people that the face write-back adds stay, even when you remove a tag of the same name, and XMP-iptcExt:PersonInImage and XMP-lr:HierarchicalSubject are never changed. A tag that came from one of those is not written as a keyword unless you add it yourself. A new sidecar starts from the photo's own keywords, so it does not hide them.

With tags written to files, a rescan only turns keywords into tags that the file did not have before, such as one another app added. A tag you removed stays removed, even where the file still carries the keyword (a people name or keyword path, or an IPTC:Keywords entry the sidecar cannot remove). With Off, a rescan adds every keyword of the file back as a tag, as before.

In the sidecar mode a removal only reaches the sidecar: a description, position or keyword stored in the photo file itself stays there, and an app that reads the file (or a new import into LibrePhotos) sees it again. Removing the last keyword leaves the sidecar without a keyword list, so the photo file's keywords show again. Inside LibrePhotos the removal stays.

The date editor, the caption and tags editors and the Pick location dialog say the same in a line under the editor, with a link to the setting.

XMP sidecarsโ€‹

LibrePhotos reads both sidecar naming conventions next to a photo IMG_2.jpg, in lower or upper case: IMG_2.xmp (Lightroom, older LibrePhotos versions) and IMG_2.jpg.xmp (digiKam, darktable, Immich). A value in a sidecar overrides the same tag in the photo, and when both sidecars exist, IMG_2.xmp wins.

With "Write edits to files" set to the sidecar, an edit is written to the sidecar that already exists, so a digiKam or darktable sidecar is updated in place and keeps its other tags. When both exist, the edit goes to IMG_2.xmp, the one that is read. When there is none, LibrePhotos creates IMG_2.jpg.xmp, which other apps also read and which cannot be mistaken for the sidecar of a RAW file next to the JPEG (IMG_2.CR2).

Not released yet: up to 1.3.0, LibrePhotos always wrote to IMG_2.xmp, creating it next to an existing IMG_2.jpg.xmp. A photo that already has both keeps both; LibrePhotos reads and writes IMG_2.xmp, and the other app keeps its own file.

Writes that failโ€‹

A write ExifTool cannot make, for example into a read-only library, a damaged file or a format that cannot hold the tag, never undoes your edit: the rating, date, caption, location, face label or rotation stays in LibrePhotos. The backend log names the photo and ExifTool's reason. Labelling a face, drawing one and rotating a photo also return the reason as write_error in the API response, and POST /api/savemetadata and manage.py save_metadata count the photos they could not write as errors.

In the web app, a face label, a drawn face or a rotation that did not reach the file shows an orange Not written to the file notice next to the usual confirmation: "Saved in LibrePhotos, but not written to the file", followed by the reason. It stays until you close it. Changing a date, a rating, a caption or a location writes the file after the edit is saved, so a failure there is only in the backend log.

Not released yet: up to 1.3.0, a failed write looked like a success and was not logged, and the web app showed no notice.