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.
Files changed (41) hide show
  1. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/PKG-INFO +2 -2
  2. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/cmdline.py +23 -2
  3. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/constants.py +1 -1
  4. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/standalone.py +15 -9
  5. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/uv.py +21 -14
  6. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/PKG-INFO +2 -2
  7. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/requires.txt +1 -1
  8. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/pyproject.toml +3 -3
  9. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/LICENSE +0 -0
  10. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/README.md +0 -0
  11. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/__init__.py +0 -0
  12. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/__main__.py +0 -0
  13. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/__init__.py +0 -0
  14. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/custom_nodes/__init__.py +0 -0
  15. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/custom_nodes/bisect_custom_nodes.py +0 -0
  16. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/custom_nodes/cm_cli_util.py +0 -0
  17. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/custom_nodes/command.py +0 -0
  18. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/install.py +0 -0
  19. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/launch.py +0 -0
  20. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/models/models.py +0 -0
  21. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/command/run.py +0 -0
  22. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/config_manager.py +0 -0
  23. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/env_checker.py +0 -0
  24. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/file_utils.py +0 -0
  25. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/git_utils.py +0 -0
  26. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/logging.py +0 -0
  27. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/registry/__init__.py +0 -0
  28. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/registry/api.py +0 -0
  29. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/registry/config_parser.py +0 -0
  30. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/registry/types.py +0 -0
  31. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/tracking.py +0 -0
  32. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/typing.py +0 -0
  33. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/ui.py +0 -0
  34. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/update.py +0 -0
  35. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/utils.py +0 -0
  36. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli/workspace_manager.py +0 -0
  37. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/SOURCES.txt +0 -0
  38. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/dependency_links.txt +0 -0
  39. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/entry_points.txt +0 -0
  40. {comfy_cli-1.2.2 → comfy_cli-1.2.4}/comfy_cli.egg-info/top_level.txt +0 -0
  41. {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.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.6"
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: list[str]):
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: list[str]):
128
+ def pip_install(self, *args: str):
129
129
  self.run_module("pip", "install", *args)
130
130
 
131
- def uv_install(self, *args: list[str]):
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: list[str]):
140
+ def run_comfy_cli(self, *args: str):
141
141
  self.run_module("comfy_cli", *args)
142
142
 
143
- def install_comfy(self, *args: list[str], gpu_arg: str = "--nvidia"):
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
- skip_uv = get_os() == OS.WINDOWS
160
- self.dep_comp.fetch_dep_wheels(skip_uv=skip_uv)
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
- self.dep_comp.install_wheels_directly()
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
- return [
92
- file # fmt: skip
93
- for der in ders
94
- for file in Path(der).absolute().iterdir()
95
- if file.name in DependencyCompiler.reqNames
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
- ) -> subprocess.CompletedProcess[Any]:
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
- ) -> subprocess.CompletedProcess[Any]:
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
- ) -> subprocess.CompletedProcess[Any]:
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
- ) -> subprocess.CompletedProcess[Any]:
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.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
@@ -12,7 +12,7 @@ rich
12
12
  tomlkit
13
13
  typer>=0.9.0
14
14
  typing-extensions>=4.7.0
15
- uv
15
+ uv<=0.4.0
16
16
  websocket-client
17
17
  semver~=3.0.2
18
18
 
@@ -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.2" # Will be filled in by the CI/CD pipeline. Check publish_package.py.
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.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