背景
Vue3「浏览」按钮当前走 GET /api/pick_file,后端用 tkinter 在跑 gui.py 的机器上弹系统选文件/文件夹框(见 mikazuki/utils/tk_window.py、frontend/AGENTS.md「远程路径选择」)。
在 Linux (云主机 / SSH / 无桌面 / 浏览器远程访问 WebUI)下经常失效:无 DISPLAY 或弹窗开在服务器桌面而非用户本机,前端表现为「用户取消选择」。训练页、打标页、数据集编辑页的浏览按钮均受影响。
手填路径可用,但对远程用户不友好。
目标(第 2 档:正经修)
做网页内服务端路径浏览器 (列的是后端机器文件系统,不是浏览器本机磁盘),在 Linux / 无 GUI / 远程部署下也能点选目录与模型文件。
Windows 本机桌面可保留现有 tkinter 作为快捷路径;无 GUI 时自动走网页选择器。
建议范围
后端
新增(或扩展)可浏览 API,例如:
列出目录条目(文件夹 / 文件)
支持上级目录、起始根(如 ./sd-models、./train、./output、用户上次路径、绝对路径)
文件过滤(*.safetensors / *.ckpt / *.pt 等)
安全边界:禁止越权到无关系统路径(至少做根白名单或 canonicalize + 拒绝符号链接逃逸)
探测 tkinter / DISPLAY:不可用时 /api/pick_file 返回明确错误码,前端改开网页选择器
前端
通用 PathPicker 对话框组件(Element Plus):面包屑 / 列表 / 双击进入 / 选中确认
接入:
训练页 SchemaField 浏览
打标页路径浏览
数据集编辑顶栏文件夹图标
i18n(中/英)
非目标(本 Issue)
不浏览用户浏览器本机磁盘(Web 安全模型不允许)
不替代手填路径
训练脚本内的内置文件选择器失效 #184 (预设根目录 sd-models / output 路径契约)可另开或后续对齐,本 Issue 以「能在网页里逛服务端目录」为主
验收
Linux 无桌面(或仅浏览器访问)点「浏览」可弹出网页路径选择器,选中后路径写回输入框
Windows 本机:行为不回归(tkinter 或网页二选一均可,需文档说明)
目录与模型文件两种模式可用;取消不误报「用户取消选择」以外的错误
有最小单测或手工清单(至少覆盖 list API 与越权拒绝)
参考
现状:/api/pick_file + mikazuki/utils/tk_window.py
已有列表雏形:/api/get_files(预设根,远程更合适,但覆盖面不足)
相关但不重复:训练脚本内的内置文件选择器失效 #184
背景
Vue3「浏览」按钮当前走
GET /api/pick_file,后端用 tkinter 在跑gui.py的机器上弹系统选文件/文件夹框(见mikazuki/utils/tk_window.py、frontend/AGENTS.md「远程路径选择」)。在 Linux(云主机 / SSH / 无桌面 / 浏览器远程访问 WebUI)下经常失效:无
DISPLAY或弹窗开在服务器桌面而非用户本机,前端表现为「用户取消选择」。训练页、打标页、数据集编辑页的浏览按钮均受影响。手填路径可用,但对远程用户不友好。
目标(第 2 档:正经修)
做网页内服务端路径浏览器(列的是后端机器文件系统,不是浏览器本机磁盘),在 Linux / 无 GUI / 远程部署下也能点选目录与模型文件。
Windows 本机桌面可保留现有 tkinter 作为快捷路径;无 GUI 时自动走网页选择器。
建议范围
后端
./sd-models、./train、./output、用户上次路径、绝对路径)*.safetensors/*.ckpt/*.pt等)tkinter/DISPLAY:不可用时/api/pick_file返回明确错误码,前端改开网页选择器前端
PathPicker对话框组件(Element Plus):面包屑 / 列表 / 双击进入 / 选中确认SchemaField浏览非目标(本 Issue)
sd-models/output路径契约)可另开或后续对齐,本 Issue 以「能在网页里逛服务端目录」为主验收
参考
/api/pick_file+mikazuki/utils/tk_window.py/api/get_files(预设根,远程更合适,但覆盖面不足)