Repository Wiki
IAHispano/Applio

应用启动流程与 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 复制生成。
  • 界面边界:主界面由 Applio Blocks 容器和多个 gr.Tab 构成,Tab 的具体控件由 inference_tab()、train_tab() 等函数创建。
  • 服务边界:launch_gradio() 调用 Gradio 启动 ASGI 应用,并可附加 /tensorboard 代理;--client 模式还会挂载 rvc.realtime.client.app 到 /api。

Architecture

Loading diagram...

该图对应源码中的真实调用关系:入口先调用配置和平台准备,再导入并注册 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. 参数解析

当前入口支持以下启动参数:

参数类型默认值作用
--portint6969初始监听端口
--server-namestr127.0.0.1监听主机名或地址
--shareflagFalse请求 Gradio 创建公开分享链接
--openflagFalse启动后自动打开浏览器
--clientflagFalse启用 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 自己的校验。

Sources

(3 files)
assets/themes