Skip to content

角色 API

前缀: /api/characters

该 router 负责角色档案、模型绑定、人格引导、角色卡、麦克风选择和声音生命周期。集合路由严格为 GET /api/characters,末尾没有 /

角色与模型状态

方法和路径用途
GET /api/characters列出角色档案;可根据请求语言本地化可编辑字段名。
POST /api/characters/catgirl从 JSON 档案创建角色。
PUT /api/characters/catgirl/{name}更新现有角色的可变字段。
DELETE /api/characters/catgirl/{name}按安全路径名删除角色。
POST /api/characters/catgirl/delete通过 JSON 请求体删除;用于无法安全放入 URL 的历史名称。
POST /api/characters/catgirl/{old_name}/rename重命名角色并迁移关联状态。请求体:{ "new_name": "..." }
GETPOST /api/characters/current_catgirl读取或切换当前角色。POST 请求体:{ "catgirl_name": "..." }
POST /api/characters/reload从存储重新加载角色配置。
POST /api/characters/master更新主人档案。
POST /api/characters/master/{old_name}/rename重命名主人档案。
POSTGET /api/characters/set_microphone/get_microphone保存或读取麦克风。POST 使用 microphone_idmicrophone_name 可选。

角色名会做路径安全与长度校验。大多数写接口返回 { "success": true } 一类应用层信封;无效 JSON、非法名称、对象不存在、冲突或存储写入围栏会按操作返回 400404409503

模型绑定

方法和路径用途
GET /api/characters/current_live2d_model解析当前或指定角色的 Live2D、VRM、MMD 或 PNGTuber 绑定;查询参数为 catgirl_nameitem_id,均可选。
PUT /api/characters/catgirl/l2d/{name}更新模型绑定;虽然保留历史 l2d 路径名,处理器支持当前全部模型类型。
PATCH /api/characters/catgirl/{name}/touch_set整体替换当前模型的触摸动作配置。
PUT /api/characters/catgirl/{name}/lighting更新 VRM 灯光。
GETPUT /api/characters/catgirl/{name}/mmd_settings读取或更新 MMD 渲染、物理、灯光和鼠标跟踪设置。

人格选择

方法和路径用途
GET /api/characters/persona-presets列出本地化的内置人格预设。
GETPOST /api/characters/persona-onboarding-state读取或更新首次人格引导状态。
POSTDELETE /api/characters/persona-reselect-current请求或清除当前角色的手动重选标记。
GETPUTDELETE /api/characters/character/{name}/persona-selection读取、设置或清除指定角色的人格选择。

角色卡与立绘

方法和路径用途
GET /api/characters/character-card/list列出已保存角色卡。
POST /api/characters/character-card/save将导入的角色卡数据保存到角色配置。
POST /api/characters/catgirl/save-to-model-folder将角色卡写入模型目录以供打包。
GET /api/characters/catgirl/{name}/export导出带嵌入档案和模型归档的 PNG 角色卡。
GET /api/characters/catgirl/{name}/export-settings仅导出档案设置,不含模型资源。
POST /api/characters/import-card导入 multipart zip_filecard_image 可选。
GET /api/characters/card-faces列出卡面数据。
GET /api/characters/card-metas列出卡片来源和元数据。
GETPUT /api/characters/catgirl/{name}/card-meta读取或更新单张卡的元数据 JSON。
GETPUT /api/characters/catgirl/{name}/card-face读取或上传卡面图片(字段 image)。
POST /api/characters/catgirl/{name}/export-with-portrait用 multipart portrait 导出;include_model 默认为 true。

导出接口返回文件而非 JSON。上传/导入会检查文件名、大小、归档条目和路径边界;校验失败通常返回 400413

声音操作

