Оставьте главное. Локальный редактор для кадрирования, уменьшения и AI-увеличения видео и фотографий с тёмным интерфейсом в браузере.
Перетащите файл, выберите область и задайте масштаб — получите готовый MP4, PNG, JPEG или WebP. Файлы обрабатываются на вашем компьютере через FFmpeg и не отправляются в интернет.
Для запуска готовой версии Visual Studio не нужна. .NET включён в portable-сборку; FFmpeg автоматически загружается при первом запуске.
- Отдельные вертикальные вкладки видео и фото с независимыми файлами и настройками в пределах открытой страницы.
- Открытие статических JPG, PNG и WebP через выбор файла, drag-and-drop или вставку из буфера обмена.
- Экспорт фото в PNG, JPEG или WebP, сохранение прозрачности в PNG/WebP и удаление EXIF/GPS.
- Открытие видео перетаскиванием, через выбор файла или по HTTP/HTTPS-ссылке через yt-dlp.
- Обрезка по времени: два бегунка на общей шкале, точное время границ и длительность отрезка.
- Проигрыватель с перемоткой и переключением между исходником и предпросмотром кропа.
- Рамка с изменением размера мышью и точными координатами в пикселях.
- Пропорции: свободные, оригинальные, 1:1, 16:9, 9:16, 4:3, 3:4, 4:5 и 21:9.
- Уменьшение до 1–100% от выбранной области с показом итогового разрешения.
- Выбор FPS и сохранение звука, включённое по умолчанию.
- Четыре уровня качества видео с отображением CRF: 16, 20, 23 и 28.
- Локальный Upscaler: восемь AI-моделей, допустимый для модели масштаб и проба до трёх секунд с синхронным сравнением.
- Интерполяция RIFE ×2/×3 от исходного FPS, отдельно или вместе с Upscaler; длительность и скорость звука сохраняются.
- Метаданные исходника, реальный прогресс, отмена и скачивание результата.
- Настраиваемый порт, включая автоматический выбор свободного.
Откройте вкладку «Фото» слева. Фото можно выбрать кнопкой, перетащить в окно или вставить через Ctrl+V, если фокус не находится в поле ввода. При перетаскивании приложение само переключается между режимами видео и фото. В каждой вкладке сохраняются собственный файл, crop и настройки до перезагрузки страницы; после запуска всегда открывается видео.
Поддерживаются только статические JPG/JPEG, PNG и WebP. GIF, APNG, анимированный WebP, BMP, TIFF и HEIC не открываются. URL-импорт предназначен только для видео. При загрузке фактический формат проверяется независимо от расширения, EXIF-ориентация применяется к пикселям, а служебные метаданные удаляются. Защитные лимиты задаются параметрами Media:MaxPhotoSide (32768) и Media:MaxPhotoPixels (100 000 000).
Фото можно кадрировать теми же пресетами и точными координатами, уменьшить до 1–100% либо увеличить существующим Upscaler. Без AI сохраняются точные размеры crop, включая нечётные стороны; с AI размер равен crop × выбранный множитель. Статичное окно «До / После» поддерживает разделитель, переключение, размещение рядом, масштаб и панораму.
Результат сохраняется в PNG, JPEG или WebP. Для JPEG/WebP доступно качество 1–100, по умолчанию 92. PNG и WebP сохраняют прозрачность; JPEG заменяет прозрачные области белым. EXIF, GPS, дата съёмки и сведения о камере в результат не переносятся. Готовый файл сохраняется в output, временные нормализованные и AI-файлы удаляются после успеха, ошибки или отмены.
Видеоэкспорт, фотоэкспорт, AI-пробы и установка моделей используют общую блокировку: одновременно выполняется одна тяжёлая операция. Между вкладками можно переключаться и готовить второй файл, пока текущая операция продолжается.
Готовая сборка предназначена для Windows x64. Нужен браузер с поддержкой кодека вашего видео; для начала подойдёт MP4/H.264.
- Откройте Releases.
- Скачайте VidCropper-win-x64.zip.
- Полностью распакуйте архив в отдельную папку.
- Запустите
Start.cmdдвойным щелчком. При первом запуске потребуется интернет: приложение загрузит FFmpeg 7.0.2 с GitHub сборщика Gyan.dev, проверит SHA-256 и распакует инструменты в свою папкуtools. Затем откроется редактор. Следующие запуски работают без этой загрузки. - Перетащите видео, настройте рамку и нажмите «Экспортировать видео».
- После завершения нажмите «Скачать MP4».
Не требуется устанавливать Visual Studio, .NET, Node.js или Python. FFmpeg подготавливается автоматически, без изменения PATH и установки служб. Не переносите один VidCropper.exe отдельно: для работы нужна вся распакованная папка.
Source code (zip)в Releases иCode → Download ZIP— это исходники, а не готовая программа. Если portable-архива пока нет, используйте инструкцию ниже.
Для завершения работы нажмите «Завершить» в редакторе или Ctrl+C в консоли сервера. Закрытие вкладки само по себе не останавливает приложение.
Антивирус или защита браузера могут заблокировать скачивание либо запуск portable-сборки. Ложные срабатывания возможны, однако конкретное предупреждение нельзя считать ложным без дополнительной проверки.
Если сработала защита, не отключайте антивирус и не добавляйте файл в исключения только на основании этого README. Посмотрите название обнаруженной угрозы и при необходимости отправьте файл на проверку поставщику антивируса. Файл SHA256SUMS.txt в релизе позволяет проверить совпадение архива с опубликованным, но сам по себе не доказывает его безопасность.
Вы всегда можете проверить код и собрать приложение самостоятельно из исходников, не используя готовый ZIP. Visual Studio для этого не нужна: достаточно .NET 10 SDK и FFmpeg. Пошаговая инструкция — в разделе «Запуск из исходников». Самостоятельная сборка позволяет контролировать используемый код, но не гарантирует отсутствия предупреждений антивируса.
Потребуются только .NET 10 SDK и FFmpeg с ffprobe. Редактор кода и Git необязательны.
-
Установите .NET 10 SDK для Windows x64. Выбирайте раздел SDK, одного Runtime для сборки исходников недостаточно.
-
Скачайте Windows-сборку FFmpeg по ссылке с официальной страницы загрузки. Нужны
ffmpeg.exe,ffprobe.exeи поддержка libx264/AAC; проверена FFmpeg 7.0.2. -
Скачайте репозиторий через Code → Download ZIP и распакуйте его либо клонируйте через Git.
-
Укажите полные пути к FFmpeg и ffprobe в appsettings.json, например:
"FfmpegPath": "D:\\Tools\\ffmpeg\\bin\\ffmpeg.exe", "FfprobePath": "D:\\Tools\\ffmpeg\\bin\\ffprobe.exe"
Это поля внутри секции
Media; остальные настройки файла сохраните. Если обе программы уже доступны вPATH, пути можно оставить пустыми. -
Запустите
Start.cmdиз корня проекта. Приложение соберётся и откроет браузер. При первой сборке может потребоваться интернет для восстановления компонентов .NET.
Альтернативный запуск из PowerShell в папке проекта:
dotnet run -- --OpenBrowser=trueДля проверки установки SDK выполните dotnet --list-sdks: в списке должна быть версия 10.0.x.
Нажмите «Открыть видео по ссылке», вставьте адрес и нажмите «Проверить ссылку». Приложение запрашивает информацию об источнике до скачивания видео, затем показывает подходящий выбор качества:
- Для прямого файла — «Оригинал». Исходное разрешение, в том числе нестандартное или вертикальное, не сравнивается с прежним выбором 1080p. Тип определяется по данным источника, а не расширению: поддерживаются ссылки без
.mp4и перенаправления. - Для страниц видеосервисов и потоков — «Лучшее доступное» и разрешения, которые сообщил источник. Число p означает высоту кадра. Если варианты разрешения не сообщаются, доступен только автоматический выбор.
Нажмите «Скачать», чтобы открыть видео в редакторе. При фиксированном качестве потоков приложение не подставляет меньшее разрешение и не увеличивает исходник. Изменение ссылки сбрасывает список качества; проверка также повторяется, если информация устарела. Доступность форматов на сервисе может измениться между проверкой и скачиванием.
Инструменты yt-dlp.exe и deno.exe проверяются только по нажатию кнопки, в папке tools рядом с приложением (при запуске из исходников — в корне проекта).
Если инструменты отсутствуют, popup предложит скачать их с официальных GitHub Releases. После нажатия «Скачать инструменты» приложение скачает только отсутствующие файлы, проверит SHA-256 по данным GitHub и автоматически проверит источник видео. Установка предназначена для Windows x64; PATH и системные настройки не меняются. Уже установленные файлы автоматически не обновляются.
Для ручной установки скачайте yt-dlp.exe и архив Deno для Windows x64 (deno-x86_64-pc-windows-msvc.zip). Поместите yt-dlp.exe и извлечённый deno.exe в tools, затем нажмите «Проверить установку и ссылку». Deno нужен для обработки JavaScript на YouTube. FFmpeg и ffprobe используются из существующей настройки приложения.
Popup показывает этап и прогресс, позволяет отменить операцию. Закрытие popup или вкладки также отменяет текущую загрузку. Незавершённые файлы удаляются; ранее установленный инструмент остаётся в tools.
Полученное видео автоматически открывается в редакторе с локального сервера, без повторной передачи файла из браузера. Приложение подготавливает MP4: совместимые H.264/AAC-дорожки копируются, остальные преобразуются в H.264/AAC. Преобразование может занять время и изменить качество. Готовый исходник сохраняется в папке downloads в корне VidCropper и остаётся после завершения сессии. Отредактированный результат сохраняйте через экспорт.
Поддерживаются одиночные видео с сайтов, поддерживаемых yt-dlp, и прямые ссылки на видео. Плейлисты отклоняются до загрузки; используйте отдельную ссылку на ролик. Прямые трансляции не поддерживаются. На размер скачанного и подготовленного файла распространяется Media:MaxUploadBytes (по умолчанию 10 ГБ); для временных дорожек и обработки потребуется дополнительное место. Максимальное время операции — 2 часа.
Видео с возрастным ограничением на YouTube могут не скачаться. Приложение не читает cookies браузера, не выполняет вход в аккаунт и игнорирует внешние конфигурации и плагины yt-dlp. Закрытые, удалённые или ограниченные сайтом видео могут быть недоступны. При изменениях сайтов может потребоваться вручную обновить yt-dlp в tools.
В секции Upscaler включите «Включить AI-увеличение», выберите модель и доступный для неё итоговый масштаб. По умолчанию AI выключен, выбраны Nomos8k SPAN Weak и ×2. Настройки сохраняются при смене видео в открытой странице, но сбрасываются после её перезагрузки.
| Модель | Назначение |
|---|---|
| Nomos8k SPAN Weak | Относительно чистый исходник, мягкое восстановление |
| Nomos8k SPAN Medium | Умеренные дефекты |
| Nomos8k SPAN Strong | Более сильные дефекты; возможна потеря мелких деталей |
| 4x-SPANkendata | Чистое реалистичное видео и фотографии без сильных дефектов |
| Real-ESRGAN x4plus | Универсальное увеличение обычного видео |
| Real-ESRGAN General x4v3 (RealisticVideo) | Быстрое мягкое восстановление реалистичного видео |
| OpenProteus | Бережное увеличение чистого HD/FHD-видео; только ×2 |
| Real-ESRGAN AnimeVideo v3 | Аниме и рисованное видео |
Модели обрабатывают кадры локально. Python и PyTorch не требуются. Нужны Windows x64 и совместимая с исполнителем видеокарта/драйвер Vulkan; наличие GPU само по себе не гарантирует совместимость. Проверка модели выполняется перед активацией пакета; её можно повторить кнопкой «Проверить GPU / файлы». Автоматического перехода на CPU нет.
Установка по требованию. Нажмите «Скачать необходимые компоненты». Семейство SPAN использует официальный архив 20240831-055257 (16 553 410 байт), уже содержащий Nomos8k и SPANkendata. Real-ESRGAN x4plus и AnimeVideo используют закреплённый realesrgan-ncnn-vulkan-20220424-windows.zip (45 474 481 байт). Для компактных RealisticVideo и OpenProteus используется совместимый upscayl-bin вместе с двумя закреплёнными NCNN-архивами моделей; общий объём этого пакета — 5 827 553 байта. Каждый артефакт имеет отдельные ожидаемые размер и SHA-256, а установка сохраняет их контрольные суммы в квитанции пакета. При переключении между моделями установленного семейства повторная загрузка не нужна. При обычном запуске ничего не скачивается. Пакеты хранятся в tools/ai, не меняют PATH и не включаются в portable-поставку.
Обновление и откат. Новый каталог приходит с новой версией VidCropper. Если для семейства доступен более новый проверенный пакет, появляется кнопка «Обновить AI-модуль». Он устанавливается рядом со старым и активируется только после проверки файлов и модели на GPU. При неудаче прежняя версия остаётся активной. Кнопка «Вернуться к предыдущей версии» переключает на сохранённый рабочий пакет; выбор сохраняется между запусками. При повреждении файлов доступно явное восстановление. Фоновых обновлений, обращения к upstream latest и автоматического удаления старых версий нет. Обновления блокируются на время обработки.
Размер и качество. AI получает область crop в исходном разрешении. Процент уменьшения временно блокируется; после выключения AI он снова действует с прежним значением. Итоговый масштаб считается от crop. Модели Nomos8k, SPANkendata, x4plus и RealisticVideo работают в родном ×4 с последующим уменьшением Lanczos до выбранных ×2/×3; AnimeVideo использует родную модель соответствующего масштаба. OpenProteus нативно работает в ×2, поэтому для неё доступен только ×2. Выбор ×2 для модели ×4 не сокращает собственно вычисления модели. Размер результата округляется вниз до чётных пикселей; родной AI-результат ограничен 32768 пикселями по стороне. Без интерполяции FPS, звук и CRF применяются как при обычном экспорте. При включённой интерполяции частота рассчитывается от исходника, а увеличение разрешения выполняется перед RIFE.
Проба до 3 секунд. Создаёт сравнение от текущей позиции внутри выбранного отрезка; на его конце берёт последние доступные до трёх секунд. Окно «До / После» синхронно воспроизводит два клипа без звука и позволяет перематывать их. Используются выбранные crop, масштаб, CRF и все включённые AI-эффекты. При интерполяции вариант «До» сохраняет исходную частоту, а вариант «После» получает ×2/×3 FPS. Проба не заменяет результат полного экспорта. Закрытие окна отменяет обработку пробы и освобождает её файлы.
Ресурсы и отмена. AI может работать значительно медленнее обычного экспорта и изменять мелкие детали или давать мерцание между кадрами. Для оценки используйте пробу. При включённом Upscaler весь выбранный отрезок сначала извлекается в PNG без потерь: 00000001.png, 00000002.png и далее. Кадры хранятся в temp/ai/<сессия>/<задача> в корне приложения. Затем модель запускается один раз на всю папку, после проверки результатов собирается MP4. Для пробы вариант «До» собирается из той же исходной последовательности. PNG могут занимать десятки гигабайт; все кадры в RAM одновременно не загружаются. При остатке менее 512 МиБ на диске обработка прекращается; этот резерв не гарантирует места для всего ролика. Кадры очищаются после успеха, ошибки и отмены; после аварийного завершения папка может остаться, автоматическая очистка старых сессий не выполняется. Обычный экспорт без AI не создаёт PNG. Одновременно выполняется одна обработка: экспорт или проба. Отмена останавливает дочерние процессы и удаляет незавершённые результаты. Установленные пакеты остаются на диске.
Включите «Интерполяция кадров», выберите модель и ×2 или ×3. По умолчанию выбраны RIFE 4.26 и ×2, сам эффект выключен. Например, исходные 30 FPS превращаются в 60 или 90 FPS. Длительность отрезка и скорость звука сохраняются; SlowMo нет. Обычный выбор FPS блокируется и восстанавливает прежнее значение после выключения эффекта. Дробные частоты, включая 24000/1001 и 30000/1001, сохраняются точно при расчёте.
Установка. Кнопка «Скачать полный пакет» загружает неизменённый windows.zip из TNTwise/rife-ncnn-vulkan 20250112: 826 923 873 байта (788,6 МиБ). SHA-256: 42ed35e115b026f222386648920218cb8a9c7ae1e23698a7363bdd2e1455aba3. Все 47 моделей сохраняются в tools/ai/rife/20250112, включая старые. В выборе доступны 37 моделей семейства v4 и v3.9, поддерживающих оба множителя. Переключение не требует повторной загрузки. Пакет не включён в portable-архив приложения.
Установка, восстановление и откат RIFE проверяют файлы без запуска GPU. Кнопка «Проверить GPU / файлы» запускает проверку выбранной модели по запросу. Нужны Windows x64, Vulkan и совместимый драйвер. Успешная проверка файлов не означает, что модель уже проверена на вашей видеокарте.
Обработка. Сначала применяются обрезка и crop, затем изменение разрешения (включая Upscaler), после него RIFE. Множитель кадров независим от масштаба Upscaler: можно одновременно выбрать увеличение разрешения ×4 и частоты ×3. Видео с переменным FPS нормализуется по временным меткам к постоянной средней частоте исходника; исходная переменная сетка в результате не сохраняется. На обнаруженных монтажных склейках (scdet, порог 10) промежуточные кадры заменяются предыдущим исходным кадром. Последний кадр удерживается до конца отрезка; точность длительности ограничена итоговым кадром.
Проба и ресурсы. «Проба до 3 секунд» в любом AI-блоке применяет все включённые эффекты. Выполните пробу самостоятельно: на быстрых движениях, перекрытиях объектов и мелких деталях возможны артефакты. PNG-кадры хранятся в temp/ai и удаляются после обработки или отмены. Интерполяция увеличивает их количество в 2/3 раза; сочетание с Upscaler требует больше дискового пространства и времени. Экспорт, проба и установка используют общую блокировку обработки.
Потоки подготовки PNG. Параметр Media.PngThreads в appsettings.json управляет кодированием временных PNG при извлечении кадров и подготовке итогового разрешения. По умолчанию 0: половина доступных процессу логических процессоров, с округлением вниз, минимум один поток. Например, при 16 доступных потоках используется 8. Положительное значение задаёт число потоков явно; 1 возвращает последовательное кодирование, отрицательные значения не допускаются. Изменение применяется после перезапуска приложения. Качество и параметры сжатия PNG сохраняются; увеличение числа потоков может повысить расход оперативной памяти. Этот параметр не управляет RIFE, Upscaler или финальным H.264-кодированием.
По умолчанию используется 5180. Из PowerShell в папке приложения можно запустить:
.\Start.cmd 5300 # Использовать порт 5300
.\Start.cmd 0 # Автоматически выбрать свободный портБраузер откроется по фактическому адресу. Для постоянного изменения отредактируйте секцию в appsettings.json рядом с запускаемым приложением:
"LocalServer": { "Port": 5300 }Изменения применяются после перезапуска. Аргумент запуска имеет приоритет над настройкой. Также поддерживается переменная окружения LocalServer__Port. Сервер доступен только через 127.0.0.1, а не другим компьютерам в сети.
Кадрирование. Пресет задаёт пропорции рамки. Переключение на «Свободно» сохраняет её положение и размер, снимая ограничение пропорций. Рамку можно двигать стрелками, а с Shift — с шагом 10 пикселей. «Сбросить» возвращает полный кадр.
Обрезка по времени. Под видео выберите начало и конец двумя бегунками. Выделение применяется к предпросмотру и экспорту. Перетаскивание границы ставит видео на паузу и показывает кадр у границы; воспроизведение останавливается в конце отрезка, повторное нажатие запускает его с начала. Стрелки меняют время на 0,01 с, Page Up / Down — на 1 с, Home / End перемещают выбранную границу до допустимого предела. «Сбросить обрезку» возвращает полный файл. Минимальный отрезок — 0,01 с либо весь файл, если он короче; фактическая точность ограничена кадрами видео и аудио. При экспорте изменение границ заблокировано.
Размер. Процент считается от области кропа: 1080×1080 при 50% даёт 540×540. Итоговые размеры округляются вниз до чётных значений, минимум 2×2.
FPS. Без интерполяции доступны 24, 25, 30, 50 и 60 FPS. Повышение с 30 до 60 повторяет кадры и не добавляет плавности. Предпросмотр показывает композицию, а не результат преобразования FPS или сжатия.
Звук. По умолчанию сохраняется при наличии аудиодорожки. Звук проигрывателя включается отдельно и не влияет на экспорт.
Качество видео. Максимальное · CRF 16 (по умолчанию), Высокое · CRF 20, Сбалансированное · CRF 23 и Компактное · CRF 28. Чем ниже CRF, тем выше качество и обычно больше файл; размер файла не фиксирован. Предпросмотр не показывает потери от сжатия. Выбор сохраняется при смене видео в текущей странице и сбрасывается после перезагрузки. Во время экспорта настройка заблокирована. Она не меняет разрешение, FPS, звук или подготовку видео, скачанного по ссылке.
Экспорт. MP4, H.264/libx264, выбранный CRF (по умолчанию 16), preset medium, Lanczos, квадратные пиксели и yuv420p. Аудио кодируется в AAC 192 кбит/с. Одновременно выполняется один экспорт. Отмена останавливает FFmpeg и удаляет незавершённый файл.
Предпросмотр читает выбранное видео прямо в браузере. Оригинал также передаётся локальному процессу на вашем компьютере для чтения метаданных и экспорта. Внешние серверы не используются, перекодированные копии для предпросмотра не создаются.
- Временная копия открытого локального файла удаляется при замене видео.
- Видео по ссылке сохраняется в
downloadsв корне VidCropper (при запуске из исходников — в корне проекта). Это готовый MP4 для редактора; он сохраняется после смены видео и завершения сессии. Откройте его повторно кнопкой «Открыть видео» без повторного скачивания. Совпадающие имена получают суффиксы(1),(2); существующие файлы не перезаписываются. Незавершённые загрузки очищаются при отмене. Папка не включается в Git и публикацию приложения. - Полные экспорты автоматически сохраняются в
outputв корне VidCropper. Они остаются после следующего экспорта, смены исходника и завершения приложения; совпадающие имена получают суффикс(1),(2)без перезаписи. Пробы остаются временными. Незавершённый экспорт вoutputне публикуется. Папка исключена из Git и portable-сборки. - Скачанные пользователем файлы приложение не удаляет.
- Рабочая папка:
%TEMP%\VidCropper\<идентификатор-запуска>. Она очищается при штатном завершении; после аварийного отключения может остаться. - Лимит одного исходника по умолчанию — 10 ГБ. Его можно изменить полем
Media.MaxUploadBytesвappsettings.json. Для исходника и результата должно хватать места на диске с временной папкой.
| Проблема | Что сделать |
|---|---|
| Браузер не открылся | Откройте адрес, напечатанный в консоли сервера. |
| Порт занят | Запустите Start.cmd 0 или задайте другой порт. |
Команда dotnet не найдена |
Для исходников установите .NET 10 SDK и заново откройте терминал; portable-сборке он не нужен. |
| Не найден FFmpeg или ffprobe | Перезапустите portable-версию через Start.cmd с доступом к интернету. Либо скачайте FFmpeg самостоятельно и поместите ffmpeg.exe и ffprobe.exe в папку tools рядом с приложением. Для исходников укажите пути в appsettings.json. |
| Видео не воспроизводится | Кодек должен поддерживаться браузером. Автоматической конвертации для предпросмотра нет. |
| Экспорт завершился ошибкой | Проверьте свободное место; подробности FFmpeg выводятся в консоль сервера. |
Стек: C# / ASP.NET Core .NET 10, ванильные HTML + CSS + JavaScript, нативные FFmpeg и ffprobe. Фронтенд находится в wwwroot, сервер обработки — в Backend. Сборщик JavaScript и npm-пакеты не используются.
GitHub Actions автоматически собирает проект и запускает тесты на Windows при push в main и в pull request, направленных в main. Статус виден на бейдже CI в начале README; нажатие открывает журнал проверок. Запуск вручную: Actions → CI → Run workflow. Конфигурация находится в .github/workflows/ci.yml.
Из корня проекта:
dotnet build -c Release -o artifacts/backend-build
node --test --test-concurrency=1 tests/geometry.test.mjs tests/trim.test.mjs tests/backend.test.mjs tests/ai.test.mjs tests/interpolation.test.mjs tests/processing-time.test.mjs
dotnet run --project tests/AiChecks/AiChecks.csproj -c ReleaseДля этих тестов нужны Node.js 22+ и FFmpeg/ffprobe в PATH. Node нужен только для тестов. Интеграционные проверки создают синтетические видео и отдельный сервер на свободном порту: проверяются кроп, звук, FPS, поворот, временная обрезка (включая содержимое кадров и синхронизацию звука), отмена, валидация и очистка временных файлов.
Проверки AiChecks используют тестовый исполнитель и локальный HTTP-сервер: они проверяют установку из ZIP и дополнительных tar.gz, контрольные суммы каждого артефакта, обновление, откат, повреждение файлов, отмену на каждом этапе, нехватку места и обработку полной последовательности одним запуском, но не качество моделей. Для RIFE проверяются также полный пакет без автоматического GPU-запуска, ×2/×3, совместная работа с Upscaler, дробный FPS, VFR, монтажные склейки и отмена. Эти проверки используют подставной исполнитель; RIFE не запускается. Реальные GPU-проверки запускаются отдельно (скачивают AI-пакеты по необходимости):
$env:VIDCROPPER_GPU_TESTS = '1'
node --test tests/ai.test.mjs
Remove-Item Env:VIDCROPPER_GPU_TESTSОни проверяют все пять моделей в ×2/×3/×4, временные границы, поворот, порядок кадров и звук на синтетических роликах. Для проверки качества деталей и мерцания используйте также свои короткие реальные клипы. Тесты запускайте последовательно: существующие проверки очистки сравнивают общую временную папку до/после запуска.
Publish.ps1 нужен автору сборки, а не пользователю готового приложения. Запустите его в PowerShell из папки проекта:
.\Publish.ps1Скрипт создаст папку artifacts/release/portable со встроенным .NET runtime, лицензиями и загрузчиком FFmpeg. Сам FFmpeg не включается в публикуемый архив. Выходная папка должна быть пустой; для следующей сборки можно выбрать другую через -OutputDirectory.
Создайте архив до первого запуска этой сборки, чтобы в него не попали загруженные инструменты:
Compress-Archive -Path .\artifacts\release\portable\* -DestinationPath .\artifacts\VidCropper-win-x64.zip -Force
Get-FileHash .\artifacts\VidCropper-win-x64.zip -Algorithm SHA256Создайте релиз в GitHub → Releases → Draft a new release и прикрепите ZIP как файл релиза. Папка artifacts исключена из Git: обычный push исходников не публикует готовую программу.
Код VidCropper распространяется под MIT. У .NET, FFmpeg и их зависимостей собственные лицензии: см. THIRD-PARTY-NOTICES.md. Публичный архив не включает FFmpeg; его сборка загружается напрямую у поставщика при первом запуске.
HTTP API для разработки
| Метод и путь | Назначение |
|---|---|
GET /api/config |
Доступность инструментов и лимит загрузки |
PUT /api/media/{guid}?name=... |
Поток исходника с типом application/octet-stream; ответ содержит метаданные |
DELETE /api/media/{guid} |
Освобождение исходника после завершения использующего его экспорта |
POST /api/exports |
Запуск: mediaId, crop: {x,y,width,height}, scale, fps, audio, sourceWidth, sourceHeight, необязательное поле quality (maximum / high / balanced / compact; отсутствующее или null — maximum, неизвестное — HTTP 400), необязательный upscale: { modelId, scale } (отсутствие/null — обычный экспорт, scale — 2/3/4), необязательные startSeconds и endSeconds (секунды от начала исходника; по умолчанию — полный файл) |
GET /api/exports/{guid} |
Статус |
GET /api/exports/{guid}/events |
Прогресс через SSE |
POST /api/exports/{guid}/cancel |
Отмена |
GET /api/exports/{guid}/download |
Скачивание MP4 |
DELETE /api/exports/{guid} |
Отмена при необходимости и удаление результата |
GET /api/ai/catalog |
Модели, актуальные/активные/предыдущие версии, установка, обновление, объём загрузки, поддержка платформы и занятость |
POST /api/ai/models/{modelId}/{action} |
action: install (также обновление/восстановление), rollback, check; возвращает задачу |
GET /api/ai/operations/{id} |
Статус установки/проверки, этап, прогресс и ошибка |
POST /api/ai/operations/{id}/cancel |
Отмена установки/проверки |
POST /api/ai/previews |
{ export: <запрос экспорта с upscale>, position: <секунды> }; возвращает задачу экспорта с preview: true |
GET /api/ai/previews/{id}/before |
Пробный MP4 без AI, поддерживает Range |
GET /api/ai/previews/{id}/after |
Пробный MP4 с AI, поддерживает Range |
POST /api/shutdown |
Штатное завершение приложения |
Изменяющие запросы требуют заголовок X-VidCropper: 1 и при наличии Origin — собственный локальный адрес приложения. Параметры проверяются сервером; FFmpeg запускается через ArgumentList, без командной оболочки.
AI-проба использует существующие /api/exports/{id} для статуса, SSE, отмены и удаления. Снимок задачи дополнен stage, framesDone, framesTotal, preview. Идентификаторы моделей: nomos-weak, nomos-medium, nomos-strong, spankendata, realesrgan, realesr-general-x4v3, openproteus, anime-video. Поле allowedScales каталога задаёт допустимые масштабы каждой модели: OpenProteus принимает только ×2, остальные модели — ×2/×3/×4. Неизвестные модели/масштабы отклоняются с HTTP 400; отсутствующий пакет или занятая обработка — HTTP 409. Пути инструментов и моделей клиент не передаёт.
В AiCatalog добавить новый дескриптор семейства после прежних, сохранив старые дескрипторы для работы установленных версий и отката. Задать уникальную версию, неизменяемый URL, точный размер и SHA-256 архива, состав/пути моделей, родные масштабы и сведения об исходниках/лицензиях. Перед выпуском проверить установку, все модели, экспорт, неудачное обновление и откат. Активный пакет выбирается отдельно от последнего в каталоге; после отката автоматического переключения не происходит.
Прогресс AI-задач: stageId (extract, upscale, encode, compare), stageProgress (0–100), framesDone, framesTotal, framesTotalEstimated. Общий progress использует фиксированные веса: извлечение 15%, AI 65%, сборка 19% (в пробе 10% плюс сравнение 9%), завершение 1%. Это не оценка времени. В окне пробы кнопка «Отменить» ждёт остановки процессов и очистки; затем доступны повтор и закрытие.
elapsedSeconds — общее время обработки задачи без загрузки исходника; stageElapsedSeconds — время текущего этапа; remainingSeconds — приблизительный остаток текущего этапа по средней фактической скорости, либо null до появления измерений. Оценка пересчитывается на каждом этапе и может меняться. После завершения, ошибки или отмены общий таймер фиксируется. В интерфейсе время показано как ЧЧ:ММ:СС; часы не сбрасываются после 24 часов.