Managed ComfyUI picks up Comfy-Desktop shared models/input/output automatically
This commit is contained in:
@@ -44,7 +44,9 @@ func ComfyLayout(goos, dir string) (python, script string) {
|
||||
// DefaultComfyCommand builds the launch command for the standard venv
|
||||
// layout (see ComfyLayout): the script is passed relative to dir so dir
|
||||
// stays the working directory, and --port is taken from comfyURL when the
|
||||
// URL carries one.
|
||||
// URL carries one. On a Comfy-Desktop standalone install the shared data
|
||||
// directory (models, input, output) is added as --*-directory flags so the
|
||||
// managed instance sees the desktop app's models.
|
||||
func DefaultComfyCommand(goos, dir, comfyURL string) string {
|
||||
python, script := ComfyLayout(goos, dir)
|
||||
rel, err := filepath.Rel(dir, script)
|
||||
@@ -55,9 +57,34 @@ func DefaultComfyCommand(goos, dir, comfyURL string) string {
|
||||
if u, err := url.Parse(comfyURL); err == nil && u.Port() != "" {
|
||||
cmd += " --port " + u.Port()
|
||||
}
|
||||
if shared := DesktopSharedDir(dir); shared != "" {
|
||||
for _, sub := range []string{"models", "input", "output"} {
|
||||
p := filepath.Join(shared, sub)
|
||||
if st, err := os.Stat(p); err == nil && st.IsDir() {
|
||||
cmd += ` --` + sub + `-directory "` + p + `"`
|
||||
}
|
||||
}
|
||||
}
|
||||
return cmd
|
||||
}
|
||||
|
||||
// DesktopSharedDir returns the Comfy-Desktop shared data directory
|
||||
// (<root>/ComfyUI-Shared) when dir looks like a desktop standalone install
|
||||
// (<root>/ComfyUI-Installs/<name>/ComfyUI) and the shared models directory
|
||||
// exists; "" otherwise. The desktop app keeps models, input and output
|
||||
// there rather than inside the ComfyUI tree.
|
||||
func DesktopSharedDir(dir string) string {
|
||||
installs := filepath.Dir(filepath.Dir(dir))
|
||||
if filepath.Base(installs) != "ComfyUI-Installs" {
|
||||
return ""
|
||||
}
|
||||
shared := filepath.Join(filepath.Dir(installs), "ComfyUI-Shared")
|
||||
if st, err := os.Stat(filepath.Join(shared, "models")); err == nil && st.IsDir() {
|
||||
return shared
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// Process is one managed child process.
|
||||
type Process struct {
|
||||
name string
|
||||
|
||||
@@ -253,3 +253,24 @@ func TestStripANSI(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDesktopSharedDir(t *testing.T) {
|
||||
root := t.TempDir()
|
||||
comfy := filepath.Join(root, "ComfyUI-Installs", "rtx5080", "ComfyUI")
|
||||
if err := os.MkdirAll(comfy, 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got := DesktopSharedDir(comfy); got != "" {
|
||||
t.Fatalf("no shared dir yet: got %q, want empty", got)
|
||||
}
|
||||
shared := filepath.Join(root, "ComfyUI-Shared")
|
||||
if err := os.MkdirAll(filepath.Join(shared, "models"), 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got := DesktopSharedDir(comfy); got != shared {
|
||||
t.Fatalf("got %q, want %q", got, shared)
|
||||
}
|
||||
if got := DesktopSharedDir(filepath.Join(root, "plain", "ComfyUI")); got != "" {
|
||||
t.Fatalf("non-desktop layout: got %q, want empty", got)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user