AI used, but this post is not AI.
As previously mentioned, I have some photos I want to name. They come in like 20261019_12345678.jpg, which is a date and then a timestamp. The problem in this use case comes when I am reviewing photos taken within seconds of each other. Reviewing them later, is the best photo 20261019_12345678 or 20261019_12345987?
I'm aware that I can use a Digital Asset Manager (DAM) for this task. These are what semi-pro photographers use, for example digiKam or DarkTable. I think my approach can integrate with other tools nicely. This is about making filenames more useful and less ugly. The files can still be sorted after that point. That approach cannot be automated, and this is about minimal intervention. I intend to use a DAM to sort these photos further.
So the task becomes adding English words to filenames. The only hard part is getting a suitable list of English words. After searching and asking here, I didn't find any that were tightly dedicated to being non offensive and extremely boring. My list is also focused on computing and filename related uses, so ambiguous words of that nature ("program") are also excluded.
This wordlist could be nice in any situation where a raw timestamp, hash, or set of words ("Charming Ferret") is used. It's meant for humans. Machines don't need to read English and they don't get offended. I will use this for photos and voice memos to start.
Starting wordlist:
- I combined SLIP 39 and BIP 39 for 2519 words. The final wordlists were 278 and 156 words long (156 has fewer filename collisions, explained below).
- I added 5 words to cover X and Z - xeno zeal zest zeta zinc
I used Sonnet 5.5 to create an app that allowed me to hand-label the 1500 words as "boring" (good) or "not boring" (bad). I labeled A-D myself and then sent my labeled data and the categories to Claude and had it spit out the rest. Overzealously removing "good" words is not a big problem because I ended up with 278 viable words anyway. Claude's list of "good" words contained over 80% good words. I don't think I removed more than 50 words from its list.
I also tried to give this job to Jev, but it didn't seem to understand the problem. It may be too subjective or esoteric (does a model that small understand "wave" can be colloquially a file type?).
Good properties:
- high edit-distance between words in a short number of characters. (BIP 0039 does this in 4 characters)
- non offensive
- non exciting (see my last post)
- all 26 english letters covered
- not too many words with the same first 3 or 4 characters (repeat, replace)
Frowned upon word types:
- filename collisions: using my computer as a testbed (5 million files and folders), I used Everything to exclude the most prolific words and first-4-char substrings. "Program" had 840k results. "ease" had 386k results, many from "release". "starting" is the most prolific in beige-156, with 30k results. In the larger beige-278 list, results range from 840k for program, to 50k for install, to 40k for axis.
- anything exciting. Colors, good/bad opinions ("exciting", "impressive"), animals, etc. were frowned upon. I wanted to avoid implying anything about the contents of a file from the filename.
The wordlists are in the comments.
I'll have missed whether you intended to add these words to the date and time stamps in the file names, or whether you intended to replace them. The former drastically increases permutations and thus lowers the risk at generating collisions, especially at subsecond intervals.
Recently I implemented an idea for this I first saw with Keybase: to generate a security key based on 9 or 10 dreary dull words. Each subsequent word increases the permutation power exponentially, meaning the initial list doesn't even have to be all that long.
How fast do camera shutters shut? How many subzero pictures do they take? Does it differ from one model to the next? And: is your storage system capable of keeping up when you have it rename every photo it receive?
The intended filename format is:
That way the subsecond timestamp is preserved and the process does not lose information. (For JPG, ~every camera saves timestamps in EXIF metadata as well, but filenames are ~100x faster to parse, and they are indexed by Everything app.) The datestamp is really nice to quickly get to in a file folder by typing it out (in Windows or most Linux GUIs or terminals).
The subsecond timestamp is ugly and TMI and I have thought about trimming it down to the second. I'll have to query my ~10,000 JPEGs and see how often two photos happen in the same second. There's a certain elegance to every timestamp being the same length, so I probably don't want to trim some to the minute and others to the second.
The goal is not perfect disambiguation but creating high enough signal relative to the noise (800k files with "program" in the path is a lot of noise when I'm e.g. searching Everything).
For the photo case, I will run the rename program after the day ends. So I can take in a list of numerically sorted files (oldest to newest) and output filenames that retain that sorting (admit -> zinc). In cases where I know how many files are being renamed, I'll check if there are <156, <278, or <2500 (BIP + SLIP) and choose the wordlist accordingly.
For my situation, cycling the wordlist (zinc -> back to admit) is not a problem after the day has rolled over. It's slightly annoying if it happens in the span of 4 hours (>156 photos in the span of 4 hours). The root purpose is disambiguation. Photos not taken on the same day are very different, but in the same hour I might be in the same location.