Skip to content

FreshLend/NeuroVT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧠 NeuroVT

Python Flask License

NeuroVT — это модульная система для создания AI-втубера с поддержкой голосового ввода (STT), синтеза речи (TTS), языковых моделей (LLM) и веб-интерфейса на Flask.

🎙️ Говорите — AI отвечает голосом.
🧩 Модульная архитектура — легко добавлять новые функции.
🌐 Всё управление через браузер.

✨ Возможности

  • 🎤 STT (Speech-to-Text) — распознавание речи через faster-whisper:
    • Основной микрофон — для ведущего (хост)
    • Виртуальный микрофон — для гостей/чата (с префиксом в LLM)
    • Горячие клавиши для каждого микрофона (настраиваются)
  • 🔊 TTS (Text-to-Speech) — синтез речи через Silero:
    • Вывод на динамики и/или виртуальный микрофон (VB-Cable и др.)
    • Очередь сообщений, история, статус воспроизведения
  • 🧠 LLM (Large Language Model) — подключение к OpenRouter API:
    • Управление сессиями (создание, удаление, переименование)
    • Ограничение контекста по токенам (автообрезка истории)
    • Подсчёт токенов через tiktoken
    • Гостевой префикс — автоматически добавляется к сообщениям с виртуального микрофона
    • Fallback-ответы при отсутствии API-ключа
    • Сброс всех настроек к дефолтным
  • 💬 Чат с AI — удобный интерфейс с историей, индикатором печати и уведомлениями
  • ⚙️ Веб-интерфейс — настройки, статус, история, управление модулями
  • 🖥️ CLI-менеджер — установка, обновление, запуск (Windows/Linux)
  • 📁 HTML-шаблоны модулей — каждый модуль может иметь свои шаблоны

🚀 Быстрый старт

1. Клонирование репозитория

git clone https://github.com/FreshLend/NeuroVT.git
cd NeuroVT

2. Запуск менеджера

Windows Дважды кликните run.bat

Linux:

chmod +x run.sh
./run.sh

3. Настройка виртуального микрофона (опционально)

Для использования разделения на "хозяин" + "гость":

  1. Установите VB-Cable Virtual Audio Cable (или аналог)
  2. В настройках STT укажите:
    • Основной микрофон — ваш реальный микрофон
    • Виртуальный микрофонCABLE Input (VB-Audio Virtual Cable)
  3. В настройках LLM задайте Префикс гостя (например "[YunaAi]: ")

Теперь всё, что распознаётся с виртуального микрофона, будет отправляться в LLM с этим префиксом.


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

NeuroVT/
├── main.py                 # Точка входа (Flask + модули)
├── run.bat / run.sh        # CLI-менеджер
├── requirements.txt        # Основные зависимости
├── config.py               # Отключение модулей (DISABLED_MODULES)
├── core/
│   ├── event_bus.py        # Шина событий между модулями
│   └── module_loader.py    # Загрузчик модулей
├── modules/
│   ├── base_module.py      # Базовый класс для модулей
│   ├── tts_module/         # TTS (Silero)
│   │   ├── settings.json   # Сохраняемые настройки
│   │   └── templates/      # HTML-шаблоны
│   ├── stt_module/         # STT (Faster-Whisper)
│   │   ├── settings.json
│   │   └── templates/
│   └── llm_module/         # LLM (OpenRouter)
│       ├── settings.json
│       ├── chats.json      # История всех сессий
│       └── templates/
└── templates/              # Общие шаблоны
    ├── base.html
    ├── index.html
    └── settings.html

🧩 Модули

🎙️ STT (Speech-to-Text)

  • Модель: faster-whisper (small, int8)
  • Два независимых микрофона:
    • Основной — горячая клавиша Ctrl+Shift+M (по умолчанию)
    • Виртуальный — горячая клавиша Ctrl+Shift+V (по умолчанию)
  • Выбор языка распознавания (авто/русский/английский и др.)
  • Отправляет текст в LLM через событие llm_voice_input (источник указывается: microphone или virtual_microphone)

🔊 TTS (Text-to-Speech)

  • Модель: Silero (v3_1_ru)
  • Голоса: Айдар, Бая, Ксения, Ксения (альт), Евгений
  • Качество: 24 кГц / 48 кГц
  • Режимы вывода:
    • Только динамики
    • Только виртуальный микрофон
    • Динамики + виртуальный микрофон
  • Выбор конкретного устройства вывода для каждого режима

🧠 LLM (OpenRouter)

  • Поддержка моделей через OpenRouter API
  • Сессии чатов:
    • Создание / удаление / переименование сессий
    • Автоматическое сохранение истории в chats.json
    • Переключение между сессиями
  • Управление контекстом:
    • Ограничение по токенам (context_token_limit)
    • Автообрезка истории при превышении лимита
    • Подсчёт токенов через tiktoken
  • Гостевой режим:
    • Настраиваемый префикс для сообщений с виртуального микрофона
    • Автоматическое добавление к тексту перед отправкой в LLM
  • Fallback-ответы при отсутствии API-ключа или ошибках сети

