{ if (!o) onClose(); }} >
Library settings Drive the library, indexer, importer and server log.
{#each ['library', 'index', 'logs', 'about'] as const as t (t)} {t} {/each}

Index folder

Pick the sub-folder PhotoPrism should treat as your library root. The folder tree re-roots here and the reindex only scans this subtree. Leave on “Whole folder” to use everything.

{#if subpathFoldersQuery.isPending} {:else if subpathFoldersQuery.isError} {:else} {#if (subpathFoldersQuery.data ?? []).length > 0} (pickedSubpath = p)} selectedPath={pickedSubpath} readonly /> {/if} {/if}
Current: {prefs.indexSubpath === '' ? 'Whole folder' : prefs.indexSubpath}
{#if settingsQuery.isPending}

Loading settings…

{:else if settingsQuery.isError}

Could not load settings.

{:else if draft}

Indexer defaults

Stacks

Downloads

{#if draft.download?.crc32 !== undefined} {/if} {#if draft.download?.sha1 !== undefined} {/if}
{#if draft.index?.skipMeta !== undefined || draft.index?.skipRaw !== undefined || draft.index?.skipHidden !== undefined}

Indexer advanced

{#if draft.index?.skipMeta !== undefined} {/if} {#if draft.index?.skipRaw !== undefined} {/if} {#if draft.index?.skipHidden !== undefined} {/if}
{/if}
{/if}

Rebuilds the search index by walking the originals folder. Safe to run while users are connected.

{#if configQuery.isPending} {:else if configQuery.isError || !configQuery.data} {:else} {@const cfg = configQuery.data}

Server

PhotoPrism {cfg.edition} {cfg.version} Site {cfg.siteUrl || '—'} Auth mode {cfg.mode}

Features

{#each envKnobs as knob (knob.envVar)} {knob.label} {/each}
{#if cfg.count}

Library

{#each COUNT_ROWS as row (row.key)} {@const v = cfg.count?.[row.key]} {#if v !== undefined} {row.label} {v} {/if} {/each}
{/if}
{#if envHelpOpen}

These knobs aren't exposed through the API. Edit .env on the host and restart PhotoPrism:

docker compose up -d photoprism
# or, with podman-compose:
podman-compose --env-file .env -f docker-compose.yml -f docker-compose.podman.yml up -d photoprism
    {#each envKnobs as knob (knob.envVar)}
  • {knob.envVar} {knob.on ? 'enabled' : 'disabled'}
  • {/each}
{#if cfg.ext?.oidc?.enabled}

OIDC provider: {cfg.ext.oidc.provider ?? '—'}

{/if}
{/if}
{/if}

Most recent server errors and warnings. Auto-refreshes every 5 seconds.

{#if errorsQuery.isPending} {:else if errorsQuery.isError} {:else if (errorsQuery.data ?? []).length === 0} {:else}
    {#each errorsQuery.data ?? [] as entry, i (i)}
  • {entry.Time} [{entry.Level}] {entry.Message}
  • {/each}
{/if}