azve · проект 03
мама:Найди то фото, где мы на море и у меня та панама.
я:А год примерно?
мама:Ну-у… где-то две тысячи десятый. Может, одиннадцатый.
я:(открывает архив из 80 000 файлов)

Вечер поиска по папкам «Новая папка (3)» и «с телефона перекинуть РАЗОБРАТЬ» — и стало ясно: архив хранит память, но не умеет её отдавать. Kaddroo родился в тот вечер — как инструмент, который находит «то самое фото» за секунды, не забирая архив в облако и не трогая файлы.

записка первая · до

Как выглядел архив

Никакого криминала — обычная жизнь цифрового семьи-архива: копии копий, съёмные диски, «разберу потом». Проблема не в хранении, а в том, что у архива нет предметного указателя: искать можно только по датам и папкам, а память людей работает иначе — по содержанию, людям и местам.

D:\фото\ ├── Новая папка │ ├── Новая папка (2) │ │ └── IMG_20100718_1642.jpg ← вот оно │ └── Новая папка (3) ├── с телефона перекинуть РАЗОБРАТЬ ├── с телефона перекинуть РАЗОБРАТЬ (2) ├── старый ноут 2013 └── копия_для_мамы_финал_2
после прогона Kaddroo: та же структура папок, но сверху — индекс понимания: #море #панама? нет — #мама · 2010 · Сочи · найдено за 1,2 с
записка вторая · идея

Папки не трогаем. Надстраиваем

Первый порыв «навести порядок» был отвергнут сознательно: перекладывание 80 000 файлов — это месяц работы и гарантированные потери. Вместо этого каталог оставляет архив как есть и строит рядом индекс, который понимает содержание кадров: что на фото, кто на фото, где и когда. Файлы по-прежнему лежат в своих «Новых папках» — но теперь к ним есть предметный указатель.

2010-07-18море · закат · мама — вот оно!
2014город · Прага
кот.html? нет — кот.jpgкот · домашний · каждый второй кадр
записка третья · как думает

Три модели, ноль облака

Каталог «понимает» фото тремя независимыми способами, и все три считают локально — на том же железе, где лежит архив.

CLIP — видит содержание

Модель, обученная сопоставлять картинки и текст, ставит кадрам теги: #море, #закат, #дача, #город. Запрос «мама море 2010» — это текст, и CLIP умеет искать им по содержанию кадров напрямую.

ArcFace — узнаёт людей

YuNet+SFace находят лица, ArcFace собирает их в кластеры: «Мама · 4 208 фото». Непонятные кластеры не догадываются сами — каталог спрашивает: «может, это Кира?» — и запоминает ответ.

pHash — находит дубликаты

Перцептивный хэш ловит копии и почти-копии: серия из десяти одинаковых кадров сжимается до одного лучшего. В моём архиве нашлось 1 246 дубликатов.

KADDROO 🔍 мама море 2010 ЛЮДИ Мама · 4 208 Я · 11 034 Кира · 1 877 + 37 кластеров МЕСТА ▸ Сочи · 1 902▸ дача · 5 118 ГОДЫ 2010 2019 море · закат · мама★ 2010 · Сочи море · Кира · волны дача · шашлыки · семья горы · поход дубль 97% Кластеры людей · «может, это они?» Мама · 98% Я · 99% может: Кира? ▸ dry-run запись XMP:+мама, +море, +2010,GPS 43.42, 39.95
то самое фото нашлось за секунду — по людям, содержанию, месту и году сразу
записка последняя · итог

Чем это уникально

Облачные сервисы решают ту же задачу, забрав весь архив к себе — и оставив вас с вопросом «а что с ним там». Kaddroo работает наоборот: всё локально, файлы неприкосновенны, а метаданные записываются в сами файлы (XMP) с предпросмотром — даже если удалить каталог, теги останутся в фотографиях. Архив не запирается в базе: он остаётся вашим. Первый полный прогон занял полтора часа на 80 000 файлов — и архив перестал быть кучей.

~16фото/с на ARM-ноутбуке
80 000файлов ≈ 1,5 часа прохода
1 246дубликатов найдено
0байт ушло в облако
ЗРЕНИЕONNX Runtime · CLIP (теги) · YuNet+SFace (лица) · ArcFace (кластеры)
ПОИСК«мама море 2010 −закат» — люди + содержание + место + год, с минус-словами
ДУБЛИКАТЫpHash · точные и почти-дубликаты · выбор лучшего кадра серии
МЕТАДАННЫЕзапись тегов и людей в XMP через exiftool · всегда dry-run перед записью
СТЕКPython 3.12 · SQLite · Web UI · Windows ARM64 и x64