Repository files navigation

🧠 NeuroVT

PythonFlaskLicense

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

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


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

🎤 STT (Speech-to-Text) - faster-whisper

  • Основной микрофон - для ведущего (хост) — горячая клавиша Ctrl+Shift+M
  • Виртуальный микрофон - для гостей - горячая клавиша Ctrl+Shift+V
  • Автоопределение языка или ручной выбор
  • Визуальный индикатор речи в интерфейсе
  • История распознанных сообщений для каждого микрофона

🔊 TTS (Speech-to-Text) - два движка на выбор

Silero TTS

  • Модель: Silero (v3_1_ru)
  • Голоса: Айдар, Бая, Ксения, Ксения (альт), Евгений
  • Качество: 24 кГц / 48 кГц

Chatterbox TTS

  • Клонирование голоса - используйте любые .wav файлы в папке references/ внутри модуля
  • Подробная настройка параметров синтеза:
    • Exaggeration (экспрессия) - от 0 до 1.5
    • CFG Weight - от 0 до 2
    • Temperature - от 0.05 до 5
    • Min P / Top P - фильтрация токенов
    • Repetition Penalty - от 1 до 3

Общие возможности TTS:

  • Вывод на динамики и/или виртуальный микрофон (VB-Cable и др.)
  • Выбор конкретного устройства вывода для каждого режима

🧠 LLM (OpenAI-совместимые API)

  • Поддержка любых API, совместимых с OpenAI (OpenRouter, локальные модели, API OpenAI)
  • Управление сессиями (создание, удаление, переименование)
  • Ограничение контекста по токенам (автообрезка истории при превышении)
  • Гостевой префикс - автоматически добавляется к сообщениям с виртуального микрофона
  • Стриминг ответов - генерация ответа в реальном времени
  • Fallback-ответы при отсутствии API-ключа или ошибках сети

⚙️ Дополнительно

  • Веб-интерфейс для управления NeuroVT
  • CLI-менеджер для установки, обновления и запуска (Windows/Linux)
  • Модульная архитектура для лёгкого расширения

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

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 + Voicemeeter Banana
  2. В настройках STT укажите:
    • Основной микрофон - ваш реальный микрофон
    • Виртуальный микрофон - Voicemeeter Out B2 (VB-Audio Voicemeeter VAIO)
  3. В настройках TTS укажите:
    • Динамики - Voicemeeter Input (VB-Audio Voicemeeter VAIO)
    • Виртуальный микрофон - CABLE Input (VB-Audio Virtual Cable)
  4. В настройках LLM задайте Префикс гостя (например "[YunaAi]: ")

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

4. Настройка клонирования голоса (Chatterbox TTS)

  1. Перейдите в Настройки → TTS (Chatterbox)
  2. Поместите .wav файлы с голосом в папку modules/Chatterbox/references/
  3. Нажмите кнопку обновления списка голосов
  4. Выберите нужный голос из выпадающего списка

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

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 # Базовый класс для модулей
│ ├── Whisper/ # STT (Faster-Whisper)
│ │ ├── main.py
│ │ └── templates/
│ ├── Silero/ # TTS (Silero)
│ │ ├── main.py
│ │ └── templates/
│ ├── Chatterbox/ # TTS (Chatterbox Multilingual с клонированием)
│ │ ├── main.py
│ │ ├── references/ # 📁 папка для .wav файлов голосов
│ │ └── templates/
│ └── OpenAICompatible/ # LLM (OpenAI-совместимые)
│ ├── main.py
│ └── templates/
└── templates/ # Общие шаблоны
├── base.html
├── index.html

🎛️ Настройка модулей

STT (Whisper)

НастройкаОписание
Устройство (основное)Выбор микрофона для ведущего
Устройство (виртуальное)Выбор микрофона для гостей
Горячая клавиша (основная)По умолчанию Ctrl+Shift+M
Горячая клавиша (виртуальная)По умолчанию Ctrl+Shift+V
Язык распознаванияАвто или конкретный язык

Silero TTS

НастройкаОписание
ГолосАйдар, Бая, Ксения, Ксения (альт), Евгений
КачествоСтандартное (24 кГц) / Высокое (48 кГц)

Chatterbox TTS

НастройкаОписаниеДиапазон
Референсный голосВыбор .wav файла для клонирования
ExaggerationЭкспрессивность речи0 – 1.5
CFG WeightВес CFG (0 = чистое переключение языка)0 – 2
TemperatureРазнообразие интонаций0.05 – 5
Min PМинимальная вероятность токена0 – 1
Top PTop-P фильтрация0 – 1
Repetition PenaltyШтраф за повторения1 – 3

LLM (OpenAI-совместимые)

НастройкаОписание
API Base URLURL API (OpenRouter, OpenAI, локальный)
API KeyВаш API-ключ
Загрузка моделейПолучение списка доступных моделей из API
Поиск моделейФильтрация списка моделей
ТемператураКреативность ответов (0 – 2)
Max TokensМаксимальная длина ответа
Лимит контекстаМаксимум токенов в истории диалога
System PromptСистемный промпт для AI
Префикс гостяДобавляется к сообщениям с виртуального микрофона
Fallback ответыОтветы при недоступности API (по одному на строку)

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

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

DISABLED_MODULES= ["Silero", "Whisper"]

🔌 События Event Bus

СобытиеОтправительДанные
tts_speakLLM / любой модуль{"text": "...", "source": "..."}
tts_startedTTS{"text": "...", "source": "...", "queue_position": n}
stt_text_readySTT{"text": "...", "is_final": true, "language": "...", "source": "microphone/virtual_microphone"}
llm_voice_inputSTT{"text": "...", "source": "...", "timestamp": "..."}

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

