An open API service indexing awesome lists of open source software.

https://github.com/ivanmem/context-upscale

Правый клик по любому изображению → Увеличить → результат открывается в новой вкладке.
https://github.com/ivanmem/context-upscale

Last synced: 26 days ago
JSON representation

Правый клик по любому изображению → Увеличить → результат открывается в новой вкладке.

Awesome Lists containing this project

README

          

# Context Upscale

Правый клик по любому изображению → **Увеличить** → результат открывается в новой вкладке.

Лёгкий набор инструментов — контекстное меню Проводника, расширение Chrome и пользовательский скрипт Tampermonkey — для увеличения изображений с помощью локального GPU-сервера на базе Real-ESRGAN 4x-UltraSharp. Браузерные клиенты отправляют бинарные данные (не URL), что исключает двойную загрузку и проблемы с региональной блокировкой.

## Возможности

- **Контекстное меню Проводника** — правый клик по любому файлу изображения в Проводнике Windows → Увеличить (4x)
- **Расширение Chrome** — нативная интеграция в контекстное меню (MV3)
- **Скрипт Tampermonkey** — работает в любом браузере с Tampermonkey
- **Локальный GPU-сервер** — FastAPI + Real-ESRGAN на вашем железе
- **Ленивая загрузка модели** — модель загружается при первом запросе, выгружается из VRAM после 5 мин простоя
- **Мозаичное увеличение** — обработка больших изображений без OOM
- **Без облачных зависимостей** — всё работает локально

## Архитектура

```
┌─────────────────┐ multipart/form ┌──────────────────┐
│ Меню Проводника │ ── POST /upscale ─→ │ │
│ Расширение / │ ── POST /upscale ─→ │ Сервер FastAPI │
│ Tampermonkey │ ←── JPEG результат │ Real-ESRGAN 4x │
└─────────────────┘ │ localhost:7869 │
└──────────────────┘
```

- Браузер извлекает изображение прямо со страницы (без повторной загрузки)
- Бинарные данные отправляются на локальный сервер через `multipart/form-data`
- Сервер увеличивает изображение на GPU и возвращает JPEG
- Модель автоматически выгружается из VRAM после таймаута простоя (`torch.cuda.empty_cache()`)
- Сервер использует ~30 МБ ОЗУ в простое, GPU свободен

## Требования

- Windows 10/11
- NVIDIA GPU с поддержкой CUDA (рекомендуется RTX 30xx/40xx)
- Драйвер NVIDIA ≥ 530.xx
- Chrome или браузер на базе Chromium (для расширения)
- Расширение Tampermonkey (альтернативный вариант)
- ~4 ГБ свободного места на диске (PyTorch + CUDA + веса модели)

## Установка

### 1. Сервер

Запустите `manage.bat` (автоматически запрашивает права администратора):

```bat
manage.bat
```

Выберите пункт **[1] Полная установка**. Будет выполнено:
- Создание виртуального окружения в `server/.venv`
- Установка PyTorch с CUDA 12.1 и всех зависимостей
- Загрузка весов 4x-UltraSharp (~64 МБ)
- Регистрация автозапуска сервера при входе в Windows

Сервер работает в фоне. Для ручного перезапуска: `server/run-now.bat`

### 2а. Контекстное меню Проводника (опционально)

Запустите `manage.bat` → пункт **[A] Добавить «Увеличить» в контекстное меню Проводника**.

Регистрирует пункт «Увеличить (4x)» в контекстном меню для файлов `.png`, `.jpg`, `.jpeg`, `.webp`, `.bmp`, `.tiff`, `.tif`. Результат открывается в браузере по умолчанию. Для удаления: пункт **[B]** или `manage.bat no-context-menu`.

### 2б. Расширение Chrome

1. Откройте `chrome://extensions`
2. Включите **Режим разработчика** (переключатель справа сверху)
3. Нажмите **Загрузить распакованное расширение**
4. Выберите папку `extension` из этого проекта

Готово. Правый клик по любому изображению покажет пункт **Увеличить**.

### 2в. Скрипт Tampermonkey (альтернатива)

