Сделал «динамический остров» для Windows: музыка, виджеты и голосовой ассистент на локальных моделях
Мне 17, пишу под Windows для себя. Эту штуку делал тоже для себя: надоело сворачивать окна, чтобы посмотреть, какой трек играет. На айфоне для этого есть динамический остров, на ПК ничего похожего не нашёл — собрал сам.
Что это
Панель сверху по центру экрана в стиле iPhone. В спокойном режиме показывает, что играет: обложка, название, эквалайзер. Информацию берёт из системных медиа-сессий Windows, поэтому работает с любым плеером, который их отдаёт, — браузер, Яндекс Музыка, Spotify. Кликаешь — панель раскрывается, можно переключать треки и ставить на паузу.
Кроме музыки в ней живут таймеры, прогресс загрузок, индикатор звонка в Дискорде и монитор загрузки CPU, GPU и оперативки. В полноэкранном видео остров прячется, в играх остаётся на месте.
Голос
Зажимаешь Ctrl+Alt, говоришь, отпускаешь. Речь распознаёт Whisper, дальше команду разбирает роутер: таймеры и напоминания, погода и курсы валют, поиск в интернете, калькулятор, заметки, открыть программу или файл, включить песню на YouTube или SoundCloud, перевести выделенный текст, прочитать текст с обведённой области экрана. Всё остальное уходит в небольшую локальную языковую модель. Отвечает вслух, озвучка тоже локальная.
Всё это работает на моём компьютере, без облачных подписок. Если вставить свой ключ Anthropic, остров может отвечать через Claude, но это по желанию.
Как сделан
C# и WPF для самого острова, Python для голосовой части; они общаются JSON-строками через stdio. Полупрозрачность — системное размытие DWM под панелью. Для роликов я отдельно написал шейдер «жидкого стекла» на HLSL с преломлением у краёв.
Что оказалось сложным
Игры. Видеокарта занята на 100%, и Whisper на ней отвечал по 6–25 секунд. Теперь ассистент следит за загрузкой GPU и при необходимости переключается на процессорную модель поменьше. Второе: глобальный хук Ctrl+Alt в полноэкранных играх Windows молча снимала, пока он жил в UI-потоке. Вынес в отдельный поток с высоким приоритетом.
Что дальше
Сейчас голосовые команды только на русском. Хочу добавить английский, проверить на других видеокартах (разрабатываю на RTX 3060) и сделать нормальную установку без возни с Python. Если у кого-то есть идеи, какие виджеты были бы реально полезны сверху экрана, — пишите в комментариях.
Остальные свои проекты выкладываю здесь: t.me/i67m1k