Initial commit: VK media tools

Скрипты для выгрузки фото и видео из диалогов ВКонтакте,
обработки (дедупликация + CLIP-классификация) и загрузки в Immich.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-16 21:14:50 +03:00
commit f760e94206
6 changed files with 3344 additions and 0 deletions

85
config.py Normal file
View File

@@ -0,0 +1,85 @@
"""
Конфигурация скрипта для выгрузки фото из диалогов ВКонтакте.
Как получить токен:
1. Перейди по ссылке в браузере:
https://oauth.vk.com/authorize?client_id=2685278&scope=messages,photos,offline&redirect_uri=https://oauth.vk.com/blank.html&display=page&response_type=token&v=5.199
2. Авторизуйся и разреши доступ
3. Скопируй access_token из адресной строки (значение между access_token= и &expires_in)
4. Вставь его ниже в переменную VK_TOKEN
"""
# Токен доступа VK API (обязательно заполнить)
VK_TOKEN: str = ""
# Папка для сохранения фото (относительный или абсолютный путь)
DOWNLOAD_DIR: str = "downloads"
# Папка для результатов обработки (дубликаты, мусор, review) — рядом с downloads
OUTPUT_DIR: str = "output"
# Файл прогресса для механизма resume
PROGRESS_FILE: str = "progress.json"
# Версия VK API
API_VERSION: str = "5.199"
# Минимум свободного места на диске (в МБ), при котором скрипт остановится
MIN_FREE_SPACE_MB: int = 500
# Задержка между скачиваниями файлов (секунды) — чтобы не перегружать сеть
DOWNLOAD_DELAY: float = 0.1
# Количество попыток при сетевых ошибках
MAX_RETRIES: int = 3
# Таймаут для скачивания одного фото (секунды)
DOWNLOAD_TIMEOUT: int = 30
# Количество параллельных потоков для скачивания фото
DOWNLOAD_WORKERS: int = 8
# ---------------------------------------------------------------------------
# Настройки обработки фото (process_photos.py)
# ---------------------------------------------------------------------------
# Файл прогресса обработки
PROCESS_PROGRESS_FILE: str = "process_progress.json"
# Файл лога перемещений (для отката)
ROLLBACK_LOG_FILE: str = "rollback_log.json"
# Размер хеша (hash_size x hash_size бит, 8 = 64 бита)
HASH_SIZE: int = 8
# Порог расстояния Хэмминга для near-дубликатов (0 = только точные, 8 = средний)
DEDUP_THRESHOLD: int = 8
# Потоки для параллельного хеширования
HASH_WORKERS: int = 8
# Размер батча для CLIP-классификации
CLIP_BATCH_SIZE: int = 16
# Минимальный порог уверенности CLIP (ниже → папка _review)
# Для CLIP ViT-B-32 cosine similarity обычно в диапазоне 0.12-0.35
CLIP_CONFIDENCE_MIN: float = 0.15
# ---------------------------------------------------------------------------
# Настройки скачивания видео (main_video.py)
# ---------------------------------------------------------------------------
# Папка для сохранения видео
VIDEO_DOWNLOAD_DIR: str = "downloads_video"
# Файл прогресса для видео
VIDEO_PROGRESS_FILE: str = "video_progress.json"
# Потоки скачивания (меньше чем для фото — видео тяжёлые)
VIDEO_DOWNLOAD_WORKERS: int = 4
# Таймаут скачивания одного видео (секунды, видео крупнее фото)
VIDEO_DOWNLOAD_TIMEOUT: int = 300
# Минимум свободного места для видео (МБ)
VIDEO_MIN_FREE_SPACE_MB: int = 2000