---
title: How does PhotoStructure populate the Albums tag?
url: https://photostructure.com/guide/albums/
description: How PhotoStructure extracts albums from EXIF, XMP, and Google Takeout metadata
date: 2026-04-14
keywords: tags, metadata, sidecars, system-of-record
---


PhotoStructure's **Albums** tag root is populated automatically from metadata
already in your files. You don't tag albums in PhotoStructure today — you
tag them in the tool that wrote the metadata (Lightroom, digiKam,
Apple Photos, Google Photos, etc.), and PhotoStructure imports them on
sync.

{{< note >}}
**Manual album creation is on the roadmap.** Follow [forum topic
#103](https://forum.photostructure.com/t/support-for-manually-created-albums/103)
for progress.
{{< /note >}}

## 📚 Album titles from metadata

PhotoStructure reads album titles from these fields, in order:

- `Album` — the XMP `Album` tag
- `Collections.CollectionName` — [MWG 2.0
  Collections](https://exiftool.org/TagNames/MWG.html#Collections), written
  by digiKam and some other tag editors
- `albumData.title` — Google Takeout `metadata.json` (one per album
  directory; applies to every photo in that folder)

Nested / hierarchical albums are supported: write `Vacations|Paris 2019`
as the `Album` value (or use the nested form in MWG 2.0 Collections) and
PhotoStructure will place the photo under `Albums/Vacations/Paris 2019`.

The list of fields PhotoStructure reads is configurable via the
`tagAlbumTitle` library setting.

### Google Takeout: directory-level album metadata

Google Takeout's `metadata.json` sits at the album directory root, not
alongside each photo. PhotoStructure reads it once and applies the
album (title, description, date) to every sibling media file in that
folder. Per-photo `.jpg.json` sidecars carry their own `title` and
`description` but don't create albums.

The filenames PhotoStructure treats as directory-level album metadata
are configurable via the `tagAlbumFilenames` setting (default:
`["metadata.json"]`).

A minimal `metadata.json` that PhotoStructure will pick up:

```json
{
  "albumData": {
    "title": "Trip to Hawaiian Islands",
    "description": "Two weeks on Kauai",
    "date": {
      "timestamp": "1401505479",
      "formatted": "May 31, 2014, 3:04:39 AM UTC"
    }
  }
}
```

Every photo in that directory will be tagged under:

`Albums` / `Trip to Hawaiian Islands`

…with the description and date populating the album page.

Pipe-delimited titles produce nested albums. A `metadata.json` with:

```json
{
  "albumData": {
    "title": "Vacations|Hawaii 2014",
    "description": "Two weeks on Kauai",
    "date": {
      "timestamp": "1401505479",
      "formatted": "May 31, 2014, 3:04:39 AM UTC"
    }
  }
}
```

…tags every photo in the directory under:

`Albums` / `Vacations` / `Hawaii 2014`

Google Takeout's real files include additional fields (`access`,
`geoData`, `enrichments`, etc.) — PhotoStructure simply ignores what it
doesn't use.

## 📝 Album descriptions and dates

When present, PhotoStructure also reads:

- **Description**: from `Notes` (XMP) or `albumData.description` (Google
  Takeout), controlled by the `tagAlbumDescription` setting
- **Release date**: from `albumData.date` (Google Takeout), controlled by
  the `tagAlbumDate` setting

These populate the description and date shown on the album page.

## ⚠️ `CatalogSets` is a keyword, not an album

Lightroom writes Collection membership to the `CatalogSets` XMP tag.
**PhotoStructure imports `CatalogSets` as keywords**, not as albums — you'll
find them under the [Keywords](/guide/keywords/) tag root, not Albums.

If you want your Lightroom Collections to appear as albums in
PhotoStructure, you need to also write them to the `Album` tag (or to
`Collections.CollectionName`). Most Lightroom users find keyword-based
browsing works well enough that they leave things as-is.

## 💡 Tips

- **Editing sidecars works.** Tag values in `.xmp` / `.mie` / `.json`
  sidecars are read on every sync. Changing an album name in a sidecar
  and resyncing will rename the album in PhotoStructure.
- **Remove an album** by clearing the `Album` / `Collections.CollectionName` /
  `albumData.title` value from every member file (and its sidecars) and
  resyncing.
- **Empty tag cleanup** does not delete album tags, so albums stay in
  place even when their member files move between tags (see the
  `keepEmptyTags` setting, which defaults to `["Albums"]`).

## See also

- [Keywords](/guide/keywords/) — how PhotoStructure extracts keywords (including `CatalogSets`)
- [How PhotoStructure determines capture date](/guide/captured-at/)
- [Google Takeout imports](/guide/takeout/)

