Share your photo and directory naming "conventions".

I’ve always organized my images by folders and I never rename the images. So my structure is like this:

.
├── 2020
│   ├── Name_of_the_Job_One_2020_001
│   │   ├── 5Dmk4
│   │   ├── 77D
│   │   ├── GH5
│   │   ├── Inspire1
│   │   └── Mavic2Pro
│   ├── Name_of_the_Job_One_2020_002
│   │   ├── 5Dmk4
│   │   ├── 77D
│   │   ├── GH5
│   │   ├── Inspire1
│   │   └── Mavic2Pro
│   └── Name_of_the_Job_Two_2020_001
│       ├── 5Dmk4
│       ├── 77D
│       ├── GH5
│       ├── Inspire1
│       └── Mavic2Pro
└── 2021
    ├── Name_of_the_Job_One_2021_001
    │   ├── 5Dmk4
    │   ├── 77D
    │   ├── GH5
    │   ├── Inspire1
    │   └── Mavic2Pro
    ├── Name_of_the_Job_One_2021_002
    │   ├── 5Dmk4
    │   ├── 77D
    │   ├── GH5
    │   ├── Inspire1
    │   └── Mavic2Pro
    └── Name_of_the_Job_Two_2021_001
        ├── 5Dmk4
        ├── 77D
        ├── GH5
        ├── Inspire1
        └── Mavic2Pro

Now this is great but sometimes I wish I had it sorted by client names. Then again what if there are multiple clients for the same job etc. My system has a flaw where I cannot import my job directory and that darktable imports it recursively but instead I have to import all single directories for each camera and I end up with a bunch of camera directories in lighttable and those are not grouped by the job directories. So a film roll can’t show a job directory. I can use folders but it’s clunky.

And even if it did import recursively I’m afraid it would then also import the darktable_exported directories and that would be a different issue…

I’d much rather adapt to Darktable then trying to fight it.

So I’d like if everybody could share their organization systems, maybe we could all benefit from each other.

Mine is simple… My only client is myself, so no need for job codes and what not.

Photos/YYYY-MM-DD/YYYY-MM-DD_HH-MM-SS_original-file-name.nef

My advice is, if you’re going to use the date, it should come first. Possibly second if you use a job code, but that way they sort properly by date. Any description or name comes after that.

1 Like

Photos/YYYY/MM/YYYY-MM-DD/filename_hash.CR2

Someday I might remove the month layer of directories; it only gets in the way.

1 Like

I pretty much organize all my files like this, not just photos:

category\YYYYMM\YYYYMMDD_description_filename,
  where I add or subtract elements based on how many files there are.

PS I don’t apply user metadata. I keep note text files for that.

1 Like

Mine’s simple, and automatically created by RPD.
yyyy-mm-dd_jobcode_camera/yyyymmdd-hhmmss-seq-filename.ext

Example:
~/Pictures/2019-08-22_two-faced-echinacea_D7000/20190822-174923-1205-DSC_1477.nef

I don’t have clients/jobs (and don’t want any), so I abuse “jobcode” as a description of the subject. I can easily find photos by date, subject matter, or what camera I used, and if I do something horribly stupid before my daily backup runs, I know the original file name on the SD card so I can re-import it.

1 Like

Contary to most posts here, I organize by location first, date second. It’s more likely that I’ll want to see the pictures I took at (let’s say) New York City than the pictures I took in 2017.

1 Like

Location is often in the description part of my convention. I don’t care for directories; I “flat-search” by date and description. I only use structure to limit the number of files.

2 Likes

I’ve got the following convention, not all that elaborate but I do like to keep my images seperated by camera models.

/data/Images/Doka/<yyyy>/<yyyy>.<mm>.<dd>.<camera_model>/<raw.ext>

I also do an automated double import; /data/Images/Doka being my working/culling/etc area and /data/General/Originals, which is on a different physical disk, my local backup (there’s also a remote backup strategy in place).

1 Like

I have couple :slight_smile:

