Character schema v2: background, dialogue_style, appearance, skills, gaze_presets with automatic v1→v2 migration. LLM-assisted character creation via Character MCP server. Two-tier memory system (personal per-character + general shared) with budget-based injection into LLM system prompt. Per-character TTS voice routing via state file — Wyoming TTS server reads active config to route between Kokoro (local) and ElevenLabs (cloud PCM 24kHz). Dashboard: memories page, conversation history, character profile on cards, auto-TTS engine selection from character config. Also includes VTube Studio expression bridge and ComfyUI API guide. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
79 lines
2.4 KiB
JSON
79 lines
2.4 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "HomeAI Character Config",
|
|
"version": "2",
|
|
"type": "object",
|
|
"required": ["schema_version", "name", "system_prompt", "tts"],
|
|
"properties": {
|
|
"schema_version": { "type": "integer", "enum": [1, 2] },
|
|
"name": { "type": "string" },
|
|
"display_name": { "type": "string" },
|
|
"description": { "type": "string" },
|
|
|
|
"background": { "type": "string", "description": "Backstory, lore, or general prompt enrichment" },
|
|
"dialogue_style": { "type": "string", "description": "How the persona speaks or reacts, with example lines" },
|
|
"appearance": { "type": "string", "description": "Physical description, also used for image prompting" },
|
|
"skills": {
|
|
"type": "array",
|
|
"description": "Topics the persona specialises in or enjoys talking about",
|
|
"items": { "type": "string" }
|
|
},
|
|
|
|
"system_prompt": { "type": "string" },
|
|
|
|
"model_overrides": {
|
|
"type": "object",
|
|
"properties": {
|
|
"primary": { "type": "string" },
|
|
"fast": { "type": "string" }
|
|
}
|
|
},
|
|
|
|
"tts": {
|
|
"type": "object",
|
|
"required": ["engine"],
|
|
"properties": {
|
|
"engine": {
|
|
"type": "string",
|
|
"enum": ["kokoro", "chatterbox", "qwen3", "elevenlabs"]
|
|
},
|
|
"voice_ref_path": { "type": "string" },
|
|
"kokoro_voice": { "type": "string" },
|
|
"elevenlabs_voice_id": { "type": "string" },
|
|
"elevenlabs_voice_name": { "type": "string" },
|
|
"elevenlabs_model": { "type": "string", "default": "eleven_monolingual_v1" },
|
|
"speed": { "type": "number", "default": 1.0 }
|
|
}
|
|
},
|
|
|
|
"gaze_presets": {
|
|
"type": "array",
|
|
"description": "GAZE image generation presets with trigger conditions",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["preset"],
|
|
"properties": {
|
|
"preset": { "type": "string" },
|
|
"trigger": { "type": "string", "default": "self-portrait" }
|
|
}
|
|
}
|
|
},
|
|
|
|
"custom_rules": {
|
|
"type": "array",
|
|
"description": "Trigger/response overrides for specific contexts",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"trigger": { "type": "string" },
|
|
"response": { "type": "string" },
|
|
"condition": { "type": "string" }
|
|
}
|
|
}
|
|
},
|
|
|
|
"notes": { "type": "string" }
|
|
},
|
|
"additionalProperties": true
|
|
}
|