Katana Studio¶
Katana Studio — визуальный редактор для GANSS ARDOR Katana на Electron.
Приложение умеет всё то же, что katana.py: режимы подсветки, раскраску клавиш, переназначения, макросы, scan, raw, reset и применение YAML-профиля.
Протокол и порядок записи те же, что у CLI.
Профиль тоже общий, но две секции названы по-старому: lighting и macros вместо mode и macro, поэтому ./katana.py apply такой файл отклонит.
Установка¶
Приложение рассчитано на Linux: транспорт — те же hidraw-узлы, что у katana.py, через node-hid.
Поэтому нужны udev-правило и /dev/hidrawN.
Без правила доступ к клавиатуре есть только у root.
Пакет deb¶
Пакет сам кладёт 70-ganss-katana.rules в /etc/udev/rules.d/ и перезагружает правила.
После установки переподключите клавиатуру.
При удалении пакета правило удаляется.
AppImage¶
Правило ставится вручную, как для CLI:
sudo cp 70-ganss-katana.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
chmod +x dist/katana-studio-0.1.0-x86_64.AppImage
./dist/katana-studio-0.1.0-x86_64.AppImage
Сборка¶
Нужен Node.js 22 или новее.
Команды выполняются из каталога studio.
Запуск из исходников и отладка описаны в разделе Запуск и отладка.
Если в окружении задан ELECTRON_RUN_AS_NODE=1, Electron запустится как обычный Node.js.
Тогда используйте env -u ELECTRON_RUN_AS_NODE npm run dev.
Стек¶
| Компонент | Назначение |
|---|---|
| electron-vite | Сборка main, preload и renderer |
| React | Интерфейс окна |
| TypeScript | Типы и общий код |
| Bootstrap | Оформление |
node-hid |
Обмен feature-репортами через hidraw |
usb |
Только для USB reset |
yaml |
Чтение и запись профилей |
| vitest | Офлайн-тесты |
| eslint | Проверка стиля |
Команды¶
npm ci # зависимости
npm run dev # запуск с горячей перезагрузкой
npm run typecheck # tsc для main и preload, затем для окна
npm run lint # eslint
npm test # vitest без клавиатуры
npm run build # сборка в out/
npm run dist # AppImage и deb в dist/
Подробности запуска, отладки в VS Code и сборки пакетов — в разделе Запуск и отладка.
Карта документации¶
| Документ | Тема |
|---|---|
| Окно приложения | Панель профиля, вкладки, предпросмотр, ограничения. |
| Архитектура | Структура каталогов, очередь операций, потоки кадров. |
| TypeScript API | Соответствие Python-версии и использование вне окна. |
| Тесты и фикстуры | Что проверяют тесты и как обновлять эталоны. |
| Запуск и отладка | Команды npm, конфигурации VS Code, сборка пакетов и доступ к HID. |
| Протокол | Общее описание обмена с прошивкой. |
Ограничения¶
- между USB-запросами выдерживается пауза 40 мс, поэтому запись таблицы раскраски занимает около 0,6 секунды, а смена режима — около 0,3 секунды;
- все операции идут в одной очереди: пока выполняется одна, кнопки записи недоступны;
- флеш-память клавиатуры имеет ограниченный ресурс перезаписи, а предпросмотр раскраски никогда не пишет во флеш;
- пока открыта вкладка «Раскраска», клавиатура показывает таблицу вместо режима с вкладки «Подсветка».
Подробнее о скорости и флеше — в разделе Свои скрипты.