webtools-cli 1.3.6__tar.gz → 1.3.8__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.
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/ComfyUI/comfyu.py +18 -11
- {webtools_cli-1.3.6/webtools_cli.egg-info → webtools_cli-1.3.8}/PKG-INFO +1 -1
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/pyproject.toml +1 -1
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools/core.py +95 -23
- {webtools_cli-1.3.6 → webtools_cli-1.3.8/webtools_cli.egg-info}/PKG-INFO +1 -1
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/ComfyUI/comfyUI.py +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/ComfyUI/ui.py +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/LICENSE +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/README.md +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/setup.cfg +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools/__init__.py +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools/__main__.py +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools/cli.py +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools/install.py +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools/mega_client.py +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools/web/index.html +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools/web/script.js +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools/web/style.css +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools_cli.egg-info/SOURCES.txt +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools_cli.egg-info/dependency_links.txt +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools_cli.egg-info/entry_points.txt +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools_cli.egg-info/requires.txt +0 -0
- {webtools_cli-1.3.6 → webtools_cli-1.3.8}/webtools_cli.egg-info/top_level.txt +0 -0
|
@@ -10,26 +10,31 @@ WORKSPACE = os.environ.get("COMFYUI_WORKSPACE", "/content/ComfyUI")
|
|
|
10
10
|
CHECKPOINT_URLS = os.environ.get("CHECKPOINT_URLS", "")
|
|
11
11
|
UNET_DIFFUSION_URLS = os.environ.get("UNET_DIFFUSION_URLS", "")
|
|
12
12
|
TEXT_ENCODER_URLS = os.environ.get("TEXT_ENCODER_URLS", "")
|
|
13
|
+
TEXT_ENCODERS_URLS = os.environ.get("TEXT_ENCODERS_URLS", "")
|
|
13
14
|
CLIP_VISION_URLS = os.environ.get("CLIP_VISION_URLS", "")
|
|
14
15
|
VAE_URLS = os.environ.get("VAE_URLS", "")
|
|
15
16
|
LORA_URLS = os.environ.get("LORA_URLS", "")
|
|
16
17
|
CONTROLNET_URLS = os.environ.get("CONTROLNET_URLS", "")
|
|
17
18
|
UPSCALE_MODELS_URLS = os.environ.get("UPSCALE_MODELS_URLS", "")
|
|
19
|
+
LATENT_UPSCALE_URLS = os.environ.get("LATENT_UPSCALE_URLS", "")
|
|
18
20
|
EMBEDDING_URLS = os.environ.get("EMBEDDING_URLS", "")
|
|
19
21
|
CUSTOM_NODE_URLS = os.environ.get("CUSTOM_NODE_URLS", "")
|
|
20
22
|
|
|
21
23
|
# --- Downloader Logic ---
|
|
22
24
|
DIRS = {
|
|
23
|
-
"checkpoints":
|
|
24
|
-
"unet":
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
25
|
+
"checkpoints": os.path.join(WORKSPACE, "models/checkpoints"),
|
|
26
|
+
"unet": os.path.join(WORKSPACE, "models/unet"),
|
|
27
|
+
"diffusion_models": os.path.join(WORKSPACE, "models/diffusion_models"),
|
|
28
|
+
"clip": os.path.join(WORKSPACE, "models/clip"),
|
|
29
|
+
"text_encoders": os.path.join(WORKSPACE, "models/text_encoders"),
|
|
30
|
+
"clip_vision": os.path.join(WORKSPACE, "models/clip_vision"),
|
|
31
|
+
"vae": os.path.join(WORKSPACE, "models/vae"),
|
|
32
|
+
"loras": os.path.join(WORKSPACE, "models/loras"),
|
|
33
|
+
"controlnet": os.path.join(WORKSPACE, "models/controlnet"),
|
|
34
|
+
"upscale_models": os.path.join(WORKSPACE, "models/upscale_models"),
|
|
35
|
+
"latent_upscale": os.path.join(WORKSPACE, "models/latent_upscale_models"),
|
|
36
|
+
"embeddings": os.path.join(WORKSPACE, "models/embeddings"),
|
|
37
|
+
"custom_nodes": os.path.join(WORKSPACE, "custom_nodes")
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
def get_filename(url, response):
|
|
@@ -107,13 +112,15 @@ def process_downloads(urls_str, target_dir, is_node=False):
|
|
|
107
112
|
if __name__ == "__main__":
|
|
108
113
|
# --- Execution ---
|
|
109
114
|
process_downloads(CHECKPOINT_URLS, DIRS["checkpoints"])
|
|
110
|
-
process_downloads(UNET_DIFFUSION_URLS, DIRS["
|
|
115
|
+
process_downloads(UNET_DIFFUSION_URLS, DIRS["diffusion_models"])
|
|
111
116
|
process_downloads(TEXT_ENCODER_URLS, DIRS["clip"])
|
|
117
|
+
process_downloads(TEXT_ENCODERS_URLS, DIRS["text_encoders"])
|
|
112
118
|
process_downloads(CLIP_VISION_URLS, DIRS["clip_vision"])
|
|
113
119
|
process_downloads(VAE_URLS, DIRS["vae"])
|
|
114
120
|
process_downloads(LORA_URLS, DIRS["loras"])
|
|
115
121
|
process_downloads(CONTROLNET_URLS, DIRS["controlnet"])
|
|
116
122
|
process_downloads(UPSCALE_MODELS_URLS, DIRS["upscale_models"])
|
|
123
|
+
process_downloads(LATENT_UPSCALE_URLS, DIRS["latent_upscale"])
|
|
117
124
|
process_downloads(EMBEDDING_URLS, DIRS["embeddings"])
|
|
118
125
|
process_downloads(CUSTOM_NODE_URLS, DIRS["custom_nodes"], is_node=True)
|
|
119
126
|
|
|
@@ -3545,6 +3545,7 @@ def run_comfyui_mode():
|
|
|
3545
3545
|
print(f"\n{Fore.CYAN}--- ComfyUI Launcher ---{Style.RESET_ALL}")
|
|
3546
3546
|
print(f" {Fore.CYAN}[1]{Style.RESET_ALL} Launch Standard ComfyUI")
|
|
3547
3547
|
print(f" {Fore.CYAN}[2]{Style.RESET_ALL} Launch Anime ComfyUI (Anima Model)")
|
|
3548
|
+
print(f" {Fore.CYAN}[3]{Style.RESET_ALL} Launch Text-to-Video (LTX-2.3)")
|
|
3548
3549
|
print(f" {Fore.RED}[b]{Style.RESET_ALL} Back to main menu")
|
|
3549
3550
|
|
|
3550
3551
|
cui_choice = input(f"\n{Fore.LIGHTGREEN_EX}> {Style.RESET_ALL}").strip().lower()
|
|
@@ -3552,7 +3553,7 @@ def run_comfyui_mode():
|
|
|
3552
3553
|
if cui_choice == 'b':
|
|
3553
3554
|
return
|
|
3554
3555
|
|
|
3555
|
-
if cui_choice not in ['1', '2']:
|
|
3556
|
+
if cui_choice not in ['1', '2', '3']:
|
|
3556
3557
|
continue
|
|
3557
3558
|
|
|
3558
3559
|
if on_colab:
|
|
@@ -3578,45 +3579,116 @@ def run_comfyui_mode():
|
|
|
3578
3579
|
time.sleep(1.5)
|
|
3579
3580
|
break
|
|
3580
3581
|
|
|
3581
|
-
print(f"\n{Fore.GREEN}🚀 Starting ComfyUI Setup & Session...{Style.RESET_ALL}")
|
|
3582
|
-
|
|
3583
3582
|
# 0. Run System Initialization (comfyUI.py)
|
|
3584
3583
|
init_script = os.path.join(script_dir, "comfyUI.py")
|
|
3585
3584
|
if os.path.exists(init_script):
|
|
3586
|
-
print(f"\n{Fore.CYAN}--- Running System Initialization ---{Style.RESET_ALL}")
|
|
3587
3585
|
init_env = os.environ.copy()
|
|
3588
3586
|
init_env["COMFYUI_WORKSPACE"] = workspace
|
|
3589
|
-
|
|
3590
|
-
|
|
3591
|
-
|
|
3587
|
+
init_env["UPDATE_COMFY_UI"] = "false"
|
|
3588
|
+
with MoonSpinner("🚀 Setting up ComfyUI"):
|
|
3589
|
+
subprocess.run([sys.executable, init_script], env=init_env,
|
|
3590
|
+
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
3592
3591
|
|
|
3593
|
-
# 1. Handle Model Downloads if Anime chosen
|
|
3592
|
+
# 1. Handle Model Downloads if Anime or T2V chosen
|
|
3594
3593
|
if cui_choice == '2':
|
|
3595
|
-
print(f"\n{Fore.MAGENTA}✨ Configuring Anime Model (Anima)...{Style.RESET_ALL}")
|
|
3596
3594
|
download_env = os.environ.copy()
|
|
3597
3595
|
download_env["UNET_DIFFUSION_URLS"] = "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/diffusion_models/anima-preview3-base.safetensors"
|
|
3598
3596
|
download_env["TEXT_ENCODER_URLS"] = "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/text_encoders/qwen_3_06b_base.safetensors"
|
|
3599
3597
|
download_env["VAE_URLS"] = "https://huggingface.co/circlestone-labs/Anima/resolve/main/split_files/vae/qwen_image_vae.safetensors"
|
|
3600
3598
|
download_env["COMFYUI_WORKSPACE"] = workspace
|
|
3601
|
-
|
|
3602
3599
|
downloader_script = os.path.join(script_dir, "comfyu.py")
|
|
3603
3600
|
if os.path.exists(downloader_script):
|
|
3604
|
-
|
|
3601
|
+
with MoonSpinner("✨ Downloading Anima models"):
|
|
3602
|
+
subprocess.run([sys.executable, downloader_script], env=download_env,
|
|
3603
|
+
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
3605
3604
|
|
|
3606
|
-
|
|
3605
|
+
elif cui_choice == '3':
|
|
3606
|
+
download_env = os.environ.copy()
|
|
3607
|
+
download_env["UNET_DIFFUSION_URLS"] = "https://huggingface.co/unsloth/LTX-2.3-GGUF/resolve/main/ltx-2.3-22b-dev-Q4_0.gguf"
|
|
3608
|
+
download_env["VAE_URLS"] = "\n".join([
|
|
3609
|
+
"https://huggingface.co/unsloth/LTX-2.3-GGUF/resolve/main/vae/ltx-2.3-22b-dev_audio_vae.safetensors",
|
|
3610
|
+
"https://huggingface.co/unsloth/LTX-2.3-GGUF/resolve/main/vae/ltx-2.3-22b-dev_video_vae.safetensors",
|
|
3611
|
+
])
|
|
3612
|
+
download_env["TEXT_ENCODERS_URLS"] = "https://huggingface.co/unsloth/gemma-3-12b-it-qat-GGUF/resolve/main/gemma-3-12b-it-qat-UD-Q4_K_XL.gguf"
|
|
3613
|
+
download_env["LORA_URLS"] = "https://huggingface.co/Lightricks/LTX-2.3/resolve/main/ltx-2.3-22b-distilled-lora-384.safetensors"
|
|
3614
|
+
download_env["LATENT_UPSCALE_URLS"] = "https://huggingface.co/Lightricks/LTX-2.3/resolve/main/ltx-2.3-spatial-upscaler-x2-1.0.safetensors"
|
|
3615
|
+
download_env["CUSTOM_NODE_URLS"] = "https://github.com/city96/ComfyUI-GGUF.git"
|
|
3616
|
+
download_env["COMFYUI_WORKSPACE"] = workspace
|
|
3617
|
+
downloader_script = os.path.join(script_dir, "comfyu.py")
|
|
3618
|
+
if os.path.exists(downloader_script):
|
|
3619
|
+
with MoonSpinner("🎬 Downloading LTX-2.3 models"):
|
|
3620
|
+
subprocess.run([sys.executable, downloader_script], env=download_env,
|
|
3621
|
+
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
3622
|
+
|
|
3623
|
+
# 2. Launch UI — show only tunnel URL, wait for /q
|
|
3607
3624
|
ui_script = os.path.join(script_dir, "ui.py")
|
|
3608
|
-
if os.path.exists(ui_script):
|
|
3609
|
-
print(f"\n{Fore.CYAN}--- Initializing ComfyUI Interface ---{Style.RESET_ALL}")
|
|
3610
|
-
try:
|
|
3611
|
-
ui_env = os.environ.copy()
|
|
3612
|
-
ui_env["COMFYUI_WORKSPACE"] = workspace
|
|
3613
|
-
subprocess.run([sys.executable, ui_script], env=ui_env)
|
|
3614
|
-
except Exception as e:
|
|
3615
|
-
print(f"{Fore.RED}Error running ComfyUI: {e}{Style.RESET_ALL}")
|
|
3616
|
-
else:
|
|
3625
|
+
if not os.path.exists(ui_script):
|
|
3617
3626
|
print(f"{Fore.RED}Error: {ui_script} not found.{Style.RESET_ALL}")
|
|
3618
|
-
|
|
3619
|
-
|
|
3627
|
+
input("\nPress Enter to return to ComfyUI menu...")
|
|
3628
|
+
continue
|
|
3629
|
+
|
|
3630
|
+
# Write ComfyUI-Manager config to disable auto-update
|
|
3631
|
+
manager_config_dir = os.path.join(workspace, "user", "__manager")
|
|
3632
|
+
os.makedirs(manager_config_dir, exist_ok=True)
|
|
3633
|
+
manager_config_path = os.path.join(manager_config_dir, "config.ini")
|
|
3634
|
+
if not os.path.exists(manager_config_path):
|
|
3635
|
+
with open(manager_config_path, "w") as f:
|
|
3636
|
+
f.write("[default]\nskip_update_check = true\n")
|
|
3637
|
+
|
|
3638
|
+
ui_env = os.environ.copy()
|
|
3639
|
+
ui_env["COMFYUI_WORKSPACE"] = workspace
|
|
3640
|
+
|
|
3641
|
+
comfy_proc = None
|
|
3642
|
+
try:
|
|
3643
|
+
with MoonSpinner("⚙️ Starting ComfyUI"):
|
|
3644
|
+
comfy_proc = subprocess.Popen(
|
|
3645
|
+
[sys.executable, ui_script],
|
|
3646
|
+
env=ui_env,
|
|
3647
|
+
stdout=subprocess.PIPE,
|
|
3648
|
+
stderr=subprocess.STDOUT,
|
|
3649
|
+
text=True, bufsize=1
|
|
3650
|
+
)
|
|
3651
|
+
# Wait until tunnel URL appears
|
|
3652
|
+
tunnel_url = None
|
|
3653
|
+
for line in comfy_proc.stdout:
|
|
3654
|
+
if "trycloudflare.com" in line:
|
|
3655
|
+
for part in line.split():
|
|
3656
|
+
if "trycloudflare.com" in part and part.startswith("http"):
|
|
3657
|
+
tunnel_url = part.strip()
|
|
3658
|
+
break
|
|
3659
|
+
if tunnel_url:
|
|
3660
|
+
break
|
|
3661
|
+
|
|
3662
|
+
os.system('cls' if os.name == 'nt' else 'clear')
|
|
3663
|
+
if tunnel_url:
|
|
3664
|
+
print(f"\n{Fore.GREEN}{'='*60}{Style.RESET_ALL}")
|
|
3665
|
+
print(f"{Fore.GREEN}🚀 ComfyUI is LIVE:{Style.RESET_ALL} {Fore.CYAN}{tunnel_url}{Style.RESET_ALL}")
|
|
3666
|
+
print(f"{Fore.GREEN}{'='*60}{Style.RESET_ALL}")
|
|
3667
|
+
else:
|
|
3668
|
+
print(f"\n{Fore.YELLOW}⚠️ ComfyUI started but tunnel URL not found.{Style.RESET_ALL}")
|
|
3669
|
+
print(f"\nType {Fore.RED}/q{Style.RESET_ALL} to stop ComfyUI and return to menu.")
|
|
3670
|
+
|
|
3671
|
+
# Drain stdout in background so process doesn't block
|
|
3672
|
+
def _drain(proc):
|
|
3673
|
+
try:
|
|
3674
|
+
for _ in proc.stdout: pass
|
|
3675
|
+
except: pass
|
|
3676
|
+
threading.Thread(target=_drain, args=(comfy_proc,), daemon=True).start()
|
|
3677
|
+
|
|
3678
|
+
while True:
|
|
3679
|
+
try:
|
|
3680
|
+
user_input = input().strip().lower()
|
|
3681
|
+
if user_input in ['/q', '/quit']:
|
|
3682
|
+
break
|
|
3683
|
+
except EOFError:
|
|
3684
|
+
time.sleep(1)
|
|
3685
|
+
except KeyboardInterrupt:
|
|
3686
|
+
pass
|
|
3687
|
+
finally:
|
|
3688
|
+
if comfy_proc and comfy_proc.poll() is None:
|
|
3689
|
+
comfy_proc.terminate()
|
|
3690
|
+
try: comfy_proc.wait(timeout=5)
|
|
3691
|
+
except: comfy_proc.kill()
|
|
3620
3692
|
|
|
3621
3693
|
def main_launcher():
|
|
3622
3694
|
"""Mode selection menu on startup"""
|
|
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
|