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:
src: 20261019_12345678.jpg out: 20261019_zest_12345678.jpgThat 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.
I love posts like this. Congratulations on doing a thing. respect
Here are the two wordlists, sorted by filename prevalence.
beige-wordlist-156
starting decorate treat merit multiple mandate imply expect explain quarter ruler prepare category exceed describe primary finding agency forecast admit hanger hearing permit dictate equip careful recall educate identify calcium ordinary evaluate length quantity execute likely herald reaction enforce closet ancient industry gesture often champion ambition ranked decision grant organize duration dominant relate meaning maximum together blanket fused improve flexible fancy aspect grasp repeat gravity losing engage depart exclude declare costume observe frequent increase modify apart making crunch cubic lift fraction submit deal fragment leader bolt alto belong amount bracelet hesitate capacity cause funding trend carbon floral exact amuse omit mixture beam inherit stay genre herd involve junior emphasis briefing adorn cowboy purchase dough diminish brave bulb devote being agree envelope budget coal fiscal much civil payment unfold cradle zeta zeal glance obtain carve genuine xeno aluminum chew faint says midst ceramic buyer usual phrase yield ajar paid enlarge mild humidity furl zinc depict judicial zestbeige-wordlist-278
program package profile source extra include plot move heat type install valid intend cover index huge main manual zone language level object class network item group kind manager hand various bundle quick plan advance lend round provide order axis very deploy random replace step volume simple large kernel review method expand material machine fact metric force element counter cards render inform crystal single should require regular guard carpet general detect listen result gather aide inside depend width domain extend true dynamic have flip mixed course living join capture ending away hybrid march firm echo moment exchange forward perfect piece clock greatest idea beyond total response percent credit bucket clay lift deal together repeat length cubic bolt alto champion fused apart observe ancient multiple discuss exact treat omit beam making stay fancy herd primary engage herald category fragment grant bulb cowboy expect being coal execute fraction much carbon prepare finding gravity organize trend inherit genre junior cause maximum depart duration civil leader crunch purchase payment quarter mixture submit zeta losing explain budget exclude zeal aspect flexible obtain brave hanger practice amount xeno estimate agree equip relate chew reaction says carve remind identify ruler evaluate modify funding floral dough starting describe unfold costume imply briefing gesture closet ancestor recall decision usual capacity ordinary improve agency yield phrase amuse belong envelope ajar cradle enforce hearing faint easel increase paid declare likely meaning decorate ambition blanket formal steady mild industry merit emphasis fiscal glance forecast careful often genuine furl quantity ceramic overall involve permit exceed ranked bracelet zinc endorse enlarge helpful realize buyer zest admit aluminum devote midst depict indicate dictate frequent mandate grasp dominant calcium diminish educate humidity hesitate adorn judicialYou can alphabetize them at any number of sites such as https://wordcounter.net/alphabetize
Who are you callin’ fancy, cowboy?!
I’m offended!
:P
Make it extra beige with
Eighgzekyoote Docyument Chelle script Reut folder Phaiel manager Ehrawr code


