# pics/ Primary image tree. Absorbs everything from `images/` and `photos/`. ## Principles 1. **Every entity is a directory, not a file.** `winona-ryder/` not `winona-ryder.jpg`. Adding a 7th photo is just dropping a file in the folder. 2. **Canonical file has a fixed name.** `portrait.jpg` for people, `cover.jpg` for media. The site always points here. Stable URL, never changes. 3. **Variants are self-describing.** Filenames encode year, context, source, edition. No `-1`, `-2`, `-3`. 4. **One tree, one truth.** `photos/` and `images/` are eliminated. Everything lives under `pics/`. 5. **Collections are first-class.** Anything that is a finite/novelty/archival set rather than a real-world ever-expanding category is a collection. ## Structure ``` pics/ people/ -- real people and fictional characters media/ -- covers for film, anime, manga, tv, games, albums, etc. platform/ -- profile images from external platforms collections/ -- finite/novelty/archival sets (including site-specific krisyotam/) kris/ -- personal photos, setups, food, screenshots, life ``` --- ## People ``` pics/people/{role}/{name}/ ``` ### Roles `actors`, `artists`, `authors`, `ballerinas`, `characters`, `designers`, `mathematicians`, `musicians`, `philosophers`, `poets` Fictional characters all live under `characters/`. Do not create source-medium role directories such as `anime/`, `film/`, or `tv/` under `people/`; those distinctions are file metadata or variant context, not public-facing structure. ### Canonical file `portrait.jpg` -- the single image the site uses for this person. ### Variant naming ``` {name}-{year}-{context}.jpg ``` Context is freeform but descriptive. Encode whatever distinguishes the image: event, role, photographer, publication, outfit. ### Examples ``` people/actors/winona-ryder/ portrait.jpg winona-ryder-1988-beetlejuice-press.jpg winona-ryder-1994-reality-bites-behind-scenes.jpg winona-ryder-1999-girl-interrupted-promo.jpg winona-ryder-2019-met-gala-versace.jpg winona-ryder-2022-stranger-things-s4-still.jpg people/actors/audrey-hepburn/ portrait.jpg audrey-hepburn-1961-breakfast-at-tiffanys-still.jpg audrey-hepburn-1953-roman-holiday-press.jpg people/mathematicians/srinivasa-ramanujan/ portrait.jpg srinivasa-ramanujan-1919-passport-photo.jpg people/characters/rei-ayanami/ portrait.jpg rei-ayanami-plugsuit.jpg rei-ayanami-rebuild-3.jpg ``` --- ## Media ``` pics/media/{medium}/{slug}/ ``` ### Mediums `film`, `anime`, `manga`, `tv`, `games`, `console`, `books`, `albums`, `ballet`, `plays`, `courses`, `lectures` ### Canonical file `cover.jpg` -- the single cover image the site uses for this media item. ### Variant naming ``` {slug}-{variant}.jpg ``` Variant describes the edition, release, region, or format. ### Film slug convention Preserve the existing CDN basename convention when migrating film directories. Do not reorder filename parts just to match a new theoretical scheme. If the current path already uses `year-title-director`, keep that order in the new directory slug. If a collision requires disambiguation, add the missing year, director, edition, or other identifying context. ### Albums Albums live under `media/albums/` nested by artist, then album directory. ``` pics/media/albums/{artist}/{artist}-{year}-{album}/ ``` Each album directory supports multiple cover variants. Artist photos (portraits, event shots) go in `pics/people/musicians/`, not here. Albums is strictly for album cover art. ### Books Books collapse `literature` and `workbooks` into one medium. Do not subdivide by Library of Congress classification. ``` pics/media/books/{slug}/ ``` One cover per book. If you need multiple cover variants, the directory supports it like any other media item. Slugs should preserve the existing basename convention where possible. When more specificity is needed, use explicit parts such as year, author, title, translator, edition, or publisher. ``` media/books/1880-fyodor-dostoevsky-the-brothers-karamazov/ cover.jpg media/books/1603-william-shakespeare-hamlet/ cover.jpg media/books/1994-graham-knuth-patashnik-concrete-mathematics/ cover.jpg ``` ### Media examples ``` media/film/pulp-fiction-1994-quentin-tarantino/ cover.jpg pulp-fiction-1994-quentin-tarantino-criterion.jpg pulp-fiction-1994-quentin-tarantino-japanese-theatrical.jpg pulp-fiction-1994-quentin-tarantino-vhs-original.jpg media/film/girl-interrupted-1999-james-mangold/ cover.jpg girl-interrupted-1999-james-mangold-criterion.jpg girl-interrupted-1999-james-mangold-uk-theatrical.jpg media/anime/serial-experiments-lain/ cover.jpg serial-experiments-lain-funimation.jpg serial-experiments-lain-dvd-vol1.jpg media/manga/berserk/ cover.jpg berserk-vol1-dark-horse.jpg media/books/1880-fyodor-dostoevsky-the-brothers-karamazov/ cover.jpg media/books/1994-graham-knuth-patashnik-concrete-mathematics/ cover.jpg media/games/dark-souls/ cover.jpg dark-souls-japanese.jpg dark-souls-prepare-to-die-edition.jpg media/albums/miles-davis/miles-davis-1959-kind-of-blue/ cover.jpg miles-davis-1959-kind-of-blue-mono-original.jpg miles-davis-1959-kind-of-blue-mfsl-remaster.jpg media/albums/nas/nas-1994-illmatic/ cover.jpg nas-1994-illmatic-10th-anniversary.jpg ``` --- ## Platform ``` pics/platform/{platform}/{user}/ ``` Profile images, exports, and screenshots from external platforms. ### Examples ``` platform/mal/kris/ profile.jpg platform/mal/semaj/ profile.jpg ``` --- ## Kris ``` pics/kris/ ``` Personal photos. Not site assets (those live in `collections/krisyotam/`), not profile pictures (those live in `collections/pfps/`). This is real life. ### Directories ``` kris/ setups/ -- desk, battlestation, workspace photos food/ -- cooking, meals, restaurants screenshots/ -- screen captures, terminal output, high scores life/ -- IRL photos by era baby/ kid/ teen/ 20s/ ``` ### Naming Freeform. Use whatever describes the image. No strict convention needed for personal photos. ### Examples ``` kris/setups/ moirai-2025-quad-monitor.jpg moirai-2026-cable-management.jpg krislaptop-2024-couch.jpg kris/food/ katsu-curry-2025-homemade.jpg ramen-2026-ichiran.jpg kris/screenshots/ dwm-rice-2025-pywal.png htop-128gb-ram.png kris/life/baby/ kris-baby-01.jpg kris/life/kid/ kris-kid-01.jpg kris/life/teen/ kris-teen-01.jpg kris/life/20s/ kris-20s-01.jpg ``` --- ## Collections ``` pics/collections/{collection-name}/ ``` Anything that is a finite, novelty, or archival set -- not a real-world ever-expanding category. Magazine archives, meme sets, badge walls, emoji packs, profile picture sets, iceberg charts, bookstore photos, etc. ### Naming within collections Use whatever scheme fits the collection. The collection directory name should be self-explanatory. ### Examples ``` collections/anime-girls-with-programming-books/ (preserves existing subdirectory structure) collections/blinkies/ anime-fan.gif linux-user.gif ... collections/discord-emojis/ catjam.gif pepe-coffee.png ... collections/pfps/ brand/ krisyotam-dark.png krisyotam-light.png human/ kris-2024-studio.jpg collections/icebergs/ anime-manga/ anime-iceberg-v3.jpg conspiracy/ conspiracy-iceberg.jpg movies/ film-iceberg.jpg music/ music-iceberg-2024.jpg ... collections/bookstores/ powell-books-portland.jpg shakespeare-and-company-paris.jpg ... collections/setups/ developers/ ... writers/ ... gamers/ ... collections/os/ bsd/ ... linux/ ... plan9/ ... collections/wallpapers/ ... collections/art/ ancient/ (pre-500 CE) {artist}/ {artist}-{year}-{title}.jpg medieval/ (500-1400) {artist}/ {artist}-{year}-{title}.jpg renaissance/ (1400-1600) sandro-botticelli/ sandro-botticelli-1485-the-birth-of-venus.jpg leonardo-da-vinci/ leonardo-da-vinci-1503-mona-lisa.jpg michelangelo/ michelangelo-1512-the-creation-of-adam.jpg baroque/ (1600-1750) caravaggio/ caravaggio-1601-the-conversion-of-saint-paul.jpg johannes-vermeer/ johannes-vermeer-1665-girl-with-a-pearl-earring.jpg rembrandt/ rembrandt-1642-the-night-watch.jpg romantic/ (1750-1870) eugene-delacroix/ eugene-delacroix-1830-liberty-leading-the-people.jpg caspar-david-friedrich/ caspar-david-friedrich-1818-wanderer-above-the-sea-of-fog.jpg impressionist/ (1860-1910) claude-monet/ claude-monet-1872-impression-sunrise.jpg edgar-degas/ edgar-degas-1874-the-dance-class.jpg mary-cassatt/ mary-cassatt-1893-the-childs-bath.jpg modern/ (1900-1970) pablo-picasso/ pablo-picasso-1937-guernica.jpg edward-hopper/ edward-hopper-1942-nighthawks.jpg frida-kahlo/ frida-kahlo-1939-the-two-fridas.jpg contemporary/ (1970-present) jean-michel-basquiat/ jean-michel-basquiat-1982-untitled-skull.jpg david-hockney/ david-hockney-1967-a-bigger-splash.jpg collections/magazine/ cahiers-du-cinema/ cahiers-du-cinema-1951-04.jpg cahiers-du-cinema-1951-05.jpg ... juxtapoz/ juxtapoz-2020-01.jpg juxtapoz-2020-03.jpg ... wired/ wired-1993-01.jpg ... collections/consoles/ nintendo/ nintendo64/ nintendo64-1996-japan.jpg nintendo64-1996-north-america.jpg gamecube/ gamecube-2001-japan.jpg switch/ switch-2017-north-america.jpg sony/ playstation/ playstation-1994-japan.jpg playstation2/ playstation2-2000-japan.jpg sega/ genesis/ genesis-1988-japan.jpg dreamcast/ dreamcast-1998-japan.jpg microsoft/ xbox/ xbox-2001-north-america.jpg collections/krisyotam/ logos/ krisyotam.png krisyotam-cursive.jpg laelcorp.png lael-trust.png lydia-press.png content/ blog/ {slug}/ ... essays/ {slug}/ ... notes/ {slug}/ ... verse/ {slug}/ ... fiction/ {slug}/ ... papers/ {slug}/ ... sequences/ {slug}/ ... news/ {slug}/ ... ocs/ {slug}/ ... notebooks/ srinivasa-ramanujan/ ramanujan-notebook-page.jpg rms-titanic/ titanic-bow-photo.jpg reference/ pentagram.png research/ a-discrete-iteration-related-to-pierce-expansions.png shop/ juvenilia-collected-early-works.jpg collections/symbols/ fraternities/ sigma-pi-phi.png paternities/ ... secret-societies/ ... movements/ ... logos/ ... ... collections/logos/ studios/ ghibli.avif mappa.avif gainax.avif bones.avif a-1-pictures.png ... platforms/ leetcode.png hackthebox.jpg tryhackme.webp exercism.png ... collections/criterion-spines/ 001-grand-illusion.jpg 002-seven-samurai.jpg ... --- ## Migration sources Migration work happens in a cloned route, not the live route. Clone `/mnt/storage/cdn` to a new working tree such as `/mnt/storage/new-cdn` or `/mnt/storage/cdn-next`, rebuild the new structure there, and leave the live `/mnt/storage/cdn` untouched until all URLs and dependent databases are updated and validated. Build one authoritative migration manifest before moving files. The manifest should include, for each file: - `old_path` - `new_path` - `old_url` - `new_url` - content hash - file size - image dimensions when applicable - duplicate group when applicable - canonical status (`cover.jpg`, `portrait.jpg`, `profile.jpg`, or variant) - references found in `krisyotam.com`, `lit/content`, and `photos.krisyotam.com` Canonical file selection is deterministic: the current referenced image wins by default. If `krisyotam.com`, `lit/content`, or `photos.krisyotam.com` currently points at an image for an entity, that file becomes `cover.jpg`, `portrait.jpg`, or `profile.jpg`. Extra images become variants. If multiple referenced images compete for the same canonical slot, flag the conflict for manual review. - `images/people/` -> `pics/people/` (flat files become directories) - `photos/people/` -> `pics/people/` (deduplicate; current referenced canonical wins) - `images/film/` -> `pics/media/film/` (flat files become directories) - `images/anime/posters/` -> `pics/media/anime/` - `images/manga/posters/` -> `pics/media/manga/` - `photos/covers/{medium}/` -> `pics/media/{medium}/` - `images/media/covers/` -> `pics/media/` (sort by medium) - `images/media/favorites/` -> `pics/media/` (sort by medium) - `images/media/movies/` -> `pics/media/film/` - `images/media/posters/` -> `pics/media/` (sort by medium) - `images/artists/` -> `pics/people/musicians/` (music artist photos) - `photos/artists/` -> `pics/people/musicians/` - `images/notebooks/` -> `pics/collections/krisyotam/notebooks/` - `images/logos/krisyotam/` -> `pics/collections/krisyotam/logos/` - `images/logos/anime/` -> `pics/collections/logos/studios/` - `images/logos/company/` -> `pics/collections/logos/platforms/` - `images/logos/manga/` -> delete (empty) - `images/logos/fraternity/` -> `pics/collections/symbols/fraternities/` - `images/icebergs/` -> `pics/collections/icebergs/` - `images/pfps/` -> `pics/collections/pfps/` - `photos/PFPs/` -> `pics/collections/pfps/` - `images/blinkies/` -> `pics/collections/blinkies/` - `images/discord-emojis/` -> `pics/collections/discord-emojis/` - `images/anime-girls-with-programming-books/` -> `pics/collections/anime-girls-with-programming-books/` - `images/bookstores/` -> `pics/collections/bookstores/` - `images/reference/` -> `pics/collections/krisyotam/reference/` - `images/research/` -> `pics/collections/krisyotam/research/` - `images/shop/` -> `pics/collections/krisyotam/shop/` - `images/content/` -> `pics/collections/krisyotam/content/` - `images/mal/` -> `pics/platform/mal/` - `photos/media/` -> `pics/media/` (sort by medium) - `photos/covers/` -> `pics/media/` (sort by medium) - `photos/icebergs/` -> `pics/collections/icebergs/` - `photos/logos/krisyotam/` -> `pics/collections/krisyotam/logos/` - `photos/logos/anime/` -> `pics/collections/logos/studios/` - `photos/logos/company/` -> `pics/collections/logos/platforms/` - `photos/logos/fraternity/` -> `pics/collections/symbols/fraternities/` - `photos/characters/` -> `pics/people/characters/` - `photos/bookstores/` -> `pics/collections/bookstores/` - `photos/reference/` -> `pics/collections/krisyotam/reference/` - `photos/research/` -> `pics/collections/krisyotam/research/` - `photos/shop/` -> `pics/collections/krisyotam/shop/` - `photos/content/` -> `pics/collections/krisyotam/content/` - `photos/Misc/88x31/` -> `pics/collections/88x31/` - `photos/Misc/blinkies/` -> `pics/collections/blinkies/` - `photos/Misc/discord-emojis/` -> `pics/collections/discord-emojis/` - `photos/Misc/mal/` -> `pics/platform/mal/` - `images/playlist/` -> delete (scrapped) --- ## Full tree ``` pics/ | +-- people/ | +-- actors/ | | +-- winona-ryder/ | | | +-- portrait.jpg | | | +-- winona-ryder-1988-beetlejuice-press.jpg | | | +-- winona-ryder-2019-met-gala-versace.jpg | | +-- audrey-hepburn/ | | | +-- portrait.jpg | | | +-- audrey-hepburn-1961-breakfast-at-tiffanys-still.jpg | | +-- denzel-washington/ | | +-- portrait.jpg | +-- artists/ | | +-- frida-kahlo/ | | | +-- portrait.jpg | | +-- jean-michel-basquiat/ | | +-- portrait.jpg | +-- authors/ | | +-- fyodor-dostoevsky/ | | | +-- portrait.jpg | | +-- franz-kafka/ | | +-- portrait.jpg | +-- ballerinas/ | | +-- misty-copeland/ | | +-- portrait.jpg | +-- characters/ | | +-- lisa-rowe/ | | | +-- portrait.jpg | | +-- hannibal-lecter/ | | | +-- portrait.jpg | | +-- rei-ayanami/ | | | +-- portrait.jpg | | | +-- rei-ayanami-plugsuit.jpg | | +-- spike-spiegel/ | | +-- portrait.jpg | +-- designers/ | | +-- dieter-rams/ | | +-- portrait.jpg | +-- mathematicians/ | | +-- srinivasa-ramanujan/ | | | +-- portrait.jpg | | | +-- srinivasa-ramanujan-1919-passport-photo.jpg | | +-- emmy-noether/ | | +-- portrait.jpg | +-- musicians/ | | +-- miles-davis/ | | | +-- portrait.jpg | | | +-- miles-davis-1959-kind-of-blue-session.jpg | | +-- bjork/ | | +-- portrait.jpg | +-- philosophers/ | | +-- simone-weil/ | | | +-- portrait.jpg | | +-- ludwig-wittgenstein/ | | +-- portrait.jpg | +-- poets/ | +-- sylvia-plath/ | | +-- portrait.jpg | +-- rainer-maria-rilke/ | +-- portrait.jpg | +-- media/ | +-- film/ | | +-- pulp-fiction-1994-quentin-tarantino/ | | | +-- cover.jpg | | | +-- pulp-fiction-1994-quentin-tarantino-criterion.jpg | | | +-- pulp-fiction-1994-quentin-tarantino-vhs-original.jpg | | +-- eyes-without-a-face-1960-georges-franju/ | | | +-- cover.jpg | | | +-- eyes-without-a-face-1960-georges-franju-criterion.jpg | | +-- girl-interrupted-1999-james-mangold/ | | +-- cover.jpg | +-- anime/ | | +-- serial-experiments-lain/ | | +-- cover.jpg | | +-- serial-experiments-lain-funimation.jpg | +-- manga/ | | +-- berserk/ | | +-- cover.jpg | | +-- berserk-vol1-dark-horse.jpg | +-- tv/ | | +-- twin-peaks/ | | +-- cover.jpg | +-- books/ | | +-- 1880-fyodor-dostoevsky-the-brothers-karamazov/ | | | +-- cover.jpg | | +-- 1994-graham-knuth-patashnik-concrete-mathematics/ | | | +-- cover.jpg | | +-- 1603-william-shakespeare-hamlet/ | | +-- cover.jpg | +-- albums/ | | +-- miles-davis/ | | | +-- miles-davis-1959-kind-of-blue/ | | | +-- cover.jpg | | | +-- miles-davis-1959-kind-of-blue-mono-original.jpg | | +-- nas/ | | +-- nas-1994-illmatic/ | | +-- cover.jpg | +-- games/ | | +-- dark-souls/ | | +-- cover.jpg | +-- console/ | +-- ballet/ | +-- plays/ | +-- courses/ | +-- lectures/ | +-- platform/ | +-- mal/ | +-- kris/ | | +-- profile.jpg | +-- semaj/ | +-- profile.jpg | +-- kris/ | +-- setups/ | | +-- moirai-2025-quad-monitor.jpg | | +-- moirai-2026-cable-management.jpg | +-- food/ | | +-- katsu-curry-2025-homemade.jpg | +-- screenshots/ | | +-- dwm-rice-2025-pywal.png | +-- life/ | +-- baby/ | | +-- kris-baby-01.jpg | +-- kid/ | | +-- kris-kid-01.jpg | +-- teen/ | | +-- kris-teen-01.jpg | +-- 20s/ | +-- kris-20s-01.jpg | +-- collections/ | +-- anime-girls-with-programming-books/ | | +-- Haskell/ | | | +-- haskell-01.jpg | | +-- Rust/ | | | +-- rust-01.jpg | | +-- ... | +-- blinkies/ | | +-- anime-fan.gif | | +-- linux-user.gif | +-- discord-emojis/ | | +-- catjam.gif | | +-- pepe-coffee.png | +-- pfps/ | | +-- brand/ | | | +-- krisyotam-dark.png | | +-- human/ | | +-- kris-2024-studio.jpg | +-- icebergs/ | | +-- anime-manga/ | | | +-- anime-iceberg-v3.jpg | | +-- movies/ | | | +-- film-iceberg.jpg | | +-- music/ | | +-- conspiracy/ | | +-- ... | +-- bookstores/ | | +-- powell-books-portland.jpg | | +-- shakespeare-and-company-paris.jpg | +-- setups/ | | +-- developers/ | | +-- writers/ | | +-- gamers/ | +-- os/ | | +-- bsd/ | | +-- linux/ | | +-- plan9/ | +-- wallpapers/ | +-- art/ | | +-- ancient/ | | +-- medieval/ | | +-- renaissance/ | | | +-- sandro-botticelli/ | | | | +-- sandro-botticelli-1485-the-birth-of-venus.jpg | | | +-- leonardo-da-vinci/ | | | +-- leonardo-da-vinci-1503-mona-lisa.jpg | | +-- baroque/ | | | +-- johannes-vermeer/ | | | +-- johannes-vermeer-1665-girl-with-a-pearl-earring.jpg | | +-- romantic/ | | +-- impressionist/ | | | +-- claude-monet/ | | | +-- claude-monet-1872-impression-sunrise.jpg | | +-- modern/ | | | +-- edward-hopper/ | | | +-- edward-hopper-1942-nighthawks.jpg | | +-- contemporary/ | +-- 88x31/ | | +-- krisyotam.gif | | +-- archlinux.gif | +-- consoles/ | | +-- nintendo/ | | | +-- nintendo64/ | | | | +-- nintendo64-1996-japan.jpg | | | +-- gamecube/ | | +-- sony/ | | | +-- playstation/ | | | +-- playstation2/ | | +-- sega/ | | +-- microsoft/ | +-- magazine/ | | +-- cahiers-du-cinema/ | | | +-- cahiers-du-cinema-1951-04.jpg | | +-- juxtapoz/ | | | +-- juxtapoz-2020-01.jpg | | +-- wired/ | +-- symbols/ | | +-- fraternities/ | | | +-- sigma-pi-phi.png | | +-- paternities/ | | +-- secret-societies/ | | +-- movements/ | | +-- logos/ | | +-- alchemical/ | | | +-- alchemical-gold.png | | | +-- alchemical-antimony.png | | +-- religious/ | | | +-- pentagram.png | +-- logos/ | | +-- studios/ | | | +-- ghibli.avif | | | +-- mappa.avif | | | +-- gainax.avif | | +-- platforms/ | | | +-- leetcode.png | | | +-- hackthebox.jpg | | | +-- tryhackme.webp | +-- krisyotam/ | | +-- logos/ | | | +-- krisyotam.png | | | +-- krisyotam-cursive.jpg | | | +-- laelcorp.png | | | +-- lydia-press.png | | +-- content/ | | | +-- blog/ | | | | +-- some-post-slug/ | | | | +-- hero.jpg | | | +-- essays/ | | | | +-- some-essay-slug/ | | | | +-- figure-1.jpg | | | +-- sequences/ | | | | +-- some-sequence-slug/ | | | | +-- cover.jpg | | | +-- verse/ | | | +-- fiction/ | | | +-- papers/ | | | +-- notes/ | | | +-- news/ | | | +-- ocs/ | | +-- notebooks/ | | | +-- srinivasa-ramanujan/ | | | | +-- ramanujan-notebook-page.jpg | | | +-- rms-titanic/ | | | +-- titanic-bow-photo.jpg | | +-- reference/ | | | +-- pentagram.png | | +-- research/ | | | +-- a-discrete-iteration-related-to-pierce-expansions.png | | +-- shop/ | | +-- juvenilia-collected-early-works.jpg | +-- criterion-spines/ | +-- 001-grand-illusion.jpg | +-- 002-seven-samurai.jpg ```