Immich External Libraries: A Read-Only Photo Archive Guide
Immich external libraries can provide a searchable view of existing photo folders while a read-only mount limits writes to the originals. This guide compares storage choices and proposes a small-folder pilot, with checks for paths, ownership, scans, search readiness, and XMP metadata limitations.
Suppose your photos already sit in folders you trust. You want a searchable timeline without handing another application control of the originals. Immich external libraries can index those folders, while a read-only mount restricts writes through that connection. There are limits: indexing adds no backup copy, changes need scanning, and some in-app metadata edits may not persist.
This guide helps you decide whether that arrangement fits your archive. It proposes a small-folder pilot on an existing, authorized Docker installation. The pilot has not been executed; it is not a complete installation tutorial or a search benchmark.
Choose between managed uploads and an external library
When your existing folders should stay authoritative
Start with who controls the originals. An external library tracks files outside Immich's managed storage and creates database assets for browsing. Managed uploads put originals in Immich-managed storage, as described in the storage documentation. Choose according to where you want to maintain the archive.
| Decision | Managed uploads | Read-only external library |
|---|---|---|
| Original location | Immich-managed storage | Existing source folders |
| Folder organization | Managed by Immich | Maintained outside Immich |
| Discovering external changes | Not an external-folder workflow | Requires appropriate scanning or refresh |
| Intended fit | Immich-managed collection | Browse an externally maintained archive |
| Storage still needed | Originals and application data | Database and generated assets, alongside existing originals |
As the external-library documentation explains, indexing avoids requiring an uploaded managed copy of those originals. You still need space for the database and generated assets. Budget for both.
Jaisen Mathai's practitioner account offers a concrete example: he retains Elodie as his archive organizer and uses read-only external folders with Immich. His EXIF write-back relies on a custom integration. Treat it as his setup, not a built-in capability or an Optijara deployment result.
The distinction between a source and its copies also matters when preparing image exports and linked assets. That guide covers creator handoffs rather than Immich setup, but the ownership decision is related.
Separate the archive, container path, and library owner
A read-only mount is a write boundary, not an access policy
Your host folder has a path. Inside a container, the same folder may have a different path. Neither path tells Immich which account should own the library. Under the ownership and path instructions, you select one owner at creation and cannot change that owner afterward. Administrator access does not make every user an owner.
The :ro suffix prevents Immich from deleting originals or writing sidecars through the source mount. Host applications can still change those files. Viewing permissions and backups need separate attention. Follow the mounting guide: add a distinct external mount, keep ${UPLOAD_LOCATION}:/data, and retain all existing managed mounts.
Here is the proposed read path. No deployment was performed for this article.
The database and generated assets still need writable application storage. Only the source mount is read-only.
Run a small read-only archive pilot
Mount and map a sample folder
Use the proposed Mount, Map, Scan, Verify checklist to keep the first attempt small. It is an editorial framework, not an Immich feature or a tested Optijara process. Before starting, confirm that Docker Compose works and you have administrator authorization. Choose harmless sample media with readable permissions. Leave private production photos out of the pilot.
- Mount. Add the following entry under the existing
immich-serverservice'svolumeslist. Replace the uppercase placeholder with the sample folder's absolute host path. Keep every existing managed mount. This illustrative excerpt is incomplete and unexecuted; it cannot serve as a standalone Compose file.
- /ABSOLUTE/HOST/SAMPLE:/mnt/photos-source:roApplying the change requires a separate operator action. Follow the official guide for updated mounts. No container restart is reported here.
- Map. Confirm that
/mnt/photos-sourceis readable inside every relevant server or split-worker container. Check the actual permissions. The troubleshooting guidance calls out missing worker mounts and symlink issues, so do not assume a symlink across mounts will work.
Create the library under Administration > External Libraries and select the intended owner. Enter /mnt/photos-source as the import path. /ABSOLUTE/HOST/SAMPLE belongs to the host; Immich needs the directory visible inside its containers. Stop if that directory is inaccessible.
Scan and verify before expanding
- Scan. Add exclusions before scanning. For example, use
/Raw/only if you intend to exclude directories namedRawand their contents, not every raw-format file. The documented pattern rules match full paths recursively and are case-insensitive. Then trigger the library scan.
- Verify. Record what you observe. The table below is a proposed measurement plan, not completed test evidence.
| Check | Observe before expansion | Retain as evidence |
|---|---|---|
| Included sample | Known filename appears for intended owner | Filename, owner, observation |
| Excluded sample | Deliberately excluded item stays out | Pattern and observed result |
| Processing | Relevant jobs progress without unexplained errors | Job state and error notes |
| Write boundary | Applied source mount retains read-only setting | Effective mount configuration |
Keep deletion tests and public-link creation outside this pilot. If the owner or access boundary differs from your plan, stop expansion and investigate. Granting write access to get past an error changes the arrangement you meant to test.
A compact planning note can record intent separately from observations. The import-path value below identifies the required path type; enter the actual /mnt/photos-source directory in Immich. This JSON is a note, not application configuration or proof of success.
{
"workflow": "mount-map-scan-verify",
"import_path_kind": "container-visible",
"source_access": "read-only",
"status": "proposed-unexecuted"
}Read scans and background jobs without assuming live sync
Discovery is not the same as completed processing
Finding a file is only part of the work. Scans create assets; metadata extraction and thumbnail generation have their own jobs. Search processing also affects readiness. The external-library guide directs administrators to inspect Library, Generate Thumbnails, and Extract Metadata jobs. The worker documentation explains that background processing.
A photo appearing in the timeline does not tell you whether every relevant job finished. Inspect job states and errors before judging search quality. This guide establishes neither a processing duration nor archive completeness.
For a hypothetical check, select a known sample filename and record whether it appears under the intended owner. Retain the import path and job state at inspection time. If the file is absent, save the error context before changing settings. Once you correct the identified issue, repeat the same check. Switching to an easier query would tell you little about whether the correction helped. Even a successful recheck says nothing about unexamined files.
Rescans, schedules, and experimental watching
Outside changes require suitable rescanning or metadata refresh. Immich documents a daily automatic library scan whose schedule administrators can change. Its filesystem watcher is a separate experimental feature for advanced users. The watcher warning says it likely will not work for photos on a network drive. Plan around periodic scans unless you have verified another arrangement for your storage.
For missing or stale assets, work through source visibility and import paths, then inspect exclusions, permissions, and jobs. The same documentation notes that browser caching can delay refreshed views. Keep that possibility in mind, but do not use it to explain away a failed check. Find the cause before adding more folders.
Know what XMP sidecars can and cannot preserve
Supported fields are not the whole library
The general library warning says in-app metadata is not persisted into external media files. The XMP documentation describes complementary sidecar support: selected fields can be read from adjacent sidecars and, with suitable write access, written back to them. That write-back does not directly edit original media.
Supported categories include description and rating, along with date/time, location, and tags. Field mappings and automatic job triggers differ. Album membership and people organization should not be treated as a complete portable XMP format; interface layouts are outside that promise too.
For IMG_0001.jpg, Immich prefers IMG_0001.jpg.xmp over the fallback IMG_0001.xmp when both exist. Selected extracted metadata enters the database. The DISCOVER job links newly found sidecars to media that do not already have one linked; SYNC rereads linked sidecars after external changes. Neither job establishes universal conflict resolution between editors.
The read-only metadata editing warning
Read this warning before trying edits. According to the XMP read-only warning, metadata changes on read-only sidecar-backed assets can silently fail in both the sidecar and the database. An apparent UI change is not evidence that the database saved it.
For this pilot, browse in Immich and author archive metadata in your chosen external tool. Removing :ro to make editing work also permits source-file deletion, as the external-library guide explains. That deserves a deliberate decision, not a troubleshooting shortcut.
Descriptive metadata also serves a different purpose from authorship evidence. For generated or edited media, the visual-content provenance guide covers source records and signed credentials. An Immich description cannot replace those records.
Verify browsing with known files before relying on smart search
Use filenames, folders, and dates as spot-checks
For this pilot, a boring filename check is more useful than an impressive semantic-search demonstration. Start with a known filename or fragment. Then use Full path or folder and an expected time range. These documented search filters let you inspect the chosen sample without interpreting descriptive matches. They remain spot-checks, not proof of complete indexing.
If you need the existing hierarchy, enable the optional folder view under Account Settings > Features > Folders, as described in the library guide. It gives you another way to browse; your external tool still organizes the source.
Contextual CLIP search accepts freeform queries without requiring literal metadata keywords. Use it to find candidates, not to establish complete archive coverage. The documentation recommends considering query languages and model resources. Memory and processing trade-offs vary with model choice, so one attractive result is a poor basis for prescribing a model. Establish filename and path visibility before evaluating descriptive searches.
Avoid the mistakes that detach files from their library history
Moving a file is not a harmless database rename
Settle source organization before spending time on in-app curation. Under the documented move behavior, moving a source file within a library can create a new asset on rescan and lose prior Immich-only metadata or album associations. Do not assume the database will follow a filesystem reorganization.
Deleting a source file moves its asset to trash on rescan. Removing all import-path coverage has the same effect. A trash entry is not a copy of the missing original; restore the source file itself.
Several common mistakes are avoidable:
- If you entered the host path in the UI, replace it with the container-visible import path.
- A mount on the API container alone is insufficient when relevant workers need the same readable source path.
- Correct a missing
:robefore scanning more folders. - Plan periodic scans for your storage rather than assuming the watcher works everywhere.
- Treat apparent metadata edits cautiously under the XMP read-only warning.
Repeat the small pilot whenever an underlying assumption changes.
Set the limits before using a larger archive
Storage, sharing, and ongoing maintenance
Before expanding, confirm the intended owner and readable paths across the relevant containers. Check that the source mount remains read-only and review the sample observations. Resolve unexplained job errors. Agree where metadata will be authored and choose a scan schedule. Any unperformed check stays open.
Indexing adds no copy of your originals. Database dumps contain metadata, not photos or videos, so protect external source folders separately from managed Immich data. Backup and restore procedures are outside this guide.
Viewing permissions need their own review. Immich sharing distinguishes album viewers from editors. Partner access can cover an entire library, while public links offer options such as passwords or expiry. Leave sharing unchanged during the pilot.
Allow for installation maintenance and generated-media storage as well as model resources and job troubleshooting. Review privacy and exposure separately from filesystem write permissions. No savings or security outcome is promised. External indexing fits when you want Immich to browse an archive maintained elsewhere and can accept the metadata limits. If writable synchronization is a requirement, resolve it before expanding.
Key Takeaways
- 1Choose external indexing when existing photo folders should remain authoritative; managed uploads make a different storage choice.
- 2Use a distinct read-only container mount and select the library owner deliberately, because ownership cannot later be changed.
- 3Validate a harmless sample through Mount, Map, Scan, Verify before expanding; the proposed pilot has not been executed.
- 4Inspect job states and known filenames instead of treating a visible timeline or experimental watcher as proof of readiness.
- 5Read-only sidecar-backed metadata edits can silently fail in both the sidecar and database; do not rely on apparent UI changes.
- 6Stabilize source paths before curation, and handle sharing permissions and protection of originals separately.
Conclusion
Choose Immich external libraries when you want a browsing layer over folders maintained elsewhere. Begin with a harmless sample and keep the source mount read-only. Confirm the intended owner, then record what job states and known-file checks show before expanding. The XMP editing warning deserves particular attention: an apparent edit may not persist. Settle metadata ownership and source paths early, and review sharing and backups separately. If you need writable metadata synchronization, resolve that requirement first. A searchable timeline is useful only if its limits fit the way you maintain the archive.
Frequently Asked Questions
Does an Immich external library copy or reorganize existing photos?
No managed upload is required: it indexes files in your existing folders. Your external organizer remains responsible for their layout. Immich still needs database and generated-asset storage. See the [external-library documentation](https://docs.immich.app/features/libraries/).
Which path belongs in the external library import settings?
Use the container-visible directory, such as `/mnt/photos-source`, not the host path. Relevant split workers also need readable access at that path. Choose the intended owner when creating the library; ownership cannot later be changed. See the [path and ownership instructions](https://docs.immich.app/features/libraries/).
Can Immich delete photos or save metadata edits through a read-only mount?
A correctly applied read-only mount prevents source-file deletion and sidecar writes through that mount, but not host-side changes. Do not trust apparent metadata edits: the [XMP warning](https://docs.immich.app/features/xmp-sidecars/) says edits on read-only sidecar-backed assets can silently fail in both the sidecar and database.
Why are external photos missing or stale after scanning?
Check container and worker mounts, import paths, permissions, exclusions, and job errors first. Processing or browser caching may affect apparent readiness. [Experimental watching](https://docs.immich.app/features/libraries/) differs from periodic scanning and likely will not work on network drives. Spot-checks do not prove complete indexing.
What happens when an indexed photo moves to another folder?
Immich can treat the new location as a new asset on rescan, losing Immich-only metadata or album associations. Stabilize folders before curation. A trash entry cannot restore a missing original; restore the source file itself. See the [documented move and deletion behavior](https://docs.immich.app/features/libraries/).
Sources
- https://docs.immich.app/features/libraries/
- https://docs.immich.app/guides/external-library/
- https://docs.immich.app/features/xmp-sidecars/
- https://docs.immich.app/administration/jobs-workers/
- https://jaisenmathai.com/articles/my-ridiculously-robust-photo-management-system-immich-edition/
- https://docs.immich.app/features/searching/
- https://docs.immich.app/features/sharing/
- https://docs.immich.app/administration/backup-and-restore/
Written by
Hamza DiazHamza Diaz is the founder of Optijara, where he builds practical AI agents, automation systems, and Copilot workflows for service businesses. He writes about AI operations, agent strategy, and real-world implementation for teams that want usable systems instead of hype.
