theseus: ai с твоим вкусом
нейронка не знает, что тебе нравится
попроси любую модель «сделай эстетично» и получишь один и тот же бежевый ответ. у тебя, у меня, у соседа. модель знает среднее по интернету, а среднее по интернету = ничей вкус.
промптом это не лечится. лечится референсами. и самое смешное: ты их уже собрал. просто ни разу не перечитывал.
я перечитал. 19,651 фотка из галереи → 1,541 опознанная работа, 63 площадки, 19 стран. всё локально на маке. на выходе карта вкуса, файл, который читает любая модель, и открытая репа, чтобы собрать себе. промпт в конце.
"одинаковость" уже померили
- science advances: 300 человек писали рассказы с идеями от ии и без. каждый отдельный рассказ с ии стал лучше (новизна +8%, полезность +9%). но рассказы с ии-идеями оказались на 10.7% больше похожи друг на друга. каждому лучше, всем вместе одинаковее.
- padmakumar & he: эссе с instruction-tuned моделью однороднее эссе без неё или с базовой моделью. одинаковость приносит текст модели, а не люди.
- anderson, shah & kreminski: брейншторм с chatgpt даёт больше идей, но они ближе к среднему по группе.
- метаанализ 19 экспериментов, 2026: тот же паттерн. с ии результаты сходятся в одну точку.
обратная сторона тоже померена. lamp (acl 2024): подмешай в запрос историю конкретного человека, и модель работает на него лучше: +23.5% у дообученных, +12.2% у llm из коробки. midjourney уже продаёт это фичей: флаг --p учит твою эстетику по картинкам, которые ты лайкаешь.
дыра в том, что все такие системы учат вкус внутри одного приложения, по кликам в нём. а настоящие решения лежат в галерее: годы выборов, сделанных в реальном мире, перед реальной вещью. и ни одна модель их не читала.
если ты читал моё эго, это тот же тезис с другой стороны. сигнал без контекста = шум. контекст = единственное, что нельзя скопировать с соседа.
каждый кадр = голос
каждый раз, когда ты останавливаешься перед чем-то и достаёшь телефон, это голос.
я проверил: примерно 97% искусства в моей галерее мне правда нравится. остальное мемы и кривые кадры. плюс пару лет я фоткал музейные этикетки, на будущее, если вдруг смогу это проанализировать в касание:)
датасет уже был. его просто нельзя было прочитать.
то, чем никто не пользуется
apple photos прямо на устройстве гоняет ml по всей библиотеке и складывает результат в поисковый индекс. на каждую фотку там лежат:
- метки сцен: painting, statue, drawing, sculpture, modern art, mural…
- live text: весь текст, который удалось прочитать, включая этикетки в музеях
- места: город, point of interest, название музея
живёт это в двух sqlite внутри ~/Pictures/Photos Library.photoslibrary/database/:
Photos.sqlite- сами снимки: uuid, время, gpssearch/psi.sqlite- индекс:groups(текст метки + категория),ga(метка ↔ снимок),assets(uuid, разбитый на два int)
оригиналы не трогаешь. копируешь оба файла вместе с -wal и -shm и читаешь копии.
пайплайн
1. отфильтровать искусство. берёшь снимки с арт-метками. всё, что снято с разницей меньше 90 минут, склеиваешь в один визит. у меня вышло 3,547 арт-фоток и 186 визитов.
2. этикетка = ground truth. сфотканные этикетки заново прогоняешь через apple vision ocr (пакет ocrmac) и разбираешь на художника, годы жизни, название, год, технику, музей. каждую этикетку привязываешь к соседнему кадру.
3. остальное смотрит модель. контактные листы по 20 превью с подписями. знает работу - называет и ставит confidence. не знает - пишет эпоху, технику, сюжет, палитру из трёх цветов и что работа делает: «контур важнее цвета», «тело под нагрузкой», «космическая схема». я гонял это в claude code на своей машине, он сам читает листы.
4. никаких выводов. тут все и ошибаются. как только ии пишет «тебе нравятся тёмные фоны с золотыми акцентами», он сплющил тебя в вайб и заморозил. мне нужна была палитра имён: художники, работы, музеи, направления, материалы, цвета, одиночки. без правил, без рейтингов, без «это или то». модели умнеют каждые полгода, пусть каждая читает архив под своим углом.
5. рёбра = история искусства, а не я. учитель → ученик, автор, направление, место, отсылка. только факты. немного мягких «рифм» по мотивам, пунктиром, чтобы не путать.
и вот тут граф начинает рассказывать то, чего ты в него не клал.
что граф рассказал мне
бугро учил матисса. салонного бугро я снял девять раз, матисса пятнадцать. годами думал, что это два полюса моего вкуса. это одна линия.
роден → его ассистент бурдель → джакометти и жермен ришье. все четверо в архиве. я ни разу не шёл «смотреть школу родена». граф собрал её сам.
остров мёртвых. симфоническая поэма рахманинова написана по картине бёклина. у меня в архиве оба конца нитки.
опенинг elfen lied собран из картин климта. аниме и вена 1900 оказались соседями по графу. я бы так их никогда не сложил.
русский авангард нашёлся там, где я его не искал. малевич, чашник и уновис, анненков, баранов-россине. кандинский пришёл через габриэле мюнтер: её «кандинский за фисгармонией» и портрет явленского. а дальше граф сам вытянул «синего всадника», «синюю четвёрку» и баухаус.
смерть как рамка. капелла костей в эворе, шиле «видящие себя» (двойной автопортрет со смертью), бургкмайр «любовники, застигнутые смертью», бёклин. темой я это никогда не называл. граф назвал.
243 фотки голов и масок. «характерные головы» мессершмидта, гримасы в олове. маска квакваку'вакв, которая раскрывается и показывает внутри другое лицо. черепа на кольцах yohji yamamoto. часы чайкина «джокер». лицо, которое не совсем лицо.
космос и камни. небесные карты дюрера, первые печатные карты обоих полушарий неба. астрономические рисунки трувело. обсидиановое зеркало джона ди. метеориты: гоба, палласиты, мезосидериты. у витрин с метеоритами я простоял около часа. 59 объектов в архиве старше человечества.
и название пришло из графа. первый плакат венского сецессиона, климт, 1898: тесей и минотавр. он лежит в моём архиве. узнал я это уже после того, как придумал название.
в цифрах
- 19 стран, 27 городов, 63 площадки
- топ стран: франция 347, австрия 283, южная корея 191, португалия 176, таиланд 140
- одна вена = 270+ работ в семи музеях: naturhistorisches, kunsthistorisches, leopold, albertina, belvedere, secession, mumok
- крупнейшие площадки: naturhistorisches (69), kunsthistorisches (64), thyssen-bornemisza (57), leopold (57), музеи ватикана (50), frieze seoul (49)
- неожиданные точки: буэнос-айрес (95 фоток, mnba и malba), бахрейн, бали с огох-огох в ночь перед ньепи
- чаще всех: шиле и климт (по 20), доменек-и-монтанер (18), дюрер (16), матисс (15), миро (14), хокни (13), леонардо (13)
- больше всего пересъёмок одной работы: купол palau de la música (14), «данте и вергилий» бугро (9), «поцелуй» климта (9), «наполеон на перевале сен-бернар» давида (8)
- имя, которое никто не угадает: хорхе де ла вега, «близость застенчивого», 8 фоток, аргентинская otra figuración
- палитра: чёрный 555, серый 532, белый 516, дальше красный 410, синий 330, золото 289. золото + серебро + бронза встречаются примерно как красный
- животное = лошадь, 30 работ. дальше львы и птицы, по 18
- эпохи: 59 объектов старше человека, 142 из 1500-х, 446 из 1900-х, 365 из этого века
- состав: 508 картин, 269 скульптур, 172 объекта, 167 зданий, 75 рисунков, 74 природных образца
- рядом в граф легли музыка (autechre, aphex twin, basinski, alva noto & sakamoto, рахманинов, брукнер), кино (калигари, dark city, пятый элемент, devs) и аниме (lain, death note, гуррен-лаганн, code geass)
половину этого я бы про себя никогда не сказал.
как я этим пользуюсь
всё компилируется в один файл: theseus.md. в инструкциях агента одна строка: перед любой задачей про визуал, звук или дизайн возьми 5-10 референсов из theseus под бриф, потом работай. один шаг, и вместо среднего по интернету у модели моя стена.
- обложки и постеры. «обложка для тёмного эмбиента» = бриф на палитрах и работах, перед которыми я стоял, а не «moody gradient»
- мудборды и деки. у каждого референса художник, название и музей. доску можно проверить и продолжить
- бренд и ui. цвета, материалы, зацепки по шрифтам из палитры архива, и под каждую есть реальная работа
- видео и моушн. темп и кадр для шот-листа берутся из работ архива
- музыка. граф связывает художников с пластинками и фильмами, поэтому «сделай как в зале рисунков альбертины» начинает что-то значить
- тексты. референсы, за которые я могу ответить, а не те же пять цитат, что у всех
- путешествия. атлас = маршрут: где лежит то, к чему я всё время возвращаюсь
- подарки. друг открывает карту и видит не очевидные имена, а второй эшелон, который я люблю
- про себя. анатомия показывает то, что ты в себе не называл: палитру, животное, века
формат = markdown + jsonl. читает любая модель. файнтюн не нужен.
почему theseus
тесей вошёл в лабиринт с ниткой и вышел, зная, что в центре. галерея = лабиринт. это нитка.
а корабль тесея спрашивает, остаётся ли вещь собой, если заменить в ней каждую доску. вкус ровно такой: меняется весь, а всё равно твой. перезапускай раз в год.
карта
- constellation: 410 узлов, в которые можно провалиться. клик, ещё клик, и ты на два шага глубже. крошки выводят обратно. линзы перерисовывают тот же архив как географию, родословную или мотивы
- atlas: страна → город → площадка, у каждой своя палитра и свои художники
- anatomy: все цифры выше, нарисованные
жми tour, и карта нырнёт сама: австрия → вена → альбертина → дюрер → звёздная карта 1515 → космос → метеорит.
карта: https://claude.ai/artifact/8XWThMKFN7ApxutBXsuFrW
собери свою
проще всего: клонируешь репу, открываешь в claude code (или любом кодовом агенте) и пишешь «build my theseus». AGENTS.md проводит агента по всем шагам, правилам приватности и форматам. всё, что не стоит решать без тебя, он спросит.
github.com/hustle1hustle/theseus
или руками. на маке дай терминалу full disk access (системные настройки → конфиденциальность и безопасность → доступ к диску), открой claude code в пустой папке и вставь:
build my theseus from my apple photos library. work fully locally:
no uploads, no external apis, no web search with my data. never modify the
photos library. copy the databases before reading them.
data:
- ~/Pictures/Photos Library.photoslibrary/database/Photos.sqlite (+ -wal, -shm):
table ZASSET (ZUUID, ZDATECREATED = seconds since 2001-01-01, ZLATITUDE, ZLONGITUDE)
- database/search/psi.sqlite: groups(category, content_string), ga(groupid, assetid),
assets(rowid, uuid_0, uuid_1). category 1203 = live text, 1500/1501 = scene labels,
1700 = business names, 1 and 1520 = points of interest, 5 = city, 12 = country.
uuid = struct.pack('<qq', uuid_0, uuid_1) read as uuid bytes or bytes_le,
keep whichever matches ZASSET.ZUUID.
- images: resources/derivatives/<first char of uuid>/<uuid>_1_105_c.jpeg
steps:
1. art set = assets with scene labels like art, painting, statue, drawing,
sculpture, modern art, mural, sketch, carving. visits = art photos chained
with gaps under 90 minutes, at least 4 photos.
2. find label-like photos (live text with years or words like oil, canvas,
bronze, tempera, inv.). re-ocr them with the ocrmac package, parse artist,
life dates, title, year, medium, museum. pair each with the neighbouring photo.
3. for unlabeled artworks make contact sheets of 20 tiles (caption: id, museum,
date) in /tmp, read them yourself, and record: artist + title if you recognise
it (confidence high/medium/low), else movement, period, medium, subject,
3-colour palette, and what the work does in a few words.
4. skip and never describe people, ids, tickets, receipts, chats, screens.
5. outputs: artworks.jsonl (one line per work), artists.json, and theseus.md.
theseus.md is a palette, not a profile: names, works, places, movements,
materials, colours, one-offs. no conclusions, no style rules, no rankings.
6. delete the contact sheets. report counts at the end.
промпт на английском специально, агенты так понимают точнее. хочешь файл на русском - допиши в конце «write theseus.md in russian». потом попроси карту: узлы для стран, городов, площадок, художников, работ и направлений, рёбра только из фактов истории искусства.
что с этим делать
если ты делаешь визуал, музыку или тексты с нейронкой: перестань объяснять ей вкус словами. дай ей архив. слова у всех одни и те же, архив только твой.
если ты билдер: персонализация, которая живёт внутри одного приложения, закончится так же, как закончились лайки внутри одной платформы. вкус пользователя должен быть переносимым файлом, который он носит с собой и отдаёт любой модели. кто поймёт это первым, тот и построит слой вкуса для агентов.
если просто интересно: прогони у себя. половину того, что вылезет, ты про себя не знал.
твой вкус уже лежит в телефоне. хватит давать модели его угадывать.
источники
- doshi & hauser, generative ai enhances individual creativity but reduces the collective diversity of novel content, science advances, 2024 - +8% новизна, +9% полезность, +10.7% похожести
- padmakumar & he, does writing with language models reduce content diversity?, arxiv 2309.05196 - гомогенизация от instruction-tuned моделей
- anderson, shah & kreminski, homogenization effects of large language models on human creative ideation, creativity & cognition 2024
- de rooij & biskjaer, does generative ai make us think alike?, препринт, 2026 - метаанализ 19 экспериментов
- salemi, mysore, bendersky & zamani, lamp: when large language models meet personalization, acl 2024 - +23.5% / +12.2%
- midjourney docs, personalization
- apple, photos & privacy