90 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# rimpac_gif_creator
Локальная Windows-утилита для записи выделенной области экрана в маленький GIF через вложенный `ffmpeg.exe`.
## Запуск
1. Один раз установите локальный FFmpeg, если `vendor/ffmpeg/ffmpeg.exe` отсутствует:
```powershell
powershell -ExecutionPolicy Bypass -File .\tools\install_ffmpeg.ps1
```
2. Установите локальный Gifsicle для дополнительного сжатия, если `vendor/gifsicle/gifsicle.exe` отсутствует:
```powershell
powershell -ExecutionPolicy Bypass -File .\tools\install_gifsicle.ps1
```
3. Запустите приложение двойным кликом по `rimpac_gif_creator.vbs`.
`run.bat` оставлен как технический запуск с консолью, если нужно увидеть ошибки.
## Тесты
Быстрый набор unit/integrity-тестов запускается без дополнительных зависимостей:
```powershell
python -m unittest discover -s tests -v
```
Тесты проверяют логику версий и обновлений, утилиты сборки GIF, кастомный установщик, Stream Deck-плагин, тёмный логотип, а также то, что публичный release-payload не содержит исходники приложения и установщика.
## Установка и обновления
Для продуктовой сборки используется кастомный русский GUI-инсталлятор:
```powershell
powershell -ExecutionPolicy Bypass -File .\tools\build_custom_installer.ps1 -PublicRepoUrl "https://git.safe-cap.com/RIMPAC/Gif_Generator_Releases.git"
```
Скрипт готовит приватную промежуточную папку `build/package/rimpac_gif_creator`, компилирует `app.py` и `updater.py` в `app.pyc` / `updater.pyc`, собирает публичный `build/release_repo` без `.py` исходников приложения, а затем упаковывает этот payload внутрь одного `build/installer/RIMPAC_GIF_Creator_Setup.exe` через PyInstaller.
Инсталлятор на русском языке, по умолчанию ставит программу в `C:\RIMPAC\GIF Creator`, создаёт ярлык `RIMPAC GIF Creator` на рабочем столе и использует иконку из `assets/rimpac_gif_creator.ico`. Это один `RIMPAC_GIF_Creator_Setup.exe`: `ffmpeg.exe`, `ffprobe.exe`, `gifsicle.exe` и release-payload кладутся внутрь установщика заранее, без видимых командных строк, UAC-запросов и загрузок после установки. В главном окне установщика есть явная галка Stream Deck с объяснением: если у пользователя есть Stream Deck, инсталлятор дополнительно ставит плагин в `%APPDATA%\Elgato\StreamDeck\Plugins`; если галочку не ставить, устанавливается только программа и ярлык.
В папку установки также кладётся `Uninstall.exe`. Установщик регистрирует удаление в Windows для текущего пользователя, поэтому программу можно удалить через `Приложения и компоненты` или прямым запуском `C:\RIMPAC\GIF Creator\Uninstall.exe`. Удалятор убирает папку программы, ярлык с рабочего стола, запись удаления Windows и, по галочке, Stream Deck-плагин.
Текущая версия release-пакета: `beta 0.1`. Версия хранится в `version.json` и поднимается только вручную перед выпуском новой версии.
Кнопка `Проверить обновления` запускает `updater.pyc`: он делает `git fetch`, читает `version.json` из установленной программы и из `origin/main`, а затем обновляется только если в публичном релизном репозитории версия новее и канал совпадает. Если версия такая же, новый коммит в релизном git не будет устанавливаться автоматически. При наличии новой версии updater закрывает программу, выполняет `git pull --ff-only`, обновляет зависимости из `requirements.txt` и запускает программу снова. За счёт git скачиваются только изменившиеся объекты, а не весь проект архивом.
Публичный URL обновлений хранится в `update_config.json`: `https://git.safe-cap.com/RIMPAC/Gif_Generator_Releases.git`. В этом репозитории должны лежать только release-файлы (`*.pyc`, конфиги, иконки, launcher-скрипты), без `app.py` и `updater.py`.
## Управление
- Зажмите левую кнопку мыши и выделите прямоугольник.
- До начала записи можно тянуть рамку за края/углы, чтобы изменить размер, или за центр, чтобы перенести всю область.
- На панели рамки кнопка `Папка` открывает `generated`, кнопка `Очист.` удаляет все GIF из этой папки.
- Нажмите красный круг, чтобы начать запись.
- Во время записи красный круг становится квадратом, а рамка светится красным.
- Во время записи большой оверлей скрывается: остаются только тонкая красная рамка и маленькая панель, а клики за их пределами проходят в игру/систему.
- Нажмите красный квадрат, чтобы остановить запись.
- Нажмите крестик на панели, чтобы отменить и закрыть приложение.
- После записи у выбранной рамки появится предпросмотр: двумя ползунками можно обрезать начало и конец.
- При движении конечного ползунка предпросмотр сразу показывает последний кадр выбранного диапазона.
- На экране предпросмотра или прогресса `Escape` отменяет операцию и удаляет временные файлы.
- Нажмите `Создать GIF`.
- После нажатия `Создать GIF` окно предпросмотра заменяется экраном прогресса там, где была выбранная рамка.
- После сборки в этом же окне показывается итоговый размер GIF и статус копирования в буфер.
- После успешной сборки это же окно остается открытым, пока вы не закроете его крестиком или `Escape`.
- После галочки GIF уже лежит в буфере обмена как файл и сохраняется в `generated`.
- Кнопки `Папка GIF` / `Папка` открывают `generated`, кнопки `Очистить` / `Очист.` удаляют все GIF из этой папки.
GIF создается с частотой 12 кадров/с, шириной до 640 px, ограниченной палитрой и финальной оптимизацией через локальный `gifsicle`.
Бинарники `ffmpeg.exe`, `ffprobe.exe` и `gifsicle.exe` не хранятся в git, чтобы репозиторий не раздувался. Их можно восстановить скриптами из `tools`.
При запуске приложение автоматически открывает оверлей на том мониторе, где сейчас находится курсор. Захват кадров выполняется через `mss`, чтобы корректно работать с несколькими мониторами.
## Stream Deck
Плагин лежит в `streamdeck/com.rimpac.gif-creator.sdPlugin` и установлен в:
```text
C:\Users\User\AppData\Roaming\Elgato\StreamDeck\Plugins\com.rimpac.gif-creator.sdPlugin
```
В Stream Deck ищите категорию `RIMPAC` и кнопку `GIF Creator`.
Если кнопка не появилась сразу, перезапустите приложение Stream Deck.