训练监控、配置编辑与任务队列的 Web 面板。后端 FastAPI + SQLite,前端 React + Vite。
studio/
├── server.py # FastAPI 守护进程入口
├── paths.py # 路径常量
├── web/ # React + Vite 前端源码
│ ├── package.json
│ ├── src/
│ └── dist/ # npm run build 产物(被 server.py 挂在 /studio)
└── README.md
运行时数据写到仓库根目录下的 studio_data/(SQLite + 用户保存的 config + 任务日志),已加入 .gitignore。
python -m studio 是统一入口,子进程由 Python 管理(Windows / macOS / Linux 都用一样的命令):
python -m studio # 默认 = run
python -m studio run # 构建前端(如缺)+ 起后端
python -m studio dev # 前后端开发模式(5173 + 8765 --reload,并行)
python -m studio build # 仅构建前端
python -m studio test # 跑 pytest + vitest
dev 模式会同时起 Vite 和 uvicorn 两个子进程,Ctrl+C 会一起干掉(Windows 用 CTRL_BREAK_EVENT,POSIX 用进程组 SIGTERM)。
studio.bat 调同一份 Python 启动器,双击即可。
python -m studio.server --host 0.0.0.0 --port 8765
参数:
python -m studio.server --host 0.0.0.0 --port 8765 --reload
开发模式(热重载):
cd studio/web
npm install # 首次
npm run dev # → http://127.0.0.1:5173/studio/
Vite dev server 会把 /api、/samples 反代到后端。
生产构建(产物给后端挂在 /studio):
cd studio/web
npm run build # 输出到 studio/web/dist/
# 后端不用重启,刷新浏览器即可(服务端启动时检测 dist/ 是否存在)
/api/health、/api/state、/samples/{name} 端点;旧监控页保留在 /;训练侧 --no-monitor 接通studio.schema.TrainingConfig 单一权威源)+ CRUD 端点(/api/schema、/api/configs/*)studio.argparse_bridge schema → argparse 反向生成anima_train.py 迁移到 schema;React Configs 页(schema-driven 表单 + 列表 CRUD)Queue.tsx 列表 + 操作,Log.tsx 实时日志)Datasets.tsx) + 队列 JSON 导入导出/api/browse 端点、studio.bat 一键启动、Vitest 框架 + 首批测试详见仓库根的 plan。
/ 旧监控页(loss / lr / 采样图)/studio/ React 应用入口
监控 守护进程状态 + 跳转旧监控配置 schema-driven 表单 + 列表(新建 / 保存 / 复制 / 删除)队列 入队 / 取消 / 重试 / 删除 / 查日志 / JSON 导入导出;SSE 实时刷新/queue/{id}/log 全屏日志查看(自动滚动 + 运行中每 2 秒拉一次)数据集 扫描子目录、解析 Kohya 前缀、统计 caption 类型、缩略图预览需要本地起前端开发服务器:
cd studio/web
npm install
npm run dev # http://127.0.0.1:5173/studio/
或构建后由后端 /studio/ 路径服务:
cd studio/web && npm run build
# 启动后端:python -m studio.server
# 浏览器:http://127.0.0.1:8765/studio/