Конвертер файлов Kumquat для macOS работает без Xcode и использует жест Shift при перетаскивании

Источник
Конвертер файлов, который открывается во время перетаскивания: как я сделал Kumquat для macOS без Xcode

Разработчик kipperstudio создал приложение Kumquat — открытый конвертер файлов для macOS, работающий на Apple Silicon с системой версии 14 и новее. Программа функционирует в строке меню и поддерживает русский и английский языки. Основной сценарий использования основан на уникальном жесте: пользователь начинает перетаскивать файлы из Finder или других источников, коротко нажимает клавишу Shift и удерживает её. В этот момент под курсором появляется радиальное меню с доступными действиями. После отпускания мыши файлы можно «бросить» на соответствующий лепесток колеса, и результат появится рядом с оригиналом без изменения исходника. Для реализации этого механизма без запроса разрешения на доступ к клавиатуре (Accessibility) автор использовал опрос системных событий: отслеживание состояния кнопки мыши через NSEvent.pressedMouseButtons, модификаторов через NSEvent.modifierFlags и содержимого буфера перетаскивания через NSPasteboard. Таймер опроса работает с частотой 120 мс, ускоряясь до 60 Гц при нажатии кнопки. Логика определяет начало перетаскивания по изменению счетчика изменений (changeCount) и открывает колесо только при коротком нажатии (до 0,6 секунды) ровно одного модификатора, игнорируя комбинации вроде Shift+Option.

Интерфейс представляет собой NSPanel со стилем [.borderless, .nonactivatingPanel], что позволяет Finder оставаться активным приложением и не прерывать процесс перетаскивания. Геометрия колеса реализована через чистую структуру FanLayout, где каждый лепесток — это кольцевой сектор. Интерфейс поддерживает минимум три слота для действий, два кольца для большого количества пунктов и постоянный зазор в 5 pt между лепестками. Визуально колесо выполнено в тёмном оформлении с использованием NSVisualEffectView и материала .hudWindow, а категории имеют свои уникальные цвета: конвертация — цвета кумквата, оптимизация — листа, редактирование — мёда. Приложение поддерживает множество форматов: изображения (JPG, PNG, HEIC, WebP, AVIF, TIFF, BMP, GIF, PDF), документы iWork, EPUB, таблицы XLSX и видео. Обработка видео и аудио осуществляется локально, без отправки данных в сеть, включая распознавание текста через Vision и удаление фона.

В части обработки видео автор столкнулся с необходимостью сравнения производительности встроенного движка VideoToolbox и стороннего libx264 из сборки ffmpeg. Поскольку libx264 имеет лицензию GPL, он не включен в сборку под LGPL, поэтому для кодирования H.264 и HEVC использовался аппаратный ускоритель Apple Silicon. Проведенные тесты на ролике 1080p30 длиной 45 секунд показали, что VideoToolbox работает быстрее в 1,5–2,7 раза, затрачивая около 7 секунд независимо от качества. Однако файлы, созданные через VideoToolbox, при равном качестве VMAF могут быть на 0–40% больше по размеру, особенно заметно это на низких битрейтах. Для достижения целевого размера файла (например, не более 25 МБ) используется ограниченный средний битрейт, позволяя получать результат в пределах 96–98,5% от лимита. В коде реализована система интерполяции качества и запасные кодеры для обработки ошибок, таких как превышение ширины кадра 4096 px. Приложение полностью написано с использованием системных фреймворков Apple, где сторонний код применяется только в необходимых случаях, а большая часть логики была разработана с помощью ИИ-модели Claude от Anthropic под руководством автора.

Текст подготовлен нейросетью Loople по материалам источника.

Читайте также

Похожие новости

Поиск по Loople

Назад