# ── Gallery Structure ────────────────────────────────────────────── # This file defines WHICH albums and subpages are shown. # Global settings (theme, map, legal, title) now live in content/settings.yaml. # Hero images for the homepage carousel (Immich asset UUIDs) hero: - "your-asset-uuid-1" - "your-asset-uuid-2" # Standalone albums (shown on the home page) # # Photo order inside an album: by default a Folio album mirrors the Immich # timeline. The optional `sort` key lets the portfolio order differ from the # archive order, without changing anything in Immich. # # immich Default. Inherits the album's own asc/desc setting in Immich. # This is capture-time order — Immich does not expose the drag # order from its web UI, so Folio cannot reproduce that. # newest Capture time, newest first, whatever Immich is set to. # oldest Capture time, oldest first. # filename originalFileName, natural order (IMG_2 before IMG_10). # Matches scanned-film and camera-export workflows. # manual Pinned photos first, in the order given by `assetOrder`; # everything else follows in the album's Immich order. Far easier # to set in /admin, which has a drag & drop editor for it. # # Two things worth knowing: # • On a subpage with several albums, `sort` orders photos *within* each # album — the albums themselves stay in the order they are listed in. # • Lightbox permalinks (#photo-3) are positional, so changing an album's # sort moves where a previously shared link lands. # # `sort` works the same on subpage and section albums, shown further down. albums: - "your-album-uuid-1" # no sort key → Immich order, exactly as before - "your-album-uuid-2": sort: filename # an entry may carry only a sort, with no title override - "your-album-uuid-3": title: "Hokkaido, in sequence" sort: manual assetOrder: # pinned, in this order. Everything else follows automatically. - "asset-uuid-opening-frame" - "asset-uuid-second-frame" # Subpages: group albums under custom URL paths. # One `subpages:` key for the whole file — every page below is one entry in it. subpages: # Simple form: a name and its albums. - name: Travel albums: - "album-uuid-3" - "album-uuid-4" - name: Projects title: "My Creative Projects" # Optional: Header title, defaults to `name` subtitle: "A collection of 2026 highlights in 35mm film." # Optional: Sub-text for headers password: "your-password" # Optional protection # hidden: true # EXPERIMENTAL: reachable by direct link, but not shown in navigation # zoom: true # 1:1 zoom in the lightbox for this page's albums (overrides settings.yaml) # coverGrid: # Optional: the album covers on this page (nothing else) # columns: 3 # how many album covers per row on this page # gap: 8 # spacing between the covers, in px — omit to keep the theme's own # grid: # Optional: the photos inside the albums (wins over settings.yaml) # columns: 4 # gap: 6 # omit to keep the theme's own photo spacing # layout: "masonry" albums: - "album-uuid-5" - "album-uuid-6": title: "Private Project #7" description: "Shot on 35mm film in Vienna, spring 2025." # Optional: shown below album title password: "scrypt:..." # Recommended: secure hash (generated via logs) # grid: # EXPERIMENTAL: per-album grid override (wins over page/global grid) # layout: "justified" # columns: 2 # coverPosition: "50% 25%" # EXPERIMENTAL: focal point for the cover crop ("top", "center bottom", "50% 25%") # # download: true # Offer the original file from the lightbox for this album. # Off everywhere by default, and opt-in per album on purpose: a # public portfolio should not start handing out full-resolution # originals because one client gallery needed to. # The download route checks the allowlist, this switch, the # album's password and that the asset really belongs to the # album, so an edited URL cannot reach anything else. # # zoom: false # 1:1 zoom in the lightbox for this album, overriding the subpage # and `zoom` in settings.yaml in either direction. Applies where # this entry is: the same album on another page keeps its own. # # location: city # How precisely this album's photographs may be placed — on the # map, and in the info panel of the viewer, which names the city # and country of each photo. # exact (default) the mean of the photographs' own coordinates # city rounded to 0.05° — roughly 5 km, city still named # country rounded to 1° — roughly 100 km, only the country named # hidden no marker on the map, and no place in the info panel # Worth setting for an album shot in one place — a garden, a # studio, a client's home, a fragile site — where the mean of the # coordinates is that place, and the marker stands on the property. # May also be set once on a subpage, where it applies to every # album on it unless the album says otherwise. # Where one marker merges several albums, the most cautious of # them governs the whole marker. A photograph that is in several # albums likewise follows the most cautious of them. # ── Subpage with Sections ──────────────────────────────────────── # Use sections to group albums by location, theme, or any other logic. # A typographic table of contents is rendered above the albums. # Sections are optional: leave them out and you get a flat album grid (as above). - name: Japan title: Japan subtitle: "Reisen durch ein Land voller Kontraste." sections: - title: Tokyo description: "Megacity, Neonlichter, Stille im Lärm." albums: - "album-uuid-tokyo-1" # Uses Immich album name - "album-uuid-tokyo-2": Shinjuku bei Nacht # Custom title override - "album-uuid-tokyo-3" - title: Kyoto description: "Tempel, Bambuswälder, goldener Herbst." albums: - "album-uuid-kyoto-1": Fushimi Inari - "album-uuid-kyoto-2" - title: Osaka albums: # description is optional - "album-uuid-osaka-1" - "album-uuid-osaka-2" # ── Photo Essay / Storytelling Subpage Example ─────────────────── # Render editorial Markdown essays with fullbleed & side-by-side images. # # essayFile is a SLUG, not a path: "sample-story" resolves to # content/journal/sample-story.md (or content/essays/sample-story.md). # Slashes and dots are rejected. Copy the shipped template to get started: # cp content/journal/sample-story.md.example content/journal/sample-story.md # # Leave essayFile out and keep `layout: essay`, and the essay is generated # from the albums below — one heading per album, followed by its photos. # See docs/journal.md for the Markdown block syntax. - name: Highlands title: "Icelandic Highlands" subtitle: "A Photo Essay" essayFile: "sample-story" grid: layout: essay albums: - "album-uuid-iceland-1" # ── Content Page in the Menu ───────────────────────────────────── # A timeless text page (pricing, workshops, FAQ) lives in # content/pages/.md and is served at /. Listing it here puts it # in the header menu at this position; leave it out and the page is still # reachable at its URL, just not in the menu. Create and edit pages under # Admin → Pages. See docs/gallery-config.md#content-pages. - page: pricing