For my Pictures:
[camera]/YYYY/MM/yymmdd_[descriptor]/*.raw+*.jpg

For client shots:
[client]/yymmdd_[descriptor]/*

For product shots:

[product category]/[type]/[name]/(date?)/*

all of above are on separate drives with separate backups.

1 Like

I want my photos to be in chronological order for a normal ls, I sometimes use two cameras. I also dislike to many layers of subfolders.

With those criteria I ended up with the following system. Cam is a three or four letter camera label.

~/img/YYYY/MMDD-jobcode/YYMMDD-hhmmss_cam
~/img/YYYY/MMDD-jobcode/web/YYMMDD-hhmmss_cam

I shoot raw or raw+jpeg and store both in the same folder.

For those rare occasions i use burst or shoot two frames in a second a _1 is added. I actually don’t like having the time or the camera in the filename as it makes it long but it was the simplest way i could think of that enabled chronological order with potentially multiple cameras.

I use the web folder to be able to quickly scp the selection of files to the web server and generate the gallery. It’s important to me that the web files and the full res ones are named the same. (for viewing the web software adds size suffixes but those are automatic)

I used to be a darktable user and there it had the disadvantage of the film roll becoming MMDD lacking the year. The actual file layout took precedence and I lived with the dt behaviour until switching to RT.

My ideal would be to have the filename as YYMMDD-0001 but incrementing the counter chronologically across several cameras gets complicated so I live with the bloat.

1 Like

Each shoot goes into a separate directory by date, images renamed by date/time. Where the shoot spanned multiple dates, the first date is used:

YYYY.MM.DD <Description>/YYYY-MM-DD-HH.MM.SS.x.ext

Where <Description> is usually a location or subject description and x is an integer to enforce uniqueness (files renamed via a shell script). If it’s a holiday or special occasion where I want to produce some snapshots I’ll do all of the development in that directory and export my JPEGs to a sub-dir to be copied to my website and shared. For those special images that I want to handle differently, I usually copy the RAW to a separate location and perform additional processing there.

I then also have additional directories for things like Play RAWs, darktable testing etc.

1 Like

Hmmm, mine is simpler…


archive_name
            the_year
                   name_of_roll
                             IMG_1234.CR3

For example w:\Canon90D\2020\January-macros\IMG_1234.CR3
or z:\Components\2021\Carbon_Resistors\IMG_3347.CR3

1 Like

I do it pretty much like everyone with date-descriptor
My photos parent dir is DT_photos. I have a parallel directory structure that is an exact mirror for jpg exports called DT_PhotoEdits. I use this export string to automatically populate it. $(FILE_FOLDER/otos/otoEdits)/$(FILE_NAME)-edit . So I have a preset to setup this string if I have been doing any other random exports. That export string creates a folder every time I export with the name of the source raw folder in the PhotoEdits directory. This folder I can use on my tv or phone or any other device to just view my edited files… I had to leave out the variable symbol as it does weird things for display in this post

Edit fixed display thanks to @elstoc

1 Like

pixls is all written in markdown, so if you enclose stuff like that in `back ticks` it will look like this. Alternatively you can escape special characters by preceding them with a backslash.

2 Likes

My system is very simple.

Files from devices (eg cameras, sound recorders) go into directories named YYYYMMDD, eg 20210130. This is often the date I downloaded the files, but not necessarily. I don’t rename the files.

An external database correlates between those directories and jobs, projects, clients, subjects, whatever.

Simple processing (eg development of raw photos) is usually done in those directories. Complex processing (eg video editing) is done somewhere else.

1 Like

I use 3 hierarchies:

  • photos/yyyy - when I just shoot by myself, for fun;
  • photos/family/yyyy
  • photos/friends/yyyy

The directories for each set are named yyyy-mm-dd-some_textual_description (e.g. name of the place). For sets spanning multiple days, I change the date part to yyyy-mm-dd_mm-dd or something similar (it’s not so frequent, so it ad-hoc, and sometime just use the first or last day).
For the family directories, I sometimes have an additional level based on the family member who took the shots (all my kids have cameras). My wife uses her phone and rarely downloads her photos (they are in Google Photos).

The photos’ filenames are the original ones, prefixed using exif date + time, e.g. 2020-12-21_14-27-18_DSC_0077.NEF

I recently started using Rapid Photo Downloader, although for now, simply copying and pasting the photos seems like less hassle (I use KDE, and there RPD’s device detection does not work too well, I think). If I don’t use RPD, I run a small script to rename the pictures, which contains a single command:
exiv2 -r'%F_%H-%M-%S_:basename:' *

Sometimes, I take bracketed shots with my phone (low-end phone with a low-end camera: low dynamic range). Since the camera app uses the same name with a _{number} suffix for the series, it’s easy to sort them into directories:

for i in *IMG_*_*_?.jpg ; do (echo $i | gawk -F_ '{print "mkdir " $1 "_" $2 "_" $3}') ; done | sort | uniq | bash
for i in *IMG_*_*_?.jpg ; do (echo $i | gawk -F_ '{print "mv", $0, $1 "_" $2 "_" $3 "/"}') ; done | bash

I’m sure it could be done more elegantly, but I won’t waste more time on it.

Then, in each directory I can merge the shots (I have several scripts like this one, with varying parameters, e.g. to produce a TIFF for further processing). Finally, I keep at most one of the merged results:

dir="$(basename `pwd`)"
jhead -autorot *jpg
align_image_stack -C --gpu -m -a OUT *IMG*.jpg
enfuse --hard-mask -o "$dir"_01234-hard.jpg OUT*.tif
enfuse --hard-mask -o "$dir"_012-hard.jpg OUT000[012].tif
enfuse --hard-mask -o "$dir"_0123-hard.jpg OUT000[0123].tif
enfuse --hard-mask -o "$dir"_123-hard.jpg OUT000[123].tif
enfuse --hard-mask -o "$dir"_1234-hard.jpg OUT000[1234].tif
enfuse --hard-mask -o "$dir"_234-hard.jpg OUT000[234].tif
enfuse -o "$dir"_01234.jpg OUT*.tif
enfuse -o "$dir"_012.jpg OUT000[012].tif
enfuse -o "$dir"_0123.jpg OUT000[0123].tif
enfuse -o "$dir"_123.jpg OUT000[123].tif
enfuse -o "$dir"_1234.jpg OUT000[1234].tif
enfuse -o "$dir"_234.jpg OUT000[234].tif
rm *tif

Thanks for letting me know I HAD tried quotes but it did not work…good tip for the future

@kofa I can’t recall but I don’t think you are on windows?? For anyone using windows https://www.bulkrenameutility.co.uk/ Bulk Renamer is awesome and lets you select and preview all your changes before committing. It has got a lot of possible options for almost any renaming task…perhaps there is something like this in Linux with a GUI…Free for personal use

I’m on Linux (with KDE). Here, krename (KRename - KDE UserBase Wiki) would be a similar tool; it has a plugin for Exiv2.

However, I’m more of a command-line guy. I’ve just put something together to rename photos and sidecars (since I needed this for old JPG shots, it has the jpg extension in the command, but that can be changed):
(Extract the Exif.Photo.DateTimeDigitized header from each JPG; print a mv (move, rename) command that renames each JPG to a name that has date and time prepended to the original file name; print the same command, but for the XMP; translate : into -; execute the commands via the shell.)

exiv2 -g Exif.Photo.DateTimeDigitized *jpg|gawk '{print "mv", $1, $5 "-" $6 "_" $1, "; mv", $1 ".xmp", $5 "-" $6 "_" $1 ".xmp"}'|sed 's/:/-/g'|bash

By omitting the final |bash, one can first check what commands would be executed.
The individual output lines would be like this:

mv P5137537.jpg 2006-05-13-19-30-41_P5137537.jpg ; mv P5137537.jpg.xmp 2006-05-13-19-30-41_P5137537.jpg.xmp
1 Like

@priort BRU, which I recommended a few times on the forum, is wonderful because I can preview the changes. Before it, I used command line, but that can be risky if I make a typo (and I don’t like batch files).

1 Like