comfy-cli 1.2.2__tar.gz → 1.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/PKG-INFO +2 -2
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/cmdline.py +23 -2
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/constants.py +1 -1
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/standalone.py +15 -9
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/uv.py +21 -14
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/PKG-INFO +2 -2
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/requires.txt +1 -1
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/pyproject.toml +3 -3
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/LICENSE +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/README.md +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/__init__.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/__main__.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/__init__.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/custom_nodes/__init__.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/custom_nodes/bisect_custom_nodes.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/custom_nodes/cm_cli_util.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/custom_nodes/command.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/install.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/launch.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/models/models.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/run.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/config_manager.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/env_checker.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/file_utils.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/git_utils.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/logging.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/registry/__init__.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/registry/api.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/registry/config_parser.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/registry/types.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/tracking.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/typing.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/ui.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/update.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/utils.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/workspace_manager.py +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/SOURCES.txt +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/dependency_links.txt +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/entry_points.txt +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/top_level.txt +0 -0
- {comfy_cli-1.2.2 → comfy_cli-1.2.4}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: comfy-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.4
|
|
4
4
|
Summary: A CLI tool for installing and using ComfyUI.
|
|
5
5
|
Maintainer-email: Yoland Yan <yoland@drip.art>, James Kwon <hongilkwon316@gmail.com>, Robin Huang <robin@drip.art>, "Dr.Lt.Data" <dr.lt.data@gmail.com>
|
|
6
6
|
License: GPL-3.0-only
|
|
@@ -26,7 +26,7 @@ Requires-Dist: rich
|
|
|
26
26
|
Requires-Dist: tomlkit
|
|
27
27
|
Requires-Dist: typer>=0.9.0
|
|
28
28
|
Requires-Dist: typing-extensions>=4.7.0
|
|
29
|
-
Requires-Dist: uv
|
|
29
|
+
Requires-Dist: uv<=0.4.0
|
|
30
30
|
Requires-Dist: websocket-client
|
|
31
31
|
Requires-Dist: semver~=3.0.2
|
|
32
32
|
Provides-Extra: dev
|
|
@@ -22,6 +22,7 @@ from comfy_cli.constants import GPU_OPTION, CUDAVersion
|
|
|
22
22
|
from comfy_cli.env_checker import EnvChecker
|
|
23
23
|
from comfy_cli.standalone import StandalonePython
|
|
24
24
|
from comfy_cli.update import check_for_updates
|
|
25
|
+
from comfy_cli.uv import DependencyCompiler
|
|
25
26
|
from comfy_cli.workspace_manager import WorkspaceManager, check_comfy_repo
|
|
26
27
|
|
|
27
28
|
logging.setup_logging()
|
|
@@ -566,6 +567,19 @@ def feedback():
|
|
|
566
567
|
rprint("Thank you for your feedback!")
|
|
567
568
|
|
|
568
569
|
|
|
570
|
+
@app.command(hidden=True)
|
|
571
|
+
@app.command(
|
|
572
|
+
help="Given an existing installation of comfy core and any custom nodes, installs any needed python dependencies"
|
|
573
|
+
)
|
|
574
|
+
@tracking.track_command()
|
|
575
|
+
def dependency():
|
|
576
|
+
comfy_path, _ = workspace_manager.get_workspace_path()
|
|
577
|
+
|
|
578
|
+
depComp = DependencyCompiler(cwd=comfy_path)
|
|
579
|
+
depComp.compile_deps()
|
|
580
|
+
depComp.install_deps()
|
|
581
|
+
|
|
582
|
+
|
|
569
583
|
@app.command(help="Download a standalone Python interpreter and dependencies based on an existing comfyui workspace")
|
|
570
584
|
@tracking.track_command()
|
|
571
585
|
def standalone(
|
|
@@ -576,6 +590,13 @@ def standalone(
|
|
|
576
590
|
help="setuptools-style requirement specificer pointing to an instance of comfy-cli",
|
|
577
591
|
),
|
|
578
592
|
] = "comfy-cli",
|
|
593
|
+
pack_wheels: Annotated[
|
|
594
|
+
bool,
|
|
595
|
+
typer.Option(
|
|
596
|
+
show_default=False,
|
|
597
|
+
help="Pack requirement wheels in archive when creating standalone bundle",
|
|
598
|
+
),
|
|
599
|
+
] = False,
|
|
579
600
|
platform: Annotated[
|
|
580
601
|
Optional[constants.OS],
|
|
581
602
|
typer.Option(
|
|
@@ -605,10 +626,10 @@ def standalone(
|
|
|
605
626
|
|
|
606
627
|
if rehydrate:
|
|
607
628
|
sty = StandalonePython.FromTarball(fpath="python.tgz")
|
|
608
|
-
sty.rehydrate_comfy_deps()
|
|
629
|
+
sty.rehydrate_comfy_deps(packWheels=pack_wheels)
|
|
609
630
|
else:
|
|
610
631
|
sty = StandalonePython.FromDistro(platform=platform, proc=proc)
|
|
611
|
-
sty.dehydrate_comfy_deps(comfyDir=comfy_path, extraSpecs=cli_spec)
|
|
632
|
+
sty.dehydrate_comfy_deps(comfyDir=comfy_path, extraSpecs=[cli_spec], packWheels=pack_wheels)
|
|
612
633
|
sty.to_tarball()
|
|
613
634
|
|
|
614
635
|
|
|
@@ -79,4 +79,4 @@ SUPPORTED_PT_EXTENSIONS = (".ckpt", ".pt", ".bin", ".pth", ".safetensors")
|
|
|
79
79
|
NODE_ZIP_FILENAME = "node.zip"
|
|
80
80
|
|
|
81
81
|
# The default version to download from python-build-standalone.
|
|
82
|
-
DEFAULT_STANDALONE_PYTHON_DOWNLOAD_VERSION = "3.12.
|
|
82
|
+
DEFAULT_STANDALONE_PYTHON_DOWNLOAD_VERSION = "3.12.7"
|
|
@@ -115,7 +115,7 @@ class StandalonePython:
|
|
|
115
115
|
for pycache in self.rpath.glob("**/__pycache__"):
|
|
116
116
|
shutil.rmtree(pycache)
|
|
117
117
|
|
|
118
|
-
def run_module(self, mod: str, *args:
|
|
118
|
+
def run_module(self, mod: str, *args: str):
|
|
119
119
|
cmd: list[str] = [
|
|
120
120
|
str(self.executable),
|
|
121
121
|
"-m",
|
|
@@ -125,10 +125,10 @@ class StandalonePython:
|
|
|
125
125
|
|
|
126
126
|
subprocess.run(cmd, check=True)
|
|
127
127
|
|
|
128
|
-
def pip_install(self, *args:
|
|
128
|
+
def pip_install(self, *args: str):
|
|
129
129
|
self.run_module("pip", "install", *args)
|
|
130
130
|
|
|
131
|
-
def uv_install(self, *args:
|
|
131
|
+
def uv_install(self, *args: str):
|
|
132
132
|
self.run_module("uv", "pip", "install", *args)
|
|
133
133
|
|
|
134
134
|
def install_comfy_cli(self, dev: bool = False):
|
|
@@ -137,16 +137,17 @@ class StandalonePython:
|
|
|
137
137
|
else:
|
|
138
138
|
self.uv_install("comfy_cli")
|
|
139
139
|
|
|
140
|
-
def run_comfy_cli(self, *args:
|
|
140
|
+
def run_comfy_cli(self, *args: str):
|
|
141
141
|
self.run_module("comfy_cli", *args)
|
|
142
142
|
|
|
143
|
-
def install_comfy(self, *args:
|
|
143
|
+
def install_comfy(self, *args: str, gpu_arg: str = "--nvidia"):
|
|
144
144
|
self.run_comfy_cli("--here", "--skip-prompt", "install", "--fast-deps", gpu_arg, *args)
|
|
145
145
|
|
|
146
146
|
def dehydrate_comfy_deps(
|
|
147
147
|
self,
|
|
148
148
|
comfyDir: PathLike,
|
|
149
149
|
extraSpecs: Optional[list[str]] = None,
|
|
150
|
+
packWheels: bool = False,
|
|
150
151
|
):
|
|
151
152
|
self.dep_comp = DependencyCompiler(
|
|
152
153
|
cwd=comfyDir,
|
|
@@ -156,14 +157,19 @@ class StandalonePython:
|
|
|
156
157
|
)
|
|
157
158
|
self.dep_comp.compile_deps()
|
|
158
159
|
|
|
159
|
-
|
|
160
|
-
|
|
160
|
+
if packWheels:
|
|
161
|
+
skip_uv = get_os() == OS.WINDOWS
|
|
162
|
+
self.dep_comp.fetch_dep_wheels(skip_uv=skip_uv)
|
|
161
163
|
|
|
162
|
-
def rehydrate_comfy_deps(self):
|
|
164
|
+
def rehydrate_comfy_deps(self, packWheels: bool = False):
|
|
163
165
|
self.dep_comp = DependencyCompiler(
|
|
164
166
|
executable=self.executable, outDir=self.rpath, reqFilesCore=[], reqFilesExt=[]
|
|
165
167
|
)
|
|
166
|
-
|
|
168
|
+
|
|
169
|
+
if packWheels:
|
|
170
|
+
self.dep_comp.install_wheels_directly()
|
|
171
|
+
else:
|
|
172
|
+
self.dep_comp.install_deps()
|
|
167
173
|
|
|
168
174
|
def to_tarball(self, outPath: Optional[PathLike] = None, show_progress: bool = True):
|
|
169
175
|
# remove any __pycache__ before creating archive
|
|
@@ -79,21 +79,28 @@ class DependencyCompiler:
|
|
|
79
79
|
"""
|
|
80
80
|
).strip()
|
|
81
81
|
|
|
82
|
-
reqNames =
|
|
82
|
+
reqNames = (
|
|
83
83
|
"requirements.txt",
|
|
84
84
|
"pyproject.toml",
|
|
85
85
|
"setup.cfg",
|
|
86
86
|
"setup.py",
|
|
87
|
-
|
|
87
|
+
)
|
|
88
88
|
|
|
89
89
|
@staticmethod
|
|
90
90
|
def Find_Req_Files(*ders: PathLike) -> list[Path]:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
for
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
reqFiles = []
|
|
92
|
+
for der in ders:
|
|
93
|
+
reqFound = False
|
|
94
|
+
for reqName in DependencyCompiler.reqNames:
|
|
95
|
+
for file in Path(der).absolute().iterdir():
|
|
96
|
+
if file.name == reqName:
|
|
97
|
+
reqFiles.append(file)
|
|
98
|
+
reqFound = True
|
|
99
|
+
break
|
|
100
|
+
if reqFound:
|
|
101
|
+
break
|
|
102
|
+
|
|
103
|
+
return reqFiles
|
|
97
104
|
|
|
98
105
|
@staticmethod
|
|
99
106
|
def Install_Build_Deps(executable: PathLike = sys.executable):
|
|
@@ -184,7 +191,7 @@ class DependencyCompiler:
|
|
|
184
191
|
override: Optional[PathLike] = None,
|
|
185
192
|
reqs: Optional[list[str]] = None,
|
|
186
193
|
reqFile: Optional[list[PathLike]] = None,
|
|
187
|
-
) ->
|
|
194
|
+
) -> None:
|
|
188
195
|
cmd = [
|
|
189
196
|
str(executable),
|
|
190
197
|
"-m",
|
|
@@ -232,7 +239,7 @@ class DependencyCompiler:
|
|
|
232
239
|
executable: PathLike = sys.executable,
|
|
233
240
|
extraUrl: Optional[str] = None,
|
|
234
241
|
index_strategy: str = "unsafe-best-match",
|
|
235
|
-
) ->
|
|
242
|
+
) -> None:
|
|
236
243
|
cmd = [
|
|
237
244
|
str(executable),
|
|
238
245
|
"-m",
|
|
@@ -262,7 +269,7 @@ class DependencyCompiler:
|
|
|
262
269
|
out: Optional[PathLike] = None,
|
|
263
270
|
reqs: Optional[list[str]] = None,
|
|
264
271
|
reqFile: Optional[list[PathLike]] = None,
|
|
265
|
-
) ->
|
|
272
|
+
) -> None:
|
|
266
273
|
"""For now, the `download` cmd has no uv support, so use pip"""
|
|
267
274
|
cmd = [
|
|
268
275
|
str(executable),
|
|
@@ -298,7 +305,7 @@ class DependencyCompiler:
|
|
|
298
305
|
out: Optional[PathLike] = None,
|
|
299
306
|
reqs: Optional[list[str]] = None,
|
|
300
307
|
reqFile: Optional[list[PathLike]] = None,
|
|
301
|
-
) ->
|
|
308
|
+
) -> None:
|
|
302
309
|
"""For now, the `wheel` cmd has no uv support, so use pip"""
|
|
303
310
|
cmd = [
|
|
304
311
|
str(executable),
|
|
@@ -480,20 +487,20 @@ class DependencyCompiler:
|
|
|
480
487
|
def install_deps(self):
|
|
481
488
|
DependencyCompiler.Install(
|
|
482
489
|
cwd=self.cwd,
|
|
483
|
-
reqFile=[self.out],
|
|
484
490
|
executable=self.executable,
|
|
485
491
|
extra_index_url=self.gpuUrl,
|
|
486
492
|
override=self.override,
|
|
493
|
+
reqFile=[self.out],
|
|
487
494
|
)
|
|
488
495
|
|
|
489
496
|
def install_dists(self):
|
|
490
497
|
DependencyCompiler.Install(
|
|
491
498
|
cwd=self.cwd,
|
|
492
|
-
reqFile=[self.out],
|
|
493
499
|
executable=self.executable,
|
|
494
500
|
find_links=[self.outDir / "dists"],
|
|
495
501
|
no_deps=True,
|
|
496
502
|
no_index=True,
|
|
503
|
+
reqFile=[self.out],
|
|
497
504
|
)
|
|
498
505
|
|
|
499
506
|
def install_wheels(self):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: comfy-cli
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.4
|
|
4
4
|
Summary: A CLI tool for installing and using ComfyUI.
|
|
5
5
|
Maintainer-email: Yoland Yan <yoland@drip.art>, James Kwon <hongilkwon316@gmail.com>, Robin Huang <robin@drip.art>, "Dr.Lt.Data" <dr.lt.data@gmail.com>
|
|
6
6
|
License: GPL-3.0-only
|
|
@@ -26,7 +26,7 @@ Requires-Dist: rich
|
|
|
26
26
|
Requires-Dist: tomlkit
|
|
27
27
|
Requires-Dist: typer>=0.9.0
|
|
28
28
|
Requires-Dist: typing-extensions>=4.7.0
|
|
29
|
-
Requires-Dist: uv
|
|
29
|
+
Requires-Dist: uv<=0.4.0
|
|
30
30
|
Requires-Dist: websocket-client
|
|
31
31
|
Requires-Dist: semver~=3.0.2
|
|
32
32
|
Provides-Extra: dev
|
|
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "comfy-cli"
|
|
7
7
|
license = { text = "GPL-3.0-only" }
|
|
8
|
-
version = "v1.2.
|
|
8
|
+
version = "v1.2.4" # Will be filled in by the CI/CD pipeline. Check publish_package.py.
|
|
9
9
|
requires-python = ">= 3.9"
|
|
10
10
|
description = "A CLI tool for installing and using ComfyUI."
|
|
11
11
|
readme = "README.md"
|
|
@@ -39,7 +39,7 @@ dependencies = [
|
|
|
39
39
|
"tomlkit",
|
|
40
40
|
"typer>=0.9.0",
|
|
41
41
|
"typing-extensions>=4.7.0",
|
|
42
|
-
"uv",
|
|
42
|
+
"uv<=0.4.0",
|
|
43
43
|
"websocket-client",
|
|
44
44
|
"semver~=3.0.2",
|
|
45
45
|
]
|
|
@@ -61,7 +61,7 @@ include = ["comfy_cli*"]
|
|
|
61
61
|
|
|
62
62
|
[tool.ruff]
|
|
63
63
|
line-length = 120
|
|
64
|
-
target-version = "v1.2.
|
|
64
|
+
target-version = "v1.2.4"
|
|
65
65
|
|
|
66
66
|
[tool.ruff.lint]
|
|
67
67
|
select = [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|