| import os |
| import subprocess |
|
|
| def colored(text, color): |
| """ |
| Функция для вывода цветного текста в консоль. |
| """ |
| colors = { |
| 'red': '\033[91m', |
| 'green': '\033[92m', |
| 'yellow': '\033[93m', |
| 'blue': '\033[94m', |
| 'magenta': '\033[95m', |
| 'cyan': '\033[96m', |
| 'white': '\033[97m', |
| } |
| return colors.get(color, '') + text + '\033[0m' |
|
|
| |
| comfyui_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "ComfyUI")) |
|
|
| |
| python_embeded_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "python_embeded")) |
|
|
| |
| python_scripts_path = os.path.join(python_embeded_path, "Scripts") |
|
|
| |
| git_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "git")) |
| git_bin_path = os.path.join(git_path, "bin") |
| git_libexec_path = os.path.join(git_path, "libexec") |
|
|
| |
| os.environ['PATH'] = f"{git_path};{git_bin_path};{git_libexec_path};{python_embeded_path};{python_scripts_path}" |
| |
|
|
| |
| install_options = { |
| "Базовые узлы": [ |
| "https://github.com/ltdrdata/ComfyUI-Manager.git", |
| "https://github.com/crystian/ComfyUI-Crystools.git", |
| "https://github.com/hayden-fr/ComfyUI-Model-Manager.git", |
| |
| ], |
| "Расширенные узлы": [ |
| "https://github.com/WASasquatch/was-node-suite-comfyui.git", |
| "https://github.com/11cafe/comfyui-workspace-manager.git", |
| "https://github.com/talesofai/comfyui-browser.git", |
| "https://github.com/jags111/efficiency-nodes-comfyui.git", |
| "https://github.com/rgthree/rgthree-comfy.git", |
| "https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet.git", |
| "https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git", |
| "https://github.com/Fannovel16/comfyui_controlnet_aux.git", |
| "https://github.com/Extraltodeus/ComfyUI-AutomaticCFG.git", |
| "https://github.com/yolain/ComfyUI-Easy-Use.git", |
| "https://github.com/ltdrdata/ComfyUI-Impact-Pack.git", |
| "https://github.com/ltdrdata/ComfyUI-Inspire-Pack.git", |
| "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID.git", |
| "https://github.com/MinusZoneAI/ComfyUI-Kolors-MZ.git", |
| "https://github.com/kijai/ComfyUI-KwaiKolorsWrapper.git", |
| "https://github.com/kijai/ComfyUI-SUPIR.git", |
| "https://github.com/kijai/ComfyUI-LivePortraitKJ.git", |
| "https://github.com/kijai/ComfyUI-KJNodes.git", |
| "https://github.com/ssitu/ComfyUI_UltimateSDUpscale.git", |
| "https://github.com/pythongosssss/ComfyUI-WD14-Tagger.git", |
| "https://github.com/GavChap/ComfyUI-SD3LatentSelectRes.git", |
| "https://github.com/kadirnar/ComfyUI-YOLO.git", |
| "https://github.com/AlekPet/ComfyUI_Custom_Nodes_AlekPet.git", |
| "https://github.com/cubiq/ComfyUI_InstantID.git", |
| "https://github.com/cubiq/ComfyUI_IPAdapter_plus.git", |
| "https://github.com/cubiq/ComfyUI_essentials.git", |
| "https://github.com/city96/ComfyUI_ExtraModels.git", |
| "https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes.git", |
| "https://github.com/pythongosssss/ComfyUI-Custom-Scripts.git", |
| "https://github.com/shiimizu/ComfyUI-TiledDiffusion.git", |
| "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus.git", |
| "https://github.com/Gourieff/comfyui-reactor-node.git", |
| "https://github.com/giriss/comfy-image-saver.git", |
| "https://github.com/chrisgoringe/cg-use-everywhere.git", |
| "https://github.com/liusida/ComfyUI-AutoCropFaces.git", |
| "https://github.com/lquesada/ComfyUI-Inpaint-CropAndStitch.git", |
| "https://github.com/nullquant/ComfyUI-BrushNet.git", |
| "https://github.com/sipherxyz/comfyui-art-venture.git", |
| "https://github.com/EllangoK/ComfyUI-post-processing-nodes.git", |
| "https://github.com/MaraScott/ComfyUI_MaraScott_Nodes.git", |
| "https://github.com/mav-rik/facerestore_cf.git", |
| |
| ], |
| "Все узлы": [ |
| "https://github.com/nosiu/comfyui-instantId-faceswap.git", |
| "https://github.com/shadowcz007/comfyui-mixlab-nodes.git", |
| "https://github.com/SeargeDP/SeargeSDXL.git", |
| "https://github.com/Acly/comfyui-inpaint-nodes.git", |
| "https://github.com/chflame163/ComfyUI_LayerStyle.git", |
| "https://github.com/cdb-boop/ComfyUI-Bringing-Old-Photos-Back-to-Life.git", |
| "https://github.com/coolzilj/ComfyUI-Photopea.git", |
| "https://github.com/twri/sdxl_prompt_styler.git", |
| "https://github.com/ArtVentureX/comfyui-animatediff.git", |
| "https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved.git", |
| "https://github.com/kijai/ComfyUI-Marigold.git", |
| "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO.git", |
| "https://github.com/ZHO-ZHO-ZHO/comfyui-portrait-master-zh-cn.git", |
| "https://github.com/florestefano1975/comfyui-portrait-master.git", |
| "https://github.com/AIrjen/OneButtonPrompt.git", |
| "https://github.com/banodoco/steerable-motion.git", |
| "https://github.com/huchenlei/ComfyUI-layerdiffuse.git", |
| "https://github.com/AIGODLIKE/AIGODLIKE-COMFYUI-TRANSLATION.git", |
| "https://github.com/mcmonkeyprojects/sd-dynamic-thresholding.git", |
| "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PixArt-alpha-Diffusers.git", |
| "https://github.com/cdb-boop/comfyui-image-round.git", |
| |
| ], |
| } |
|
|
| |
| custom_nodes_path = os.path.join(comfyui_path, "custom_nodes") |
| if not os.path.exists(custom_nodes_path): |
| os.makedirs(custom_nodes_path) |
|
|
| |
| while True: |
| print("Выберите вариант установки:") |
| for i, option in enumerate(install_options.keys()): |
| print(f"{i+1}. {option}") |
| choice = input("Введите номер варианта: ") |
|
|
| |
| try: |
| choice = int(choice) |
| if 1 <= choice <= len(install_options): |
| break |
| else: |
| print("Неверный номер варианта. Пожалуйста, введите число от 1 до", len(install_options)) |
| except ValueError: |
| print("Неверный ввод. Пожалуйста, введите число.") |
|
|
| |
| selected_repos = [] |
| if choice == 2: |
| selected_repos.extend(install_options["Базовые узлы"]) |
| selected_repos.extend(install_options["Расширенные узлы"]) |
| elif choice == 3: |
| selected_repos.extend(install_options["Базовые узлы"]) |
| selected_repos.extend(install_options["Расширенные узлы"]) |
| selected_repos.extend(install_options["Все узлы"]) |
| else: |
| selected_repos.extend(install_options[list(install_options.keys())[choice - 1]]) |
|
|
| |
| for repo_url in selected_repos: |
| repo_name = repo_url.split("/")[-1].split(".")[0] |
| repo_path = os.path.join(custom_nodes_path, repo_name) |
|
|
| |
| if os.path.exists(repo_path): |
| print(f"Репозитория {repo_name} уже скачана.") |
| continue |
|
|
| |
| print(colored(f"Скачивание {repo_name}...", 'cyan')) |
| |
| try: |
| subprocess.run([os.path.join(git_bin_path, "git"), "clone", repo_url, repo_path], check=True) |
| except subprocess.CalledProcessError as e: |
| print(f"Ошибка при скачивании {repo_name}: {e}") |
| continue |
|
|
| |
| requirements_path = os.path.join(repo_path, "requirements.txt") |
| if os.path.exists(requirements_path): |
| print(colored(f"Установка зависимостей для {repo_name}...", 'blue')) |
| |
| try: |
| subprocess.run([os.path.join(python_embeded_path, "python"), "-m", "pip", "install", "-r", requirements_path], check=True) |
| except subprocess.CalledProcessError as e: |
| print(f"Ошибка при установке зависимостей: {e}") |
|
|
| print(colored("Скачивание custom_nodes завершено...", 'green')) |
|
|