loiter74/animetta

1

stars

394

commits

Python

primary language

Aug 30, 2026

updated

README

🤖 Animetta — AI Virtual Companion / VTuber Framework

A configurable, extensible AI companion framework.
Plugin architecture · LangGraph orchestration · Hybrid memory · Live2D-driven · Multimodal interaction

简体中文  |  English

Python Vue 3 LangGraph Starlette OpenTelemetry License

Animetta Live2D avatar speaking

Animetta is an open-source framework for building AI virtual companions and VTubers — characters that talk, listen, remember, emote through a Live2D avatar, and act in the world (chat, livestream, Minecraft). It orchestrates ASR → LLM → TTS → emotion as a single LangGraph state machine, with swappable @ProviderRegistry providers, hybrid memory (Chroma + SQLite FTS5 + Markdown wiki), a Vue 3 / Electron desktop app, and full-chain observability.

Why Animetta? Most "AI VTuber" projects hardcode one provider pipeline. Animetta makes every layer — LLM, ASR, TTS, VAD, memory, tools — a swappable plugin via @ProviderRegistry, with full observability built in.

Contents


✨ Highlights

Animetta is not just another "ChatGPT + TTS" glue. It is an engineered AI companion framework built around three principles: configurable, observable, extensible.

  • LangGraph state-graph orchestration — not a linear pipeline, but a directed graph with conditional routing, tool-calling loops, and interrupt/resume.
  • Plugin provider architecture — register new vendors via the @ProviderRegistry decorator, zero core-code intrusion.
  • Hybrid memory system — Chroma vector search (70%) + SQLite FTS5 keyword match (30%) + Markdown wiki knowledge base.
  • Live2D emotion-driven — LLM output → emotion analysis → Live2D parameter mapping; expressions change in real time with the conversation.
  • Full-chain observability — OpenTelemetry distributed tracing + Prometheus metrics + built-in Stats Dashboard.

🏗️ Architecture

┌──────────────────────────────────────────────────────────────────┐
│                      Frontend (Vue 3 + Vite)                      │
│               Live2D Renderer · Chat UI · Stats Dashboard         │
└─────────────────────────────┬────────────────────────────────────┘
                              │ Socket.IO / REST
┌─────────────────────────────▼────────────────────────────────────┐
│                WebSocket Server (Starlette + Socket.IO ASGI)      │
│               Session Mgmt · Desktop App · Live2D Events          │
└─────────────────────────────┬────────────────────────────────────┘
                              │
┌─────────────────────────────▼────────────────────────────────────┐
│                   LangGraph Orchestration Engine                   │
│                                                                   │
│  ┌─────────┐   ┌─────────┐   ┌──────────┐   ┌──────────────┐    │
│  │ ASR Node│ → │ Persona │ → │ LLM Node │ → │ Emotion Node │    │
│  │         │   │  Node   │   │  + RAG   │   │ → Live2D Map │    │
│  └─────────┘   └─────────┘   └────┬─────┘   └──────────────┘    │
│                                  │                                │
│                          ┌───────▼───────┐   ┌─────────────┐     │
│                          │  Tool Node   │   │ Output Node │     │
│                          │ MC/MCP/Custom│   │TTS + Memory │     │
│                          └──────────────┘   └─────────────┘     │
└───────────────────────────────────────────────────────────────────┘
                              │
         ┌────────────────────┼────────────────────┐
         ▼                    ▼                    ▼
┌───────────────┐   ┌───────────────┐   ┌───────────────┐
│   Services    │   │    Memory     │   │   Tracing     │
│ LLM/ASR/TTS   │   │Chroma+SQLite  │   │ OTel + Stats  │
│ Live2D / VAD  │   │+ Wiki + Meme  │   │+ Prometheus   │
└───────────────┘   └───────────────┘   └───────────────┘

Deeper architecture detail: docs/architecture/overview.md.

Architecture map

The codebase decomposes into 15 layers across four areas (node counts from the architecture knowledge graph):

Backend runtime

LayerWhat it coversKey paths
LangGraph Orchestration (63)The state-graph engine — nodes, Starlette + Socket.IO ASGI server, prompting sources, routes. The only orchestration mechanism in the project.src/animetta/orchestration/
Provider Services (129)Swappable LLM / ASR / TTS / VAD / singing providers following interface → implementation → factory → export with @ProviderRegistry.src/animetta/services/
Product Tools & Minecraft (142)Runtime product tools (incl. the Node.js Minecraft adapter) and MCP client integration exposed to the orchestrator.src/animetta/tools/
Persona & Effective Config (64)Persona definitions and the EffectiveConfig / registry that resolves runtime configuration.src/animetta/config/
Memory & Live2D Avatar (32)Hybrid memory (Chroma vector + SQLite FTS5 + wiki, per ADR-005) and the Live2D avatar / emotion mapping domain.src/animetta/memory/v2/ · src/animetta/avatar/
Backend Platform Core (70)Cross-cutting foundations: shared runtime core, observability/tracing, inspection, notifier, utils, acceptance, and host TTS/RVC contracts.src/animetta/core/ · src/animetta/observability/
Backend Package & External Hosts (10)Backend package roots and host-side service packages (Qwen TTS, RVC host) that run on the Windows host, not in containers.src/animetta_qwen_tts/ · src/animetta_rvc_host/

Frontend

LayerWhat it coversKey paths
Frontend Application (138)Vue 3 + Vite application code: components, views, stores, router, composables, Live2D perf, and feature modules (live streaming, Minecraft gameplay, review, TTS failover).frontend/src/
Frontend Assets (56)Static public assets bundled with the desktop app — Live2D models, backgrounds, danmaku test data.frontend/public/
Frontend Shell & Build (54)Electron main/preload, sites worker, build/smoke scripts, and Vite/Uno/tsconfig/Electron-builder configuration plus entry HTML.frontend/electron/ · frontend/scripts/

Configuration & infrastructure

LayerWhat it coversKey paths
Runtime Configuration (30)Declarative runtime configuration: personas, features, demo data, program scripts, plus root manifests and environment templates.config/ · .env.example
Infrastructure & CI/CD (22)Container definitions, Compose topology, GitHub Actions pipelines, and host-side observability stack config.docker/ · observability/ · .github/workflows/

Developer surface

LayerWhat it coversKey paths
Dev Tooling & Scripts (78)Quality planner, dev-agent MCP servers, and the runtime lifecycle / operational scripts.tooling/ · scripts/
Evaluations & Contracts (28)Evaluation harnesses/fixtures and interface contracts (gamebot, Minecraft).evaluations/ · contracts/
Project Skills & Docs (17)In-repo agent skills and top-level documentation..agents/skills/ · docs/

🗺️ Codebase Tour

A ten-step reading path through the actual code, from boot to deep internals:

  1. Project Overview — Start here: this README plus docs/architecture/overview.md for the purpose and shape of the system.
  2. Frontend Entry Pointfrontend/src/main.ts mounts the Vue 3 app (Vite + Electron); frontend/src/App.vue wires the shell that hosts the Live2D renderer, chat UI, and dashboard.
  3. The LangGraph Orchestration Engine — The heart of the backend. orchestrator.py builds the directed state graph with conditional routing and tool-calling loops; state.py defines the shared AgentState that flows ASR → Persona → LLM → Emotion; llm_node.py is where generation happens.
  4. Prompts & Personaprompting/sources.py assembles the persona- and guard-aware system prompt; config/__init__.py loads character definitions and the EffectiveConfig that parameterizes every node.
  5. Realtime Server (Starlette + Socket.IO) — The ASGI server bridges frontend and orchestrator: websocket.py manages sessions and streams events; routes.py declares the Socket.IO/REST route handlers.
  6. Swappable Provider Services — Every capability is a plugin via @ProviderRegistry. The package roots expose the LLM, TTS, and ASR provider factories (interface → implementation → factory → export): services/llm/ · services/tts/ · services/asr/.
  7. Hybrid Memory — Memory v2 (ADR-005): memory/v2/context.py blends Chroma vector search, SQLite FTS5 keyword match, and a Markdown wiki knowledge base for long-term recall.
  8. Product Tools — Minecraft — The Minecraft adapter is a Node.js project living inside the Python repo, exposing world actions to the orchestrator as callable tools: tools/minecraft/.
  9. Live2D Avatar & Emotion — LLM emotion output is parsed and mapped to Live2D parameters in avatar/performance.py, driving expressions in real time alongside the conversation.
  10. Configuration & Tool Registry — Declarative anchors: pyproject.toml pins the Python 3.13 backend; config/tools.yaml registers the product tools the orchestrator may call.

🚀 Quick Start

Prerequisites

  • Python 3.13 (the toolchain targets 3.13 via ruff/mypy)
  • Node.js 20+ and pnpm (frontend)
  • (optional) NVIDIA GPU + nvidia-container-toolkit for GPU mode

1. Install dependencies

pip install -r requirements.txt
cd frontend && pnpm install

2. Configure

Edit config/animetta.yaml to choose the persona and the complete provider map for the test, smoke, and production profiles. Provider selection lives only in this manifest; environment variables supply profile, endpoints, and secrets.

cp .env.example .env
# Choose test, smoke, or production and fill only the keys it needs:
#   ANIMETTA_PROFILE="test"
#   DEEPSEEK_API_KEY="..."
#   DASHSCOPE_API_KEY="..."
#   MIMO_API_KEY="..."
#   QWEN_TTS_API_KEY="..."

3. Run

# Backend
python -m animetta.core.socketio_server

# Frontend (in a second terminal)
cd frontend && pnpm dev

The frontend dev server runs on http://localhost:3000; the backend on http://localhost:12394.

Build from source or deploy a verified image

Build the current checkout when developing or testing local changes:

# Start or reuse the host runtimes, build animetta:local, and start Animetta.
py -3.13 scripts/runtime_lifecycle.py anima-up

Deploy an image that has already passed the main quality gate without rebuilding the application locally:

py -3.13 scripts/runtime_lifecycle.py anima-deploy --image ghcr.io/loiter74/animetta:sha-<40-character-commit>

Use ghcr.io/loiter74/animetta:main for the latest successful main build. Use the full sha-... tag, or the published @sha256:... digest, when the deployment must be reproducible or when rolling back. Private GHCR packages require a prior docker login ghcr.io; see the Docker deployment guide.

Routine py -3.13 scripts/runtime_lifecycle.py anima-down leaves the host Qwen and RVC processes and their loaded models running. Use host-tts-stop or host-rvc-stop only when GPU memory must be released. Neither host runtime is built or managed as a Docker container.

Once healthy, the frontend is served by nginx on port 80 and the backend health endpoint is at http://localhost:12394/health (also proxied at http://localhost/health).

Full deployment guides: Docker · Zeabur


🔧 Core Modules

ModuleWhat it doesDocs
LangGraph engineDirected-graph orchestration with conditional routing, tool loops, interrupt/resumedocs/architecture/overview.md
Provider pluginsRegister LLM/ASR/TTS/VAD/Singing vendors via @ProviderRegistrydocs/reference/tools.md
Hybrid memoryChroma (70%) + SQLite FTS5 (30%) + Markdown wiki + meme learnerADR-002, ADR-005
Live2D emotionLLM → emotion tag → Live2D param mapping (6 base emotions)ADR-009
Minecraft botMineflayer-based bot, decoupled external Voyager runtimedocs/development/minecraft-bot-architecture.md
ObservabilityOpenTelemetry traces + Prometheus metrics + Stats DashboardADR-006

Supported providers:

TypeProviders
LLMOpenAI · GLM (Zhipu) · Ollama · DeepSeek · Mock
ASROpenAI Whisper · GLM ASR · Mock
TTS (core)Edge · MiMo · Qwen3 · GPT-SoVITS · Mock
TTS (contrib)GLM · ChatTTS · Kokoro · VibeVoice
VADSilero VAD

Socket.IO event catalog and API reference live in docs/reference/.


📁 Project Structure

animetta/
├── src/animetta/          # Python backend (Starlette + LangGraph + Socket.IO)
│   ├── core/              # Entry point + service container
│   ├── orchestration/     # LangGraph state graph + WebSocket server
│   ├── services/          # LLM / ASR / TTS / VAD / Singing / Meme / Live2D
│   ├── memory/            # V2 atom-based memory (Chroma + SQLite FTS5)
│   ├── tools/             # Tool calling + MCP bridge + Minecraft bot
│   ├── avatar/            # Live2D emotion/expression analysis
│   ├── config/            # Pydantic configs + provider registry
│   ├── tracing/           # OpenTelemetry observability
│   ├── notifier/          # Alert channels (Discord, Feishu, Email)
│   ├── inspection/        # Health / telemetry background checks
│   └── acceptance/        # Golden soak state machine
├── frontend/              # Vue 3 + TypeScript + Vite (Electron desktop)
├── config/                # YAML config files (personas, services, tools)
├── design-system/         # Visual design spec (HTML spec sheets)
├── docs/                  # Architecture, ADRs, deployment, references
└── tests/                 # pytest (backend) + vitest (frontend)

🧩 Extending

Add a provider (LLM/ASR/TTS/VAD):

# 1. Create a config class
@ProviderRegistry.register("llm", "my_llm")
class MyLLMConfig(BaseLLMConfig):
    api_key: str

# 2. Register the service
@ProviderRegistry.register_service("llm", "my_llm")
class MyLLMAgent(AgentInterface):
    @classmethod
    def from_config(cls, config, **kwargs):
        return cls(api_key=config.api_key)

Add a graph node — follow the node pattern in src/animetta/orchestration/graph/.

Add a tool — use the @tool decorator in src/animetta/tools/.

Agent conventions (for Codex / ZCode): see AGENTS.md.


📚 Documentation

TopicLocation
Architecture overviewdocs/architecture/overview.md
Architecture Decision Records (11)docs/adrs/
Backend & Socket.IO API referencedocs/reference/
Testing guidedocs/development/testing.md
Deployment (Docker / Zeabur)docs/deployment/
Design systemdesign-system/
Doc navigation indexdocs/README.md

🤝 Contributing

See CONTRIBUTING.md for development setup, code standards, and test commands.


📊 Tech Stack

LayerTechnology
OrchestrationLangGraph · LangChain
BackendStarlette · Socket.IO ASGI
FrontendVue 3 · Vite · TypeScript · Pinia · UnoCSS · pixi.js · Live2D Cubism SDK · Electron
MemoryChromaDB · SQLite FTS5 · Markdown Wiki
TracingOpenTelemetry · Prometheus · Langfuse
AIOpenAI · Zhipu GLM · DeepSeek · Ollama · Whisper · Qwen3-TTS · GPT-SoVITS
AudioDemucs · GPT-SoVITS · RVC · yt-dlp
GameMineflayer (Node.js)

📄 License

MIT License — Copyright (c) 2026 Cowork

Contributors

loiter74

394 commits

loiter74/animetta

1

stars

394

commits

Python

primary language

Aug 30, 2026

updated

README

🤖 Animetta — AI Virtual Companion / VTuber Framework

A configurable, extensible AI companion framework.
Plugin architecture · LangGraph orchestration · Hybrid memory · Live2D-driven · Multimodal interaction

简体中文  |  English

Python Vue 3 LangGraph Starlette OpenTelemetry License

Animetta Live2D avatar speaking

Animetta is an open-source framework for building AI virtual companions and VTubers — characters that talk, listen, remember, emote through a Live2D avatar, and act in the world (chat, livestream, Minecraft). It orchestrates ASR → LLM → TTS → emotion as a single LangGraph state machine, with swappable @ProviderRegistry providers, hybrid memory (Chroma + SQLite FTS5 + Markdown wiki), a Vue 3 / Electron desktop app, and full-chain observability.

Why Animetta? Most "AI VTuber" projects hardcode one provider pipeline. Animetta makes every layer — LLM, ASR, TTS, VAD, memory, tools — a swappable plugin via @ProviderRegistry, with full observability built in.

Contents


✨ Highlights

Animetta is not just another "ChatGPT + TTS" glue. It is an engineered AI companion framework built around three principles: configurable, observable, extensible.

  • LangGraph state-graph orchestration — not a linear pipeline, but a directed graph with conditional routing, tool-calling loops, and interrupt/resume.
  • Plugin provider architecture — register new vendors via the @ProviderRegistry decorator, zero core-code intrusion.
  • Hybrid memory system — Chroma vector search (70%) + SQLite FTS5 keyword match (30%) + Markdown wiki knowledge base.
  • Live2D emotion-driven — LLM output → emotion analysis → Live2D parameter mapping; expressions change in real time with the conversation.
  • Full-chain observability — OpenTelemetry distributed tracing + Prometheus metrics + built-in Stats Dashboard.

🏗️ Architecture

┌──────────────────────────────────────────────────────────────────┐
│                      Frontend (Vue 3 + Vite)                      │
│               Live2D Renderer · Chat UI · Stats Dashboard         │
└─────────────────────────────┬────────────────────────────────────┘
                              │ Socket.IO / REST
┌─────────────────────────────▼────────────────────────────────────┐
│                WebSocket Server (Starlette + Socket.IO ASGI)      │
│               Session Mgmt · Desktop App · Live2D Events          │
└─────────────────────────────┬────────────────────────────────────┘
                              │
┌─────────────────────────────▼────────────────────────────────────┐
│                   LangGraph Orchestration Engine                   │
│                                                                   │
│  ┌─────────┐   ┌─────────┐   ┌──────────┐   ┌──────────────┐    │
│  │ ASR Node│ → │ Persona │ → │ LLM Node │ → │ Emotion Node │    │
│  │         │   │  Node   │   │  + RAG   │   │ → Live2D Map │    │
│  └─────────┘   └─────────┘   └────┬─────┘   └──────────────┘    │
│                                  │                                │
│                          ┌───────▼───────┐   ┌─────────────┐     │
│                          │  Tool Node   │   │ Output Node │     │
│                          │ MC/MCP/Custom│   │TTS + Memory │     │
│                          └──────────────┘   └─────────────┘     │
└───────────────────────────────────────────────────────────────────┘
                              │
         ┌────────────────────┼────────────────────┐
         ▼                    ▼                    ▼
┌───────────────┐   ┌───────────────┐   ┌───────────────┐
│   Services    │   │    Memory     │   │   Tracing     │
│ LLM/ASR/TTS   │   │Chroma+SQLite  │   │ OTel + Stats  │
│ Live2D / VAD  │   │+ Wiki + Meme  │   │+ Prometheus   │
└───────────────┘   └───────────────┘   └───────────────┘

Deeper architecture detail: docs/architecture/overview.md.

Architecture map

The codebase decomposes into 15 layers across four areas (node counts from the architecture knowledge graph):

Backend runtime

LayerWhat it coversKey paths
LangGraph Orchestration (63)The state-graph engine — nodes, Starlette + Socket.IO ASGI server, prompting sources, routes. The only orchestration mechanism in the project.src/animetta/orchestration/
Provider Services (129)Swappable LLM / ASR / TTS / VAD / singing providers following interface → implementation → factory → export with @ProviderRegistry.src/animetta/services/
Product Tools & Minecraft (142)Runtime product tools (incl. the Node.js Minecraft adapter) and MCP client integration exposed to the orchestrator.src/animetta/tools/
Persona & Effective Config (64)Persona definitions and the EffectiveConfig / registry that resolves runtime configuration.src/animetta/config/
Memory & Live2D Avatar (32)Hybrid memory (Chroma vector + SQLite FTS5 + wiki, per ADR-005) and the Live2D avatar / emotion mapping domain.src/animetta/memory/v2/ · src/animetta/avatar/
Backend Platform Core (70)Cross-cutting foundations: shared runtime core, observability/tracing, inspection, notifier, utils, acceptance, and host TTS/RVC contracts.src/animetta/core/ · src/animetta/observability/
Backend Package & External Hosts (10)Backend package roots and host-side service packages (Qwen TTS, RVC host) that run on the Windows host, not in containers.src/animetta_qwen_tts/ · src/animetta_rvc_host/

Frontend

LayerWhat it coversKey paths
Frontend Application (138)Vue 3 + Vite application code: components, views, stores, router, composables, Live2D perf, and feature modules (live streaming, Minecraft gameplay, review, TTS failover).frontend/src/
Frontend Assets (56)Static public assets bundled with the desktop app — Live2D models, backgrounds, danmaku test data.frontend/public/
Frontend Shell & Build (54)Electron main/preload, sites worker, build/smoke scripts, and Vite/Uno/tsconfig/Electron-builder configuration plus entry HTML.frontend/electron/ · frontend/scripts/

Configuration & infrastructure

LayerWhat it coversKey paths
Runtime Configuration (30)Declarative runtime configuration: personas, features, demo data, program scripts, plus root manifests and environment templates.config/ · .env.example
Infrastructure & CI/CD (22)Container definitions, Compose topology, GitHub Actions pipelines, and host-side observability stack config.docker/ · observability/ · .github/workflows/

Developer surface

LayerWhat it coversKey paths
Dev Tooling & Scripts (78)Quality planner, dev-agent MCP servers, and the runtime lifecycle / operational scripts.tooling/ · scripts/
Evaluations & Contracts (28)Evaluation harnesses/fixtures and interface contracts (gamebot, Minecraft).evaluations/ · contracts/
Project Skills & Docs (17)In-repo agent skills and top-level documentation..agents/skills/ · docs/

🗺️ Codebase Tour

A ten-step reading path through the actual code, from boot to deep internals:

  1. Project Overview — Start here: this README plus docs/architecture/overview.md for the purpose and shape of the system.
  2. Frontend Entry Pointfrontend/src/main.ts mounts the Vue 3 app (Vite + Electron); frontend/src/App.vue wires the shell that hosts the Live2D renderer, chat UI, and dashboard.
  3. The LangGraph Orchestration Engine — The heart of the backend. orchestrator.py builds the directed state graph with conditional routing and tool-calling loops; state.py defines the shared AgentState that flows ASR → Persona → LLM → Emotion; llm_node.py is where generation happens.
  4. Prompts & Personaprompting/sources.py assembles the persona- and guard-aware system prompt; config/__init__.py loads character definitions and the EffectiveConfig that parameterizes every node.
  5. Realtime Server (Starlette + Socket.IO) — The ASGI server bridges frontend and orchestrator: websocket.py manages sessions and streams events; routes.py declares the Socket.IO/REST route handlers.
  6. Swappable Provider Services — Every capability is a plugin via @ProviderRegistry. The package roots expose the LLM, TTS, and ASR provider factories (interface → implementation → factory → export): services/llm/ · services/tts/ · services/asr/.
  7. Hybrid Memory — Memory v2 (ADR-005): memory/v2/context.py blends Chroma vector search, SQLite FTS5 keyword match, and a Markdown wiki knowledge base for long-term recall.
  8. Product Tools — Minecraft — The Minecraft adapter is a Node.js project living inside the Python repo, exposing world actions to the orchestrator as callable tools: tools/minecraft/.
  9. Live2D Avatar & Emotion — LLM emotion output is parsed and mapped to Live2D parameters in avatar/performance.py, driving expressions in real time alongside the conversation.
  10. Configuration & Tool Registry — Declarative anchors: pyproject.toml pins the Python 3.13 backend; config/tools.yaml registers the product tools the orchestrator may call.

🚀 Quick Start

Prerequisites

  • Python 3.13 (the toolchain targets 3.13 via ruff/mypy)
  • Node.js 20+ and pnpm (frontend)
  • (optional) NVIDIA GPU + nvidia-container-toolkit for GPU mode

1. Install dependencies

pip install -r requirements.txt
cd frontend && pnpm install

2. Configure

Edit config/animetta.yaml to choose the persona and the complete provider map for the test, smoke, and production profiles. Provider selection lives only in this manifest; environment variables supply profile, endpoints, and secrets.

cp .env.example .env
# Choose test, smoke, or production and fill only the keys it needs:
#   ANIMETTA_PROFILE="test"
#   DEEPSEEK_API_KEY="..."
#   DASHSCOPE_API_KEY="..."
#   MIMO_API_KEY="..."
#   QWEN_TTS_API_KEY="..."

3. Run

# Backend
python -m animetta.core.socketio_server

# Frontend (in a second terminal)
cd frontend && pnpm dev

The frontend dev server runs on http://localhost:3000; the backend on http://localhost:12394.

Build from source or deploy a verified image

Build the current checkout when developing or testing local changes:

# Start or reuse the host runtimes, build animetta:local, and start Animetta.
py -3.13 scripts/runtime_lifecycle.py anima-up

Deploy an image that has already passed the main quality gate without rebuilding the application locally:

py -3.13 scripts/runtime_lifecycle.py anima-deploy --image ghcr.io/loiter74/animetta:sha-<40-character-commit>

Use ghcr.io/loiter74/animetta:main for the latest successful main build. Use the full sha-... tag, or the published @sha256:... digest, when the deployment must be reproducible or when rolling back. Private GHCR packages require a prior docker login ghcr.io; see the Docker deployment guide.

Routine py -3.13 scripts/runtime_lifecycle.py anima-down leaves the host Qwen and RVC processes and their loaded models running. Use host-tts-stop or host-rvc-stop only when GPU memory must be released. Neither host runtime is built or managed as a Docker container.

Once healthy, the frontend is served by nginx on port 80 and the backend health endpoint is at http://localhost:12394/health (also proxied at http://localhost/health).

Full deployment guides: Docker · Zeabur


🔧 Core Modules

ModuleWhat it doesDocs
LangGraph engineDirected-graph orchestration with conditional routing, tool loops, interrupt/resumedocs/architecture/overview.md
Provider pluginsRegister LLM/ASR/TTS/VAD/Singing vendors via @ProviderRegistrydocs/reference/tools.md
Hybrid memoryChroma (70%) + SQLite FTS5 (30%) + Markdown wiki + meme learnerADR-002, ADR-005
Live2D emotionLLM → emotion tag → Live2D param mapping (6 base emotions)ADR-009
Minecraft botMineflayer-based bot, decoupled external Voyager runtimedocs/development/minecraft-bot-architecture.md
ObservabilityOpenTelemetry traces + Prometheus metrics + Stats DashboardADR-006

Supported providers:

TypeProviders
LLMOpenAI · GLM (Zhipu) · Ollama · DeepSeek · Mock
ASROpenAI Whisper · GLM ASR · Mock
TTS (core)Edge · MiMo · Qwen3 · GPT-SoVITS · Mock
TTS (contrib)GLM · ChatTTS · Kokoro · VibeVoice
VADSilero VAD

Socket.IO event catalog and API reference live in docs/reference/.


📁 Project Structure

animetta/
├── src/animetta/          # Python backend (Starlette + LangGraph + Socket.IO)
│   ├── core/              # Entry point + service container
│   ├── orchestration/     # LangGraph state graph + WebSocket server
│   ├── services/          # LLM / ASR / TTS / VAD / Singing / Meme / Live2D
│   ├── memory/            # V2 atom-based memory (Chroma + SQLite FTS5)
│   ├── tools/             # Tool calling + MCP bridge + Minecraft bot
│   ├── avatar/            # Live2D emotion/expression analysis
│   ├── config/            # Pydantic configs + provider registry
│   ├── tracing/           # OpenTelemetry observability
│   ├── notifier/          # Alert channels (Discord, Feishu, Email)
│   ├── inspection/        # Health / telemetry background checks
│   └── acceptance/        # Golden soak state machine
├── frontend/              # Vue 3 + TypeScript + Vite (Electron desktop)
├── config/                # YAML config files (personas, services, tools)
├── design-system/         # Visual design spec (HTML spec sheets)
├── docs/                  # Architecture, ADRs, deployment, references
└── tests/                 # pytest (backend) + vitest (frontend)

🧩 Extending

Add a provider (LLM/ASR/TTS/VAD):

# 1. Create a config class
@ProviderRegistry.register("llm", "my_llm")
class MyLLMConfig(BaseLLMConfig):
    api_key: str

# 2. Register the service
@ProviderRegistry.register_service("llm", "my_llm")
class MyLLMAgent(AgentInterface):
    @classmethod
    def from_config(cls, config, **kwargs):
        return cls(api_key=config.api_key)

Add a graph node — follow the node pattern in src/animetta/orchestration/graph/.

Add a tool — use the @tool decorator in src/animetta/tools/.

Agent conventions (for Codex / ZCode): see AGENTS.md.


📚 Documentation

TopicLocation
Architecture overviewdocs/architecture/overview.md
Architecture Decision Records (11)docs/adrs/
Backend & Socket.IO API referencedocs/reference/
Testing guidedocs/development/testing.md
Deployment (Docker / Zeabur)docs/deployment/
Design systemdesign-system/
Doc navigation indexdocs/README.md

🤝 Contributing

See CONTRIBUTING.md for development setup, code standards, and test commands.


📊 Tech Stack

LayerTechnology
OrchestrationLangGraph · LangChain
BackendStarlette · Socket.IO ASGI
FrontendVue 3 · Vite · TypeScript · Pinia · UnoCSS · pixi.js · Live2D Cubism SDK · Electron
MemoryChromaDB · SQLite FTS5 · Markdown Wiki
TracingOpenTelemetry · Prometheus · Langfuse
AIOpenAI · Zhipu GLM · DeepSeek · Ollama · Whisper · Qwen3-TTS · GPT-SoVITS
AudioDemucs · GPT-SoVITS · RVC · yt-dlp
GameMineflayer (Node.js)

📄 License

MIT License — Copyright (c) 2026 Cowork

Contributors

loiter74

394 commits

Languages

Python

79.0%

TypeScript

8.5%

JavaScript

6.3%

Vue

3.5%

HTML

2.1%