🔧 Конфигурация отключения модулей

В файле config.py можно отключить ненужные модули:

DISABLED_MODULES = ["STT_Module", "TTS_Module"]  # Удаление ненужного модуля

🛠️ Установка зависимостей вручную

Если вы не используете run.bat / run.sh:

# Создать виртуальное окружение
python -m venv venv

# Активировать
source venv/bin/activate      # Linux
venv\Scripts\activate         # Windows

# Установить основные зависимости
pip install -r requirements.txt

Модули автоматически устанавливают свои зависимости при первом запуске через CLI-менеджер.


⚙️ Настройка API-ключа OpenRouter

  1. Зарегистрируйтесь на openrouter.ai
  2. Создайте API-ключ
  3. В веб-интерфейсе перейдите в Настройки → LLM
  4. Вставьте ключ в поле OpenRouter API Key и нажмите Сохранить все настройки
  5. Настройте:
    • Лимит контекста (токенов) — чем выше, тем лучше память
    • Префикс гостя — будет добавляться к виртуальному микрофону
    • Fallback ответы — на случай ошибки API

Без ключа будут использоваться fallback-ответы (офлайн-режим).


🎯 Пример использования

  1. Запустите run.bat или ./run.sh
  2. Выберите Full installation (1)
  3. Откройте браузер → http://localhost:5000
  4. В Настройки → LLM введите API-ключ OpenRouter
  5. Вернитесь на главную → вкладка Чат с AI
  6. Нажмите Ctrl+Shift+M, чтобы включить основной микрофон
  7. Скажите что-нибудь — AI ответит голосом!

Случай когда надо чтоб ИИ слышал кого-то ещё

  1. Установите виртуальный аудиокабель (VB-Cable)
  2. В Настройки → STT:
    • Основной микрофон = ваш реальный микрофон
    • Виртуальный микрофон = CABLE Input
  3. В Настройки → LLM:
    • Префикс гостя = "[OvsyaAi]: "
  4. Направьте аудиопоток из Discord или любого приложения в виртуальный кабель
  5. Нажмите Ctrl+Shift+V для активации виртуального микрофона

🔧 События Event Bus

Событие Отправитель Данные
tts_speak LLM / любой модуль {"text": "...", "source": "..."}
stt_text_ready STT {"text": "...", "is_final": true, "language": "...", "source": "microphone/virtual_microphone"}
llm_voice_input STT {"text": "...", "source": "microphone/virtual_microphone", "timestamp": "..."}

Как подписаться на событие

def on_load(self):
    self.event_bus.subscribe("tts_speak", self.handle_tts)

def handle_tts(self, data):
    text = data.get("text", "")
    print(f"Озвучить: {text}")

🔧 Разработка модулей

Создание своего модуля

  1. Создайте папку в modules/, например modules/my_module/
  2. Создайте папку templates/ внутри неё
  3. Создайте my_module.py:
from modules.base_module import BaseModule
from flask import jsonify

class MyModule(BaseModule):
    name = "my_module"
    display_name = "Мой модуль"
    
    def register_routes(self):
        @self.app.route('/api/my_module/hello')
        def my_hello():
            return jsonify({"message": "Hello from my module!"})
    
    def register_main_tab(self):
        return ("Моя вкладка", self.get_template_content("main_tab.html"))
    
    def register_settings_ui(self):
        return self.get_template_content("settings.html")
    
    def on_load(self):
        print(f"[{self.display_name}] Загружен!")
        self.event_bus.subscribe("some_event", self.handle_event)
    
    def handle_event(self, data):
        print(f"Получено событие: {data}")
  1. Добавьте requirements.txt (если нужны зависимости)
  2. Создайте HTML-шаблоны в modules/my_module/templates/:
    • main_tab.html — содержимое вкладки на главной странице
    • settings.html — содержимое вкладки настроек
  3. Перезапустите NeuroVT

🐛 Устранение неполадок

Модуль не загружается

  • Проверьте config.py — не отключён ли он в DISABLED_MODULES
  • Убедитесь, что в папке модуля есть файл *_module.py

STT не слышит микрофон

  • Проверьте в настройках STT выбранное устройство
  • Убедитесь, что микрофон не занят другим приложением
  • Попробуйте перезапустить модуль кнопкой "Перезапустить"

TTS нет звука

  • Проверьте режим вывода (динамики / виртуальный микрофон / оба)
  • Убедитесь, что выбранное устройство вывода существует
  • Попробуйте кнопку "Тест озвучки"

OpenRouter не отвечает

  • Проверьте API-ключ в настройках LLM
  • Нажмите Сохранить все настройки после вставки ключа
  • Без ключа работают только fallback-ответы

📄 Лицензия

Проект распространяется под лицензией MIT. Подробнее см. в файле LICENSE.

About

NeuroVT — это модульная система для создания AI-втубера

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors