Multi-character AI companion chat with memory, image generation, and voice.
- Create AI companions with custom personalities
- Per-character settings: name, avatar (emoji or generated image), description, physical appearance
- Provider choice per character: Anthropic Claude, OpenAI, or local Ollama
- Custom system prompts per character (or use global)
- Hidden traits for DM: secret, wound, want, fear, skill, honesty level
- Private rooms: 1-on-1 conversations with a single companion
- Common room: All companions present, click avatar to select who responds
- Custom group rooms: Select specific companions for multi-party conversations
- Room settings: scenario, mood, genre, factions, genre rules (magic/supernatural/tech toggles)
- Draft persistence: unsent text survives navigation and refresh
Three modes per character:
- Global: Memories persist across all rooms
- Local: Per-room memory only
- None: Fresh conversation every time
Memory consolidation runs automatically:
- Texture mutation (relationship vibe/trajectory)
- Anchor management (load-bearing facts)
- Resonance tracking (recurring themes)
- Sediment compression (old memories archived)
Requires ComfyUI backend.
- Selfies: Character portrait based on conversation context
- Scene images: Environment/setting for the room
- Group photos: Multiple characters together
- Per-character LoRA support with weights
- Model presets: Illustrious, Flux, Pony
- Background job queue (non-blocking)
- TTS: OpenAI voices or ElevenLabs
- STT: OpenAI Whisper for voice input
- Per-character voice assignment
Public and private DM queries for world arbitration.
- Inventory Keeper: Tracks items mentioned in conversation
- Dramaturge: Craft advice on mood, tension, pacing
- Inciting Incidents: Generate dramatic events
pip install -r requirements.txt
python main.pySee ComfyUI documentation. Set URL in settings.
Settings stored in ~/.roundtable/:
partners.json- Character datarooms.json- Room conversationsmemory/- Memory filesavatars/- Generated images
Environment variables or settings panel:
ANTHROPIC_API_KEYOPENAI_API_KEYELEVENLABS_API_KEY(optional)
POST /chat- Send message, get responsePOST /respond- Trigger specific partner response
GET /partners- List allPOST /partners- CreatePUT /partners/<id>- UpdateDELETE /partners/<id>- Delete
GET /rooms- List allGET /rooms/<id>- Get room with messagesPOST /rooms/<id>/clear- Clear messages
POST /rooms/<id>/dm- Public queryPOST /rooms/<id>/dm/private- Private queryPOST /rooms/<id>/inciting-incident- Generate event
POST /voice/tts- Text to speechPOST /voice/stt- Speech to textGET /voice/voices- Available voices
POST /partner/<id>/avatar- Generate portraitPOST /rooms/<id>/background- Generate sceneGET /partner/<id>/gallery- Browse images
- Flask backend
- Vanilla JS frontend
- SQLite-compatible JSON persistence
- ThreadPoolExecutor for background jobs
V1 is focused. These are planned for future versions:
- StoryBuilder (NPC generation/agency)
- World Walkers (cross-world NPCs)
- Story Daemon (background world progression)
- Multiplayer (P2P sync)
- Autopilot (characters act when you're away)
- Combat system
- Fatigue/inventory tracking
- Consequence engine
Built by Casey and Claude.