{"id":50477555,"url":"https://github.com/ivanmem/context-upscale","last_synced_at":"2026-06-01T14:31:21.871Z","repository":{"id":361431739,"uuid":"1254442491","full_name":"ivanmem/context-upscale","owner":"ivanmem","description":"Правый клик по любому изображению → Увеличить → результат открывается в новой вкладке.","archived":false,"fork":false,"pushed_at":"2026-05-30T15:38:07.000Z","size":48,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-30T17:12:28.753Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Batchfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ivanmem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-30T15:14:19.000Z","updated_at":"2026-05-30T15:38:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ivanmem/context-upscale","commit_stats":null,"previous_names":["ivanmem/context-upscale"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ivanmem/context-upscale","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanmem%2Fcontext-upscale","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanmem%2Fcontext-upscale/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanmem%2Fcontext-upscale/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanmem%2Fcontext-upscale/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ivanmem","download_url":"https://codeload.github.com/ivanmem/context-upscale/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ivanmem%2Fcontext-upscale/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33780085,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-01T14:31:19.681Z","updated_at":"2026-06-01T14:31:21.856Z","avatar_url":"https://github.com/ivanmem.png","language":"Batchfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Context Upscale\n\nПравый клик по любому изображению → **Увеличить** → результат открывается в новой вкладке.\n\nЛёгкий набор инструментов — контекстное меню Проводника, расширение Chrome и пользовательский скрипт Tampermonkey — для увеличения изображений с помощью локального GPU-сервера на базе Real-ESRGAN 4x-UltraSharp. Браузерные клиенты отправляют бинарные данные (не URL), что исключает двойную загрузку и проблемы с региональной блокировкой.\n\n## Возможности\n\n- **Контекстное меню Проводника** — правый клик по любому файлу изображения в Проводнике Windows → Увеличить (4x)\n- **Расширение Chrome** — нативная интеграция в контекстное меню (MV3)\n- **Скрипт Tampermonkey** — работает в любом браузере с Tampermonkey\n- **Локальный GPU-сервер** — FastAPI + Real-ESRGAN на вашем железе\n- **Ленивая загрузка модели** — модель загружается при первом запросе, выгружается из VRAM после 5 мин простоя\n- **Мозаичное увеличение** — обработка больших изображений без OOM\n- **Без облачных зависимостей** — всё работает локально\n\n## Архитектура\n\n```\n┌─────────────────┐   multipart/form   ┌──────────────────┐\n│ Меню Проводника │ ── POST /upscale ─→ │                  │\n│ Расширение /    │ ── POST /upscale ─→ │  Сервер FastAPI  │\n│ Tampermonkey    │ ←── JPEG результат │  Real-ESRGAN 4x  │\n└─────────────────┘                     │  localhost:7869  │\n                                        └──────────────────┘\n```\n\n- Браузер извлекает изображение прямо со страницы (без повторной загрузки)\n- Бинарные данные отправляются на локальный сервер через `multipart/form-data`\n- Сервер увеличивает изображение на GPU и возвращает JPEG\n- Модель автоматически выгружается из VRAM после таймаута простоя (`torch.cuda.empty_cache()`)\n- Сервер использует ~30 МБ ОЗУ в простое, GPU свободен\n\n## Требования\n\n- Windows 10/11\n- NVIDIA GPU с поддержкой CUDA (рекомендуется RTX 30xx/40xx)\n- Драйвер NVIDIA ≥ 530.xx\n- Chrome или браузер на базе Chromium (для расширения)\n- Расширение Tampermonkey (альтернативный вариант)\n- ~4 ГБ свободного места на диске (PyTorch + CUDA + веса модели)\n\n## Установка\n\n### 1. Сервер\n\nЗапустите `manage.bat` (автоматически запрашивает права администратора):\n\n```bat\nmanage.bat\n```\n\nВыберите пункт **[1] Полная установка**. Будет выполнено:\n- Создание виртуального окружения в `server/.venv`\n- Установка PyTorch с CUDA 12.1 и всех зависимостей\n- Загрузка весов 4x-UltraSharp (~64 МБ)\n- Регистрация автозапуска сервера при входе в Windows\n\nСервер работает в фоне. Для ручного перезапуска: `server/run-now.bat`\n\n### 2а. Контекстное меню Проводника (опционально)\n\nЗапустите `manage.bat` → пункт **[A] Добавить «Увеличить» в контекстное меню Проводника**.\n\nРегистрирует пункт «Увеличить (4x)» в контекстном меню для файлов `.png`, `.jpg`, `.jpeg`, `.webp`, `.bmp`, `.tiff`, `.tif`. Результат открывается в браузере по умолчанию. Для удаления: пункт **[B]** или `manage.bat no-context-menu`.\n\n### 2б. Расширение Chrome\n\n1. Откройте `chrome://extensions`\n2. Включите **Режим разработчика** (переключатель справа сверху)\n3. Нажмите **Загрузить распакованное расширение**\n4. Выберите папку `extension` из этого проекта\n\nГотово. Правый клик по любому изображению покажет пункт **Увеличить**.\n\n### 2в. Скрипт Tampermonkey (альтернатива)\n\n1. Установите [Tampermonkey](https://www.tampermonkey.net/)\n2. Запустите `manage.bat` → пункт **[8] Установить скрипт Tampermonkey**\n3. Или установите вручную из `tampermonkey/dist/upscale.user.js`\n\n\u003e **Примечание:** Скрипт отслеживает последнее наведённое изображение через `mouseover`. Наведите курсор на изображение перед выбором команды меню. Когда контекстное меню открыто, события мыши блокируются браузером, поэтому цель не изменится случайно.\n\n## Использование\n\n| Действие | Результат |\n|---|---|\n| Правый клик по изображению → **Увеличить** | Открытие увеличенного изображения в новой вкладке |\n| Первое увеличение после простоя | ~2-3 сек (загрузка модели в VRAM) |\n| Последующие увеличения | Мгновенно |\n| Проверка состояния сервера | `GET http://127.0.0.1:7869/health` |\n\n## Управление\n\n### Интерактивное меню\n\nЗапустите `manage.bat` без аргументов:\n\n| Пункт | Действие |\n|---|---|\n| [1] | Полная установка (venv + зависимости + веса + автозапуск + старт) |\n| [2] | Запустить сервер |\n| [3] | Остановить сервер |\n| [4] | Установить зависимости |\n| [5] | Загрузить веса модели |\n| [6] | Включить автозапуск |\n| [7] | Отключить автозапуск |\n| [8] | Установить скрипт Tampermonkey |\n| [9] | Удалить (остановка + отключение автозапуска + удаление контекстного меню) |\n| [A] | Добавить «Увеличить» в контекстное меню Проводника |\n| [B] | Удалить «Увеличить» из контекстного меню Проводника |\n\n### Режим командной строки\n\n```bat\nmanage.bat start         # Запустить сервер\nmanage.bat stop          # Остановить сервер\nmanage.bat status        # Статус сервера и автозапуска\nmanage.bat install       # Полная установка\nmanage.bat deps          # Установить зависимости Python\nmanage.bat weights       # Загрузить веса модели\nmanage.bat autostart     # Включить автозапуск\nmanage.bat no-autostart  # Отключить автозапуск\nmanage.bat tampermonkey    # Собрать и установить скрипт Tampermonkey\nmanage.bat context-menu    # Добавить контекстное меню Проводника\nmanage.bat no-context-menu # Удалить контекстное меню Проводника\nmanage.bat uninstall       # Остановка + отключение автозапуска + удаление контекстного меню\n```\n\n## Структура проекта\n\n```\ncontext-upscale/\n├── extension/              # Расширение Chrome (MV3)\n│   ├── manifest.json\n│   ├── background.js       # Контекстное меню + fetch + POST\n│   └── content.js          # Уведомления + отображение результата\n├── tampermonkey/           # Скрипт Tampermonkey\n│   ├── entry.js            # Исходный код скрипта (точка входа Vite)\n│   └── dist/               # Собранный скрипт\n├── lib/                    # Общая логика (используется обоими клиентами)\n│   └── upscale.js          # Проверка здоровья + клиент API увеличения\n├── server/                 # Python GPU-сервер\n│   ├── app.py              # FastAPI + Real-ESRGAN\n│   ├── upscale-file.ps1    # Обработчик контекстного меню Проводника\n│   ├── requirements.txt\n│   ├── run-now.bat         # Перезапуск сервера (скрытый)\n│   ├── start-silent.vbs    # Обёртка тихого запуска\n│   └── weights/            # Веса модели (игнорируется в git)\n├── manage.bat              # Единый инструмент управления\n├── vite.config.tm.js       # Конфигурация Vite для сборки Tampermonkey\n└── package.json\n```\n\n## Устранение неполадок\n\n**«Сервер увеличения не запущен»**\n→ Запустите `server/run-now.bat`. Проверьте статус: `curl http://127.0.0.1:7869/health`. Логи: `server/server.log`\n\n**Health показывает `device: cpu`**\n→ Переустановите PyTorch с CUDA:\n```bat\npip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 --force-reinstall\n```\n\n**Медленное первое увеличение**\n→ Ожидаемо: модель загружается в VRAM при первом запросе (~2-3 сек). Последующие запросы мгновенны.\n\n**Tampermonkey: ошибка «Tainted canvas»**\n→ Нормальное поведение фолбэка. Скрипт сначала пытается извлечь через canvas, затем переключается на `fetch()` в контексте страницы.\n\n**Полное удаление**\n1. Запустите `manage.bat` → пункт [9]\n2. Удалите расширение в `chrome://extensions`\n3. Удалите папку проекта\n\n## Лицензия\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivanmem%2Fcontext-upscale","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fivanmem%2Fcontext-upscale","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fivanmem%2Fcontext-upscale/lists"}