应用启动流程与 Gradio 界面总览
本页说明 Applio 从执行 app.py 到启动 Gradio Web UI 的实际流程,包括配置初始化、平台准备、Prerequisites、主题与国际化、Tab 组装、监听地址与端口处理,以及 TensorBoard 和 realtime client 的挂载方式。
Purpose and Scope
本页聚焦应用入口和 Gradio 外壳:启动参数、启动前检查、gr.Blocks 页面结构、Tab 注册、Applio.launch() 参数、端口回退、TensorBoard 代理和 client mode。推理、训练、TTS、模型下载等 Tab 内部业务不在此页展开;需要了解具体业务行为时,应进入对应 Tab 或 core.py 所调用的工具实现页面。
Overview
Applio 的启动是一个“先准备运行环境,再构造 UI,最后启动服务器”的同步流程。模块导入阶段会确保 assets/config.json 存在,执行平台配置并解析命令行参数;随后应用加载各个 Tab 的构造函数,运行 run_prerequisites_script(),初始化 i18n、可选的 Discord presence、安装检查和主题。所有这些步骤完成后,代码才进入 gr.Blocks 上下文并注册 UI。
运行时有三组边界:
- 启动边界:
app.py是入口;缺失配置会从assets/config_template.json复制生成。 - 界面边界:主界面由
ApplioBlocks 容器和多个gr.Tab构成,Tab 的具体控件由inference_tab()、train_tab()等函数创建。 - 服务边界:
launch_gradio()调用 Gradio 启动 ASGI 应用,并可附加/tensorboard代理;--client模式还会挂载rvc.realtime.client.app到/api。
Architecture
该图对应源码中的真实调用关系:入口先调用配置和平台准备,再导入并注册 Tab;launch_gradio() 负责将已经构造好的 Applio Blocks 转换为运行中的服务。TensorBoard 代理不是独立服务器,而是通过启动后得到的 app 增加 FastAPI 路由;realtime API 只在 client mode 下挂载。
启动阶段与依赖顺序
1. 配置文件和工作目录
程序使用当前工作目录 os.getcwd() 作为配置与资源解析的基准,并把该目录加入 sys.path。如果 assets/config.json 不存在,则直接复制模板创建。这个设计让首次启动可以自举,但也意味着启动目录必须能访问 assets/config_template.json。
2. 参数解析
当前入口支持以下启动参数:
| 参数 | 类型 | 默认值 | 作用 |
|---|---|---|---|
--port | int | 6969 | 初始监听端口 |
--server-name | str | 127.0.0.1 | 监听主机名或地址 |
--share | flag | False | 请求 Gradio 创建公开分享链接 |
--open | flag | False | 启动后自动打开浏览器 |
--client | flag | False | 启用 client mode;挂载 realtime API 并阻止普通线程锁定 |
参数通过 parse_known_args() 解析,因此入口会保留未被该解析器消费的参数,而不会因额外参数立即失败。
3. 启动前准备
platform_config() 在平台层初始化后,应用导入十个左右的 Tab 构造函数。随后调用 run_prerequisites_script(pretraineds_hifigan=True, models=True, exe=True),表明启动阶段会准备 HiFi-GAN 预训练资源、模型和可执行文件。之后应用创建 I18nAuto,按配置决定是否启动 RPCManager,执行安装检查,并通过 loadThemes.load_theme() 取得主题名;若没有返回值,使用 ParityError/Interstellar 作为回退主题。
Gradio 版本还会被转换为 GRADIO_6 布尔值,用于兼容旧版本的 Blocks 配置。启动前还覆盖了 gr.Number.preprocess:None、低于最小值或高于最大值的输入统一变为 None,合法值则按控件精度四舍五入。这是入口层针对无效数字输入的兼容修补,而不是业务 Tab 自己的校验。