English | Русский
Pixel — простая программа для тех, у кого фотографии разбросаны по всему компьютеру: разные диски, флешки, папки.
Программа делает основную работу сама: находит фотографии, убирает дубликаты и мусор, а затем группирует изображения по сюжетам.
Вам остаётся только быстро просмотреть результат и выбрать лучшие фотографии.
- 🧲 Собирает всё и отовсюду — может самостоятельно просканировать все доступные диски и найти фотографии. Не нужно открывать папки одну за другой.
- 🤖 Наводит порядок автоматически — находит одинаковые и визуально похожие изображения, чтобы не разбирать вручную многочисленные копии.
- 🗂️ Сортирует по сюжетам — нейросеть объединяет похожие по содержанию фотографии в группы: природа, документы, животные, праздники, путешествия и т.д.
- 👀 Быстрый визуальный контроль — удобная галерея для просмотра и отбора лучших кадров.
- 🔍 Поиск — семантический поиск по описанию («кот на диване») и поиск похожих изображений по образцу.
- 🌐 Интерфейс на русском и английском — язык выбирается автоматически по настройкам системы.
- 📱 Поддержка популярных форматов — JPEG, PNG, WebP и HEIC/HEIF (фото с iPhone).
- Откройте страницу проекта: https://github.com/alekcangp/pixel
- Нажмите Code → Download ZIP.
- Распакуйте архив в удобное место.
- Windows: дважды щёлкните
pixel.bat - macOS: запустите
pixel.command
При первом запуске Pixel автоматически установит всё необходимое и скачает AI-модель. Это нужно только один раз.
💡 На macOS при первом запуске может потребоваться разрешить запуск: правый клик по
pixel.command→ «Открыть».
Первое сканирование — самое долгое: от нескольких минут до нескольких часов. Время зависит от количества фотографий, объёма данных, скорости диска и процессора.
Прогресс отображается прямо в заголовке окна Pixel. Можно закрыть программу — уже обработанные данные сохранятся в базе, и после повторного запуска работа продолжится с того места.
Все следующие запуски будут быстрыми: Pixel помнит файлы и обрабатывает только новые или изменённые.
Мышью:
- Левый клик по фото — выбрать/снять выделение; в полноэкранном просмотре - предыдущее / следующее фото.
- Правый клик — открыть/закрыть фото на весь экран;
- Колесо мыши — прокрутка галереи; в полноэкранном просмотре — плавное увеличение/уменьшение фото.
Клавишами (в полноэкранном просмотре):
| Клавиша | Действие |
|---|---|
← / → |
предыдущее / следующее фото |
+ / - |
приблизить / отдалить |
0 |
сбросить масштаб |
| перетаскивание мышью | перемещать увеличенное фото |
Esc |
закрыть просмотр |
Что происходит с моими фотографиями?
Ничего плохого. Во время сканирования Pixel не перемещает и не удаляет файлы — он лишь создаёт собственный локальный индекс. Оригиналы остаются на своих местах.
Это безопасно?
Pixel работает полностью локально. Фотографии никуда не загружаются. Из интернета только один раз скачивается AI-модель, дальше она работает на вашем компьютере без сети.
Как удалить Pixel?
- Windows:
pixel.bat uninstall - macOS:
./pixel.command uninstall
Это удалит программу, базу данных и скачанную модель. Ваши фотографии не затрагиваются.
| Компонент | Технология |
|---|---|
| Язык | Python 3.10+ (macOS / Windows) |
| GUI | Flet |
| Эмбеддинги | PyTorch + Transformers (SigLIP google/siglip-base-patch16-224) |
| Векторный поиск | FAISS |
| Кластеризация | UMAP-learn + HDBSCAN |
| Хранилище | SQLite (метаданные, эмбеддинги, миниатюры, кластеры) |
| Изображения | Pillow, imagehash (перцептивный хэш) |
main.py CLI-точка входа (argparse, подкоманды)
app_flet.py GUI на Flet + оркестрация пайплайна
config.py Все настройки (пути, пороги, параметры UMAP/HDBSCAN)
i18n.py Локализация ru/en ("auto" — по локали ОС)
core/
scanner.py Сканирование директорий, инкрементальное обновление
database.py SQLite-хранилище
dedup.py pHash + LSH-индекс + Union-Find
embedder.py SigLIP-эмбеддинги
clustererhdb.py UMAP + HDBSCAN (+ mega-cluster refinement, KNN noise rescue)
search.py Семантический поиск (FAISS) и поиск по pHash
thumbnail_cache.py WebP-миниатюры в SQLite
Пайплайн: scan → dedup → embed → cluster, затем просмотр/поиск в UI. Каждый шаг инкрементальный по умолчанию; флаг --full пересчитывает всё заново.
python -m venv .venv
# Linux / macOS:
source .venv/bin/activate
# Windows (PowerShell):
.\.venv\Scripts\Activate.ps1
# Windows (cmd):
.venv\Scripts\activate.bat
pip install -r requirements.txtМодель SigLIP скачивается лаунчером на этапе установки (или автоматически при первом использовании эмбеддера, если ставили вручную). Кэш — в ~/.cache/huggingface/hub/ (Windows: %USERPROFILE%\.cache\huggingface\hub).
python main.py ui-flet # десктопный GUI
python main.py --help # список всех командЛаунчеры поддерживают команды: install (только установка), run (только запуск), uninstall.
python main.py scan --path ~/Photos # индексация папки
python main.py run --path ~/Photos # scan + dedup за один проход
python main.py embed # SigLIP-эмбеддинги
python main.py cluster-hdb # кластеризация UMAP+HDBSCAN
python main.py search "закат на море" # семантический поиск по тексту
python main.py phash-search path/to/img.jpg # поиск похожих по pHash
python main.py clear # полная очистка storage/Общие опции scan/run/dedup: --ext (расширения), --exclude (искл. директории, добавляются к стандартным), --min-size (мин. размер файла в КБ), --move <dir> (переместить дубликаты), --full (полный пересчёт вместо инкрементального).
Все параметры собраны в одном файле config.py с подробными комментариями у каждой настройки.
Основные параметры:
| Параметр | По умолчанию | Что делает |
|---|---|---|
DEFAULT_EXTENSIONS |
jpg, jpeg, png, webp, bmp, gif, tiff | какие файлы считать изображениями |
MIN_FILE_SIZE |
30 КБ | файлы меньше — пропускаются |
PHASH_THRESHOLD |
6 | макс. расстояние Хэмминга для склейки дубликатов (меньше = строже) |
SIGLIP_MODEL |
google/siglip-base-patch16-224 |
модель эмбеддингов |
EMBED_BATCH_SIZE |
16 | сколько изображений за один проход модели |
UMAP_*, HDBSCAN_*, SUB_* |
см. config.py |
параметры кластеризации по сюжетам |
SEARCH_TOP_K, SEARCH_THRESHOLD |
500 / 0.05 | семантический поиск: кол-во результатов и порог релевантности |
PREWARM_THUMB_WORKERS |
4 | фоновых потока на генерацию миниатюр |
APP_LANGUAGE |
"auto" |
язык интерфейса: ru, en или авто-определение |