# Создать виртуальное окружение
python -m venv venv
# Активироватьsource venv/bin/activate # Linux
venv\Scripts\activate # Windows# Установить основные зависимости
pip install -r requirements.txt

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

  1. Зарегистрируйтесь на OpenRouter (или используйте другой OpenAI-совместимый API)
  2. Создайте API-ключ
  3. В веб-интерфейсе перейдите в Настройки → LLM
  4. Введите API Base URL (по умолчанию https://openrouter.ai/api/v1)
  5. Вставьте ключ в поле API Key
  6. Нажмите Загрузить список моделей
  7. Выберите модель из списка
  8. Нажмите Сохранить все настройки

Без ключа работают только fallback-ответы.


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

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

Для работы с гостем (виртуальный микрофон)

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

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

  1. Создайте папку в modules/, например modules/MyModule/
  2. Внутри создайте файл main.py (обязательно) и папку templates/
  3. Пример main.py:
frommodules.base_moduleimportBaseModulefromflaskimportjsonifyclassMyModule(BaseModule):
name="my_module"display_name="Мой модуль"category="Категория"icon="fa-box"# иконкаdefregister_routes(self):
@self.app.route('/api/my_module/hello')defmy_hello():
returnjsonify({"message": "Hello from my module!"})
defregister_main_tab(self):
return ("Моя вкладка", self.get_template_content("main_tab.html"))
defregister_settings_ui(self):
returnself.get_template_content("settings.html")
defon_load(self):
print(f"[{self.display_name}] Загружен!")
self.event_bus.subscribe("some_event", self.handle_event)
  1. Добавьте HTML-шаблоны в modules/MyModule/templates/:
    • main_tab.html - содержимое вкладки на главной странице
    • settings.html - содержимое вкладки настроек
    • filename.html - содержимое вашей страницы
  2. Добавьте requirements.txt или priority.txt (для тех что должны грузится первые) если нужны зависимости
  3. Чтобы отключить модуль, добавьте имя его папки в config.DISABLED_MODULES

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

ПроблемаРешение
Модуль не загружаетсяПроверьте config.py — не отключён ли модуль. Убедитесь, что в папке есть файл main.py
STT не слышит микрофонПроверьте выбранное устройство в настройках STT.
TTS нет звукаПроверьте режим вывода и выбранное устройство. Попробуйте кнопку "Тест озвучки"
OpenRouter не отвечаетПроверьте API-ключ и API Base URL. Нажмите "Сохранить все настройки". Без ключа работают fallback-ответы
Chatterbox не клонирует голосУбедитесь, что .wav файл моно, 16-24 кГц, 16-bit. Нажмите обновление списка голосов после добавления файла
Ошибка импорта модуляУстановите зависимости через CLI-менеджер (пункт 1 или 3)

📄 Лицензия

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

About

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

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

🧠 NeuroVT

PythonFlaskLicense

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

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


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

🎤 STT (Speech-to-Text) - faster-whisper

  • Основной микрофон - для ведущего (хост) — горячая клавиша Ctrl+Shift+M
  • Виртуальный микрофон - для гостей - горячая клавиша Ctrl+Shift+V
  • Автоопределение языка или ручной выбор
  • Визуальный индикатор речи в интерфейсе
  • История распознанных сообщений для каждого микрофона

🔊 TTS (Speech-to-Text) - два движка на выбор

Silero TTS

  • Модель: Silero (v3_1_ru)
  • Голоса: Айдар, Бая, Ксения, Ксения (альт), Евгений
  • Качество: 24 кГц / 48 кГц

Chatterbox TTS

  • Клонирование голоса - используйте любые .wav файлы в папке references/ внутри модуля
  • Подробная настройка параметров синтеза:
    • Exaggeration (экспрессия) - от 0 до 1.5
    • CFG Weight - от 0 до 2
    • Temperature - от 0.05 до 5
    • Min P / Top P - фильтрация токенов
    • Repetition Penalty - от 1 до 3

Общие возможности TTS:

  • Вывод на динамики и/или виртуальный микрофон (VB-Cable и др.)
  • Выбор конкретного устройства вывода для каждого режима

🧠 LLM (OpenAI-совместимые API)

  • Поддержка любых API, совместимых с OpenAI (OpenRouter, локальные модели, API OpenAI)
  • Управление сессиями (создание, удаление, переименование)
  • Ограничение контекста по токенам (автообрезка истории при превышении)
  • Гостевой префикс - автоматически добавляется к сообщениям с виртуального микрофона
  • Стриминг ответов - генерация ответа в реальном времени
  • Fallback-ответы при отсутствии API-ключа или ошибках сети

⚙️ Дополнительно

  • Веб-интерфейс для управления NeuroVT
  • CLI-менеджер для установки, обновления и запуска (Windows/Linux)
  • Модульная архитектура для лёгкого расширения

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

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 + Voicemeeter Banana
  2. В настройках STT укажите:
    • Основной микрофон - ваш реальный микрофон
    • Виртуальный микрофон - Voicemeeter Out B2 (VB-Audio Voicemeeter VAIO)
  3. В настройках TTS укажите:
    • Динамики - Voicemeeter Input (VB-Audio Voicemeeter VAIO)
    • Виртуальный микрофон - CABLE Input (VB-Audio Virtual Cable)
  4. В настройках LLM задайте Префикс гостя (например "[YunaAi]: ")

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

4. Настройка клонирования голоса (Chatterbox TTS)

  1. Перейдите в Настройки → TTS (Chatterbox)
  2. Поместите .wav файлы с голосом в папку modules/Chatterbox/references/
  3. Нажмите кнопку обновления списка голосов
  4. Выберите нужный голос из выпадающего списка

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

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 # Базовый класс для модулей
│ ├── Whisper/ # STT (Faster-Whisper)
│ │ ├── main.py
│ │ └── templates/
│ ├── Silero/ # TTS (Silero)
│ │ ├── main.py
│ │ └── templates/
│ ├── Chatterbox/ # TTS (Chatterbox Multilingual с клонированием)
│ │ ├── main.py
│ │ ├── references/ # 📁 папка для .wav файлов голосов
│ │ └── templates/
│ └── OpenAICompatible/ # LLM (OpenAI-совместимые)
│ ├── main.py
│ └── templates/
└── templates/ # Общие шаблоны
├── base.html
├── index.html

🎛️ Настройка модулей

STT (Whisper)

НастройкаОписание
Устройство (основное)Выбор микрофона для ведущего
Устройство (виртуальное)Выбор микрофона для гостей
Горячая клавиша (основная)По умолчанию Ctrl+Shift+M
Горячая клавиша (виртуальная)По умолчанию Ctrl+Shift+V
Язык распознаванияАвто или конкретный язык

Silero TTS

НастройкаОписание
ГолосАйдар, Бая, Ксения, Ксения (альт), Евгений
КачествоСтандартное (24 кГц) / Высокое (48 кГц)

Chatterbox TTS

НастройкаОписаниеДиапазон
Референсный голосВыбор .wav файла для клонирования
ExaggerationЭкспрессивность речи0 – 1.5
CFG WeightВес CFG (0 = чистое переключение языка)0 – 2
TemperatureРазнообразие интонаций0.05 – 5
Min PМинимальная вероятность токена0 – 1
Top PTop-P фильтрация0 – 1
Repetition PenaltyШтраф за повторения1 – 3

LLM (OpenAI-совместимые)

НастройкаОписание
API Base URLURL API (OpenRouter, OpenAI, локальный)
API KeyВаш API-ключ
Загрузка моделейПолучение списка доступных моделей из API
Поиск моделейФильтрация списка моделей
ТемператураКреативность ответов (0 – 2)
Max TokensМаксимальная длина ответа
Лимит контекстаМаксимум токенов в истории диалога
System PromptСистемный промпт для AI
Префикс гостяДобавляется к сообщениям с виртуального микрофона
Fallback ответыОтветы при недоступности API (по одному на строку)

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

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

DISABLED_MODULES= ["Silero", "Whisper"]

🔌 События Event Bus

СобытиеОтправительДанные
tts_speakLLM / любой модуль{"text": "...", "source": "..."}
tts_startedTTS{"text": "...", "source": "...", "queue_position": n}
stt_text_readySTT{"text": "...", "is_final": true, "language": "...", "source": "microphone/virtual_microphone"}
llm_voice_inputSTT{"text": "...", "source": "...", "timestamp": "..."}

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

# Создать виртуальное окружение
python -m venv venv
# Активироватьsource venv/bin/activate # Linux
venv\Scripts\activate # Windows# Установить основные зависимости
pip install -r requirements.txt

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

  1. Зарегистрируйтесь на OpenRouter (или используйте другой OpenAI-совместимый API)
  2. Создайте API-ключ
  3. В веб-интерфейсе перейдите в Настройки → LLM
  4. Введите API Base URL (по умолчанию https://openrouter.ai/api/v1)
  5. Вставьте ключ в поле API Key
  6. Нажмите Загрузить список моделей
  7. Выберите модель из списка
  8. Нажмите Сохранить все настройки

Без ключа работают только fallback-ответы.


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

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

Для работы с гостем (виртуальный микрофон)

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

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

  1. Создайте папку в modules/, например modules/MyModule/
  2. Внутри создайте файл main.py (обязательно) и папку templates/
  3. Пример main.py:
frommodules.base_moduleimportBaseModulefromflaskimportjsonifyclassMyModule(BaseModule):
name="my_module"display_name="Мой модуль"category="Категория"icon="fa-box"# иконкаdefregister_routes(self):
@self.app.route('/api/my_module/hello')defmy_hello():
returnjsonify({"message": "Hello from my module!"})
defregister_main_tab(self):
return ("Моя вкладка", self.get_template_content("main_tab.html"))
defregister_settings_ui(self):
returnself.get_template_content("settings.html")
defon_load(self):
print(f"[{self.display_name}] Загружен!")
self.event_bus.subscribe("some_event", self.handle_event)
  1. Добавьте HTML-шаблоны в modules/MyModule/templates/:
    • main_tab.html - содержимое вкладки на главной странице
    • settings.html - содержимое вкладки настроек
    • filename.html - содержимое вашей страницы
  2. Добавьте requirements.txt или priority.txt (для тех что должны грузится первые) если нужны зависимости
  3. Чтобы отключить модуль, добавьте имя его папки в config.DISABLED_MODULES

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

ПроблемаРешение
Модуль не загружаетсяПроверьте config.py — не отключён ли модуль. Убедитесь, что в папке есть файл main.py
STT не слышит микрофонПроверьте выбранное устройство в настройках STT.
TTS нет звукаПроверьте режим вывода и выбранное устройство. Попробуйте кнопку "Тест озвучки"
OpenRouter не отвечаетПроверьте API-ключ и API Base URL. Нажмите "Сохранить все настройки". Без ключа работают fallback-ответы
Chatterbox не клонирует голосУбедитесь, что .wav файл моно, 16-24 кГц, 16-bit. Нажмите обновление списка голосов после добавления файла
Ошибка импорта модуляУстановите зависимости через CLI-менеджер (пункт 1 или 3)

📄 Лицензия

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

About

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

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

🧠 NeuroVT

PythonFlaskLicense

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

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


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

🎤 STT (Speech-to-Text) - faster-whisper

  • Основной микрофон - для ведущего (хост) — горячая клавиша Ctrl+Shift+M
  • Виртуальный микрофон - для гостей - горячая клавиша Ctrl+Shift+V
  • Автоопределение языка или ручной выбор
  • Визуальный индикатор речи в интерфейсе
  • История распознанных сообщений для каждого микрофона

🔊 TTS (Speech-to-Text) - два движка на выбор

Silero TTS

  • Модель: Silero (v3_1_ru)
  • Голоса: Айдар, Бая, Ксения, Ксения (альт), Евгений
  • Качество: 24 кГц / 48 кГц

Chatterbox TTS

  • Клонирование голоса - используйте любые .wav файлы в папке references/ внутри модуля
  • Подробная настройка параметров синтеза:
    • Exaggeration (экспрессия) - от 0 до 1.5
    • CFG Weight - от 0 до 2
    • Temperature - от 0.05 до 5
    • Min P / Top P - фильтрация токенов
    • Repetition Penalty - от 1 до 3

Общие возможности TTS:

  • Вывод на динамики и/или виртуальный микрофон (VB-Cable и др.)
  • Выбор конкретного устройства вывода для каждого режима

🧠 LLM (OpenAI-совместимые API)

  • Поддержка любых API, совместимых с OpenAI (OpenRouter, локальные модели, API OpenAI)
  • Управление сессиями (создание, удаление, переименование)
  • Ограничение контекста по токенам (автообрезка истории при превышении)
  • Гостевой префикс - автоматически добавляется к сообщениям с виртуального микрофона
  • Стриминг ответов - генерация ответа в реальном времени
  • Fallback-ответы при отсутствии API-ключа или ошибках сети

⚙️ Дополнительно

  • Веб-интерфейс для управления NeuroVT
  • CLI-менеджер для установки, обновления и запуска (Windows/Linux)
  • Модульная архитектура для лёгкого расширения

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

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 + Voicemeeter Banana
  2. В настройках STT укажите:
    • Основной микрофон - ваш реальный микрофон
    • Виртуальный микрофон - Voicemeeter Out B2 (VB-Audio Voicemeeter VAIO)
  3. В настройках TTS укажите:
    • Динамики - Voicemeeter Input (VB-Audio Voicemeeter VAIO)
    • Виртуальный микрофон - CABLE Input (VB-Audio Virtual Cable)
  4. В настройках LLM задайте Префикс гостя (например "[YunaAi]: ")

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

4. Настройка клонирования голоса (Chatterbox TTS)

  1. Перейдите в Настройки → TTS (Chatterbox)
  2. Поместите .wav файлы с голосом в папку modules/Chatterbox/references/
  3. Нажмите кнопку обновления списка голосов
  4. Выберите нужный голос из выпадающего списка

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

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 # Базовый класс для модулей
│ ├── Whisper/ # STT (Faster-Whisper)
│ │ ├── main.py
│ │ └── templates/
│ ├── Silero/ # TTS (Silero)
│ │ ├── main.py
│ │ └── templates/
│ ├── Chatterbox/ # TTS (Chatterbox Multilingual с клонированием)
│ │ ├── main.py
│ │ ├── references/ # 📁 папка для .wav файлов голосов
│ │ └── templates/
│ └── OpenAICompatible/ # LLM (OpenAI-совместимые)
│ ├── main.py
│ └── templates/
└── templates/ # Общие шаблоны
├── base.html
├── index.html

🎛️ Настройка модулей

STT (Whisper)

НастройкаОписание
Устройство (основное)Выбор микрофона для ведущего
Устройство (виртуальное)Выбор микрофона для гостей
Горячая клавиша (основная)По умолчанию Ctrl+Shift+M
Горячая клавиша (виртуальная)По умолчанию Ctrl+Shift+V
Язык распознаванияАвто или конкретный язык

Silero TTS

НастройкаОписание
ГолосАйдар, Бая, Ксения, Ксения (альт), Евгений
КачествоСтандартное (24 кГц) / Высокое (48 кГц)

Chatterbox TTS

НастройкаОписаниеДиапазон
Референсный голосВыбор .wav файла для клонирования
ExaggerationЭкспрессивность речи0 – 1.5
CFG WeightВес CFG (0 = чистое переключение языка)0 – 2
TemperatureРазнообразие интонаций0.05 – 5
Min PМинимальная вероятность токена0 – 1
Top PTop-P фильтрация0 – 1
Repetition PenaltyШтраф за повторения1 – 3

LLM (OpenAI-совместимые)

НастройкаОписание
API Base URLURL API (OpenRouter, OpenAI, локальный)
API KeyВаш API-ключ
Загрузка моделейПолучение списка доступных моделей из API
Поиск моделейФильтрация списка моделей
ТемператураКреативность ответов (0 – 2)
Max TokensМаксимальная длина ответа
Лимит контекстаМаксимум токенов в истории диалога
System PromptСистемный промпт для AI
Префикс гостяДобавляется к сообщениям с виртуального микрофона
Fallback ответыОтветы при недоступности API (по одному на строку)

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

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

DISABLED_MODULES= ["Silero", "Whisper"]

🔌 События Event Bus

СобытиеОтправительДанные
tts_speakLLM / любой модуль{"text": "...", "source": "..."}
tts_startedTTS{"text": "...", "source": "...", "queue_position": n}
stt_text_readySTT{"text": "...", "is_final": true, "language": "...", "source": "microphone/virtual_microphone"}
llm_voice_inputSTT{"text": "...", "source": "...", "timestamp": "..."}

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

# Создать виртуальное окружение
python -m venv venv
# Активироватьsource venv/bin/activate # Linux
venv\Scripts\activate # Windows# Установить основные зависимости
pip install -r requirements.txt

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

  1. Зарегистрируйтесь на OpenRouter (или используйте другой OpenAI-совместимый API)
  2. Создайте API-ключ
  3. В веб-интерфейсе перейдите в Настройки → LLM
  4. Введите API Base URL (по умолчанию https://openrouter.ai/api/v1)
  5. Вставьте ключ в поле API Key
  6. Нажмите Загрузить список моделей
  7. Выберите модель из списка
  8. Нажмите Сохранить все настройки

Без ключа работают только fallback-ответы.


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

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

Для работы с гостем (виртуальный микрофон)

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

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

  1. Создайте папку в modules/, например modules/MyModule/
  2. Внутри создайте файл main.py (обязательно) и папку templates/
  3. Пример main.py:
frommodules.base_moduleimportBaseModulefromflaskimportjsonifyclassMyModule(BaseModule):
name="my_module"display_name="Мой модуль"category="Категория"icon="fa-box"# иконкаdefregister_routes(self):
@self.app.route('/api/my_module/hello')defmy_hello():
returnjsonify({"message": "Hello from my module!"})
defregister_main_tab(self):
return ("Моя вкладка", self.get_template_content("main_tab.html"))
defregister_settings_ui(self):
returnself.get_template_content("settings.html")
defon_load(self):
print(f"[{self.display_name}] Загружен!")
self.event_bus.subscribe("some_event", self.handle_event)
  1. Добавьте HTML-шаблоны в modules/MyModule/templates/:
    • main_tab.html - содержимое вкладки на главной странице
    • settings.html - содержимое вкладки настроек
    • filename.html - содержимое вашей страницы
  2. Добавьте requirements.txt или priority.txt (для тех что должны грузится первые) если нужны зависимости
  3. Чтобы отключить модуль, добавьте имя его папки в config.DISABLED_MODULES

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

ПроблемаРешение
Модуль не загружаетсяПроверьте config.py — не отключён ли модуль. Убедитесь, что в папке есть файл main.py
STT не слышит микрофонПроверьте выбранное устройство в настройках STT.
TTS нет звукаПроверьте режим вывода и выбранное устройство. Попробуйте кнопку "Тест озвучки"
OpenRouter не отвечаетПроверьте API-ключ и API Base URL. Нажмите "Сохранить все настройки". Без ключа работают fallback-ответы
Chatterbox не клонирует голосУбедитесь, что .wav файл моно, 16-24 кГц, 16-bit. Нажмите обновление списка голосов после добавления файла
Ошибка импорта модуляУстановите зависимости через CLI-менеджер (пункт 1 или 3)

📄 Лицензия

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

About

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

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

🧠 NeuroVT

PythonFlaskLicense

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

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


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

🎤 STT (Speech-to-Text) - faster-whisper

  • Основной микрофон - для ведущего (хост) — горячая клавиша Ctrl+Shift+M
  • Виртуальный микрофон - для гостей - горячая клавиша Ctrl+Shift+V
  • Автоопределение языка или ручной выбор
  • Визуальный индикатор речи в интерфейсе
  • История распознанных сообщений для каждого микрофона

🔊 TTS (Speech-to-Text) - два движка на выбор

Silero TTS

  • Модель: Silero (v3_1_ru)
  • Голоса: Айдар, Бая, Ксения, Ксения (альт), Евгений
  • Качество: 24 кГц / 48 кГц

Chatterbox TTS

  • Клонирование голоса - используйте любые .wav файлы в папке references/ внутри модуля
  • Подробная настройка параметров синтеза:
    • Exaggeration (экспрессия) - от 0 до 1.5
    • CFG Weight - от 0 до 2
    • Temperature - от 0.05 до 5
    • Min P / Top P - фильтрация токенов
    • Repetition Penalty - от 1 до 3

Общие возможности TTS:

  • Вывод на динамики и/или виртуальный микрофон (VB-Cable и др.)
  • Выбор конкретного устройства вывода для каждого режима

🧠 LLM (OpenAI-совместимые API)

  • Поддержка любых API, совместимых с OpenAI (OpenRouter, локальные модели, API OpenAI)
  • Управление сессиями (создание, удаление, переименование)
  • Ограничение контекста по токенам (автообрезка истории при превышении)
  • Гостевой префикс - автоматически добавляется к сообщениям с виртуального микрофона
  • Стриминг ответов - генерация ответа в реальном времени
  • Fallback-ответы при отсутствии API-ключа или ошибках сети

⚙️ Дополнительно

  • Веб-интерфейс для управления NeuroVT
  • CLI-менеджер для установки, обновления и запуска (Windows/Linux)
  • Модульная архитектура для лёгкого расширения

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

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 + Voicemeeter Banana
  2. В настройках STT укажите:
    • Основной микрофон - ваш реальный микрофон
    • Виртуальный микрофон - Voicemeeter Out B2 (VB-Audio Voicemeeter VAIO)
  3. В настройках TTS укажите:
    • Динамики - Voicemeeter Input (VB-Audio Voicemeeter VAIO)
    • Виртуальный микрофон - CABLE Input (VB-Audio Virtual Cable)
  4. В настройках LLM задайте Префикс гостя (например "[YunaAi]: ")

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

4. Настройка клонирования голоса (Chatterbox TTS)

  1. Перейдите в Настройки → TTS (Chatterbox)
  2. Поместите .wav файлы с голосом в папку modules/Chatterbox/references/
  3. Нажмите кнопку обновления списка голосов
  4. Выберите нужный голос из выпадающего списка

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

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 # Базовый класс для модулей
│ ├── Whisper/ # STT (Faster-Whisper)
│ │ ├── main.py
│ │ └── templates/
│ ├── Silero/ # TTS (Silero)
│ │ ├── main.py
│ │ └── templates/
│ ├── Chatterbox/ # TTS (Chatterbox Multilingual с клонированием)
│ │ ├── main.py
│ │ ├── references/ # 📁 папка для .wav файлов голосов
│ │ └── templates/
│ └── OpenAICompatible/ # LLM (OpenAI-совместимые)
│ ├── main.py
│ └── templates/
└── templates/ # Общие шаблоны
├── base.html
├── index.html

🎛️ Настройка модулей

STT (Whisper)

НастройкаОписание
Устройство (основное)Выбор микрофона для ведущего
Устройство (виртуальное)Выбор микрофона для гостей
Горячая клавиша (основная)По умолчанию Ctrl+Shift+M
Горячая клавиша (виртуальная)По умолчанию Ctrl+Shift+V
Язык распознаванияАвто или конкретный язык

Silero TTS

НастройкаОписание
ГолосАйдар, Бая, Ксения, Ксения (альт), Евгений
КачествоСтандартное (24 кГц) / Высокое (48 кГц)

Chatterbox TTS

НастройкаОписаниеДиапазон
Референсный голосВыбор .wav файла для клонирования
ExaggerationЭкспрессивность речи0 – 1.5
CFG WeightВес CFG (0 = чистое переключение языка)0 – 2
TemperatureРазнообразие интонаций0.05 – 5
Min PМинимальная вероятность токена0 – 1
Top PTop-P фильтрация0 – 1
Repetition PenaltyШтраф за повторения1 – 3

LLM (OpenAI-совместимые)

НастройкаОписание
API Base URLURL API (OpenRouter, OpenAI, локальный)
API KeyВаш API-ключ
Загрузка моделейПолучение списка доступных моделей из API
Поиск моделейФильтрация списка моделей
ТемператураКреативность ответов (0 – 2)
Max TokensМаксимальная длина ответа
Лимит контекстаМаксимум токенов в истории диалога
System PromptСистемный промпт для AI
Префикс гостяДобавляется к сообщениям с виртуального микрофона
Fallback ответыОтветы при недоступности API (по одному на строку)

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

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

DISABLED_MODULES= ["Silero", "Whisper"]

🔌 События Event Bus

СобытиеОтправительДанные
tts_speakLLM / любой модуль{"text": "...", "source": "..."}
tts_startedTTS{"text": "...", "source": "...", "queue_position": n}
stt_text_readySTT{"text": "...", "is_final": true, "language": "...", "source": "microphone/virtual_microphone"}
llm_voice_inputSTT{"text": "...", "source": "...", "timestamp": "..."}

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

# Создать виртуальное окружение
python -m venv venv
# Активироватьsource venv/bin/activate # Linux
venv\Scripts\activate # Windows# Установить основные зависимости
pip install -r requirements.txt

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

  1. Зарегистрируйтесь на OpenRouter (или используйте другой OpenAI-совместимый API)
  2. Создайте API-ключ
  3. В веб-интерфейсе перейдите в Настройки → LLM
  4. Введите API Base URL (по умолчанию https://openrouter.ai/api/v1)
  5. Вставьте ключ в поле API Key
  6. Нажмите Загрузить список моделей
  7. Выберите модель из списка
  8. Нажмите Сохранить все настройки

Без ключа работают только fallback-ответы.


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

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

Для работы с гостем (виртуальный микрофон)

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

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

  1. Создайте папку в modules/, например modules/MyModule/
  2. Внутри создайте файл main.py (обязательно) и папку templates/
  3. Пример main.py:
frommodules.base_moduleimportBaseModulefromflaskimportjsonifyclassMyModule(BaseModule):
name="my_module"display_name="Мой модуль"category="Категория"icon="fa-box"# иконкаdefregister_routes(self):
@self.app.route('/api/my_module/hello')defmy_hello():
returnjsonify({"message": "Hello from my module!"})
defregister_main_tab(self):
return ("Моя вкладка", self.get_template_content("main_tab.html"))
defregister_settings_ui(self):
returnself.get_template_content("settings.html")
defon_load(self):
print(f"[{self.display_name}] Загружен!")
self.event_bus.subscribe("some_event", self.handle_event)
  1. Добавьте HTML-шаблоны в modules/MyModule/templates/:
    • main_tab.html - содержимое вкладки на главной странице
    • settings.html - содержимое вкладки настроек
    • filename.html - содержимое вашей страницы
  2. Добавьте requirements.txt или priority.txt (для тех что должны грузится первые) если нужны зависимости
  3. Чтобы отключить модуль, добавьте имя его папки в config.DISABLED_MODULES

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

ПроблемаРешение
Модуль не загружаетсяПроверьте config.py — не отключён ли модуль. Убедитесь, что в папке есть файл main.py
STT не слышит микрофонПроверьте выбранное устройство в настройках STT.
TTS нет звукаПроверьте режим вывода и выбранное устройство. Попробуйте кнопку "Тест озвучки"
OpenRouter не отвечаетПроверьте API-ключ и API Base URL. Нажмите "Сохранить все настройки". Без ключа работают fallback-ответы
Chatterbox не клонирует голосУбедитесь, что .wav файл моно, 16-24 кГц, 16-bit. Нажмите обновление списка голосов после добавления файла
Ошибка импорта модуляУстановите зависимости через CLI-менеджер (пункт 1 или 3)

📄 Лицензия

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

About

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

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

🧠 NeuroVT

PythonFlaskLicense

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

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


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

🎤 STT (Speech-to-Text) - faster-whisper

  • Основной микрофон - для ведущего (хост) — горячая клавиша Ctrl+Shift+M
  • Виртуальный микрофон - для гостей - горячая клавиша Ctrl+Shift+V
  • Автоопределение языка или ручной выбор
  • Визуальный индикатор речи в интерфейсе
  • История распознанных сообщений для каждого микрофона

🔊 TTS (Speech-to-Text) - два движка на выбор

Silero TTS

  • Модель: Silero (v3_1_ru)
  • Голоса: Айдар, Бая, Ксения, Ксения (альт), Евгений
  • Качество: 24 кГц / 48 кГц

Chatterbox TTS

  • Клонирование голоса - используйте любые .wav файлы в папке references/ внутри модуля
  • Подробная настройка параметров синтеза:
    • Exaggeration (экспрессия) - от 0 до 1.5
    • CFG Weight - от 0 до 2
    • Temperature - от 0.05 до 5
    • Min P / Top P - фильтрация токенов
    • Repetition Penalty - от 1 до 3

Общие возможности TTS:

  • Вывод на динамики и/или виртуальный микрофон (VB-Cable и др.)
  • Выбор конкретного устройства вывода для каждого режима

🧠 LLM (OpenAI-совместимые API)

  • Поддержка любых API, совместимых с OpenAI (OpenRouter, локальные модели, API OpenAI)
  • Управление сессиями (создание, удаление, переименование)
  • Ограничение контекста по токенам (автообрезка истории при превышении)
  • Гостевой префикс - автоматически добавляется к сообщениям с виртуального микрофона
  • Стриминг ответов - генерация ответа в реальном времени
  • Fallback-ответы при отсутствии API-ключа или ошибках сети

⚙️ Дополнительно

  • Веб-интерфейс для управления NeuroVT
  • CLI-менеджер для установки, обновления и запуска (Windows/Linux)
  • Модульная архитектура для лёгкого расширения

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

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 + Voicemeeter Banana
  2. В настройках STT укажите:
    • Основной микрофон - ваш реальный микрофон
    • Виртуальный микрофон - Voicemeeter Out B2 (VB-Audio Voicemeeter VAIO)
  3. В настройках TTS укажите:
    • Динамики - Voicemeeter Input (VB-Audio Voicemeeter VAIO)
    • Виртуальный микрофон - CABLE Input (VB-Audio Virtual Cable)
  4. В настройках LLM задайте Префикс гостя (например "[YunaAi]: ")

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

4. Настройка клонирования голоса (Chatterbox TTS)

  1. Перейдите в Настройки → TTS (Chatterbox)
  2. Поместите .wav файлы с голосом в папку modules/Chatterbox/references/
  3. Нажмите кнопку обновления списка голосов
  4. Выберите нужный голос из выпадающего списка

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

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 # Базовый класс для модулей
│ ├── Whisper/ # STT (Faster-Whisper)
│ │ ├── main.py
│ │ └── templates/
│ ├── Silero/ # TTS (Silero)
│ │ ├── main.py
│ │ └── templates/
│ ├── Chatterbox/ # TTS (Chatterbox Multilingual с клонированием)
│ │ ├── main.py
│ │ ├── references/ # 📁 папка для .wav файлов голосов
│ │ └── templates/
│ └── OpenAICompatible/ # LLM (OpenAI-совместимые)
│ ├── main.py
│ └── templates/
└── templates/ # Общие шаблоны
├── base.html
├── index.html

🎛️ Настройка модулей

STT (Whisper)

НастройкаОписание
Устройство (основное)Выбор микрофона для ведущего
Устройство (виртуальное)Выбор микрофона для гостей
Горячая клавиша (основная)По умолчанию Ctrl+Shift+M
Горячая клавиша (виртуальная)По умолчанию Ctrl+Shift+V
Язык распознаванияАвто или конкретный язык

Silero TTS

НастройкаОписание
ГолосАйдар, Бая, Ксения, Ксения (альт), Евгений
КачествоСтандартное (24 кГц) / Высокое (48 кГц)

Chatterbox TTS

НастройкаОписаниеДиапазон
Референсный голосВыбор .wav файла для клонирования
ExaggerationЭкспрессивность речи0 – 1.5
CFG WeightВес CFG (0 = чистое переключение языка)0 – 2
TemperatureРазнообразие интонаций0.05 – 5
Min PМинимальная вероятность токена0 – 1
Top PTop-P фильтрация0 – 1
Repetition PenaltyШтраф за повторения1 – 3

LLM (OpenAI-совместимые)

НастройкаОписание
API Base URLURL API (OpenRouter, OpenAI, локальный)
API KeyВаш API-ключ
Загрузка моделейПолучение списка доступных моделей из API
Поиск моделейФильтрация списка моделей
ТемператураКреативность ответов (0 – 2)
Max TokensМаксимальная длина ответа
Лимит контекстаМаксимум токенов в истории диалога
System PromptСистемный промпт для AI
Префикс гостяДобавляется к сообщениям с виртуального микрофона
Fallback ответыОтветы при недоступности API (по одному на строку)

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

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

DISABLED_MODULES= ["Silero", "Whisper"]

🔌 События Event Bus

СобытиеОтправительДанные
tts_speakLLM / любой модуль{"text": "...", "source": "..."}
tts_startedTTS{"text": "...", "source": "...", "queue_position": n}
stt_text_readySTT{"text": "...", "is_final": true, "language": "...", "source": "microphone/virtual_microphone"}
llm_voice_inputSTT{"text": "...", "source": "...", "timestamp": "..."}

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

# Создать виртуальное окружение
python -m venv venv
# Активироватьsource venv/bin/activate # Linux
venv\Scripts\activate # Windows# Установить основные зависимости
pip install -r requirements.txt

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

  1. Зарегистрируйтесь на OpenRouter (или используйте другой OpenAI-совместимый API)
  2. Создайте API-ключ
  3. В веб-интерфейсе перейдите в Настройки → LLM
  4. Введите API Base URL (по умолчанию https://openrouter.ai/api/v1)
  5. Вставьте ключ в поле API Key
  6. Нажмите Загрузить список моделей
  7. Выберите модель из списка
  8. Нажмите Сохранить все настройки

Без ключа работают только fallback-ответы.


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

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

Для работы с гостем (виртуальный микрофон)

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

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

  1. Создайте папку в modules/, например modules/MyModule/
  2. Внутри создайте файл main.py (обязательно) и папку templates/
  3. Пример main.py:
frommodules.base_moduleimportBaseModulefromflaskimportjsonifyclassMyModule(BaseModule):
name="my_module"display_name="Мой модуль"category="Категория"icon="fa-box"# иконкаdefregister_routes(self):
@self.app.route('/api/my_module/hello')defmy_hello():
returnjsonify({"message": "Hello from my module!"})
defregister_main_tab(self):
return ("Моя вкладка", self.get_template_content("main_tab.html"))
defregister_settings_ui(self):
returnself.get_template_content("settings.html")
defon_load(self):
print(f"[{self.display_name}] Загружен!")
self.event_bus.subscribe("some_event", self.handle_event)
  1. Добавьте HTML-шаблоны в modules/MyModule/templates/:
    • main_tab.html - содержимое вкладки на главной странице
    • settings.html - содержимое вкладки настроек
    • filename.html - содержимое вашей страницы
  2. Добавьте requirements.txt или priority.txt (для тех что должны грузится первые) если нужны зависимости
  3. Чтобы отключить модуль, добавьте имя его папки в config.DISABLED_MODULES

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

ПроблемаРешение
Модуль не загружаетсяПроверьте config.py — не отключён ли модуль. Убедитесь, что в папке есть файл main.py
STT не слышит микрофонПроверьте выбранное устройство в настройках STT.
TTS нет звукаПроверьте режим вывода и выбранное устройство. Попробуйте кнопку "Тест озвучки"
OpenRouter не отвечаетПроверьте API-ключ и API Base URL. Нажмите "Сохранить все настройки". Без ключа работают fallback-ответы
Chatterbox не клонирует голосУбедитесь, что .wav файл моно, 16-24 кГц, 16-bit. Нажмите обновление списка голосов после добавления файла
Ошибка импорта модуляУстановите зависимости через CLI-менеджер (пункт 1 или 3)

📄 Лицензия

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

About

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

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

🧠 NeuroVT

PythonFlaskLicense

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

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


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

🎤 STT (Speech-to-Text) - faster-whisper

  • Основной микрофон - для ведущего (хост) — горячая клавиша Ctrl+Shift+M
  • Виртуальный микрофон - для гостей - горячая клавиша Ctrl+Shift+V
  • Автоопределение языка или ручной выбор
  • Визуальный индикатор речи в интерфейсе
  • История распознанных сообщений для каждого микрофона

🔊 TTS (Speech-to-Text) - два движка на выбор

Silero TTS

  • Модель: Silero (v3_1_ru)
  • Голоса: Айдар, Бая, Ксения, Ксения (альт), Евгений
  • Качество: 24 кГц / 48 кГц

Chatterbox TTS

  • Клонирование голоса - используйте любые .wav файлы в папке references/ внутри модуля
  • Подробная настройка параметров синтеза:
    • Exaggeration (экспрессия) - от 0 до 1.5
    • CFG Weight - от 0 до 2
    • Temperature - от 0.05 до 5
    • Min P / Top P - фильтрация токенов
    • Repetition Penalty - от 1 до 3

Общие возможности TTS:

  • Вывод на динамики и/или виртуальный микрофон (VB-Cable и др.)
  • Выбор конкретного устройства вывода для каждого режима

🧠 LLM (OpenAI-совместимые API)

  • Поддержка любых API, совместимых с OpenAI (OpenRouter, локальные модели, API OpenAI)
  • Управление сессиями (создание, удаление, переименование)
  • Ограничение контекста по токенам (автообрезка истории при превышении)
  • Гостевой префикс - автоматически добавляется к сообщениям с виртуального микрофона
  • Стриминг ответов - генерация ответа в реальном времени
  • Fallback-ответы при отсутствии API-ключа или ошибках сети

⚙️ Дополнительно

  • Веб-интерфейс для управления NeuroVT
  • CLI-менеджер для установки, обновления и запуска (Windows/Linux)
  • Модульная архитектура для лёгкого расширения

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

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 + Voicemeeter Banana
  2. В настройках STT укажите:
    • Основной микрофон - ваш реальный микрофон
    • Виртуальный микрофон - Voicemeeter Out B2 (VB-Audio Voicemeeter VAIO)
  3. В настройках TTS укажите:
    • Динамики - Voicemeeter Input (VB-Audio Voicemeeter VAIO)
    • Виртуальный микрофон - CABLE Input (VB-Audio Virtual Cable)
  4. В настройках LLM задайте Префикс гостя (например "[YunaAi]: ")

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

4. Настройка клонирования голоса (Chatterbox TTS)

  1. Перейдите в Настройки → TTS (Chatterbox)
  2. Поместите .wav файлы с голосом в папку modules/Chatterbox/references/
  3. Нажмите кнопку обновления списка голосов
  4. Выберите нужный голос из выпадающего списка

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

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 # Базовый класс для модулей
│ ├── Whisper/ # STT (Faster-Whisper)
│ │ ├── main.py
│ │ └── templates/
│ ├── Silero/ # TTS (Silero)
│ │ ├── main.py
│ │ └── templates/
│ ├── Chatterbox/ # TTS (Chatterbox Multilingual с клонированием)
│ │ ├── main.py
│ │ ├── references/ # 📁 папка для .wav файлов голосов
│ │ └── templates/
│ └── OpenAICompatible/ # LLM (OpenAI-совместимые)
│ ├── main.py
│ └── templates/
└── templates/ # Общие шаблоны
├── base.html
├── index.html

🎛️ Настройка модулей

STT (Whisper)

НастройкаОписание
Устройство (основное)Выбор микрофона для ведущего
Устройство (виртуальное)Выбор микрофона для гостей
Горячая клавиша (основная)По умолчанию Ctrl+Shift+M
Горячая клавиша (виртуальная)По умолчанию Ctrl+Shift+V
Язык распознаванияАвто или конкретный язык

Silero TTS

НастройкаОписание
ГолосАйдар, Бая, Ксения, Ксения (альт), Евгений
КачествоСтандартное (24 кГц) / Высокое (48 кГц)

Chatterbox TTS

НастройкаОписаниеДиапазон
Референсный голосВыбор .wav файла для клонирования
ExaggerationЭкспрессивность речи0 – 1.5
CFG WeightВес CFG (0 = чистое переключение языка)0 – 2
TemperatureРазнообразие интонаций0.05 – 5
Min PМинимальная вероятность токена0 – 1
Top PTop-P фильтрация0 – 1
Repetition PenaltyШтраф за повторения1 – 3

LLM (OpenAI-совместимые)

НастройкаОписание
API Base URLURL API (OpenRouter, OpenAI, локальный)
API KeyВаш API-ключ
Загрузка моделейПолучение списка доступных моделей из API
Поиск моделейФильтрация списка моделей
ТемператураКреативность ответов (0 – 2)
Max TokensМаксимальная длина ответа
Лимит контекстаМаксимум токенов в истории диалога
System PromptСистемный промпт для AI
Префикс гостяДобавляется к сообщениям с виртуального микрофона
Fallback ответыОтветы при недоступности API (по одному на строку)

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

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

DISABLED_MODULES= ["Silero", "Whisper"]

🔌 События Event Bus

СобытиеОтправительДанные
tts_speakLLM / любой модуль{"text": "...", "source": "..."}
tts_startedTTS{"text": "...", "source": "...", "queue_position": n}
stt_text_readySTT{"text": "...", "is_final": true, "language": "...", "source": "microphone/virtual_microphone"}
llm_voice_inputSTT{"text": "...", "source": "...", "timestamp": "..."}

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

# Создать виртуальное окружение
python -m venv venv
# Активироватьsource venv/bin/activate # Linux
venv\Scripts\activate # Windows# Установить основные зависимости
pip install -r requirements.txt

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

  1. Зарегистрируйтесь на OpenRouter (или используйте другой OpenAI-совместимый API)
  2. Создайте API-ключ
  3. В веб-интерфейсе перейдите в Настройки → LLM
  4. Введите API Base URL (по умолчанию https://openrouter.ai/api/v1)
  5. Вставьте ключ в поле API Key
  6. Нажмите Загрузить список моделей
  7. Выберите модель из списка
  8. Нажмите Сохранить все настройки

Без ключа работают только fallback-ответы.


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

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

Для работы с гостем (виртуальный микрофон)

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

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

  1. Создайте папку в modules/, например modules/MyModule/
  2. Внутри создайте файл main.py (обязательно) и папку templates/
  3. Пример main.py:
frommodules.base_moduleimportBaseModulefromflaskimportjsonifyclassMyModule(BaseModule):
name="my_module"display_name="Мой модуль"category="Категория"icon="fa-box"# иконкаdefregister_routes(self):
@self.app.route('/api/my_module/hello')defmy_hello():
returnjsonify({"message": "Hello from my module!"})
defregister_main_tab(self):
return ("Моя вкладка", self.get_template_content("main_tab.html"))
defregister_settings_ui(self):
returnself.get_template_content("settings.html")
defon_load(self):
print(f"[{self.display_name}] Загружен!")
self.event_bus.subscribe("some_event", self.handle_event)
  1. Добавьте HTML-шаблоны в modules/MyModule/templates/:
    • main_tab.html - содержимое вкладки на главной странице
    • settings.html - содержимое вкладки настроек
    • filename.html - содержимое вашей страницы
  2. Добавьте requirements.txt или priority.txt (для тех что должны грузится первые) если нужны зависимости
  3. Чтобы отключить модуль, добавьте имя его папки в config.DISABLED_MODULES

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

ПроблемаРешение
Модуль не загружаетсяПроверьте config.py — не отключён ли модуль. Убедитесь, что в папке есть файл main.py
STT не слышит микрофонПроверьте выбранное устройство в настройках STT.
TTS нет звукаПроверьте режим вывода и выбранное устройство. Попробуйте кнопку "Тест озвучки"
OpenRouter не отвечаетПроверьте API-ключ и API Base URL. Нажмите "Сохранить все настройки". Без ключа работают fallback-ответы
Chatterbox не клонирует голосУбедитесь, что .wav файл моно, 16-24 кГц, 16-bit. Нажмите обновление списка голосов после добавления файла
Ошибка импорта модуляУстановите зависимости через CLI-менеджер (пункт 1 или 3)

📄 Лицензия

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

About

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

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

🧠 NeuroVT

PythonFlaskLicense

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

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


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

🎤 STT (Speech-to-Text) - faster-whisper

  • Основной микрофон - для ведущего (хост) — горячая клавиша Ctrl+Shift+M
  • Виртуальный микрофон - для гостей - горячая клавиша Ctrl+Shift+V
  • Автоопределение языка или ручной выбор
  • Визуальный индикатор речи в интерфейсе
  • История распознанных сообщений для каждого микрофона

🔊 TTS (Speech-to-Text) - два движка на выбор

Silero TTS

  • Модель: Silero (v3_1_ru)
  • Голоса: Айдар, Бая, Ксения, Ксения (альт), Евгений
  • Качество: 24 кГц / 48 кГц

Chatterbox TTS

  • Клонирование голоса - используйте любые .wav файлы в папке references/ внутри модуля
  • Подробная настройка параметров синтеза:
    • Exaggeration (экспрессия) - от 0 до 1.5
    • CFG Weight - от 0 до 2
    • Temperature - от 0.05 до 5
    • Min P / Top P - фильтрация токенов
    • Repetition Penalty - от 1 до 3

Общие возможности TTS:

  • Вывод на динамики и/или виртуальный микрофон (VB-Cable и др.)
  • Выбор конкретного устройства вывода для каждого режима

🧠 LLM (OpenAI-совместимые API)

  • Поддержка любых API, совместимых с OpenAI (OpenRouter, локальные модели, API OpenAI)
  • Управление сессиями (создание, удаление, переименование)
  • Ограничение контекста по токенам (автообрезка истории при превышении)
  • Гостевой префикс - автоматически добавляется к сообщениям с виртуального микрофона
  • Стриминг ответов - генерация ответа в реальном времени
  • Fallback-ответы при отсутствии API-ключа или ошибках сети

⚙️ Дополнительно

  • Веб-интерфейс для управления NeuroVT
  • CLI-менеджер для установки, обновления и запуска (Windows/Linux)
  • Модульная архитектура для лёгкого расширения

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

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 + Voicemeeter Banana
  2. В настройках STT укажите:
    • Основной микрофон - ваш реальный микрофон
    • Виртуальный микрофон - Voicemeeter Out B2 (VB-Audio Voicemeeter VAIO)
  3. В настройках TTS укажите:
    • Динамики - Voicemeeter Input (VB-Audio Voicemeeter VAIO)
    • Виртуальный микрофон - CABLE Input (VB-Audio Virtual Cable)
  4. В настройках LLM задайте Префикс гостя (например "[YunaAi]: ")

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

4. Настройка клонирования голоса (Chatterbox TTS)

  1. Перейдите в Настройки → TTS (Chatterbox)
  2. Поместите .wav файлы с голосом в папку modules/Chatterbox/references/
  3. Нажмите кнопку обновления списка голосов
  4. Выберите нужный голос из выпадающего списка

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

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 # Базовый класс для модулей
│ ├── Whisper/ # STT (Faster-Whisper)
│ │ ├── main.py
│ │ └── templates/
│ ├── Silero/ # TTS (Silero)
│ │ ├── main.py
│ │ └── templates/
│ ├── Chatterbox/ # TTS (Chatterbox Multilingual с клонированием)
│ │ ├── main.py
│ │ ├── references/ # 📁 папка для .wav файлов голосов
│ │ └── templates/
│ └── OpenAICompatible/ # LLM (OpenAI-совместимые)
│ ├── main.py
│ └── templates/
└── templates/ # Общие шаблоны
├── base.html
├── index.html

🎛️ Настройка модулей

STT (Whisper)

НастройкаОписание
Устройство (основное)Выбор микрофона для ведущего
Устройство (виртуальное)Выбор микрофона для гостей
Горячая клавиша (основная)По умолчанию Ctrl+Shift+M
Горячая клавиша (виртуальная)По умолчанию Ctrl+Shift+V
Язык распознаванияАвто или конкретный язык

Silero TTS

НастройкаОписание
ГолосАйдар, Бая, Ксения, Ксения (альт), Евгений
КачествоСтандартное (24 кГц) / Высокое (48 кГц)

Chatterbox TTS

НастройкаОписаниеДиапазон
Референсный голосВыбор .wav файла для клонирования
ExaggerationЭкспрессивность речи0 – 1.5
CFG WeightВес CFG (0 = чистое переключение языка)0 – 2
TemperatureРазнообразие интонаций0.05 – 5
Min PМинимальная вероятность токена0 – 1
Top PTop-P фильтрация0 – 1
Repetition PenaltyШтраф за повторения1 – 3

LLM (OpenAI-совместимые)

НастройкаОписание
API Base URLURL API (OpenRouter, OpenAI, локальный)
API KeyВаш API-ключ
Загрузка моделейПолучение списка доступных моделей из API
Поиск моделейФильтрация списка моделей
ТемператураКреативность ответов (0 – 2)
Max TokensМаксимальная длина ответа
Лимит контекстаМаксимум токенов в истории диалога
System PromptСистемный промпт для AI
Префикс гостяДобавляется к сообщениям с виртуального микрофона
Fallback ответыОтветы при недоступности API (по одному на строку)

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

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

DISABLED_MODULES= ["Silero", "Whisper"]

🔌 События Event Bus

СобытиеОтправительДанные
tts_speakLLM / любой модуль{"text": "...", "source": "..."}
tts_startedTTS{"text": "...", "source": "...", "queue_position": n}
stt_text_readySTT{"text": "...", "is_final": true, "language": "...", "source": "microphone/virtual_microphone"}
llm_voice_inputSTT{"text": "...", "source": "...", "timestamp": "..."}

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

# Создать виртуальное окружение
python -m venv venv
# Активироватьsource venv/bin/activate # Linux
venv\Scripts\activate # Windows# Установить основные зависимости
pip install -r requirements.txt

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

  1. Зарегистрируйтесь на OpenRouter (или используйте другой OpenAI-совместимый API)
  2. Создайте API-ключ
  3. В веб-интерфейсе перейдите в Настройки → LLM
  4. Введите API Base URL (по умолчанию https://openrouter.ai/api/v1)
  5. Вставьте ключ в поле API Key
  6. Нажмите Загрузить список моделей
  7. Выберите модель из списка
  8. Нажмите Сохранить все настройки

Без ключа работают только fallback-ответы.


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

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

Для работы с гостем (виртуальный микрофон)

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

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

  1. Создайте папку в modules/, например modules/MyModule/
  2. Внутри создайте файл main.py (обязательно) и папку templates/
  3. Пример main.py:
frommodules.base_moduleimportBaseModulefromflaskimportjsonifyclassMyModule(BaseModule):
name="my_module"display_name="Мой модуль"category="Категория"icon="fa-box"# иконкаdefregister_routes(self):
@self.app.route('/api/my_module/hello')defmy_hello():
returnjsonify({"message": "Hello from my module!"})
defregister_main_tab(self):
return ("Моя вкладка", self.get_template_content("main_tab.html"))
defregister_settings_ui(self):
returnself.get_template_content("settings.html")
defon_load(self):
print(f"[{self.display_name}] Загружен!")
self.event_bus.subscribe("some_event", self.handle_event)
  1. Добавьте HTML-шаблоны в modules/MyModule/templates/:
    • main_tab.html - содержимое вкладки на главной странице
    • settings.html - содержимое вкладки настроек
    • filename.html - содержимое вашей страницы
  2. Добавьте requirements.txt или priority.txt (для тех что должны грузится первые) если нужны зависимости
  3. Чтобы отключить модуль, добавьте имя его папки в config.DISABLED_MODULES

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

ПроблемаРешение
Модуль не загружаетсяПроверьте config.py — не отключён ли модуль. Убедитесь, что в папке есть файл main.py
STT не слышит микрофонПроверьте выбранное устройство в настройках STT.
TTS нет звукаПроверьте режим вывода и выбранное устройство. Попробуйте кнопку "Тест озвучки"
OpenRouter не отвечаетПроверьте API-ключ и API Base URL. Нажмите "Сохранить все настройки". Без ключа работают fallback-ответы
Chatterbox не клонирует голосУбедитесь, что .wav файл моно, 16-24 кГц, 16-bit. Нажмите обновление списка голосов после добавления файла
Ошибка импорта модуляУстановите зависимости через CLI-менеджер (пункт 1 или 3)

📄 Лицензия

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

About

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

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

🧠 NeuroVT

PythonFlaskLicense

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

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


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

🎤 STT (Speech-to-Text) - faster-whisper

  • Основной микрофон - для ведущего (хост) — горячая клавиша Ctrl+Shift+M
  • Виртуальный микрофон - для гостей - горячая клавиша Ctrl+Shift+V
  • Автоопределение языка или ручной выбор
  • Визуальный индикатор речи в интерфейсе
  • История распознанных сообщений для каждого микрофона

🔊 TTS (Speech-to-Text) - два движка на выбор

Silero TTS

  • Модель: Silero (v3_1_ru)
  • Голоса: Айдар, Бая, Ксения, Ксения (альт), Евгений
  • Качество: 24 кГц / 48 кГц

Chatterbox TTS

  • Клонирование голоса - используйте любые .wav файлы в папке references/ внутри модуля
  • Подробная настройка параметров синтеза:
    • Exaggeration (экспрессия) - от 0 до 1.5
    • CFG Weight - от 0 до 2
    • Temperature - от 0.05 до 5
    • Min P / Top P - фильтрация токенов
    • Repetition Penalty - от 1 до 3

Общие возможности TTS:

  • Вывод на динамики и/или виртуальный микрофон (VB-Cable и др.)
  • Выбор конкретного устройства вывода для каждого режима

🧠 LLM (OpenAI-совместимые API)

  • Поддержка любых API, совместимых с OpenAI (OpenRouter, локальные модели, API OpenAI)
  • Управление сессиями (создание, удаление, переименование)
  • Ограничение контекста по токенам (автообрезка истории при превышении)
  • Гостевой префикс - автоматически добавляется к сообщениям с виртуального микрофона
  • Стриминг ответов - генерация ответа в реальном времени
  • Fallback-ответы при отсутствии API-ключа или ошибках сети

⚙️ Дополнительно

  • Веб-интерфейс для управления NeuroVT
  • CLI-менеджер для установки, обновления и запуска (Windows/Linux)
  • Модульная архитектура для лёгкого расширения

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

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 + Voicemeeter Banana
  2. В настройках STT укажите:
    • Основной микрофон - ваш реальный микрофон
    • Виртуальный микрофон - Voicemeeter Out B2 (VB-Audio Voicemeeter VAIO)
  3. В настройках TTS укажите:
    • Динамики - Voicemeeter Input (VB-Audio Voicemeeter VAIO)
    • Виртуальный микрофон - CABLE Input (VB-Audio Virtual Cable)
  4. В настройках LLM задайте Префикс гостя (например "[YunaAi]: ")

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

4. Настройка клонирования голоса (Chatterbox TTS)

  1. Перейдите в Настройки → TTS (Chatterbox)
  2. Поместите .wav файлы с голосом в папку modules/Chatterbox/references/
  3. Нажмите кнопку обновления списка голосов
  4. Выберите нужный голос из выпадающего списка

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

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 # Базовый класс для модулей
│ ├── Whisper/ # STT (Faster-Whisper)
│ │ ├── main.py
│ │ └── templates/
│ ├── Silero/ # TTS (Silero)
│ │ ├── main.py
│ │ └── templates/
│ ├── Chatterbox/ # TTS (Chatterbox Multilingual с клонированием)
│ │ ├── main.py
│ │ ├── references/ # 📁 папка для .wav файлов голосов
│ │ └── templates/
│ └── OpenAICompatible/ # LLM (OpenAI-совместимые)
│ ├── main.py
│ └── templates/
└── templates/ # Общие шаблоны
├── base.html
├── index.html

🎛️ Настройка модулей

STT (Whisper)

НастройкаОписание
Устройство (основное)Выбор микрофона для ведущего
Устройство (виртуальное)Выбор микрофона для гостей
Горячая клавиша (основная)По умолчанию Ctrl+Shift+M
Горячая клавиша (виртуальная)По умолчанию Ctrl+Shift+V
Язык распознаванияАвто или конкретный язык

Silero TTS

НастройкаОписание
ГолосАйдар, Бая, Ксения, Ксения (альт), Евгений
КачествоСтандартное (24 кГц) / Высокое (48 кГц)

Chatterbox TTS

НастройкаОписаниеДиапазон
Референсный голосВыбор .wav файла для клонирования
ExaggerationЭкспрессивность речи0 – 1.5
CFG WeightВес CFG (0 = чистое переключение языка)0 – 2
TemperatureРазнообразие интонаций0.05 – 5
Min PМинимальная вероятность токена0 – 1
Top PTop-P фильтрация0 – 1
Repetition PenaltyШтраф за повторения1 – 3

LLM (OpenAI-совместимые)

НастройкаОписание
API Base URLURL API (OpenRouter, OpenAI, локальный)
API KeyВаш API-ключ
Загрузка моделейПолучение списка доступных моделей из API
Поиск моделейФильтрация списка моделей
ТемператураКреативность ответов (0 – 2)
Max TokensМаксимальная длина ответа
Лимит контекстаМаксимум токенов в истории диалога
System PromptСистемный промпт для AI
Префикс гостяДобавляется к сообщениям с виртуального микрофона
Fallback ответыОтветы при недоступности API (по одному на строку)

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

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

DISABLED_MODULES= ["Silero", "Whisper"]

🔌 События Event Bus

СобытиеОтправительДанные
tts_speakLLM / любой модуль{"text": "...", "source": "..."}
tts_startedTTS{"text": "...", "source": "...", "queue_position": n}
stt_text_readySTT{"text": "...", "is_final": true, "language": "...", "source": "microphone/virtual_microphone"}
llm_voice_inputSTT{"text": "...", "source": "...", "timestamp": "..."}

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

# Создать виртуальное окружение
python -m venv venv
# Активироватьsource venv/bin/activate # Linux
venv\Scripts\activate # Windows# Установить основные зависимости
pip install -r requirements.txt

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

  1. Зарегистрируйтесь на OpenRouter (или используйте другой OpenAI-совместимый API)
  2. Создайте API-ключ
  3. В веб-интерфейсе перейдите в Настройки → LLM
  4. Введите API Base URL (по умолчанию https://openrouter.ai/api/v1)
  5. Вставьте ключ в поле API Key
  6. Нажмите Загрузить список моделей
  7. Выберите модель из списка
  8. Нажмите Сохранить все настройки

Без ключа работают только fallback-ответы.


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

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

Для работы с гостем (виртуальный микрофон)

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

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

  1. Создайте папку в modules/, например modules/MyModule/
  2. Внутри создайте файл main.py (обязательно) и папку templates/
  3. Пример main.py:
frommodules.base_moduleimportBaseModulefromflaskimportjsonifyclassMyModule(BaseModule):
name="my_module"display_name="Мой модуль"category="Категория"icon="fa-box"# иконкаdefregister_routes(self):
@self.app.route('/api/my_module/hello')defmy_hello():
returnjsonify({"message": "Hello from my module!"})
defregister_main_tab(self):
return ("Моя вкладка", self.get_template_content("main_tab.html"))
defregister_settings_ui(self):
returnself.get_template_content("settings.html")
defon_load(self):
print(f"[{self.display_name}] Загружен!")
self.event_bus.subscribe("some_event", self.handle_event)
  1. Добавьте HTML-шаблоны в modules/MyModule/templates/:
    • main_tab.html - содержимое вкладки на главной странице
    • settings.html - содержимое вкладки настроек
    • filename.html - содержимое вашей страницы
  2. Добавьте requirements.txt или priority.txt (для тех что должны грузится первые) если нужны зависимости
  3. Чтобы отключить модуль, добавьте имя его папки в config.DISABLED_MODULES

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

ПроблемаРешение
Модуль не загружаетсяПроверьте config.py — не отключён ли модуль. Убедитесь, что в папке есть файл main.py
STT не слышит микрофонПроверьте выбранное устройство в настройках STT.
TTS нет звукаПроверьте режим вывода и выбранное устройство. Попробуйте кнопку "Тест озвучки"
OpenRouter не отвечаетПроверьте API-ключ и API Base URL. Нажмите "Сохранить все настройки". Без ключа работают fallback-ответы
Chatterbox не клонирует голосУбедитесь, что .wav файл моно, 16-24 кГц, 16-bit. Нажмите обновление списка голосов после добавления файла
Ошибка импорта модуляУстановите зависимости через CLI-менеджер (пункт 1 или 3)

📄 Лицензия

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

About

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

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages