Project Amadeus
  • TypeScript 46.7%
  • JavaScript 45.9%
  • Java 4.9%
  • Python 1%
  • Dockerfile 0.9%
  • Other 0.5%
Find a file
2026-04-12 22:14:37 +02:00
android feat: android build to git 2026-04-07 12:11:59 +02:00
public feat: ringtone and vibrate 2026-04-02 21:10:13 +02:00
scripts feat: WebP sprites 2026-03-25 17:54:47 +01:00
server fix: translating 2026-04-12 22:09:51 +02:00
src fix: full length audio for elevenlabs 2026-04-12 21:52:58 +02:00
tts feat: shylily TTS 2026-04-02 12:30:03 +02:00
tts-elevenlabs feat: elevenlabs tts 2026-04-03 13:44:41 +02:00
tts-f5 fix: F5 TTS AMD 2026-04-02 22:34:17 +02:00
.gitignore feat: android build to git 2026-04-07 12:11:59 +02:00
capacitor.config.ts fix: separate character activities 2026-04-02 16:30:23 +02:00
CLAUDE.md feat: introducing live2d 2026-03-27 09:17:51 +01:00
comfyui-maho-wallpaper.json fix: maho comfyui 2026-04-12 22:14:37 +02:00
comfyui-maho.json feat: Shylily mode 2026-04-02 16:14:26 +02:00
comfyui-shylily-wallpaper.json fix: wallpaper direction 2026-04-07 15:35:21 +02:00
comfyui-shylily.json feat: wallpaper specific workflow 2026-04-07 11:46:53 +02:00
docker-compose.yml fix: mount wallpaper workflows 2026-04-07 14:16:37 +02:00
eslint.config.js feat: initial Project Amadeus implementation 2026-03-24 17:16:07 +01:00
FEATURES.md feat: new features 2026-04-05 22:20:22 +02:00
index.html feat: introducing live2d 2026-03-27 09:17:51 +01:00
package-lock.json fix: package 2026-04-05 22:28:21 +02:00
package.json fix: package 2026-04-05 22:28:21 +02:00
README.md chore: readme 2026-03-28 22:42:22 +01:00
tsconfig.app.json feat: initial Project Amadeus implementation 2026-03-24 17:16:07 +01:00
tsconfig.json feat: initial Project Amadeus implementation 2026-03-24 17:16:07 +01:00
tsconfig.node.json feat: initial Project Amadeus implementation 2026-03-24 17:16:07 +01:00
vite.config.ts feat: initial Project Amadeus implementation 2026-03-24 17:16:07 +01:00
WRD.svg feat: icons 2026-03-25 17:49:02 +01:00

Amadeus

AI companion Android app inspired by Steins;Gate's Amadeus system.


Overview

Amadeus is a mobile AI companion that you can call, text, and hang out with. It features voice calls with real-time lip-synced Live2D/sprite visuals, proactive messaging (she can call you), long-term memory, and an ambient mode for just keeping each other company.

Features

  • Voice & text calls with emotion-driven character expressions
  • Live2D model with real-time lip sync, idle animations, and emotion transitions
  • Sprite mode as a lightweight alternative to Live2D
  • Proactive messaging -- the AI initiates conversations and calls via push notifications
  • Long-term memory with automatic compaction
  • Ambient mode -- a low-key hangout where silence is comfortable
  • Photo sharing -- send photos and the AI remembers them
  • Web search via Brave Search API
  • TTS with GPT-SoVITS voice synthesis
  • Scheduled reminders the AI can set for you

Tech Stack

Layer Tech
Frontend React, Vite, TypeScript, Tailwind CSS
Mobile Capacitor (Android)
Backend Node.js, Express, PostgreSQL, Knex
LLM Any OpenAI-compatible API
Live2D PixiJS v7, pixi-live2d-display, Cubism 4 SDK
TTS GPT-SoVITS (self-hosted)
Push Firebase Cloud Messaging
Search Brave Search API

Setup

Prerequisites

  • Node.js 18+
  • PostgreSQL 16+
  • Android SDK (for mobile builds)
  • An OpenAI-compatible LLM API key

Quick Start (Docker)

cp server/.env.example server/.env
# Edit server/.env with your API keys

docker compose up

This starts PostgreSQL, the backend server, and the TTS service.

Manual Setup

Server:

cd server
cp .env.example .env
# Edit .env with your config
npm install
npm run migrate
npm run dev

Frontend:

npm install
npm run dev

Android build:

npx cap sync android
cd android && ./gradlew assembleDebug

Environment Variables

Variable Description
JWT_SECRET Secret for device-based auth tokens
DATABASE_URL PostgreSQL connection string
LLM_API_URL OpenAI-compatible API base URL
LLM_API_KEY API key for the LLM
LLM_MODEL Model name (e.g. gpt-4o)
BRAVE_API_KEY Brave Search API key (optional)
TTS_SERVICE_URL GPT-SoVITS service URL (optional)

Live2D Model

The Live2D model is not included in the repo. Place a Cubism 4 model in public/live2d/blackkitty/ or use sprite mode instead.

Architecture

The server runs a heartbeat loop that periodically checks whether the AI has a reason to reach out (daily check-ins, follow-ups, things she wants to share). When it decides to initiate contact, it pre-generates a greeting with TTS audio and pushes an incoming call notification via FCM.

Conversations use a memory compaction system -- every 20 turns the LLM summarizes the conversation so far into a compact memory block, keeping context windows manageable while preserving long-term continuity.

During calls, emotion tags parsed from LLM responses drive the character's expression in real-time, whether through Live2D parameter transitions or sprite swaps.

License

This project is for personal use.