方法和路径用途
GET /api/characters/voices列出当前 provider 配置可用的声音。
GET /api/characters/voice_preview为必填 voice_id 合成本地化试听;language/i18n_language 可选,JSON 中返回 base64 音频。
PUT /api/characters/catgirl/voice_id/{name}给角色绑定声音 ID。
GET /api/characters/catgirl/{name}/voice_mode_status查询角色声音模式状态。
POST /api/characters/catgirl/{name}/unregister_voice移除角色的自定义声音绑定/注册。
POST /api/characters/clear_voice_ids清除所有角色存储的本地声音 ID。
GET /api/characters/custom_tts_voices列出自定义 TTS 声音;可用 provider 过滤。
POST /api/characters/voices从 JSON 注册自定义声音。
DELETE /api/characters/voices/{voice_id}删除自定义声音。
POST /api/characters/voice_clone从 multipart 音频克隆;必填 fileprefix,另接受 provider 专属字段。
POST /api/characters/voice_clone_direct从经过安全校验的直链音频注册/克隆;私网地址和不安全重定向会被拒绝。
POST /api/characters/voice_designproviderprefixvoice_prompt 创建并保存可复用音色。支持的服务商与约束由 TTS provider registry 决定。
POST /api/characters/voice_design_preview请求 ElevenLabs voice design 试听候选。
POST /api/characters/voice_design_create将选中的 design 试听保存成可复用声音。
POST /api/characters/audio/analyze_silence分析 multipart file 的静音区间。
POST /api/characters/audio/trim_silence裁剪 multipart filetask_id 可选。
GET /api/characters/audio/trim_progress/{task_id}查询裁剪进度。
POST /api/characters/audio/trim_cancel/{task_id}请求取消裁剪。

Provider 错误会进入 JSON 信封;能分类时也会使用 HTTP 4xx/5xx。Provider 专属请求字段和声音目录属于运行时数据,不应视作跨 provider 的稳定 schema。

经实现核对的路由清单

text
GET    /api/characters
GET    /api/characters/character-card/list
POST   /api/characters/catgirl/save-to-model-folder
POST   /api/characters/character-card/save
GET    /api/characters/catgirl/{name}/export
GET    /api/characters/catgirl/{name}/export-settings
POST   /api/characters/import-card
GET    /api/characters/card-faces
GET    /api/characters/card-metas
GET    /api/characters/catgirl/{name}/card-meta
PUT    /api/characters/catgirl/{name}/card-meta
GET    /api/characters/catgirl/{name}/card-face
PUT    /api/characters/catgirl/{name}/card-face
POST   /api/characters/catgirl/{name}/export-with-portrait
POST   /api/characters/catgirl/{old_name}/rename
GET    /api/characters/current_catgirl
POST   /api/characters/current_catgirl
POST   /api/characters/reload
POST   /api/characters/master
POST   /api/characters/master/{old_name}/rename
POST   /api/characters/catgirl
PUT    /api/characters/catgirl/{name}
POST   /api/characters/catgirl/delete
DELETE /api/characters/catgirl/{name}
POST   /api/characters/set_microphone
GET    /api/characters/get_microphone
GET    /api/characters/current_live2d_model
PUT    /api/characters/catgirl/l2d/{name}
PATCH  /api/characters/catgirl/{name}/touch_set
PUT    /api/characters/catgirl/{name}/lighting
PUT    /api/characters/catgirl/{name}/mmd_settings
GET    /api/characters/catgirl/{name}/mmd_settings
GET    /api/characters/persona-presets
GET    /api/characters/persona-onboarding-state
POST   /api/characters/persona-onboarding-state
POST   /api/characters/persona-reselect-current
DELETE /api/characters/persona-reselect-current
GET    /api/characters/character/{name}/persona-selection
PUT    /api/characters/character/{name}/persona-selection
DELETE /api/characters/character/{name}/persona-selection
POST   /api/characters/audio/analyze_silence
POST   /api/characters/audio/trim_silence
GET    /api/characters/audio/trim_progress/{task_id}
POST   /api/characters/audio/trim_cancel/{task_id}
POST   /api/characters/voice_clone
POST   /api/characters/voice_design
POST   /api/characters/voice_design_preview
POST   /api/characters/voice_design_create
POST   /api/characters/voice_clone_direct
GET    /api/characters/voices
GET    /api/characters/voice_preview
PUT    /api/characters/catgirl/voice_id/{name}
GET    /api/characters/catgirl/{name}/voice_mode_status
POST   /api/characters/catgirl/{name}/unregister_voice
POST   /api/characters/clear_voice_ids
GET    /api/characters/custom_tts_voices
POST   /api/characters/voices
DELETE /api/characters/voices/{voice_id}