Assistente VTuber desktop-first com voz, memoria, GUI, ferramentas XML, geracao de midia e integracao Live2D.
Visao geral · Showcase · Arquitetura · Instalacao · Roadmap
Hana AM Nakamura e uma assistente VTuber feita para rodar no desktop do Windows, conversar por voz, lembrar contexto, controlar ferramentas locais e funcionar como uma personagem viva em volta do seu PC.
O projeto nao e so um chatbot: ele combina runtime de voz, painel GUI, memoria hibrida, geracao de imagem/musica, analise de arquivos, controle do PC por tags XML, VTube Studio e multiplos providers de LLM/TTS.
O terminal e o modo "ao vivo": respostas curtas, falaveis e economicas para TTS. A GUI e o modo "chat completo": respostas maiores, anexos, markdown, arquivos e midia inline.
![]() Hana VTuber |
![]() Close-up / expressao |
![]() Arte de personagem |
![]() Visual anime |
![]() Painel de Controle |
![]() Configurações e Chat |
![]() Preview de Mídia |
| Area | Recursos |
|---|---|
| Voz | STT por Whisper, TTS por ElevenLabs, Google, Azure, OpenAI e Edge, stop global por F8 |
| Cerebro | Providers google_cloud, groq, openrouter, openai e cerebras |
| GUI | Control Center em Tauri/React, chat visual, anexos, markdown, cards de audio e preview de midia |
| Memoria | SQLite cronologico, RAG vetorial e grafo de conhecimento |
| Midia | Geracao/edicao de imagem, geracao de musica, analise de video/anexos e historico local |
| Desktop | Tool XML para abrir URL, abrir app, ler arquivo, mover mouse, digitar, volume e processos |
| VTuber | Integracao com VTube Studio, emocoes, parametros, lipsync e estado persistido |
Arquivo principal: main.py
O terminal e o modo de voz real da Hana. Ele escuta o microfone, monta contexto, chama o LLM em streaming, filtra tags silenciosas e fala a resposta por TTS.
Regra do terminal: respostas curtas por padrao para evitar fala longa e gasto desnecessario de TTS.
Arquivos principais: control_panel/ e backend FastAPI em src/api/server.py
A GUI Tauri/React e o painel de controle completo. Ela aceita textos grandes, anexos, drag and drop, Ctrl+V, arquivos de codigo, imagens, audio, video, PDF e documentos.
Regra da GUI: pode responder grande quando fizer sentido, porque funciona como chat visual.
flowchart LR
User["Nakamura"] --> STT["STT Whisper"]
STT --> Runtime["Terminal Runtime"]
User --> GUI["Hana Control Center"]
GUI --> Chat["Chat Visual + Anexos"]
Runtime --> Prompt["Prompt Builder"]
Chat --> Prompt
Prompt --> Memory["Memoria Hibrida"]
Memory --> SQLite["SQLite"]
Memory --> RAG["RAG Vetorial"]
Memory --> Graph["Knowledge Graph"]
Prompt --> LLM["Provider Selector"]
LLM --> Google["Google Gemini / Vertex"]
LLM --> Groq["Groq"]
LLM --> OpenRouter["OpenRouter"]
LLM --> OpenAI["OpenAI"]
LLM --> Cerebras["Cerebras"]
LLM --> Divider["SentenceDivider"]
Divider --> TTS["TTS Selector"]
TTS --> Eleven["ElevenLabs"]
TTS --> GoogleTTS["Google TTS"]
TTS --> Azure["Azure"]
TTS --> Edge["Edge"]
Divider --> XML["Tags XML Silenciosas"]
XML --> Media["Imagem / Musica"]
XML --> PC["Controle do PC"]
XML --> VTS["VTube Studio"]
src/
brain/ pipeline LLM e tools
config/ persona, prompt e config principal
core/ profiles, capabilities e prompt builder
api/ backend FastAPI usado pelo Control Center
memory/ SQLite, RAG e knowledge graph
modules/
media/ jobs de musica
tools/ inbox e controle do PC
vision/ visao e geracao de imagem
voice/ STT, TTS e stop global
providers/ adapters LLM
utils/ texto, stream, tags e UI de terminal
control_panel/ frontend Tauri/React
A Hana pode falar uma coisa para o usuario e executar outra por baixo, sem vazar comando no TTS.
<salvar_memoria>O Nakamura prefere respostas curtas no terminal.</salvar_memoria>
<gerar_imagem>anime portrait of Hana with golden hair and white flowers</gerar_imagem>
<gerar_musica>soft dreamy lofi song for sleeping</gerar_musica>
<acao_pc>{"action":"open_url","url":"https://github.com"}</acao_pc>Regras importantes:
- tags XML so valem para o pedido atual;
- acoes antigas nao devem ser repetidas depois de pausa longa;
run_commande operacoes perigosas passam por guardrails;- o texto dentro das tags nao deve ser falado pelo TTS.
Fallback atual:
edge -> elevenlabs -> google -> azure -> openai
ElevenLabs suporta configuracao manual pela GUI:
voice_idmodel_idratestabilitysimilarity_booststylespeaker_boost
O hotkey F8 usa stop global para tentar parar:
- fala do terminal;
- fala do chat da GUI;
- preview de audio;
- musica ou playback iniciado pela Hana.
A memoria da Hana usa tres camadas:
| Camada | Funcao |
|---|---|
| SQLite | historico cronologico recente |
| RAG | busca semantica por conversas antigas |
| Knowledge Graph | fatos permanentes e relacionamentos |
O terminal tambem recebe contexto temporal: se passou muito tempo desde a ultima fala, a Hana trata a nova mensagem como novo contexto e evita continuar tarefas antigas automaticamente.
git clone https://github.com/NakamuraIA/HanaNakamura-VTuber-OSS.git
cd HanaNakamura-VTuber-OSSpython -m venv .venv
.venv\Scripts\activatepip install -r requirements.txtDependencias opcionais:
pip install pyvts pypdf PyPDF2 youtube-transcript-apiGuia completo: docs/INSTALL.md
Copie:
copy .env.example .envExemplo:
GROQ_API_KEY=sua_chave
GEMINI_API_KEY=sua_chave
OPENROUTER_API_KEY=sua_chave
OPENAI_API_KEY=sua_chave
CEREBRAS_API_KEY=sua_chave
ELEVENLABS_API_KEY=sua_chave
TAVILY_API_KEY=sua_chave
GOOGLE_CLOUD_PROJECT=seu_projeto
GOOGLE_CLOUD_LOCATION=globalNunca commite seu .env.
Para o setup minimo, apenas GROQ_API_KEY e obrigatoria. O TTS publico default e edge, sem chave.
python main.pywscript run_hana_gui_hidden.vbsArquivo: src/config/config.json
No clone publico, os defaults ficam em src/config/config.example.json. O arquivo src/config/config.json e local e ignorado pelo Git.
Guias detalhados: docs/CONFIG.md, docs/PROVIDERS.md, docs/TROUBLESHOOTING.md
Blocos importantes:
{
"LLM_PROVIDER": "groq",
"TTS_PROVIDER": "edge",
"CHAT": {
"LLM_PROVIDER": "groq",
"response_mode": "adaptive",
"auto_route_media": true
},
"GUI": {
"stop_hotkey_enabled": true,
"stop_hotkey": "F8"
}
}| Provider | Uso |
|---|---|
google_cloud |
Gemini API, Vertex AI, visao e midia |
groq |
respostas rapidas e modelos open |
openrouter |
acesso a varios modelos por gateway |
openai |
modelos OpenAI diretos |
cerebras |
inferencia rapida quando configurado |
O provider Google trabalha em modo:
gemini_apivertex_aiauto
A integracao fica em src/modules/vts_controller.py.
Ela inclui:
- autenticacao por token;
- heartbeat;
- reconexao;
- leitura de hotkeys;
- expressoes;
- parametros;
- tentativa de lipsync;
- estado salvo em
data/vts_state.json.
Pasta padrao:
%USERPROFILE%\Desktop\hana_inbox
Estrutura:
hana_inbox/
imagem/
pdf/
docs/
code/
audio/
video/
A GUI tambem aceita arrastar arquivos direto no chat, entao a inbox e util, mas nao obrigatoria.
python main.py
python -m compileall main.py src
python -m pytest -q- Melhorar fila visual de midia na GUI.
- Criar painel de historico para imagem e musica.
- Refinar interrupcao por voz com VAD seguro.
- Criar editor visual de memorias.
- Melhorar benchmark de visao desktop.
- Evoluir o modelo Live2D da Hana.
- Criar pipeline de aprovacao para publicar musicas e assets.
O projeto ja e funcional, mas ainda esta em evolucao rapida.
Pontos fortes:
- desktop-first;
- GUI e terminal separados por contrato;
- memoria hibrida;
- tags XML silenciosas;
- providers multiplos;
- stop global;
- foco real em VTuber e assistente residente.
Limites atuais:
- foco principal em Windows;
- alguns providers exigem chave paga;
- Live2D depende de modelo e parametros corretos;
- algumas automacoes desktop ainda precisam de mais guardrails.
Contribuicoes devem preservar a separacao entre:
- terminal de voz;
- chat visual da GUI;
- memoria;
- providers;
- TTS;
- tags XML;
- controle do PC.
Se mudar comportamento de prompt, canal ou provider, atualize a documentacao junto.
Consulte a licenca do repositorio e os termos dos providers externos usados.






