cabinet-assistant/Gallery

JavaScript

0

192 commits

updated Jun 4, 2026

See the code

README

Gallery

Recommendations Update

  • Image recommendations use ONNX Runtime embeddings stored in SQLite.
  • Media viewer metadata now includes a Recommended media block rendered from backend similarity results.

Gallery - локальний full-stack застосунок для керування медіаархівом: зображеннями, відео, колекціями, тегами, вибраним, завантаженням і групами точних дублікатів.

Стек

  • Backend: ASP.NET Core Minimal API, .NET 9, SQLite
  • Frontend: React 18, Vite
  • Зберігання медіа: GalleryApp/backend/App_Data/Media
  • Генерація прев'ю: ffmpeg
  • Локальний запуск: run-app.py
  • Production/ZimaOS запуск: Docker Compose + nginx на порті 8095

Структура репозиторію

Gallery/
|-- Docs/               # детальна документація проєкту
|-- GalleryApp/
|   |-- backend/        # API, SQLite, медіафайли та runtime-дані
|   |-- frontend/       # React/Vite-клієнт
|   `-- native/         # локальні native-артефакти
|-- docker-compose.zima.yml          # production build для Docker/ZimaOS
|-- docker-compose.zima.images.yml   # production запуск з GHCR images
|-- App_Data/           # опціональні runtime-дані в корені
|-- tmp/                # тимчасові локальні артефакти
|-- Gallery.sln         # .NET solution для backend
|-- run-app.py          # запуск frontend + backend
`-- README.md           # короткий огляд репозиторію

Швидкий старт

Запускати з кореня репозиторію.

Локально на цій машині

python3 run-app.py --mode machine

У локальній мережі

python3 run-app.py --mode network

Без автоматичного відкриття браузера

python3 run-app.py --mode machine --open-url false

Production/ZimaOS через Docker Compose

docker compose -f docker-compose.zima.yml up --build

Production frontend доступний на http://localhost:8095, а на ZimaOS - http://<zima-ip>:8095. Runtime-дані backend зберігаються у /DATA/AppData/gallery/App_Data; видалення цієї директорії видаляє SQLite-базу, медіафайли, preview cache і model cache.

Вимоги

  • .NET SDK 9
  • Node.js 18+ і npm
  • Python 3
  • ffmpeg для генерації прев'ю відео й GIF

Базові URL

  • Frontend: http://localhost:5173
  • Backend: http://localhost:5000
  • Медіафайли: http://localhost:5000/media/...
  • Production/ZimaOS frontend: http://localhost:8095
  • Production health через nginx: http://localhost:8095/api/health

Ключовий функціонал

  • Галерея з переглядом медіа, метаданих і навігацією.
  • Collections, Favorites, Tags і upload workflow.
  • Окрема вкладка Duplicates у slide menu.
  • Групування exact duplicates за хешем.
  • Вибір parent media всередині duplicate group.
  • Exclude/Restore для false-positive елементів у duplicate group.
  • Merge duplicates з правилом parent wins: конфліктні значення не перезаписуються, а відсутні поля, теги, колекції та favorite переносяться на parent.

Документація

Нотатки

  • SQLite-база лежить у GalleryApp/backend/App_Data/gallery.db.
  • Медіафайли лежать у GalleryApp/backend/App_Data/Media.
  • Для network mode потрібно відкрити порти 5000 і 5173 у firewall.
  • Production Compose не використовує run-app.py, npm run dev або dotnet run; frontend збирається у статичні файли і віддається nginx.

cabinet-assistant/Gallery

JavaScript

0

192 commits

updated Jun 4, 2026

See the code

README

Gallery

Recommendations Update

  • Image recommendations use ONNX Runtime embeddings stored in SQLite.
  • Media viewer metadata now includes a Recommended media block rendered from backend similarity results.

Gallery - локальний full-stack застосунок для керування медіаархівом: зображеннями, відео, колекціями, тегами, вибраним, завантаженням і групами точних дублікатів.

Стек

  • Backend: ASP.NET Core Minimal API, .NET 9, SQLite
  • Frontend: React 18, Vite
  • Зберігання медіа: GalleryApp/backend/App_Data/Media
  • Генерація прев'ю: ffmpeg
  • Локальний запуск: run-app.py
  • Production/ZimaOS запуск: Docker Compose + nginx на порті 8095

Структура репозиторію

Gallery/
|-- Docs/               # детальна документація проєкту
|-- GalleryApp/
|   |-- backend/        # API, SQLite, медіафайли та runtime-дані
|   |-- frontend/       # React/Vite-клієнт
|   `-- native/         # локальні native-артефакти
|-- docker-compose.zima.yml          # production build для Docker/ZimaOS
|-- docker-compose.zima.images.yml   # production запуск з GHCR images
|-- App_Data/           # опціональні runtime-дані в корені
|-- tmp/                # тимчасові локальні артефакти
|-- Gallery.sln         # .NET solution для backend
|-- run-app.py          # запуск frontend + backend
`-- README.md           # короткий огляд репозиторію

Швидкий старт

Запускати з кореня репозиторію.

Локально на цій машині

python3 run-app.py --mode machine

У локальній мережі

python3 run-app.py --mode network

Без автоматичного відкриття браузера

python3 run-app.py --mode machine --open-url false

Production/ZimaOS через Docker Compose

docker compose -f docker-compose.zima.yml up --build

Production frontend доступний на http://localhost:8095, а на ZimaOS - http://<zima-ip>:8095. Runtime-дані backend зберігаються у /DATA/AppData/gallery/App_Data; видалення цієї директорії видаляє SQLite-базу, медіафайли, preview cache і model cache.

Вимоги

  • .NET SDK 9
  • Node.js 18+ і npm
  • Python 3
  • ffmpeg для генерації прев'ю відео й GIF

Базові URL

  • Frontend: http://localhost:5173
  • Backend: http://localhost:5000
  • Медіафайли: http://localhost:5000/media/...
  • Production/ZimaOS frontend: http://localhost:8095
  • Production health через nginx: http://localhost:8095/api/health

Ключовий функціонал

  • Галерея з переглядом медіа, метаданих і навігацією.
  • Collections, Favorites, Tags і upload workflow.
  • Окрема вкладка Duplicates у slide menu.
  • Групування exact duplicates за хешем.
  • Вибір parent media всередині duplicate group.
  • Exclude/Restore для false-positive елементів у duplicate group.
  • Merge duplicates з правилом parent wins: конфліктні значення не перезаписуються, а відсутні поля, теги, колекції та favorite переносяться на parent.

Документація

Нотатки

  • SQLite-база лежить у GalleryApp/backend/App_Data/gallery.db.
  • Медіафайли лежать у GalleryApp/backend/App_Data/Media.
  • Для network mode потрібно відкрити порти 5000 і 5173 у firewall.
  • Production Compose не використовує run-app.py, npm run dev або dotnet run; frontend збирається у статичні файли і віддається nginx.