How do you organize your photos? (Article on folder structure and cognition)

I’ve tried a couple of systems over the years, including by event and by place, and was never satisfied. I’m currently reorganizing my whole collection (around 25k pictures), hopefully for the last time. Pictures as the camera recorded them (whether jpg, orf and/or nef) are organized by date in folders like YYYY/YYYY-MM-DD. Each file is named YYYY-MM-DD-EventOrPlace-###.ext. Metadata files go here as well. All images are heavily tagged with digikam.

Processed pictures go into an independent hierarchy organized by whatever topic I want: travel to a place, a birthday, fall foliage, a specific person, a certain region or period… Processed images keep their original file names, so I can immediately correlate each one with the out-of-camera original.

(Essential tools in this re-organization have been exif, which can take a folder of pictures and automatically classify them by date, and digikam, which has powerful renaming and tagging features).

Interesting thread. My photos all live on a NAS with the following folder stucture:

Media/Photos/[camera model]/YYYY_MM_DD_[event or place]/

Having a folder for a camera model ensures that the number of event or place folders remains manageable, as I usually don’t keep a camera for more than 10 years. Within each of the event or place folders, I keep the following subfolders:

raw
jpg
Panormas (if applicable)
HDR (if applicable)
Edited (Affinity Photo or Gimp edits)
Selected (anything worth showing off and exported as down-scaled jpg)

I don’t bother with tags at all, since that would probably take way too much time, would make me uneasy if a database goes belly up, and usually I can find what I’m looking for with the above structure in place (and I enjoy going through folders with past images from while to while). This has served me well for the last 15 years across different OSs and raw developers.

2 Likes

I must admit that I’m steadily amazed by all those people who inform that they create a folder structure based on date/time – although it is at least an unquestionable type of reference. Date/time is anyhow a property of all image files and folders, and is an attribute I can use general file management tools to easily search for both in flat directories and across hierarchical structures. So, for there to be any point for me in organizing images files in folders, they ought to add something else than date/time.

But each for his own. The point of any structure is to be able to retrieve an image without too much efforts. -What kind and how many images we produce how often, what retrieval needs we have and what we may consider “too much effort” taking into account also what relative effort is needed to create a specific structure), differ a lot.

For my own part there are a few fundamental aspects that influence the way I do it for myself:

A) After more than fifty years of computing I’ve become quite wary of storing data in a way dependent on any specific program. Combined with the warnings against tampering with the raw files, that excludes tagging for me.

B) As I take raw+jpegs and store them together, I always have a thumbnail available for visual search. (Yes, I know there is a jpeg-thumbnail in raws too, but file browsers do not necessarily render them),

C) As a hobby photographer I take pictures for different purposes, (documentation of various kinds, aesthetics, competitions, remembrance of experiences and so on).

So, I use a fairly pragmatic hybrid folder structure like: /Events, /People, /Holidays and travels, /Places, /Nature, /Abstracts, /Documentation, /Projects, /Keepers and more - with subdirectories that may fit, including sometimes dates.

This obviously have the drawback that one image may belong in several categories, but if a quick search in one folder hasn’t lead me to the image in question, a quick search in one or two of the others will do.

3 Likes

I don’t think photo organization is a “one size fits all” proposition. We all have our quirks as to what we find easy to remember and navigate. I would not function well with an organization where the raw files and JPEGs are in separate trees.

I consider the raw file to be the “root” of any photo. For me, the simplest place to find any by-products of the raw file is as descendants of that raw file. I might use any of dt, RT, ART, Hugin, etc., on my images, so I like to treat the file system as my “image database”. Using the darktable database does nothing for me if I decide to edit a given photo in ART.

I have a single level of image folders:
~/Pictures/yyyy-mm-dd_job-code_camera
I try to make the job-code keyword-rich. This (for me) takes the place of tagging. The single level makes finding photos really simple with shell commands. Example:
~/Pictures/2025-05-05_haida-gwaii-spirit-lake-trail_X-T20/

So I can locate photos by date, subject matter or camera. File names contain a time stamp and the original file name from the SD card so if I ever need to reload a raw file from the SD card I can quickly find it (if I haven’t reformatted the SD card yet).

Outputs of processing the raw files are in subdirectories of these directories:

  • dt
  • art
  • rt
  • stacked
  • hugin
  • and so on