1. Установите [Tampermonkey](https://www.tampermonkey.net/)
2. Запустите `manage.bat` → пункт **[8] Установить скрипт Tampermonkey**
3. Или установите вручную из `tampermonkey/dist/upscale.user.js`

> **Примечание:** Скрипт отслеживает последнее наведённое изображение через `mouseover`. Наведите курсор на изображение перед выбором команды меню. Когда контекстное меню открыто, события мыши блокируются браузером, поэтому цель не изменится случайно.

## Использование

| Действие | Результат |
|---|---|
| Правый клик по изображению → **Увеличить** | Открытие увеличенного изображения в новой вкладке |
| Первое увеличение после простоя | ~2-3 сек (загрузка модели в VRAM) |
| Последующие увеличения | Мгновенно |
| Проверка состояния сервера | `GET http://127.0.0.1:7869/health` |

## Управление

### Интерактивное меню

Запустите `manage.bat` без аргументов:

| Пункт | Действие |
|---|---|
| [1] | Полная установка (venv + зависимости + веса + автозапуск + старт) |
| [2] | Запустить сервер |
| [3] | Остановить сервер |
| [4] | Установить зависимости |
| [5] | Загрузить веса модели |
| [6] | Включить автозапуск |
| [7] | Отключить автозапуск |
| [8] | Установить скрипт Tampermonkey |
| [9] | Удалить (остановка + отключение автозапуска + удаление контекстного меню) |
| [A] | Добавить «Увеличить» в контекстное меню Проводника |
| [B] | Удалить «Увеличить» из контекстного меню Проводника |

### Режим командной строки

```bat
manage.bat start # Запустить сервер
manage.bat stop # Остановить сервер
manage.bat status # Статус сервера и автозапуска
manage.bat install # Полная установка
manage.bat deps # Установить зависимости Python
manage.bat weights # Загрузить веса модели
manage.bat autostart # Включить автозапуск
manage.bat no-autostart # Отключить автозапуск
manage.bat tampermonkey # Собрать и установить скрипт Tampermonkey
manage.bat context-menu # Добавить контекстное меню Проводника
manage.bat no-context-menu # Удалить контекстное меню Проводника
manage.bat uninstall # Остановка + отключение автозапуска + удаление контекстного меню
```

## Структура проекта

```
context-upscale/
├── extension/ # Расширение Chrome (MV3)
│ ├── manifest.json
│ ├── background.js # Контекстное меню + fetch + POST
│ └── content.js # Уведомления + отображение результата
├── tampermonkey/ # Скрипт Tampermonkey
│ ├── entry.js # Исходный код скрипта (точка входа Vite)
│ └── dist/ # Собранный скрипт
├── lib/ # Общая логика (используется обоими клиентами)
│ └── upscale.js # Проверка здоровья + клиент API увеличения
├── server/ # Python GPU-сервер
│ ├── app.py # FastAPI + Real-ESRGAN
│ ├── upscale-file.ps1 # Обработчик контекстного меню Проводника
│ ├── requirements.txt
│ ├── run-now.bat # Перезапуск сервера (скрытый)
│ ├── start-silent.vbs # Обёртка тихого запуска
│ └── weights/ # Веса модели (игнорируется в git)
├── manage.bat # Единый инструмент управления
├── vite.config.tm.js # Конфигурация Vite для сборки Tampermonkey
└── package.json
```

## Устранение неполадок

**«Сервер увеличения не запущен»**
→ Запустите `server/run-now.bat`. Проверьте статус: `curl http://127.0.0.1:7869/health`. Логи: `server/server.log`

**Health показывает `device: cpu`**
→ Переустановите PyTorch с CUDA:
```bat
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 --force-reinstall
```

**Медленное первое увеличение**
→ Ожидаемо: модель загружается в VRAM при первом запросе (~2-3 сек). Последующие запросы мгновенны.

**Tampermonkey: ошибка «Tainted canvas»**
→ Нормальное поведение фолбэка. Скрипт сначала пытается извлечь через canvas, затем переключается на `fetch()` в контексте страницы.

**Полное удаление**
1. Запустите `manage.bat` → пункт [9]
2. Удалите расширение в `chrome://extensions`
3. Удалите папку проекта

## Лицензия

MIT