mirror of
https://github.com/immich-app/immich.git
synced 2026-02-05 00:30:57 +03:00
Support user defined storage location/structure #16
Closed
opened 2026-02-04 16:32:24 +03:00 by OVERLORD
·
27 comments
No Branch/Tag Specified
main
feat/asset-file-apis
chore/translations
fix/web-switch-label-clickable
fix/web-people-hidden-state
renovate/typescript-projects
release/next
fix/timezones
fix/time-zone-upserts
midzelis/wip
push-zpwsovysllvn
push-nwxlpmyzkyrl
push-nvnkszuqwppm
renovate/github-actions
push-smstsuupsowp
refactor/adaptive_image
push-olwpzvrxnomt
push-lmxsupnmxspl
renovate/machine-learning
feat/web-chromecast-video-looping
feat/use-native-clients
renovate/flutter
fix/create-face-edited
fix/mobile-ios-mtls
docs/contributing
docs/mise-mobile
renovate/grafana-monorepo
feature/bottom-buttons-order
feat/immich-mobile-ui-showcase
refactor/consolidate-image-requests
renovate/connectivity_plus-7.x
renovate/major-vitest-monorepo
renovate/pypi-python-multipart-vulnerability
fix/mobile-people-query
sqlite_thumbs
feat/html-text
chore/no-macro-validation
refactor/purchase-store
uhthomas/mobile-fix-app-bar-fade
uhthomas/mobile-fix-asset-jump
feat/pano-ocr
feat/shared-link-login
fix/database-backup-db-names
fix-keep-correct-ios-shared-album-asset
fix-memory-generation-and-display
feat/verify-permissions
refactor/album-service-small-tests
fix/ml-rocm-build
fix/flipped-dimensions-mobile
push-vpxwmwwxwnvw
fix-migration-width-height
refactor/more-queries
revert/prettier-translations
refactor/asset-service-queries
fix/locale-settings-desc
chore/add-debug-log
feat/edit-filters
shared-deep-link-handler
feat/mobile-editing
feat/thumbnail-native-clients
feat/platform-clients
feat/integrity-checks-izzy
fix/foreground-cloud-sync
feat/dynamic-layout
filter-by-person
feat/csp
refactor/sidebar
fix/disable-editing
fix/view-timeline-deeplink
image-zoom-on-slow-connection
fix-consider-dar-for-video-dimension
fix/merged-edited-assets
perf/optimize-album-sort
open-api-fix
feat/create-job-with-dto
use-toast-primary
feat/vitest-4
feat/ios-fastlane-match
match-signing
fix-update-time-update-timeline
chore/translation-keys
feat/modal-routes
feat/panorama-tiles
feature/mobile-view-asset-owner
feat/system-settings
feature/show-activity-count
better-info-in-asset-viewer
fix/all-people-count
feat/location-favorites
feature/rearrange-buttons-2
fix/download-storage-template
feat/kb-shortcuts-mobile
fix/people-count
push-qolzzzzxrvvn
chore/originals-in-asset-files
feat/asset-size-columns
ben/tree-a11y
new-search-filter-ui
refactor/expectSelectedReadonly
refactor/mobile-grdb
push-qvuktpxmkknu
feat/mobile-native-local-sync
refactor/timeline_ops
fix/scrubber_end
feat/version.txt
feat/context-menus
feat/server-chunked-uploads
refactor/virtualsegment
refactor/rename_daymonth_groups
fix/restrict-android-bg-worker
feat/android-periodic-worker
fix-remote-sync-clean-up
refactor/timeline_move_ops
renovate/mapbox-mapbox-gl-rtl-text-0.x
fix/timeline_split_selectable
feat/keyboard_actions_help_modal
feat/static_frontend
feat/notification-warnign-android
feat/plugins2
feat/plugins
test/create-workflow-token-action
fix/docs-force
debug/search-result-similarity
debug/cf-chunked-uploads
feat/eslint_rule
feat/search-filter-album/web
refactor/timeline_photostream
refactor/timelineasset_asset
feat/session-permissions
feat/timeline_photostream_assetnav
feat/timeline_minor_optimize
feat/timeline_perf_nocomp
feat/timeline_search_results_actions
feat/timeline_search_results_page
fix/timeline_padding
fix/timeline_search_reactivity_warnings
feat/timeline_scrollbar
feat/timeline_stream_withviewer
fix/timeline_back_forth_nav
refactor/timeline_photostream_component
fix/generated-files-checks
fix/locate-button-local
chore/base-image-mimalloc
refactor/timeline_assetlayout
refactor/timeline_selectable
refactor/timeline_aware_actions
refactor/timeline_monthsegment
feat/remove-old-pages
chore/deps-gradle
tmp_photostream
tmp/lcms
feat/mobile-dynamic-thumbnails
fix/mobile-finer-thumbnail-concurrency
refactor/timeline1
refactor/extract_photostream
refactor/rename_load_api
refactor/timeline2
refactor/timeline3
feat/multi-select-asset-viewer
feat-no-thumbhash-cache
refactor/asset_grid
feat/faster-access-checks
fix/18991
fix/19543
chore/temp-remove
fix/21419
feat/mobile-hdr-images
chore/update-mise-lockfile
feat/mise-server-checks
feat/mise-ci
feat/windows-2025
feat/dev_cli
refactor/mobile-migrate-clients
fix/map-theme
fix/require-checkbox
chore/use_swc
feat/efficient-thumbnail-decoding
refactor/mobile-thumbhash
refactor/mobile-thumbhash-new
fix/mobile-uncached-zoom
feat/beta-background-upload
fix/beta-timeline-memories-setting
fix/failed-uploads-not-removed
feat/mobile-shared-album
feat/groups
drift-map-page
drift-auth-user-sync
fix/disable-memory
feat/add-to-album-action
edit-date-time-action
drift-people-page
sqlite-remove-isIn
feat/inline-storage-columns
chore/required-reviewers
refact/asset-manager
fix/folder-sort
pnpm
feat/widget-multiple-server-urls
chore/medium-tests-dbname
fix/web-no-iterator-find
fix/map-pan-interruption
track-livephotos
timeline_events
chore/oxlint-migration
feat/maintenance-worker
feat/dav
chore/demo-snapshot
refactor/server-side-dedupe
feat/integrity-checks
dev/recognition-eval
lighter_buckets_test
perf/postgres-queue
postgres-queue
focus_rings
refactor/web-stores-1
refactor/add-to-taken
feat/sort-places
feat/sidecar-asset-file
vet
tmp/demo-snapshot-preview
fix/server-migration-file-extension
refactor/mobile-v2
fix/asset-update-race-condition
rknn-toolkit-lite2
refactor/mobile-split-up-search-page
feature/Add-rocm-support-for-machine-learning
feat/rocm
chore/async-hash-file
feat/shared-link-view-count
feat/rotation
feat/graphql
feat/job-ids
feat/ignore-library-permission-error
feat/docker-compose-builder
feat/kysely-typeorm
mobile/onboarding
no-video-player
fix/server-qsv-output-format
chore/server-geodata-tweaks
mobile/native-video-player-no-hero
feat/xxhash
fix/docs-concurrency
feat/preload-ml-textual-model
feat/local-tileserver
refactor/exif-orientation
original-path-infix
refactor/mobile/login-form-1
feat/server-editor-endpoints
fix/server-qsv-vbr
fix-mobile-db-problems
feat/ml-armnn-conversion
feat/mobile/backup-with-album-info
feat/fast-initial-sync-1
chore/handle-output_dims
feat/server-more-robust-generation
feat/unassign-faces
feat/shortcuts-on-asset-grid
feat/background-upload
feat/capacitor-mobile-app-poc
feat/server-nvenc-hw-decoding
release/v1.105
fix/mobile-fetch-non-archive
feat/fine-grained-access-controls
web/automation-ui
feat/mobile-server-endpoint-save-dropdown
feat/blurhash-thumbnail
object-storage
feat/memories-animations
dev/metrics
ml/tflite
feat/ml-export-cli
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.1
v2.4.0
v2.3.1
v2.3.0
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.0
v2.0.1
v2.0.0
v1.144.1
v1.144.0
v1.143.1
v1.143.0
v1.142.1
v1.142.0
v1.141.1
v1.141.0
v1.140.1
v1.140.0
v1.139.4
v1.139.3
v1.139.2
v1.139.1
v1.139.0
v1.138.1
v1.138.0
v1.137.3
v1.137.2
v1.137.1
v1.137.0
v1.136.0
v1.135.3
v1.135.2
v1.135.1
v1.135.0
v1.134.0
v1.133.1
v1.133.0
v1.132.3
v1.132.2
v1.132.1
v1.132.0
v1.131.3
v1.131.2
v1.131.1
v1.131.0
v1.130.3
v1.130.2
v1.130.1
v1.130.0
v1.129.0
v1.128.0
v1.127.0
v1.126.1
v1.126.0
v1.125.7
v1.125.6
v1.125.5
v1.125.4
v1.125.3
v1.125.2
v1.125.1
v1.125.0
v1.124.2
v1.124.1
v1.124.0
v1.123.0
v1.122.3
v1.122.2
v1.122.1
v1.122.0
v1.121.0
v1.120.2
v1.120.1
v1.120.0
v1.119.1
v1.119.0
v1.118.2
v1.118.1
v1.118.0
v1.117.0
v1.116.2
v1.116.1
v1.116.0
v1.115.0
v1.114.0
v1.113.1
v1.113.0
v1.112.1
v1.112.0
v1.111.0
v1.110.0
v1.109.2
v1.109.1
v1.109.0
v1.108.0
v1.107.2
v1.107.1
v1.107.0
v1.106.4
v1.106.3
v1.106.2
v1.106.1
v1.106.0
v1.105.1
v1.105.0
v1.104.0
v1.103.1
v1.103.0
v1.102.3
v1.102.2
v1.102.1
v1.102.0
v1.101.0
v1.100.0
v1.99.0
v1.98.2
v1.98.1
v1.98.0
v1.97.0
v1.96.0
v1.95.1
v1.95.0
v1.94.1
v1.94.0
v1.93.3
v1.93.2
v1.93.1
v1.93.0
v1.92.1
v1.92.0
v1.91.4
v1.91.3
v1.91.2
v1.91.1
v1.91.0
v1.90.2
v1.90.1
v1.90.0
v1.89.0
v1.88.2
v1.88.1
v1.88.0
v1.87.0
v1.86.0
v1.85.0
v1.84.0
v1.83.0
v1.82.1
v1.82.0
v1.81.1
v1.81.0
v1.80.0
v1.79.1
v1.79.0
v1.78.1
v1.78.0
v1.77.0
v1.76.1
v1.76.0
v1.75.2
v1.75.1
v1.75.0
v1.74.0
v1.73.0
v1.72.2
v1.72.1
v1.72.0
v1.71.0
v1.70.0
v1.69.0
v1.68.0
v1.67.2
v1.67.1
v1.67.0
v1.66.1
v1.66.0
v1.65.0
v1.64.0
v1.63.2
v1.63.1
v1.63.0
v1.62.1
v1.62.0
v1.61.0
v1.60.0
v1.59.1
v1.59.0
v1.58.0
v1.57.1
v1.57.0
v1.56.2
v1.56.1
v1.56.0
v1.55.1
v1.55.0
v1.54.1
v1.54.0
v1.53.0
v1.52.1
v1.52.0
v1.51.2
v1.51.1
v1.51.0
v1.50.1
v1.50.0
v1.49.0
v1.48.1
v1.48.0
v1.47.3
v1.47.2
v1.47.1
v1.47.0
v1.46.1
v1.46.0
v1.45.0
v1.44.0
v1.43.1
v1.43.0
v1.42.0_65-dev
v1.41.1_64-dev
v1.41.0_64-dev
v1.40.1_63-dev
v1.40.0_63-dev
v1.39.0_61-dev
v1.38.2_60-dev
v1.38.1_60-dev
v1.38.0_60-dev
v1.37.0_58-dev
v1.36.2_56-dev
v1.36.1_55-dev
v1.36.0_55-dev
v1.35.0_54-dev
v1.34.0_53-dev
v1.33.1_52-dev
v1.33.0_52-dev
v1.32.1_51-dev
v1.32.0_50-dev
v1.31.1_49-dev
v1.31.0_49-dev
v1.30.2_48-dev
v1.30.0_46-dev
v1.29.6_45-dev
v1.29.6_44-dev
v1.29.5_44-dev
v1.29.4_44-dev
v1.29.3_43-dev
v1.29.2_43-dev
v1.29.1_43-dev
v1.29.0_42-dev
v1.28.4_41-dev
v1.28.4_42-dev
v1.28.3_41-dev
v1.28.2_40-dev
v1.28.1_39-dev
v1.28.0_38-dev
v1.27.0_37-dev
v1.26.0_36-dev
v1.25.0_35-dev
v1.24.0_34-dev
v1.23.0_33-dev
v1.22.0_32-dev
v1.21.1_31-dev
v1.21.0_31-dev
v1.20.3_30-dev
v1.20.2_30-dev
v1.20.1_30-dev
v1.20.0_30-dev
v1.19.1_29-dev
v1.19.0_29-dev
v1.18.0_27-dev
v1.17.0_25-dev
v1.16.0_23-dev
v1.15.1_21-dev
v1.15.0_21-dev
v1.14.0_21-dev
v1.13.0_20-dev
v1.12.0_18-dev
v1.11.0_17-dev
v1.10.0_15-dev
v1.9.1_14-dev
v1.9.0_13-dev
v1.8.0_12-dev
v1.7.0_11-dev
v1.6.0_10-dev
v1.5.1+9-dev
v1.5.0+8-dev
v1.4.0+7-dev
v1.4.0+6-dev
v1.4.0-dev
v1.3.0-dev
v1.3.1-dev
v0.6-dev
v0.5-dev
v0.4-dev
v0.3-dev
v0.2-dev
first-android-release
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: immich-app/immich#16
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @wjbeckett on GitHub (Feb 26, 2022).
Originally assigned to: @alextran1502 on GitHub.
I mentioned this on Reddit, but the user should be able to define how images are stored on the file system. This will not only allow for the user to choose how the images are named, but should allow Immich to index existing images.
Let's say I have an existing photos library where the photos are structured like this:
Photos |
|-> 2022
|-> 01
|-> filename.ext
Immich should respect the existing file structure and index the existing images.
While importing new photos, it should ask the user how the photos should be stored allowing the user to define the file structure above so that newly imported photos are placed in the correct place on the existing file system in the users defined folder structure.
Ideally, we should be able to define the filename pattern as well. Mine is currently date_timestamp_number.ext. for example, 2022-02-23-203109-001.jpeg
@alextran1502 commented on GitHub (Feb 26, 2022):
Thank you for your suggestion. I will consider this when the mobile app is stable and all the basic features are ironed out
@wjbeckett commented on GitHub (Mar 3, 2022):
So, I am the one who made the request for the external importer but you may be misinterpreting what I have said.
What I mean is this - most people in this sub will already have a bunch of photos on their servers/NAS stored in a way they prefer on the file system, for me, it’s a directory called photos and then sub folders as years (2022, 2021, 2020, etc) and then sub folders within them as months, and then the image files within that.
This is how I want my photos to be arranged and I don’t want another app changing that. What I would like is the app to accept my input as to how I want the images stored on the server/NAS and then move them there for me.
So, what Immich should be doing, is collecting the photos and videos off my device, grab the metadata along with that and pushing them to my server to sit in an “import” directory (or something similar). Then, the server app should scan that directory for any files, tag them based on the metadata, perform facial recognition, etc and then move the photos to their final testing place in my photo library that already exists on my file system and in the naming convention I expect them to be in.
This way Immich won’t just be an uploading too, it will be an image management app as well as a backup tool for my device images and a way to view my images on my server.
This is sort of the way Photoprism and similar app/servers work.
@ippocratis commented on GitHub (Mar 4, 2022):
I agree with the year/month/day folder structure but I don't want to push the dev
Its his app after all
I see that immich is crazy fast in loading and displaying immages appar to how fast google photos loads cloud images. That crazy fast
So I really want this app to grow so I can use it.
The truth is that if the feature to add to immich server photos already on the server machine is not somehow imlemented it is not going to be any usable
@nijhawank commented on GitHub (Mar 22, 2022):
+1. I also have my existing photos in year/month/photo.ext structure that I want to be able to access via Immich. It would be a good idea if Immich simply indexes them in-place without requiring them to be imported/duplicated into another location.
@JamesTeague commented on GitHub (Mar 30, 2022):
Adding to the request, this would be great. It's something that I think a lot of people want, being autonomy over their server file structure. This will allow other things to play nice with the files too, I believe. This is something I'd personally love to see in here and I think many others would to.
@Akruidenberg commented on GitHub (Apr 6, 2022):
+1 for me.
@alextran1502 commented on GitHub (Apr 6, 2022):
Noted, this is a different scope of the project though. I will let you know when I implement a CLI tool for this.
@mokahless commented on GitHub (Aug 8, 2022):
Ah I was just starting to investigate the best way to expose my smb share to immich in its container and came across this thread. I actually don't care about adding photos through immich and just want it to add photos I've put on my smb share automatically, without duplicating them or renaming them or moving them.
Since it hasn't been mentioned yet, I'll mention that photoprism refers to this as "indexing" for original directories.
@wiseindy commented on GitHub (Aug 10, 2022):
+1 Would love to be able to use my existing photo library with Immich
@reejosamuel commented on GitHub (Aug 22, 2022):
+1 to this.
@Ewalda commented on GitHub (Aug 22, 2022):
+1
SynologyPhotos (NAS) use following similar file structure for standard backup mobile devices:
MobileBackup///month
The device name is e.g. iphone name which the user give to his phone e.g. "Toms Iphone". In Immich is currently a cryptic Id a name would be better.
Parallel to that the user can create free defined other folders, which are also included in the photo database. And inside this folders also free defined sub folders are possible. This structure is necessary for sorting a lot of images to several events.
Additional the original date and time of the image and the movies is set to the modified date and time of the file system. Immich uses the upload time in the file system.
Additional it either uses the original name of the mobile device or it can be selected to rename the filename to IMG_yyyyMMdd_HHmmss (If there is already a file with this name it will be renames by adding _1 ...) <= This naming is often used by mobile phones and cameras for photos and videos. Immich uses a random UUID (asset-upload.config.ts fileNameUUID = randomUUID()).
It would be very good if Immich can do it similar. Immich mobile backup is much faster than synology photos. (I believe also other things are faster! Very Good! But I have not yet so much photos in Immich.)
All that things are very essential if the database crashes (what happens to me on the synology database). It is possible to rebuild the database by this file system structure! Also for files (videos) with no Exif Data! Also the sorted directory structure is still there, albums are only stored in the database.
We have above 1 000 000 photos currently sorted by this way.
Additional information to albums:
Only a flat album structure is not enough to sort so many photos at least sub albums should be supported (Synology photos also don't support sub albums, therefore and because of database problems I sort it in the directories. But because of avoiding duplicates, albums would be better! )
@fivestones commented on GitHub (Aug 26, 2022):
I'd like to have this feature too
@eckebusch commented on GitHub (Aug 27, 2022):
+1 to this
@Txxicer commented on GitHub (Aug 28, 2022):
+1
@zkhan93 commented on GitHub (Sep 11, 2022):
+1 to this feature as it also makes the app more "safe".
love the app thank you so much!
@ggantn commented on GitHub (Oct 1, 2022):
+1 for me.
@Spectre5 commented on GitHub (Oct 3, 2022):
I'd also love the ability to just index an existing directory tree. I have my photos already organized in a meticulous way within various subdirectories that are meaningful for me. I'd like to load this share/directory as read-only in Immich to be sure nothing in it changes.
@DawidPietrykowski commented on GitHub (Oct 6, 2022):
I also agree that such feature would be a great addition to the app. For me it's the only thing holding me back from ditching Plex, the loading/viewing speed of Immich could make it a great photo gallery/browser for a NAS.
@kenzot11 commented on GitHub (Nov 2, 2022):
+1 for me
@nijhawank commented on GitHub (Dec 18, 2022):
I assume this only stores photos uploaded via Immich to be stored in the specified folder/file structure. But this does not indexes photos in existing folder (not uploaded via Immich) and makes them available via Immich, is the understanding correct?
@alextran1502 commented on GitHub (Dec 18, 2022):
@nijhawank that is correct, the scanning feature is not yet implemented. You can find a more detailed discussion here #1006
@arnoudius commented on GitHub (Feb 19, 2023):
+1, would be nice if this could be supported
@amokster88 commented on GitHub (Apr 2, 2023):
+1, i would love this and I just deployed this and I am loving this. Can't thank you enough Devs. Keep it up, I hope more people start supporting this project.
@poisonborz commented on GitHub (Jun 9, 2023):
+1, even though I'm in awe of what Immich became , for now this is a dealbreaker for me.
I already have an established photo structure which I expose through multiple services. I'd only share this folder as read only with any container, as I wouldn't risk them corrupting or modifying them in a way I don't expect. Metadata/thumbnails should be stored separately. Good (even though different scope) examples for this behaviour would be PiGallery 2 or Nextcloud.
@charles-997 commented on GitHub (Jun 25, 2023):
As an update, this feature has been added. See docs here
https://immich.app/docs/features/read-only-gallery
@zilexa commented on GitHub (Jul 2, 2023):
Perhaps allow to set a global default of the "External Path", relative to the user path.
Like %userfiles%/%username%/Pictures
Each user would have their photos in a subfolder inside their userfolder called Pictures (or Photos or Albums or whatever).
@jrasm91 commented on GitHub (Jul 2, 2023):
You can already do this by prefixing the storage template with Pictures and by setting up your volume mounts for the external path relative to the upload location.