/ˈnōvə/ — VRChat AI companion
NOVA is a lightweight VRChat assistant that:
- Listens via Whisper || GenAI
- Uses GenAI for language
- Speaks using Edge TTS
- Supports multilingual speech, OSC integration, and customizable personalities via prompt files
- Quick Start
- Configuration
- Common Issues & Quick Fixes
- Advanced Usage
- Troubleshooting Tips
- Contributing
- Contributors
- License
- Support
Recommended: Python 3.11 (create the virtual environment with 3.11 for best compatibility).
- Create & activate virtual environment
python -m venv .venv
.venv\Scripts\Activate.ps1- Install dependencies
pip install -r requirements.txt- Copy & edit environment file
copy .env.example .env
# Edit .env and set at least: LLM_API_KEY=your-genai-api-key- (Optional) Detect audio devices
python list_audio_devices.py- Run NOVA
python main.py- (Optional) Run a quick smoke test to verify core components
python smoke_test.py-
Runtime options:
constants.py(audio indices,VRC_PORT, voice, Whisper model, toggles) -
Prompt files:
prompts/normal_system_prompt.txtprompts/vision_prompt.txt
Add additional prompt files to the
prompts/directory to create new personalities or system prompts. Only the files present in theprompts/folder are loaded by default. -
Whisper model:
WhisperSettings.MODEL_SIZE(tiny|base|small|medium|large) -
TTS voice:
Voice.VOICE_NAME(list available voices if needed)
- No module error:
pip install --upgrade pip
pip install -r requirements.txt-
GenAI API auth error: set
LLM_API_KEYin.env -
Mic/audio issues:
- Run
python list_audio_devices.py - Update
AUDIO_INPUT_INDEX/AUDIO_OUTPUT_INDEXinconstants.py - Check Windows microphone permissions
- Run
-
ffmpeg warnings: install ffmpeg and add
ffmpeg\binto PATH -
VRChat OSC not receiving messages: enable OSC in VRChat, confirm VRChat is running, ensure
VRC_PORTmatches (default 9000) -
TTS / language issues: verify voice name, terminal UTF-8 encoding, try larger Whisper model, or tweak VAD/threshold
-
Vision features not working: ensure
VisionSystem.ENABLED = Trueand GenAI key is valid
- Virtual audio routing: use VB-Audio Virtual Cable, update indices in
constants.py - Multi-instance: separate project folders & OSC ports, set unique
VRC_PORT - Development: follow PEP8, run tests, consider
flake8. Modular code lives underclasses/
Branch / Feature Notes
This repository may contain feature branches that add or change behavior (for example, an audio-generation caching feature). If you're using a non-main branch, review the branch/PR notes for any special runtime requirements before filing issues.
- Check console output for detailed errors
- Verify
.envand API keys - Test components individually (audio list script, minimal config)
- Review
constants.pyfor misconfig or syntax errors
- Fork → create branch → implement → test
- Commit & push → open a pull request
- Follow PEP8, document changes, add tests
- Evan Grinnell — Project Lead & Core Developer
- Duck Song — Core Contributor
- Viscrimson — Core Contributor
MIT — see LICENSE
Star the repo, report issues, suggest features, or open PRs for fixes and improvements, join the discord