So I can identify which tool I created the output JPEG with. Example:
~/Pictures/2024-11-19_abandoned-boat-on-unwin_X-T20/art/20241119-092645-1751-_DSF2688_FHDP.jpg

File names of exported edited images contain the export preset name, which helps to identify the intended purpose for that particular export. Example:
20241210-093107-1850-_DSF2788_pixls.jpg

2 Likes

%Y/%Y%m%d/%Y%m%d_%H%M%S%%+.2c.%%e with exiftool. That is 2025/20251013/20251013_213412_00.DNG , where _00 handles multiple shots taken the same second.

If there’s only one shot for a certain second, there’ll only be a _00.DNG file. If there are three shots taken the same second, there will also be a _01.DNG and _02.DNG file.

I scrapped using an event identifier back in 2005 as every day isn’t exactly an event. :slight_smile:

2 Likes

That is too brittle for me – copying or moving files can change their time information in the file system, and exif metadata is not always reliable (it’s happened to me more than once to come back after a day of shooting to find that the date on the camera was wrong).

I also add a short, descriptive name (usually place), and a sequence number (after culling).

I used to do something like that, but I didn’t like it, because (as you said) I end up with a portrait of a person taken during an event while traveling, and then I don’t know where to put it. With a date-based system, I don’t need to think where to store it, and tagging it is simple. I don’t want to have to search for an image that might be essentially anywhere in my file system.

Yeah! But it can be fun peeking at other people’s quirks and defending your own :sweat_smile:

3 Likes

Totally agree! After years I end up with roughly the same folder structure.

I strongly recommend you this Scott Kelby video. It is for Lightroom, but we can use the basic principles in any photo editor.
More than that, this is very entertaining also! Have fun! :wink:

Yes, that is why I append the event name (usually a musician’s name) to the folder name which is incrementally created by the camera. Several events in one day? I have “Create new folder” on one camera button.

So… I’m photographing musicians. Why would I make the main structure date-based rather than musician-name based? That is a very good question! It would certainly be valid. And useful sometimes, although the find command is there when I want the concerts linked with one performer.

I upload my photos to pCloud, and give people links. There they are sorted by musician name, so that is an additional indexing. Also Whatsapp conversations, by which I send out the links.

Yes, it could have made a lot of sense for me to organise it by musician. They are my subjects! But hey, I have narrowed in on this rather specialised event photography only about six to seven years ago, and I have much older pictures than that. And… it never occurred to me. I started chronological so I continued chronological. Also, the occasional set of holiday pics, cats as kittens, etc etc things seem to fit into that scheme.

If I had more than one camera (I do, but don’t take out more than one at a time) I would not be too bothered which camera took which pics. I’d want to merge and rename so that they all came in time order within one event directory.

That’s a very good point. I too have always want to remain program-independent, relying only on the OS directory tree.
I’ve only recently started to use colours and stars in darktable. But I use them simply to aid and organise the work flow: they have no value beyond that, and their loss would not matter at all.

He said lightroom! Get the torches and pitchforks! (sorry, my monday-post-flu-brain couldn’t resist).

3 Likes

I don’t care what the files on my disk are named (as long as two files don’t have the same name, but I’m not sure that’s essential).

I have an “images” folder that contains… all my images! And I hardly ever look at it using a file explorer, whether standalone or integrated into software for opening files. Of course, there are subfolders (I generally hate lists of 10,000 files), but that doesn’t really matter. I systematically save the different variants of an image in the same directory (raw, jpegs, possibly variant 1, 2 black and white, xcf, sometimes different croppings, etc.).

I manage all this with kphotoalbum, which is not linked to any image processing or presentation software. Right-click on a thumbnail to “open with this software,” annotate as “will be part of my next presentation,” etc.

What kind of “classification” such as YY/MM/DD /place/person /other“ would allow me to instantly find among my 35,000 images a photo of a Baroque church taken in Naples before 1995, in which my wife appears among the faithful, and which I did not include in my wonderful ”Italian Baroque" exhibition in such-and-such a city? Or simply “churches” or “Italy 1994”?

Of course, I need to annotate my images, and sometimes I bitterly regret my momentary laziness…

1 Like

I have a similar hierarchy but not in dt. Posted for what it’s worth:

XnKeywords.txt (1.8 KB)

Using such a hierarchy keeps one’s keywords standardized which makes searching much easier …

2 Likes

I’ve also tried Digikam, but I couldn’t really wrap my head around it. I’ll just stick with my file manager for JPEGs. Face recognition is really the only feature I would like that my file manager doesn’t have. Maybe I’ll will an extension into existence with my vibe coding skills :joy: Ideally, it would work like the feature that Google Photos has on Android. No naming necessary, just automatic recognition and grouping of photos. But you can assign names to them if you want, enabling you to search for that person by name.

I’m terribly lax in my culling. I like the idea of giving photos names. In Darktable, that seems to be through the versions module, in the darkroom view, but I usually don’t remember to go there unless I’m explicitly creating multiple versions of my images. Maybe there’s another way to do it that I’ve missed…

When I last reorganized my pictures several years ago, I wrote a bash script to rename them all with EXIF metadata, choosing from several different fields based on what was available (DateTimeOriginal, MediaCreateDate, and falling back to FileModifyDate as a last resort).

Click to show a bash script for batch-renaming images based on EXIF metadata
#!/bin/sh

help() {
	printf "%s\n" "usage: $(basename "$0") [options] [FILE]..." ""  \
		"Rename media to the format YYYYMMDDSS_hhmmss.ext." \
		"First looks for DateTimeOriginal, MediaCreateDate," \
		"then finally FileModifyDate" \
		"" "OPTIONS:"
	printf -- "\t-%s %-5s%-20s\n" \
		h ''    'This help' \
		m 'ARG' 'Method to set time for name (see exiftool)' \
		n ''    'Dry run; don'\''t do anything'
	exit 0
}

options=":hm:n"
while getopts "$options" opt; do
	case "$opt" in
		h) help ;;
		m) m="$OPTARG" ;;
		n) dryrun=true ;;
		*) echo Option "$OPTARG" not recognized && exit 1 ;;
	esac
done

shift $(($OPTIND - 1))

info() {
	color=$1
	case $color in
		blue) color='\e[1;34m' ;;
		red) color='\e[1;31m' ;;
		green) color='\e[1;32m' ;;
		yellow) color='\e[1;33m' ;;
		default) color='\e[1m' ;;
	esac
	shift
	end='\e[0m'

	printf "$color%s...$end\n" "$@" > /dev/stderr
}

[ "$dryrun" ] && info red "Dry run; no actions will be taken"

for i in "$@"; do
	ext=$(sed -e 's/[^.]\+.//' -e 's/_$//' <<< "$i") # extract extension
	if test "$m"; then
		time=$(
			exiftool -"$m" -extractEmbedded "$i" \
			| sed -e 's/.\+: //' -e 's/://g' -e 's/ /_/' -e 's/+.\+$//'
		)
	else
		time=$( # extract the datetime for the new name
			if test -n "$(exiftool -extractEmbedded -DateTimeOriginal "$i")"; then
				info green "Using exif DateTimeOriginal"
				m=DateTimeOriginal
			elif test -n "$(exiftool -extractEmbedded -MediaCreateDate "$i")"; then
				info yellow "Using exif MediaCreateDate"
				m=MediaCreateDate
			elif test -n "$(exiftool -extractEmbedded -FileModifyDate "$i")"; then
				info red "Using exif FileModifyDate"
				m=FileModifyDate
			fi

			exiftool -"$m" "$i" \
			| sed -e 's/.\+: //' -e 's/://g' -e 's/ /_/' -e 's/+.\+$//'
		)
	fi
	newFile="$time.$ext"

	# if the file has already been renamed, go to the next one
	test "$newFile" = "$i" \
	&& info default "$i already renamed; continuing..." \
	&& continue

	[ "$dryrun" ] && continue

	if test -e "$newFile"; then # if the "new file" already exists
		count=0
		suf=$(printf "%02d" "$count")
		while test -e "${time}_$suf.$ext"; do
			let count++
			suf=$(printf "%02d" "$count")
		done
		newFile="${time}_$suf.$ext"
	fi # add a numeric suffix

	mv -iv "$i" "$newFile"
	if test -e "$i.xmp"; then
		mv -iv "$i.xmp" "$newFile.xmp"
	fi
done

Hope that’s useful, though I imagine AI could do a better job writing a script than I did at the time :man_shrugging:

1 Like

Haha it’s a universal struggle. Our time’s limited, unfortunately, so we have to make choices about what to do with it. I’ve got tons of pictures I’d like to process and post for others to see, but it’s on the things-I’ll-probably-never-get-to backlog.

