Задача Добавить функцию обработки множества фотографий

Добавить функцию обработки множества фотографий

У меня есть очень много своих фотографий с гео-данными (специально включал доступ камере к gps).

Надо проработать такой сценарий:

В отдельный интерфейс закидываю прям пачкой кучу фотографий (100-200+).

Прям в браузере, без загрузки на сервер, надо отфильтровать фотки с гео-даннымы, отсортировать по расстоянию друг от друга и вывести это все карточками с превью. При этом на фронт надо загружать существующий список уже загруженных файлов, чтобы не проходиться повторно по одним и тем же. В принципе, надо и загруженный список так же фильтровать и признаку "Уже загружено".

Далее выбираем любое фото и создаем на его основе новый концепт (по геоданным многое можно легко загуглить через ИИ и он же подготовит описание, останется только перепроверить и подтвердить или скорректировать).

Все это будет очень хорошим стартовым активом природных и прочих достопримечательностей.

Ворклоги

Ха, попросил чатгпт по описанию задачи накидать логическую схему, получилась она чуть больше, чем я рассчитывал )))

flowchart TD
    A[Пользователь открывает отдельный интерфейс] --> B[Фронт загружает список уже загруженных файлов]
    B --> B1[Список содержит: fingerprint/hash, имя, размер, дата, geo, статус, concept_id]

    A --> C[Пользователь добавляет пачку фото 100-200+]
    C --> D[Файлы обрабатываются локально в браузере]

    D --> E[Чтение EXIF / GPS без загрузки на сервер]
    E --> F{Есть геоданные?}

    F -- Нет --> F1[Отметить как: без гео]
    F1 --> Z1[Можно скрыть или показать отдельной группой]

    F -- Да --> G[Создать локальный fingerprint фото]
    G --> H{Фото уже есть в загруженном списке?}

    H -- Да --> H1[Отметить как: уже загружено]
    H1 --> I[Добавить в общий локальный список карточек]

    H -- Нет --> H2[Отметить как: новое]
    H2 --> I

    I --> J[Сгруппировать / отсортировать фото по геоточкам]
    J --> K[Расчет расстояний между фото]
    K --> L[Сортировка по маршруту / близости / кластерам]
    L --> M[Вывод карточек с превью]

    M --> N[Пользователь фильтрует]
    N --> N1[Только новые]
    N --> N2[Уже загруженные]
    N --> N3[С гео]
    N --> N4[Без гео]
    N --> N5[По расстоянию / району / кластерам]

    M --> O[Пользователь выбирает фото]
    O --> P[Фронт берет координаты фото]
    P --> Q[Запрос к AI / backend: определить место по координатам]
    Q --> R[AI ищет контекст: природный объект, достопримечательность, регион, описание]
    R --> S[AI формирует черновик концепта]

    S --> T[Пользователь проверяет]
    T --> U{Подтвердить?}

    U -- Нет --> U1[Пользователь редактирует описание, название, категорию]
    U1 --> T

    U -- Да --> V[Создать концепт]
    V --> W[Загрузить выбранные фото / связать с концептом]
    W --> X[Сохранить в базе: concept, geo, files, metadata]
    X --> Y[Фото попадают в список уже загруженных]