Голосовой ввод (Whisper STT) + Озвучка ответов (ElevenLabs TTS) + Управление Яндекс Музыкой + Telegram-канал с AI-автоответом для OpenCode.
opencode-flow/
├── tts-server/ # TTS-сервер (ElevenLabs)
│ ├── tts_server.py # Flask на waitress, порт 4321
│ ├── backend_elevenlabs.py # Обёртка ElevenLabs SDK
│ ├── tts_config.py # Загрузка конфига
│ └── start-tts.ps1 # Меню выбора TTS
├── whisper/ # Голосовой ввод
│ ├── whisper_listener.py # VAD + faster-whisper + SendInput
│ ├── run-whisper.ps1 # Авторестарт-обёртка
│ └── start-voice.ps1 # Запуск whisper + оверлеев
├── overlays/ # Плавающие индикаторы
│ ├── status_overlay.py # Статус Whisper
│ ├── tts_overlay.py # Статус TTS
│ └── telegram_overlay.py # Статус Telegram бота
├── ym-control/ # Управление Яндекс Музыкой через CDP
│ ├── media-control.ps1 # Обёртка: все action'ы
│ ├── ym-control.mjs # CDP-скрипт (Node.js WebSocket)
│ ├── ym-like-v11.mjs # Лайк трека через API Яндекса
│ ├── ym-check-fav-api.mjs # Проверка лайкнутых
│ └── start-ym-debug.ps1 # Запуск YM с remote-debugging-port
├── plugin/ # Плагин OpenCode
│ └── tts.ts # Автозапуск всего, мониторинг, автоозвучка
├── tools/ # Telegram-инструменты
├── post-telegram.py # Постинг в канал (текст/фото)
├── telegram-watch.py # Просмотр и ручной ответ на комментарии
├── telegram-watch-daemon.py # Фоновый daemon с LLM-автоответом
├── telegram-watch-daemon.py # Мониторинг комментариев
└── эксперименты/ # Архив старых экспериментов
tts-server/tts_server.pyFlask-сервер на waitress, порт 4321. Единственный бэкенд — ElevenLabs.
- Воспроизведение mp3 через MCI (
winmm.dll) с фоновой очередью - Keepalive-воркер — пинг
/v1/modelsкаждые 20 с - Watchtower-воркер — проверка соединения каждые 30 с, пересоздание клиента
- Статус в
~/.opencode-tts/tts-status.json:loading/ready/speaking/error
Зависимости (Conda env elevenlabs): flask, waitress, elevenlabs, requests
whisper/whisper_listener.pyVAD (энергетический) + faster-whisper medium на CUDA. Ввод текста через SendInput.
- Фильтр галлюцинаций (стоп-фразы, короткий/повторяющийся текст)
- Typewriter-режим с задержкой 40 мс
- Горячие клавиши: Ctrl+Shift+V (пауза), Ctrl+Shift+Q (выход)
- Автоматически замолкает, когда TTS говорит
Зависимости (Conda env chatterbox-tts): faster-whisper, sounddevice, numpy, pynput
Три плавающих индикатора, прикреплённых к окну Windows Terminal:
| Оверлей | Файл | Статусы |
|---|---|---|
| Whisper | overlays/status_overlay.py |
слушает / печатает / пауза / offline |
| TTS | overlays/tts_overlay.py |
загрузка / готов / озвучивает / ошибка |
| Telegram | overlays/telegram_overlay.py |
загрузка / готов / отвечает / ошибка |
Автоподъём при падении — вотчдоги в tts.ts.
tools/post-telegram.py "текст" # Пост в канал
tools/post-telegram.py --photo "путь" "подпись" # Пост с фото
tools/telegram-watch.py # Посмотреть pending комментарииФоновый daemon (telegram-watch-daemon.py) каждые 10 с проверяет комментарии в обсуждении канала и отвечает на новые через локальный LLM (Ollama).
Как работает:
- Daemon висит в фоне, запускается плагином
tts.tsпри старте OpenCode - Новый комментарий → генерация ответа через Ollama (Impish_Bloodmoon_12B)
- Ответ отправляется в тред обсуждения
- Комментарий сохраняется в
pending-comments.jsonдля истории
Стиль ответов: казахский подросток, русский с редкими казахскими словами, зеркалит настроение собеседника. Если девушка флиртует — подкатывает в ответ. Если грубят — грубит в ответ.
Канал: @GanggBanny Бот: @opencode_flow_bot
ym-control/media-control.ps1 -Action <next|prev|playpause|right|left|like|mute|volume_N|nowplaying|search|play>Управление через CDP (Chrome DevTools Protocol). YM запускается с --remote-debugging-port=9222.
| Action | Что делает |
|---|---|
next / prev |
Следующий / предыдущий трек |
playpause |
Пауза / воспроизведение |
right / left |
Перемотка вперёд / назад |
mute |
Вкл / выкл звук |
volume_N |
Громкость N% (0–100) |
nowplaying |
Вывод текущего трека |
search <query> |
Поиск треков/альбомов/исполнителей |
play <query> |
Поиск и воспроизведение первого результата |
Лайк трека — через прямой API Яндекса (POST /users/{uid}/likes/tracks/add-multiple), так как UI-селекторы нестабильны.
plugin/tts.tsУстанавливается в ~/.config/opencode/plugin/tts.ts.
При старте OpenCode:
- Запускает Telegram daemon + оверлей
- Запускает Whisper listener + оверлей
- Запускает TTS-сервер + оверлей (если выбран не
none) - Автоозвучка русских ответов ассистента
- Очистка процессов при выходе
# TTS (ElevenLabs)
conda create -n elevenlabs python=3.11
conda activate elevenlabs
pip install flask waitress elevenlabs requests
# Whisper + Оверлеи + Telegram
conda create -n chatterbox-tts python=3.11
conda activate chatterbox-tts
pip install faster-whisper sounddevice numpy pynput requestsollama pull hf.co/mradermacher/Impish_Bloodmoon_12B-i1-GGUF:Q4_K_Mcopy plugin\tts.ts "$env:USERPROFILE\.config\opencode\plugin\tts.ts"# ~/.opencode-tts/telegram-config.json
{
"token": "BOT_TOKEN",
"channel": "@GanggBanny",
"channel_id": -1003300506997,
"discussion_group": -1003939462897
}ym-control/start-ym-debug.ps1
ym-control/media-control.ps1 next# 1. Запустить YM с debug-портом
ym-control/start-ym-debug.ps1
# 2. Запустить OpenCode — плагин поднимет всё остальное
opencodeПлагин автоматически запустит TTS (если настроен), Whisper, Telegram daemon и все оверлеи.
- Яндекс Музыка — Electron с кастомным протоколом
music-application://. CDP только через Node.js WebSocket. - Лайк через API:
POST https://api.music.yandex.net/users/{uid}/likes/tracks/add-multipleс form-urlencoded и OAuth-токеном изlocalStorage. - Network recovery: ElevenLabs при блокировке (РФ) — watchtower проверяет каждые 30 с, восстанавливается после включения VPN.
- Telegram daemon пишет статус в
~/.opencode-tts/telegram-status.jsonдля оверлея.
MIT