This is kind of what I was getting at in my blog post, though I didn’t go into much detail. I don’t use tagging in Darktable, so I rely on a combination of the job code’s description and the date. I don’t mind having long job codes if it helps me find what I’m looking for. My longest job code so far is “20250921 Parents’ backyard, fence, and squirrels.” There’s a lot of mental hooks in there that will help me find what I’m looking for when the time comes—or at least I hope, lol

Yes, a lot of my job codes are truly mundane things like “A cat lounging in the sun” or “Dad cooking dinner,” some of them with as few as one picture. Like as @elGordo mentioned above, I use the event description in place of tagging.

Very nice. It’s like a controlled vocabulary. Do you add tags manually to all your photos, or do you use machine learning to apply them? I recall that Darktable has a plugin that will suggest tags for an image that way. I think you can even limit the set of tags it will suggest. My browser history suggests I found it from this discussion on this forum several years ago.

1 Like

General advice is put it in one of the places – and if it’s not found in the one of the places it’s in the other. (Remember the point is not to create a 100 % consistent of fully logic system, but to be able to retrieve images with reasonable efforts (in total)).

As storage is so cheap, I may also sometimes duplicate an image in different places (not the least in my upper display shelf /Keepers folder …).

Normally it isn’t that difficult to make a decision, though – what are the answers to:

Why did I primarily take the picture? In what context will I likely be searching for an image like this. Like:

Is it an event that was the main purpose of the travel, or was it a minor part of a travel where the travel as such was the the main experience? Is it a more artistic portrait of a foreign person independent of time and place, or of a person you mainly connect with a specific experiences of a travel? Is it a more general portrait (of likely many before and to come) of a family member, or is it a portrait of this person in a special situation clearly connected to experiences on a travel.

Indeed! From how you have described the way you work, name-based struck me as the self-evident way to go …

I looked at it and agree. Converting or shredding away the Lr-stuff, there is some really good advice from a practical perspective on approach and workflow for image management – including why not use the star rating system. (A similar video done with the exact tools of darktable would be nice.)

2 Likes

I liked your post, as you’ve got your situation all figured out, gotta admire that. I just can’t come to the same conclusion for my use case. What I want is a system that, when I come home with a batch of captures, lets me put them in with a minimum of fuss and thinking. Chronological ordering supports that.

Yeah, when I want to resurrect some image from the depths it takes work, but I tend to remember where the important ones are and the activity sometimes is an enjoyable meander into Butcher-and-Friends history.

I also shoot ‘engineering’ images for the railcar restoration project I work with, and chronological made sense because 1) it follows the progression of the work and 2) the project lead is used to it from previous projects. :grimacing:

3 Likes

Thanks, but on the battle front it doesn’t always feel like that … :wink:

As I said in my first post in this thread, I consider my structure to be “hybrid”. That means i.a. that some of my themed folders, may have sub-folders with a chronologically structure where that makes most sense, similarly to what you do here:

But my main point is that in general a structure like this:

– tells me the least of anything about what kind of the content the images have, (unless we are searching for Christmas images, that is …). If one run some kind of patron list (or other kind of registry) besides the folder structure, with dates of engagement or similar, it will of course work to find a patron’s image, but else …???

(The word “patron” above is because the system informs me that “Sorry, you can’t post the word ‘[here was a word beginning with custom and ending with er]’; it’s not allowed.” Why is that!??)

I posit that for any person with a normal working memory, which has a mechanism of forgetting built in, (ref Ebbinghaus’ classic Forgetting Curve), one will likely need to open more folders to find an image in a date-structure, than a themed structure.

But then one need to make a judgement on how much resources to establish a structure versus the time spent in searching for images. Needs and situation are individual, so I agree in:

3 Likes

Sorry, I missed the question.

I add IPTC tags manually using XnView Pro which opens that list and lets me select and add keywords from that list.

I have IPTC tags to also set or update the XMP of an image. These are not same as dt

If I need an unlisted keyword I can add it XnView and I can add it to my list or not, my call.

1 Like

Not so difficult… perhaps.

One more question, which is less easy: in 5 or 10 years, my photos will still be there, but will my concerns still be the same?

Good luck with moving, duplicating, and renaming files!

Perhaps not, but what will one then remember of what date something happened?

Good luck also with your annotation! (For my own part I very seldom rename files, but several tools exist for doing this automatically in batch.)

Yip. :clown_face:

1 Like