# Stream Deck Mobile — клон

Управление компьютером с телефона: как **Stream Deck Mobile** от Elgato, но на телефоне открывается **сайт**, а на компьютере — наша программа.

## Как это устроено

- **На компьютере** запускается Node.js‑сервер (аналог программы Stream Deck).
- В браузере открывается страница с **QR‑кодом** — отсканируйте его телефоном в той же Wi‑Fi сети.
- **На телефоне** открывается веб‑интерфейс с кнопками (как в Stream Deck Mobile).
- Нажатие кнопки отправляется на компьютер по WebSocket и выполняет действие: горячая клавиша, команда или ввод текста.

## Установка и запуск

```bash
cd streamdeckmobile
npm install
npm start
```

После запуска откроется вкладка в браузере с QR‑кодом. Телефон и компьютер должны быть в **одной Wi‑Fi сети**.

- **Страница для телефона:** откройте по ссылке под QR или отсканируйте QR (например, камерой).
- **Настройка ключей:** на компьютере перейдите по ссылке «Настроить ключи» или откройте `http://localhost:28472/edit`.

## Настройка кнопок

Редактор доступен по адресу **/edit** (или через ссылку на странице с QR). Формат конфига — JSON.

Каждая кнопка может быть:

| type     | Описание        | Пример |
|----------|-----------------|--------|
| `hotkey` | Горячая клавиша | на Mac: `"hotkey": "cmd+c"`, на Windows: `"ctrl+c"` |
| `command`| Команда в shell | `"command": "open -a Spotify"` |
| `text`   | Ввод текста     | `"text": "Привет"` |

Модификаторы: `ctrl`, `alt`, `shift`, `cmd` / `command` / `meta` (на Mac — клавиша ⌘). Примеры: `cmd+c`, `ctrl+shift+v`.

Пример одной кнопки:

```json
{
  "id": "1",
  "label": "Копировать",
  "type": "hotkey",
  "hotkey": "ctrl+c",
  "icon": "📋"
}
```

Структура конфига: в `keypads` — массив страниц; у каждой страницы — `id`, `name`, `columns`, `rows` и массив `keys`.

## Горячие клавиши на компьютере

Для выполнения горячих клавиш используется библиотека **robotjs**. Установите её отдельно, если после `npm install` кнопки не срабатывают:

```bash
npm install robotjs
```

На некоторых системах для сборки robotjs нужны инструменты разработки (Xcode Command Line Tools на macOS, build-essential на Linux, Visual Studio Build Tools на Windows).

## macOS

- **Горячие клавиши:** используйте `cmd` (⌘) вместо Ctrl для копирования/вставки и т.п., например `cmd+c`, `cmd+shift+4` (снимок экрана).
- **Если кнопки не срабатывают:** добавьте **Терминал** (или iTerm2, или приложение, из которого запускаете `npm start`) в **Системные настройки → Конфиденциальность и безопасность → Универсальный доступ**. Без этого macOS не разрешает программе имитировать нажатия клавиш.
- **Команды** (тип «Команда») выполняются в `/bin/zsh` с вашим окружением, так что `open -a Safari` и подобное работают.

## Порт

По умолчанию сервер слушает порт **28472**. Его можно изменить в `server/config.json` в поле `port` или через редактор на странице /edit.

## Структура проекта

- `server/index.js` — HTTP + WebSocket сервер, страница с QR, API конфига.
- `server/actions.js` — выполнение горячих клавиш и команд при нажатии кнопки.
- `server/config.json` — конфиг порта и ключей (редактируется вручную или через /edit).
- `public/` — одностраничное веб‑приложение для телефона (сетка кнопок, страницы, подключение по WebSocket).

Телефон подключается к программе на компьютере так же, как в Stream Deck Mobile: один Wi‑Fi, сканирование QR или ввод адреса вручную.
