Amadeus — 实时多模态桌面交互 AI Agent。暖白色点阵标题与二次元角色、朱红色头发,搭配中性近黑色背景。

TALK 可打断的实时语音 · EMBODY 表演与语音同帧 · ACT Provider 委派执行 · CONTROL 可恢复、可接管

Bilibili demo 系统架构 0.17.1 Alpha AGPL-3.0 license
Windows — 参考平台 macOS — Apple Silicon MPS(T4 build mps) Linux — 已实机跑通

English · 简体中文

本地模型: NVIDIA CUDA cu124  ·  AMD ROCm / Windows (实验性)  ·  Apple MPS
快速开始  ·  官网与资源  ·  安装配置  ·  参与开发

Amadeus 是一个**实时多模态桌面 Agent**,将语音、角色表现与 Agent 工作连接在同一个交互界面中。你可以通过语音或文字交流,把任务交给专业 Provider,并随时查看进度、审批权限或接管工作。 桌面应用与 Host 在本地运行,模型按配置使用远程服务或本地推理;角色包是可选项,缺包时仍可使用 Chat 与 Work。 ## Amadeus 想解决什么 语音助手、桌面角色与执行型 Agent 往往分散在不同窗口:一个负责聊天,一个 负责表演,另一个在终端或浏览器中工作。长任务开始后,用户又很难知道它进行 到了哪里、需要什么权限,以及失败后能否继续。 Amadeus 试图把这些体验连成一个闭环: 1. **Talk — 自然交流**:语音或文字对话,并能在生成、合成和真实播放过程中随时打断。 2. **Embody — 角色具身**:语音、字幕、口型、表情和场景行为沿同一条播放时间线发生。 3. **Act — 委派执行**:主角色把工作交给注册的 Work Provider,而不是直接获得所有工具。 4. **Control — 保持掌控**:Project、Draft、Artifact、进度、权限、Diff 和结果保持可见,并可继续、重试或接管。 角色负责交流和叙述,专业 Provider 负责执行,Host 负责身份、状态、权限、 持久化与恢复。 > [!IMPORTANT] > 本仓库包含可构建、可运行的公开源码,本分支为 **0.17.1 Alpha**, > 不是带安装器的正式桌面发行版。Amadeus 第一方代码依据 > [GNU Affero General Public License v3.0(AGPL-3.0)](LICENSE) 开源。 > 第三方代码与外部资产保留各自条款。 > > **想先跑起来?** → [快速开始](#快速开始)。想先了解项目,从 > [Amadeus 想解决什么](#amadeus-想解决什么) 开始。 ## 演示切片 [![Amadeus 中的 Provider 工作界面:任务状态、流式结果与角色场景同时可见](./assets/demo/provider-runtime.jpg)](https://www.bilibili.com/video/BV1783G6hEYY/) 点击画面观看 10 分钟完整演示。 | 实时对话与角色表现 | 场景化工作状态 | |---|---| | ![角色正在进行带字幕的实时语音对话](./assets/demo/conversation.jpg) | ![角色进入工作场景并播报 Provider 的检索结果](./assets/demo/scene-runtime.jpg) | | 语音、字幕、口型与表情绑定到真实播放进度。 | 后台任务驱动角色行为、场景状态和结果叙述。 | 演示视频展示了实时语音、角色表现、桌面场景、Browser / OpenClaw 任务以及 论文检索流程。当前源码的桌面界面、Provider 接入和资产边界已经继续演进, 视频应被视为一次产品切片,而不是逐像素安装预览。 > [!NOTE] > 顶部横幅是品牌插画,演示截图展示实际原型。横幅和演示中的角色、场景、声音 > 及其他第三方素材不属于 Amadeus > 代码许可证授权范围。公开源码不包含未获得再分发许可的角色包、模型权重、 > 参考音频或创作中间资产。 ## 当前核心能力 | 能力 | 当前公开源码 | |---|---| | **可打断实时对话** | 共享麦克风生命周期、独立 Wake / Conversation ASR、两段式端点、AEC / barge-in,以及贯穿 LLM、TTS 与物理播放的中断。 | | **远程主 Chat 与本地语音** | DeepSeek V4 Flash Main Chat;Qwen3-ASR / SenseVoice;内嵌 GPT-SoVITS 流式合成(默认 v3,可选实验性 v2Pro)、连续播放与播放前口型发布。 | | **角色与桌面呈现** | SpriteForge 图状态、KTX2/PixiJS 运行时、字幕、口型和情绪同步;没有角色包时 Chat、Work 与 headless 仍可启动。 | | **Provider Runtime** | [Pi 原生 RPC](docs/pi-rpc-provider.md) 默认负责日常任务,Codex App Server / Direct Codex 负责复杂开发,Browser 保留受管页面操作,OpenClaw 保留为可选 Provider;Claude CLI 是已确定的后续 direct Provider。 | | **持久 Work 控制面** | Project、默认 Draft、WorkItem / Attempt、Continue / Retry、重启恢复、权限、Artifact Registry 与结构化 Diff。 | | **Work 与聊天审批选项** | 默认逐次审批;可为当前 Work 授予可撤销的 Pi MCP 相同调用授权,也可显式开启持久的 Work 与协作聊天自动审批。仅批准可授权的请求,拒绝策略和只读限制仍然有效;自动决定须先在 Host 权限记录中提交,再派发响应。[审批说明](docs/mcp_environment.md#pi-tool-approvals)。 | | **Artifact 与 AUIP** | Work 产物可预览、打开,或在校验后附加为有界 AUIP AppSession,让 Amadeus 与应用交互而不把叙述变成执行权限。 | | **统一设置入口** | Models、Voice、Providers/MCP、视觉、角色包状态和聊天外观在 Electron Settings 中集中管理。 | MCP 与 Skills 即使共用 Host registry,也只授予兼容 Provider;**Main Chat 不能直接调用 MCP 工具**。远程 DeepSeek 是主 Chat 基线;远程 ASR/TTS 是显式 兼容路径,不会在本地语音失败后静默上传或产生第二笔计费请求。 ## 仓库地图 ```text electron/ Electron main、preload、React renderer 与 Settings server/ 认证后的本地后端、Host 控制面与 AUIP core/ Main Chat runtime 与会话集成 agent_host/ Provider contracts、adapters、Work identity 与 capabilities asr/ Conversation / Wake 识别后端 tts/ 合成后端、分句 pipeline、播放与口型信号 render/ SpriteForge runtime adapter 与 PixiJS renderer wallpaper/ Electron/Lively host 与 Win32 桌面放置 vn_player/ Experimental VN Player integration assets/ Git-owned UI 资产与外部 runtime 资产落点 release/ 公开源码选择、provenance 与 deterministic archive policy config/ 启动配置、config/catalog/ 共享声明与状态写入原语 llm/ 模型客户端、传输与角色提示词组合 characters/ 内置角色定义 sdk/ AUIP 集成库 schemas/ 协议与资源包的机器可读契约 examples/ 外部应用和集成示例 skills/ Provider 范围内的创作指引 tools/ 维护和验收入口,索引见 tools/README.md tests/ 产品行为与边界的确定性测试 docs/ 安装指南、契约与带日期的工程证据 architecture/ 架构源文件与生成视图 scripts/ 各平台启动和安装辅助脚本 local_tts_infer.py 由 tts/ 调用的 GPT-SoVITS 推理集成层 ``` `main.py` 不是应用入口,只输出退役提示。Python 主入口是 `uv run --locked --no-sync python -m server.app --port 17777`,桌面入口是 Windows `run_electron_utf8.bat` / macOS `npm run electron:dev`(自动发现 `.venv`,T1–T4 通用)。 ## 系统架构 [![Amadeus 当前架构:Host 权威、Work Provider、Provider-scoped MCP/Skills、AUIP AppSession、语音与 SpriteForge 呈现边界](./assets/architecture-overview-crt.zh.svg)](./assets/architecture-overview-crt.zh.svg) 虚线框中的**记忆与人格运行时**是规划中的扩展模块,与主对话的双向点线表示拟议的上下文检索与更新;具体存储、记忆形成、人格更新及生命周期机制仍待设计。 图中有三个刻意的“不合并”: - Main Chat、Work Provider 与 AUIP application 是不同权限域; - MCP/Skills 不会因为 registry 共用而直接暴露给 Main Chat; - Artifact、identity、permission 与 receipt 是 Host 核验的事实,模型叙述不能替代。 当前 Codex 由 App Server 或 Direct transport 接入,不依赖旧 Locus 网关。 Claude CLI 将在后续作为独立 direct Provider 进入同一边界,而不是恢复 Locus。 ## AUIP 应用会话(application sessions) AUIP 是 Amadeus 的 cooperative application protocol,不是 Provider、MCP 或主 Chat 工具系统。它解决的是:当 Work 已生成一个可运行 Artifact,用户如何在 保留 Host 权限边界的前提下,继续让 Amadeus 与这个应用协作。 ```text verified Work Artifact -> Host prepares a short-lived attach ticket -> application registers declared state/events/actions -> bounded AppSession -> character receives scoped projection and action receipts ``` - ticket 绑定当前 Session、不可变 Artifact 引用与有效期;应用提交 Artifact id,而不是任意路径。 - Host 校验 workspace 归属、类型、digest 和启动入口,并拥有 AppSession identity、revision 与 action authority。 - 应用只能发布 manifest 中声明的状态和语义事件,只能接收已声明且经过授权的 typed action。 - AUIP 不授予 `work.*`、`provider.*`、`tts.*`、任意文件系统或其他 Session 权限。 - 断连成为可见状态并使待确认动作失效,不会在陈旧状态上静默继续。 当前 schema 是实验性的 `amadeus.auip/v0`;协议实现、[Web SDK](sdk/auip-web/)、 [Managed Core](sdk/auip-core/)、应用示例和集成测试均位于本仓库。详见 [AUIP 应用会话文档](docs/auip_application_sessions.md)。 [Code-Amadeus/AUIP](https://github.com/Code-Amadeus/AUIP) 维护协议现状、实现入口与 后续 SDK 发布条件;目前尚未发布独立版本的 SDK 或独立 conformance suite。 ## 快速开始 依赖按能力分四级:先装最小的 T1 跑通,再按需升梯。梯级(Tier)是**推荐的安装套餐**——每一级都是前一级的 严格超集,且由 extra 本身保证(`vad` 包含 `voice`,每个 `local-` 包含 `vad`)。平台不设上限, 下表只按平台推荐梯级与构建。术语定义见 [分层与构建术语契约](TIER_TAXONOMY.md)。 统一使用 [uv](https://docs.astral.sh/uv/) 与 Python 3.12,CI 固定 uv 0.12.8。 Linux 用户请从下方的 [Linux](#linux) 章节开始。 | 梯级 | 能力 | 安装方式 | |---|---|---| | T1 core | 文字聊天、工作、Provider、角色渲染 | `uv sync --locked` | | T2 voice | 说(远程 TTS、播放、口型)+ 听(麦克风、远程 ASR)| `uv sync --locked --extra voice` | | T3 vad | 实时打断(角色说话时可以插话)| `uv sync --locked --extra vad --extra torch-cpu` | | T4 embedded | 本地 GPT-SoVITS / Qwen3 ASR / 唤醒词 | `uv sync --locked --extra local-` | T3 与 T4 需要额外选择一个 Torch **构建**(build),构建与梯级相互独立:T3 用 `torch-cpu`,T4 从 `local-cpu`、`local-cu124`、`local-cu128`、`local-mps`、`local-rocm` 中选一个。默认的 T1/T2 套餐保持 Torch-free;`rag` 加 `torch-cpu` 这类可选组合仍可引入 Torch。 同时写上 `voice`、`vad` 的旧长命令仍然有效,结果相同。可选角色 RAG 会为你所用的命令额外引入本地 embedding/Torch 依赖。 | 平台 | 推荐 | 也可安装 | 备注 | |---|---|---|---| | Windows + NVIDIA | T4 `local-cu124`(参考) | `local-cu128`(实验)、`local-cpu` | 唯一具备完整本地栈验收记录的平台 | | Windows + AMD(AMD 官方支持矩阵内的卡) | T4 `local-rocm`(实验) | `local-cpu` | 验证入口在 `tools/rocm_sidecar/`;共用同一份 `uv.lock` 与 `.venv` | | Linux x86_64 + NVIDIA | T4 `local-cu128`(实验) | `local-cpu` | 源码运行路径已实机跑通;GPU 模型回归待完成 | | macOS Apple Silicon | T4 `local-mps`(实验性) | `local-cpu`(同一个轮子) | 本地 TTS 走 MPS;本地 ASR 落 CPU;唤醒词为 CPU | | 无匹配 GPU 的 Windows / Linux | T2 或 T3 | T4 `local-cpu` | 唤醒词在 CPU 上运行;本地 TTS/ASR 可安装但无实时性承诺。需设 `TTS_DEVICE=cpu`,因为 macOS 以外 `auto` 会选 `cuda:0` | | macOS Intel | T2 | — | T3 及以上无法安装:锁定的 Torch 2.7.0 没有 macOS x86_64 轮子 | 各梯级均使用**同一个 `.venv`**。每次给出完整目标配置: `uv sync` 会精确同步,漏带的 extra 会被移除。`torch-cpu`、`local-cpu`、`local-cu124`、`local-cu128`、 `local-mps` 与 `local-rocm` 两两互斥;切换构建时替换对应 extra 即可。 详见[安装配置与迁移](docs/install_profiles.md)。 - 主 Chat 默认远程 DeepSeek;llama.cpp 是可选本地 LLM profile(见 [兼容路径](#兼容路径)),不是安装前提。 - T2 无 vad 层时,语音端点自动降级为能量检测;安装 vad 后恢复 silero 精准端点与打断。 - Windows 上每装完一级可验证导入合同(`ci` 同 `cpu`): `uv run --locked --no-sync python tools/verify_python_environment.py --profile `, T4 用 `--profile cu124 --require-cuda-device`(`local-cpu` 用 `t4-cpu`);ROCm 实验入口用 `--profile rocm` 并继续执行 GPU compute probe。导入/构建验证不替代真实模型与音频设备测试。 - 纯文字 / headless(CI)场景用 T1 即可:`uv run --locked --no-sync python -m server.app --port 17777` 直接启动后端;严格文字模式设置 `TTS_BACKEND=disabled` 并关闭 Wake。 ### 参考硬件 **T1/T2(Windows / macOS)** - CPython **3.12**(由 uv 管理,无需系统安装) - Node.js **22**(当前参考 `22.21.1`) - 无 GPU 要求 **T4 使用 build `cu124`(Windows 本地模型)追加** - CUDA 12.4-compatible NVIDIA GPU,目标 **8 GiB VRAM** - **16 GiB 内存起步,32 GiB 推荐** 具体峰值取决于本地 ASR/TTS 模型与并发配置;8 GiB / 16–32 GiB 描述的是远程 Chat + 本地语音配置。选用本地 LLM 时需要按模型、量化、 context 和 GPU offload 另行评估内存。 ### 基础环境(T1/T2,Windows / macOS) 安装 uv(Windows:`winget install astral-sh.uv`;macOS:`brew install uv`), macOS 安装 T2 前还需 `brew install portaudio`,供 PyAudio 从源码编译。先克隆仓库: ```bash git clone https://github.com/Code-Amadeus/Amadeus.git cd Amadeus ``` 按平台创建环境。**Windows**: ```bash uv venv .venv --python 3.12 ``` **macOS** 使用已通过原生 VN 立绘检查的 uv-managed 构建。若已有 `.venv`,先按 [解释器迁移说明](MACOS_INSTALL.md#vn-portrait-tk) 处理旧环境: ```bash uv python install 3.12.14 uv venv .venv --python 3.12.14 --managed-python ``` 随后在任一平台选择梯级: ```bash uv sync --locked # T1 core uv sync --locked --extra voice # T2 voice(可选) ``` 覆盖全部功能及其外部准备(如 Windows 的 Lively Wallpaper)的分步指南见 [Windows 安装指南](WINDOWS_INSTALL.md)、[macOS 安装指南](MACOS_INSTALL.md)(含国内镜像配置)与 [Linux 安装指南](LINUX_INSTALL.md)。 venv 固定命名为 `.venv`:Electron 启动器会自动发现它(Windows `Scripts\python.exe`,macOS `bin/python3`),无需手动设置 `AMADEUS_PYTHON`。 macOS 启用原生 VN 立绘时,在图形桌面会话中额外运行 `uv run --locked --no-sync python tools/verify_vn_portrait_environment.py`。 旧版 standalone Python 构建可能通过包检查,却无法完成 Tk/ImageTk 图像传输。 headless 使用无需执行此额外检查。 Electron 前端(全平台): ```bash cd electron npm ci npm run build cd .. ``` `npm ci` 会通过项目 postinstall 安装 Electron 和固定版本的 Pi 运行时,桌面用户 无需另外安装默认日常工作 Agent,也不需要再做一次 Agent 登录。默认 Pi 连接复用 Settings -> Models 或 `.env` 中主 Chat 的 `DEEPSEEK_API_KEY`;重启后端时会先检查 固定版本运行时和所选模型凭据,再把 Pi 标记为可用。纯后端安装、原生认证和自定义 模型地址见 [Pi 配置说明](docs/pi-rpc-provider.md)。 国内网络可为 npm/Electron 配置镜像(如 `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/`)。 ### Linux **Linux 源码运行路径已在实机上跑通。** [第一阶段 Linux CI(#63)](https://github.com/Code-Amadeus/Amadeus/pull/63) 已通过 Ubuntu 24.04 上的 T1 + dev 锁定安装、环境导入与无模型依赖检查、基础契约测试、 Ruff、架构视图检查及 Electron 构建。另有独立 Voice source-build CI,验证锁定安装、 AEC 导入、bundled Abseil 选择及相关契约。CI 不覆盖 Electron GUI、真实音频设备、 VAD/本地模型推理、Wayland 会话或壁纸集成。 另有 cu128 候选安装、依赖和 T3 vad 回切检查,均不替代真实 GPU 模型验收。 社区已报告 Arch Linux / Wayland 下的桌面与角色渲染等实机结果;这些结果不代表 所有发行版或桌面环境均已验证。环境记录、已知问题和后续进展见 [Linux 跟踪 issue #64](https://github.com/Code-Amadeus/Amadeus/issues/64)。 先安装 Git、[uv](https://docs.astral.sh/uv/)(CI 使用 `0.12.8`)和 Node.js 22 (CI 使用 `22.21.1`),从无需 GPU 或语音包的 T1 开始: ```bash git clone https://github.com/Code-Amadeus/Amadeus.git cd Amadeus uv venv .venv --python 3.12.10 uv sync --locked cp .env.example .env ``` 编辑 `.env`,去掉 `# DEEPSEEK_API_KEY=` 行首的 `# ` 并填入 key,设置 `TTS_BACKEND=disabled`,并保持 `WAKE_ENABLED=false`,先验证文字路径。然后在项目根目录检查环境: ```bash uv run --locked --no-sync python tools/verify_python_environment.py --profile cpu ``` 在 Linux 图形桌面会话中构建并启动 Electron;启动器会自动发现 `.venv/bin/python3` 并启动后端: ```bash cd electron npm ci npm run build npm run electron:dev ``` 桌面的 `npm ci` 同样会安装 Pi;默认 Pi 复用基础配置中的 DeepSeek 凭据,并在后端 启动时检查。自定义模型认证见 [Pi 配置说明](docs/pi-rpc-provider.md)。 如只需 headless 后端,可改为在项目根目录运行: ```bash uv run --locked --no-sync python -m server.app --port 17777 ``` 需要远程语音、录音和播放时,可在同一 `.venv` 安装 T2。Ubuntu 24.04 先安装 CI 使用的源码构建前置包;其他发行版请使用对应的软件包名称: ```bash sudo apt-get update sudo apt-get install --no-install-recommends -y build-essential pkg-config portaudio19-dev uv sync --locked --extra voice uv run --locked --no-sync python tools/verify_python_environment.py --profile voice ``` 语音、本地模型和桌面集成的组件说明: - **Voice / AEC**:Linux 使用基于官方 `aec-audio-processing==1.0.1` sdist 的仓库内 源码,强制选择 bundled Abseil 20240722.0,避免选中新版 system Abseil 导致的构建 失败。该修改不更改系统 Abseil;Windows/macOS 继续使用 registry 包。来源、独立 补丁与移除条件见 [AEC provenance](vendor/aec-audio-processing.PROVENANCE.md)。 构建/导入通过不代表真实设备上的回声消除或完整语音交互已验收。 - **VAD / NVIDIA**:Linux T3 vad 与 `local-cu128` 候选已有明确的 Torch 构建选择 和安装/契约 CI;cu124 参考配置仍面向 Windows。真实 GPU 模型推理及完整语音 交互继续按设备验收,见下方候选配置说明。 - **桌面 / 壁纸**:GUI 与 Wayland compositor 集成仍需分别验收;GNOME 的社区结果 不代表 niri、KDE 或其他桌面也可用。 ### VAD 与本地模型 与 T1/T2 共用同一个 `.venv`,选择完整的能力与构建组合: **T3 vad — 实时打断**(torch 随之以 CPU 版进入安装): ```powershell uv sync --locked --extra vad --extra torch-cpu uv run --locked --no-sync python tools\verify_python_environment.py --profile vad-cpu ``` **T4 embedded — 本地语音模型栈**:在同一 `.venv` 上选择 CUDA 配置,torch 换为 CUDA 12.4 构建(经 `pyproject.toml` 的 `[tool.uv.sources]` 路由到 PyTorch cu124 index,仅 Windows + 本 extra 生效): ```powershell uv sync --locked --extra local-cu124 uv run --locked --no-sync python tools\verify_python_environment.py --profile cu124 --require-cuda-device ``` T4 的 `cu124` 构建固定 `torch==2.6.0+cu124`、`torchaudio==2.6.0+cu124` 和本地模型 依赖集;它以当前实际运行环境为第一版基线。 **实验 local-rocm(Windows)**:面向 AMD 官方 ROCm 7.2.1 Windows PyTorch 支持矩阵内的 GPU。同一 `.venv` 可选择 ROCm 7.2.1、Torch/Torchaudio 2.9.1 与完整本地模型依赖;Qwen ASR 和 GPT-SoVITS 在常驻 sidecar 子进程中运行, 默认使用当前 `.venv` 的解释器。该配置与 cu124/CPU Torch 构建互斥。 安装后先进行环境检查与 GPU compute 验证,再加载模型。支持的硬件、安装命令 和验证步骤见 [Windows ROCm sidecar 指南](tools/rocm_sidecar/README.md)。 **Torch 2.7 配置**:`local-cu128`(Windows/Linux x86_64)与 `local-mps`(Apple Silicon)提供锁定的 Torch/Torchaudio 2.7.0 安装入口。 两者均为实验配置:GPT-SoVITS MPS 的实机证据基于 Torch 2.6.0,尚未在锁定的 2.7.0 上复测;cu128 尚无 NVIDIA 设备/模型验收。 现有 Windows cu124 仍保留为参考配置,Windows ROCm 继续使用 AMD 配套的 2.9.1。 ```bash # Windows/Linux NVIDIA 候选,包含完整模型依赖 uv sync --locked --extra local-cu128 uv run --locked --no-sync python tools/verify_python_environment.py --profile cu128 # Apple Silicon MPS uv sync --locked --extra local-mps uv run --locked --no-sync python tools/verify_python_environment.py --profile mps ``` 以上为互斥选择,按当前平台只执行一组。安装检查与 CPU 契约 CI 不代表 GPU 推理、 麦克风、连续播放和打断已验收。#67 报告了 M4 Max 上独立 Qwen-ASR MPS 实测; 当前应用内 Qwen 仍只支持 CPU/CUDA 设备选择,安装此配置不会自动接通 ASR MPS。 GPT-SoVITS 支持通过 `local-mps` 环境运行 MPS 路径。 RTX 50 系应评估 cu128 候选,不能使用旧 cu124 作为 Blackwell 运行依据。 FlashAttention 保持可选;已找到匹配 cp312/Torch 2.7/cu128 的 Windows 社区 wheel 和 Linux 上游 wheel,来源、哈希与验证范围见 [Torch 2.7 与 FlashAttention 候选](docs/torch27_candidates.md)。 ### 对话长度与 Work 报告 内置红莉栖日语人格通常最多回复 6 句;用户要求详细解释,或准确、充分回答确有需要时, 可以超过 6 句。Settings 中的日语人格覆盖仍优先替换内置默认人格,覆盖值默认留空。 这是表达长度规则,不限制报告上下文。当前会话接收的 Work,其最新终态报告会完整提供给 后续对话,重启后仍可读取;过程播报和完成时的口头汇报保持简短。 报告仍标明 Provider 来源,不替代 Host 的完成度与验证状态。 ### 安装外部运行资产 另提供默认关闭的[角色知识 RAG 选项](docs/character_rag.md),支持远程和本地 Main Chat。 它包含可直接构建的中日文基础资料,也支持自己的知识目录;Settings 可查看实际阈值和加载状态。 RAG 会额外安装本地 embedding/Torch 依赖。资料、索引构建、诊断与验证范围见说明。 默认本地语音配置使用 Qwen ASR 与 GPT-SoVITS v3 语音包;视觉和角色包可选: ```powershell uv run --locked --no-sync python tools\external_assets.py verify C:\Downloads\amadeus-asr-qwen3-0.6b.zip uv run --locked --no-sync python tools\external_assets.py install C:\Downloads\amadeus-asr-qwen3-0.6b.zip uv run --locked --no-sync python tools\external_assets.py verify C:\Downloads\amadeus-voice-kurisu-gpt-sovits-v3.zip uv run --locked --no-sync python tools\external_assets.py install C:\Downloads\amadeus-voice-kurisu-gpt-sovits-v3.zip # 可选:场景与角色动画(KTX2 + 配套视频) uv run --locked --no-sync python tools\external_assets.py install C:\Downloads\amadeus-visual-runtime.zip uv run --locked --no-sync python tools\external_assets.py verify "C:\Downloads\amadeus-character-kurisu-2026.10.14-keypoint-return-v3.zip" uv run --locked --no-sync python tools\external_assets.py install "C:\Downloads\amadeus-character-kurisu-2026.10.14-keypoint-return-v3.zip" uv run --locked --no-sync python tools\external_assets.py status ``` [官网资源中心](https://code-amadeus.github.io/#resources)已提供重新校色的 `2026.10.14-keypoint-return-v3` 角色包,包含 40 组视频(7,672 帧),并新增 key point 返回过渡动画。Google Drive 下载需将 28 个分卷及辅助文件放在同一目录, 运行 `Assemble-Kurisu.ps1` 合并并校验完整 ZIP;不能将单个 `.zip.001` 分卷传给安装器。 升级旧角色包时,先停止后端、关闭渲染窗口并备份自定义素材,再给上面的角色 `install` 命令添加 `--overwrite`。旧静态包继续受支持,但不会启用视频路径。 安装后请按[0.17 推荐图形设置与生效检查](#017-推荐图形设置与生效检查)确认实际帧源。 要试用 **Kurisu v2Pro**,先安装上面的 v3 语音包,再安装独立提供的实验附加包。 附加包包含 v2Pro GPT/SoVITS 权重组合和 ERes2Net 说话人编码器,复用 v3 包中的 BERT、CNHuBERT 与参考音频: ```powershell uv run --locked --no-sync python tools\external_assets.py verify C:\Downloads\amadeus-voice-kurisu-gpt-sovits-v2pro-experimental.zip uv run --locked --no-sync python tools\external_assets.py install C:\Downloads\amadeus-voice-kurisu-gpt-sovits-v2pro-experimental.zip ``` 在 **Settings → Voice → Voice backends → Embedded GPT-SoVITS model** 中, 将 **Voice checkpoint profile** 选为 **Kurisu v2Pro · experimental**,然后重启后端。 使用 `.env` 配置时,设置 `TTS_VOICE_PROFILE=kurisu_v2pro`;`.env.example` 仍默认 使用 `kurisu_v3`。预设会同时选择匹配的两份权重。内嵌运行时支持 v1、v2、v2Pro、 v2ProPlus 和 v3;其他兼容权重组合可选择 `custom`,并填写 `TTS_GPT_MODEL_PATH` 与 `TTS_SOVITS_MODEL_PATH`。v2Pro/v2ProPlus 还需要附加包中的说话人编码器权重。 加速路径根据实际语音设备与可用扩展选择,不由声音权重预设单独决定。 **v2ProPlus 也受支持,并复用同一条推理管线**,包括说话人条件、会话缓存、 CUDA Graph 和流式播放。使用时选择 **Custom checkpoint pair** (`TTS_VOICE_PROFILE=custom`),将 GPT 与 SoVITS 路径设为兼容的 v2ProPlus 权重组合,然后重启后端;说话人编码器与 v2Pro 共用同一份 ERes2Net 权重。 目前没有独立的 Kurisu v2ProPlus 预设或 Plus 资产包,上面的实验 Kurisu 包提供的是 v2Pro 权重。本次改动的真实推理验证使用 v2Pro,尚未单独实测 v2ProPlus 权重。 如果没有预制 Qwen 包,可直接把上游 snapshot 下载到同一个固定落点;运行时 保持离线,不会在第一次录音时临时联网: ```powershell uv run --locked --no-sync python -c "from huggingface_hub import snapshot_download; snapshot_download('Qwen/Qwen3-ASR-0.6B', local_dir='assets/models/asr/qwen3-asr-0.6b')" ``` GPT-SoVITS 日文前端第一次使用会准备 OpenJTalk 字典。希望正式启动时不再下载, 可预先运行一次: ```powershell uv run --locked --no-sync python -c "import pyopenjtalk; print(pyopenjtalk.g2p('準備完了'))" ``` ### 推荐的 NVIDIA 语音加速配置 这些本地 CUDA 优化需要 T4 的 `cu124` 构建及上面的 Qwen/GPT-SoVITS 资产; T1 纯文字、远程语音和 CPU 配置不享有这些 CUDA 优化。同步依赖时保留完整的 optional-extra 组合,见[安装配置说明](docs/install_profiles.md)。 在 **设置 → 语音 → 对话语音识别** 中,保持 **Qwen 设备**为 `auto`、 **Qwen CUDA Graph** 开启。默认值为 `QWEN3_ASR_DEVICE=auto`、 `QWEN3_ASR_CUDA_GRAPH=true` 和 `QWEN3_ASR_FLASH_ATTN=true`。 Qwen 加速独立于 TTS 模式;CUDA Graph 需要受支持的 NVIDIA 运行环境, FlashAttention 还需要兼容的可选扩展。不支持时继续使用兼容的解码/注意力路径。 修改后重启后端,通过诊断确认实际设备与推理路径。 建议保持 **Settings → Voice → Advanced voice settings → Local TTS inference mode** 为 **自动(推荐)**。使用 `.env` 时: ```dotenv ENABLE_CUDA_GRAPH=auto TTS_T2S_FLASH_ATTN=auto ``` 未设置时也采用上述默认值。仅当 GPT-SoVITS 实际运行在 NVIDIA CUDA 上时自动 开启 CUDA Graph,GPU 独立语音进程也适用。CPU、MPS、ROCm 和远程 TTS 不自动开启; 即使主机有 NVIDIA 显卡,使用 CPU 的语音运行时也不会因此开启。 FlashAttention KV-cache 路径在 NVIDIA Ampere 或更新架构、FP16/BF16 权重,且 兼容的 `flash-attn` 扩展可用时自动选择;否则继续使用现有 PyTorch SDPA 路径。 应用不会自动安装扩展,安装与验证见[可选扩展说明](docs/torch27_candidates.md#flashattention-wheel-inventory)。 T2S CUDA Graph 保留各自的桶形状,默认共享一个最大容量的 KV 工作区(`TTS_KV_CACHE_LAYOUT=nested`)。 现有 CUDA Graph 管线本就串行处理完整的 TTS 合成请求,因此共享 KV 不会降低该模式的并发; 解码器在整个 AR 请求期间持有工作区,普通 ASR 推理与音频播放仍可并行。每个桶只有一个 Graph, 可复用于任意合法前缀长度;nested 请求在桶满时升到已捕获的更大桶,不复制 KV;目标缺失或最大桶 已满时保留全上下文动态回退。`bucket` 保留每桶独立 KV,不升桶。请在加载模型前设置布局。 内存与延迟实测见 [Nested KV 评估](docs/tts_nested_kv_evaluation_2026-10-14.md)。 两个开关均支持 `0`(关闭)、`1`(请求开启)与 `auto`。已有 `.env` 或桌面设置中的 显式值继续优先;旧配置为 `0` 时,改为 `auto` 或在界面选择“自动”即可采用新策略。 手动开启也需要运行时能力支持。桌面模式请在语音空闲时切换;修改 `.env` 或 FlashAttention 设置后重启后端。启动诊断会报告实际选择的路径。 本次不改变句内片段合并策略,该调度仍需手动开启。 ### 配置与启动 复制 `.env` 并填写 DeepSeek API key(Windows:`Copy-Item .env.example .env`; macOS:`cp .env.example .env`),然后在 Settings 中核对: - **Models**:`deepseek`、官方 endpoint、`deepseek-v4-flash` 与 API key; - **Voice**:远程 TTS 推荐 Fish Audio S2.1 + Kurisu,也支持 MiMo / OpenAI-compatible;T4 本地栈另需 Qwen model 目录、兼容的 GPT-SoVITS 权重组合(默认 **Kurisu v3**,可选实验性 **Kurisu v2Pro**)、reference audio/text、麦克风、AEC 和 barge-in; - **General**:可选角色包状态与呈现设置。 启动: - Windows:`run_electron_utf8.bat`(单一启动器;自动发现 `.venv`,T1–T4 通用) - macOS:`cd electron && npm run electron:dev` 开发启动器和 `npm run dev` 默认使用 `5173` 端口。若终端提示 `EACCES` (监听被拒绝,可能是系统保留端口)或 `EADDRINUSE`(端口被占用),在 **项目根目录 `.env`** 中选择其他可用端口,例如: ```dotenv AMADEUS_DEV_PORT=15173 ``` 填写 1–65535 的整数,不使用变量插值。已设置的进程环境变量优先于 `.env`; `electron/.env` 不配置此端口。修改后需完整重启开发启动器。Vite、Electron 各窗口及后端来源校验统一使用选定端口;Vite 监听成功后才启动 Electron。 监听失败会显示操作提示并退出,不会一直等待或静默切换端口。Windows 可用 `netsh interface ipv4 show excludedportrange protocol=tcp` 检查排除范围, 也应检查对应的 `ipv6` 范围。此设置不改变后端的 `17777` 端口。 更新源码后,先在 `electron/` 下执行 `npm run build`,再启动,以更新编译后的 Electron 主进程。之后仅修改端口值无需重新构建,完整重启启动器即可。启动器 关闭时会请求 Electron 正常退出,完成后端和壁纸清理。无效开发端口会阻止开发 启动器启动;单独运行的后端会记录警告并拒绝开发浏览器来源,保留原生/文件来源客户端。 macOS 登录后自动启动壁纸可使用原生 `Amadeus Wallpaper.app`;构建、验证和 LaunchAgent 安装步骤见 [macOS 壁纸自启动](docs/macos_wallpaper_startup.md)。 启动型设置变更后按 **Restart backend to apply**。角色包显示 **Not installed** 是健康状态,不影响 Chat、Work 或 headless 启动。 默认 B2 AppSession 动作路径不会阻塞首次配置。尚未配置受支持的 AUIP 动作模型凭据时,Chat 和 Settings 仍可启动;应用动作保持 fail-closed, Settings 会明确显示缺少的能力。 ### VN Player 安装与首次取文 以下是 Windows 上的实验性 VN Player 流程。选择 **0xDC00 Agent** 或 **LunaTranslator** 其中一种取文方式,按对应步骤配置后再测试。 #### 0xDC00 Agent Agent 需要另外安装,并使用适配当前游戏的脚本。 **Hook 脚本是负责取文的 `.js` 文件**;页面中的**用于对齐的完整剧本**是另一份可选的 剧情文本,首次使用可以留空。 Amadeus 不会自动下载 Agent、游戏脚本或游戏。 1. 从 [0xDC00 Agent 官方发布页](https://github.com/0xDC00/agent/releases) 下载 Windows 版本并完整解压,保留 `agent.exe` 旁的 `data` 目录,不要只复制一个 exe。 2. 在 Agent 的脚本选择菜单中使用 **update scripts** 同步 [官方脚本库](https://github.com/0xDC00/scripts),按游戏名称、平台和版本选择脚本。 保留 `data/scripts` 内的共享库;某些游戏脚本依赖 `libMono.js` 等文件,不能只下载单个 `.js`。手动安装时,可下载脚本库 ZIP,把其中的仓库内容放入 `data/scripts`,保留目录结构。 3. 在 Agent 设置中启用 **WebSocket**,地址设为 `127.0.0.1:9001`,与桌面配置预期一致。 可先在 Agent 中选择运行中的游戏进程和对应脚本,点击 **Attach**,确认推进对话时能收到 正确文本;之后关闭手动打开的 Agent,再交给 Amadeus 启动。当前不使用剪贴板取文。 4. 打开 **VN Player → 添加游戏**,选择游戏类型和 **0xDC00 Agent**,分别选择游戏实际的 `.exe`、**游戏 Hook 脚本(.js)**和 **Agent 程序(所有游戏共用)**。需要通过 Steam 启动的游戏选 **Steam**;其他启动器可选**我自行启动游戏**。完整剧情剧本可留空。 5. 点击**保存并测试取文**,推进几句对话,检查预览是否与游戏一致,包含选项和真实重复的 台词。这个测试不调用模型。确认后点击**取文正确,开始陪玩**;模型回复需在 Settings 中配置 **VN 伴侣**使用的模型连接。之后直接点击**启动**即可复用配置。 #### LunaTranslator 这条路线使用完整的 LunaTranslator 应用负责取文,**不需要安装 Agent,也不需要选择 Agent 的 `.js` 脚本**。仅下载独立 LunaHook 并不能直接提供这里需要的网络原文流。 1. 按 [LunaTranslator 官方下载说明](https://docs.lunatranslator.org/zh/README.html) 下载适合系统的版本,完整解压后运行 `LunaTranslator.exe`。 2. 先启动游戏,在 Luna 中切换到 **HOOK 模式**,选择游戏进程。推进几句对话,在文本选择 窗口中选出与游戏台词一致的文本流,确认 Luna 已持续收到正确的原文。具体界面见 [官方 HOOK 使用教程](https://docs.lunatranslator.org/zh/basicuse.html)。 3. 在 Luna 设置中开启[网络服务](https://docs.lunatranslator.org/zh/apiservice.html), 记下实际配置的服务端口。游玩期间保持 Luna 和网络服务运行。 4. 打开 **VN Player → 添加游戏**,将文本来源设为 **Luna 原文流(实验性)**。在 **Luna WebSocket 地址**填写 `ws://127.0.0.1:<端口>/api/ws/text/origin`,把 `<端口>` 替换为上一步的实际端口。这里接收原文,不填写翻译流 `/api/ws/text/trans` 或网页地址。 5. 游戏启动方式选**我自行启动游戏**时可以不填游戏 exe;如需 Amadeus 自动启动游戏或 使用游戏画面功能,再补填实际的游戏 exe,并按需选择 Steam 或直接启动。 **用于对齐的完整剧本**仍可留空。 6. 点击**保存并测试取文**,推进对话,核对 VN Player 预览中的文本;确认后点击 **取文正确,开始陪玩**。取文测试不调用模型;模型回复需配置 Settings 中 **VN 伴侣** 使用的模型连接。 Amadeus 不会替你启动 Luna 或选择其 hook;**结束陪玩**只断开原文流连接,不关闭 Luna。 更多接入细节见 [Luna 原文流说明](docs/vn-text-sources.md#lunatranslator)。连接失败或没有文本时,见 [详细安装与排查说明](docs/vn-text-sources.md#setup-troubleshooting)。 ## 兼容路径 ### 可选本地 LLM 需要 llama.cpp 时,显式设置 `LLM_PROVIDER=local`,配置 executable / GGUF 或已存在的 OpenAI-compatible endpoint,再按需启动: ```powershell .\start_llm_server.bat ``` 托管 llama-server 默认使用 16k 上下文;容量不足时明确拒绝,不静默截断 Chat 请求。常驻 llama-cli 会话需要迁到 llama-server。LM Studio、Ollama 的容量行为 仍待实机验收。Hybrid 使用独立 HTTP 本地首句加远端回复,与纯本地后端选择无关; 任何 profile 都不会在 DeepSeek 失败后自动接管。 主流程已统一为 Cooperative,保留 basic/professional,见[运行时与配置迁移说明](docs/chat-runtime-convergence.md)。 ### 可选远程模型建议 下表是面向当前 API 的推荐 profile,不改变上述角色分工,也不会在端点 失败后自动切换 provider: | 职责 | 推荐 profile | 当前边界 | |---|---|---| | 主 Chat API | DeepSeek-V4-Flash-0731:`DEEPSEEK_BASE_URL=https://api.deepseek.com`,`DEEPSEEK_MODEL_NAME=deepseek-v4-flash` | `deepseek-v4-flash` 是稳定 API alias,当前指向 0731 版本;不把日期写进运行时 model id。 | | 远程语音合成 TTS | 推荐 **Fish Audio S2.1**:`TTS_BACKEND=fish_audio`、`FISH_TTS_MODEL=s2.1-pro-free`;Kurisu 音色:`FISH_TTS_REFERENCE_ID=b450b19370434173b121446057622e9b` | WebSocket 双向流式 API;本地分句片段按 `text → flush` 发送,音频逐块接收。主 Chat 保留现有分句调度;不直接发送原始 LLM token。 | | 多模态 / Vision | 优先 `gemini-3.7-flash`;需要较保守的兼容 profile 时可用 `gemini-3.5-flash` | 当前由 Host 内部 visual-context 链负责图像采集,图像发送仍跟随主 Chat provider;独立 Gemini Vision API 路由尚未实现,也不代表恢复旧 Gemini Live sidecar。 | | Work 执行 Provider | 日常任务默认 Pi;复杂开发使用 Codex App Server | 桌面安装已包含固定版本的 Pi 运行时,仍需[配置模型凭据](docs/pi-rpc-provider.md)。OpenClaw 保留为可显式选择的 Provider,Browser 保留受管页面操作。 | | Work 执行模型 | Codex App Server 可显式选择 GPT-5.6 family 或 `deepseek-v4-flash` | 执行模型属于 Work Provider,不与主 Chat 共用路由或密钥。 | | AUIP 运行时动作判定 | `AUIP_ACTION_PROVIDER=openai`、`AUIP_ACTION_MODEL=gpt-5.6-terra`、`AUIP_ACTION_REASONING_EFFORT=low`、`AUIP_ACTION_SERVICE_TIER=fast` | 这是 AppSession 的动作 / 参与判定模型,不是 AUIP Artifact 的执行 Provider;`fast` 需要对应 API 项目可用。 | ### 推荐远程 TTS:Fish Audio + Kurisu 安装 T2 voice 后,在 **Settings → Voice** 的 Speech synthesis 中选择 **Fish Audio**,填写 API key,确认以下两个不同的 ID,再重启后端: | 设置 | 推荐值 | |---|---| | Fish 推理模型 ID(S2.1 免费模型) | `s2.1-pro-free` | | Kurisu 音色 / reference ID | `b450b19370434173b121446057622e9b` | | 音色页面 | [牧濑红莉栖 / Makise kurisu](https://fish.audio/zh-CN/app/text-to-speech/?modelId=b450b19370434173b121446057622e9b) | | WebSocket endpoint | `wss://api.fish.audio/v1/tts/live` | | 延迟模式 | `balanced` | 也可在本机 `.env` 中配置: ```dotenv TTS_BACKEND=fish_audio FISH_TTS_API_KEY= FISH_TTS_MODEL=s2.1-pro-free FISH_TTS_REFERENCE_ID=b450b19370434173b121446057622e9b FISH_TTS_LATENCY=balanced ``` 这是日语 Kurisu 音色;推理模型 ID 和音色 ID 不能互换。GUI 中的 API key 进入现有加密凭据存储。推荐远程配置不改变默认的本地 GPT-SoVITS 后端。 在一台 Windows 主机上,DeepSeek + 此 Fish 配置的三次基线测试中, 从发送 `chat.send` 到首个非静音音频写入声卡的中位数为 **3.70 秒** (另有约 91 ms 声卡输出延迟;不代表所有网络或冷启动表现)。 配置、增量 chunk 试验与音频检查见 [Fish Audio 接入说明](docs/fish_audio_websocket.md)。 ## 外部模型与运行资产 模型权重、参考音频、角色包及大型/版权敏感素材独立分发;源码仓库只保留 必要图标、默认壁纸、schema、validator 和安装工具。 可用资源的入口与下载信息见 [Code Amadeus 资源中心](https://code-amadeus.github.io/#resources)。 本地语音的目录合同包括 `asr-qwen3-0.6b`、`voice-kurisu-gpt-sovits-v3`,以及可选的 `voice-kurisu-gpt-sovits-v2pro-experimental` 附加包。v3 包提供附加包所需的共享资源。 `visual-runtime` 与 `character-kurisu` 用于场景和角色呈现。各包内容与安装细节见 [外部资产包说明](docs/external_asset_bundles.md)。 ```powershell uv run --locked --no-sync python tools\external_assets.py verify C:\path\to\asset-bundle.zip uv run --locked --no-sync python tools\external_assets.py install C:\path\to\asset-bundle.zip uv run --locked --no-sync python tools\external_assets.py status ``` `external_assets.py` 是纯标准库工具,在任一梯级的 `.venv` 下运行均可。运行本地语音 模型还需匹配的模型依赖与硬件,安装资产包本身不会补齐这些依赖。cu124 正式配置和 ROCm 实验边界见[安装配置](docs/install_profiles.md)。 SpriteForge 角色包最终应落在: ```text assets/spriteforge/runtime/kurisu/ runtime_manifest.json graph_config.json spriteforge_mouth_config.json textures/ ``` 安装器保持标准 `assets/...` 路径、校验 SHA-256、跳过相同文件并拒绝意外覆盖。 详见[外部资产包](docs/external_asset_bundles.md)与 [角色包合同](docs/character_pack_authoring.md)。 ### 壁纸模式(推荐 Lively Wallpaper) Windows 下推荐用开源的 [Lively Wallpaper](https://github.com/rocksdanister/lively) 托管 Amadeus 网页壁纸; Windows 默认先打开控制台(`AMADEUS_WINDOWS_STARTUP_MODE=window`)。可通过侧栏 **Wallpaper**,或在 **设置 → 常规 → 启动方式** 中选择直接进入壁纸。 启用后,托管壁纸模式管理 Lively 2.2.1.0 的准备、挂载,并在正常选择 **Quit Amadeus** 时恢复原壁纸; `--no-wallpaper` 可启动普通窗口。首次缺少宿主时通过 winget 安装,源码环境首次构建辅助程序需要 .NET 8 SDK。 输入框和异常退出限制仍见 [#185](https://github.com/Code-Amadeus/Amadeus/issues/185)。 详见 [Windows 生命周期与实验](docs/windows_wallpaper_lifecycle.md)。 Wallpaper Engine 仍保留兼容。设置 `AMADEUS_WALLPAPER_HOST=external` 可使用原有手工流程: 启动 Amadeus,将下列本地网页 URL 添加到 Lively(推荐 WebView2),再点击 **Wallpaper**: ```text http://127.0.0.1:17777/wallpaper/lively/index.html ``` 该稳定入口会自动发现实际 asset/bridge 端口;壁纸模式关闭时会原地等待, 不要手工写死 `17778` 或 `17797`。诊断时可运行 `uv run --locked --no-sync python tools\run_wallpaper_engine_bridge.py` 并使用它打印的 `Lively URL`。 详见 [Lively 入口说明](wallpaper/lively/README.md)。 macOS 没有对应的 Lively/Wallpaper Engine 桌面宿主。点击 **Wallpaper** 后, Electron 会直接创建桌面层的全场景窗口,并用独立透明窗口承载可交互 Canvas; 场景本身保持鼠标穿透,不会挡住 Finder 桌面图标。macOS Electron 壁纸宿主已有社区实机验证; 依赖与 CI 由 [#46](https://github.com/Code-Amadeus/Amadeus/pull/46) 承接,目前也不包含签名、公证或安装器。 ### 图形性能配置 所有 PixiJS 角色与壁纸表面共享一个图形预设。可在 **设置 → 图形与性能** 中配置, 也可使用 `.env`: [界面预览](docs/images/graphics-performance-settings.png)(自定义设置已保存,等待重启)。 | `GRAPHICS_PROFILE` | 最大帧率 | resolution | 用途 | |---|---:|---:|---| | `standard`(默认) | 60 FPS | 原生 device-pixel ratio | 保持动画设计质量 | | `power_saving` | 30 FPS | 最高 1.5× | 降低 GPU、功耗与发热 | | `custom` | `RENDER_MAX_FPS` | `RENDER_MAX_RESOLUTION` | 自定义性能预算 | 自定义帧率支持 10–240 FPS,resolution 支持 0.25–4.0。示例: ```dotenv GRAPHICS_PROFILE=custom RENDER_MAX_FPS=45 RENDER_MAX_RESOLUTION=1.25 ``` Wallpaper Engine 通过 [`applyGeneralProperties().fps`](https://docs.wallpaperengine.io/en/web/performance/fps.html) 提供用户 FPS 设置时,运行时采用该设置与项目 Profile 中较低的有效值;Electron、 Lively 及普通角色表面没有该宿主设置,直接使用项目 Profile。 选择“自定义”后,GUI 会显示帧率和像素密度上限;切换预设会保留自定义数值。 保存后需重启后端,再重新打开现有角色与壁纸窗口。页面会单独显示当前后端的渲染上限, 不会将尚未应用的设置显示成已生效。这些上限不是实测帧率,Wallpaper Engine 还可能进一步降低帧率。 #### 0.17 推荐图形设置与生效检查 先按[资产安装说明](#安装外部运行资产)安装配套的视频角色包,再在 **设置 → 图形与性能** 中核对: | 设置 | 推荐值 | 对应配置 | |---|---|---| | 图形预设 | 标准(60 FPS) | `GRAPHICS_PROFILE=standard` | | 帧源选择 | 自动 · 可用时优先视频 | `RENDER_FRAME_SOURCE=auto` | | 帧缓存预算 | 自动 · 视频 384 MiB / 静态 2 GiB | `RENDER_FRAME_BUDGET_MIB=auto` | | 启用动画纹理采样 | 开启 | `RENDER_TEXTURE_SAMPLING=true` | | 复用磁盘中的已转码纹理 | 开启 | `RENDER_BC7_CACHE=true` | 新安装的标准预设默认采用这组配置。**升级会保留手动选择**:旧的静态帧、固定预算或 关闭采样等设置不会自动被替换,请在设置中核对。使用 `.env` 时可填写表中配置, 但需注意[配置优先级](#配置所有权):桌面设置优先于 `.env`,父进程环境变量在 GUI 中显示为 locked。 **重启后端并重新打开角色/壁纸**后,查看**当前实际动画帧源**,对应窗口应显示 **视频与静态入口帧 · 384 MiB**。如果显示**静态帧**,请按旁边的原因检查素材包和解码支持; 只选了“自动”不代表视频已生效。没有兼容的视频素材或解码器时,自动模式继续使用静态帧, 缓存预算为 2 GiB。手动指定的预算对两种路径都生效。 帧预算限制静态帧保留的 CPU/GPU 数据,不包含整个应用、语音模型或解码器的总占用, 因此不等于总显存上限,也不能保证每台设备降低相同比例。实测数据及各自基线见 [性能对照](docs/alpha-0.17.0-performance.md)。 #### 动画纹理采样 没有手动配置时,纹理采样在**配置为 60 FPS 时默认开启**,其他预设帧率默认关闭; 显式开启或关闭的选择会保留。采样按有效 FPS 预算跳过用不到的源帧,同时保留关键停留帧、 动作时长与嘴型索引,也可以在 30 FPS 节能档下手动开启。磁盘纹理缓存默认开启, 磁盘空间目标为 4 GiB;这是磁盘预算。 修改这些选项后需重启后端并重开角色/壁纸。仅切换绘制 FPS 不会立即重建纹理缓存。 如需全帧加载,将 `RENDER_TEXTURE_SAMPLING=false` 后按同样步骤重启。 此前的 [30 FPS 采样实验](docs/fps_texture_sampling_experiment_2026-09-16.md) 测量的是 CPU 纹理缓冲,不是整机 RAM 或总显存。 ## 配置所有权 启动值优先级固定为: 1. 父进程环境变量(最高权威,在 GUI 中显示为 locked); 2. Electron desktop settings; 3. 仓库根目录 `.env`; 4. `config/settings.py` 默认值。 Settings 不会回写 `.env`。普通模型、语音、麦克风、Provider/MCP、视觉、头像和 角色包状态应从 GUI 配置;高级诊断、实验阈值和测试开关留在 `.env`。密钥通过 操作系统 `safeStorage` 加密。详见[配置所有权](config/README.md)与 [本地实例认证](docs/local_instance_authentication.md)。 ## 当前发布边界 | 范围 | 状态 | |---|---| | T1/T2(文字 + 远程语音)| Windows、macOS 与 Linux 源码部署;Windows 为参考平台,macOS T1/T2 与 Linux 有独立 CI | | Linux | 源码运行路径已实机跑通;Ubuntu 24.04 的 T1、T2 Voice 源码构建与 Electron 构建有 CI,具体环境说明见 [Linux 章节](#linux) | | T3 vad | 不要求 NVIDIA GPU;使用明确的 CPU 构建配置 | | T4 使用 build `cu124`(本地 CUDA 12.4 语音)| Windows + NVIDIA;以当前实际运行环境为参考 | | AMD ROCm 7.2.1 | 面向 AMD 官方 Windows 支持矩阵内的 GPU;提供 `local-rocm` 实验配置与 Qwen ASR / GPT-SoVITS sidecar,见 [安装与验证](tools/rocm_sidecar/README.md) | | NVIDIA cu128 | Torch 2.7.0 实验锁与安装 CI;完整设备和模型回归待完成 | | Apple Silicon MPS(T4 build `mps`)| 实验性;通过 `local-mps` 安装并有安装 CI;TTS 实机证据早于锁定的 Torch 2.7.0;本地 ASR 与唤醒词仍在 CPU 上 | | 8 GiB VRAM / 16–32 GiB RAM | 目标配置;实际占用由模型组合决定 | | 远程 DeepSeek Main Chat | 第一版默认 profile | | 远程 ASR / TTS | 显式兼容路径,不静默 fallback | | Electron installer | 尚未提供;当前从源码启动 | | macOS Electron 壁纸宿主 | 已有社区实机验证;依赖/CI 由 #46 承接,尚无签名、公证或安装器 | | Docker | 不是支持的桌面安装路径 | | SpriteForge 角色包 | 外部分发;缺包仍可启动 | | VTS | 默认关闭的兼容旁路 | | VN Player | 实验性;[安装与首次取文](#vn-player-安装与首次取文) | | 壁纸宿主 | Windows 使用 Lively / Wallpaper Engine;macOS Electron 宿主已有社区实机验证 | | PyQt / 旧壁纸 host | 已退出公开主线 | | Claude CLI Provider | 已确定的后续主线 Provider;当前没有 live caller | ## 开发与贡献 ```powershell uv sync --locked --extra dev # core + 开发工具;会移除未选择的语音/模型层 # 保留语音/模型能力时,在完整安装命令末尾追加 --extra dev uv run --locked --no-sync python tools\verify_python_environment.py --profile ci uv run --locked --no-sync python -X utf8 tools\run_tests.py cd electron npm ci npm run build npm audit --audit-level=high ``` 提交前请阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 与 [ROADMAP.md](ROADMAP.md)。 产品语义、权限、协议、Provider/MCP/Skill、Project/Draft/Artifact 或 AUIP 边界变化 应先开 Issue;小型修复、文档、测试和纯呈现 UI 变更可直接发 PR。安全问题请按 [SECURITY.md](SECURITY.md) 私下报告。 ## 公开历史与许可证 公开仓库从一个整理后的初始提交开始。内部研发 commit、实验 branch、已删除角色 素材、模型、密钥、会话、本地路径及原始共作者元数据没有迁入公开 Git 历史。 代码本身按当前发行边界保留。 Amadeus 第一方源码和修改依据 [GNU Affero General Public License v3.0(AGPL-3.0)](LICENSE) 开源。 第三方组件保留各自许可证,见 [LICENSES](LICENSES/README.md) 与 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。代码许可证不会自动授予角色、 模型、参考音频或外部资产包的权利。 ## 相关项目 - [Aqua-TTS](https://github.com/Lucas1479/Aqua-TTS):MIT 的低延迟 GPT-SoVITS v3 推理运行时;Amadeus 当前不要求安装 Aqua 才能启动。 - [Amadeus SpriteForge](https://github.com/Code-Amadeus/Amadeus-SpriteForge):已公开源码的 **0.1.0 Source Alpha**,提供本地 sprite 资产检查、行为图编辑与 KTX2 角色包预览/导出;项目代码采用 AGPL-3.0-only,生成服务与 Amadeus 运行时独立。 - [AUIP](https://github.com/Code-Amadeus/AUIP):已在 Amadeus 中实现的实验性 application-session / typed-action 协议;独立仓库维护现状与公开实现入口,独立版本 SDK 和 conformance suite 尚未发布。 - [GPT-SoVITS](https://github.com/RVC-Boss/GPT-SoVITS):内嵌语音合成推理基础。 - [OpenClaw](https://github.com/openclaw/openclaw):可选外部 Work gateway。 - [实验性扩展 Host profile](docs/extension_host_profile_v0.1.md):已实现的本地 wheel TTS/MCP/Skill/主题子集、包应用生命周期、Agent 绑定与当前限制;不是稳定 SDK,也不声明完整扩展协议一致性。 - [插件作者入口](docs/extension_authoring.md):最小静态检查环境、现有 wheel 示例、Host 支持范围与运行验收边界。 - [实验性插件目录](docs/extension_catalog.md):浏览、安装和手动更新具体产物;正式目录发布与独立审核仍待完成,资格边界见[发布检查表](docs/verification/extensions/store-v1.md)。
Star History

Amadeus Star History

---
El Psy Kongroo.