Files
Nuked88-ComfyUI-N-Nodes/__init__.py
T
Nuked 7810ca29b4 Made installation llama-cpp-python automatic
with CPU, GPU and CUDA detection
Other fixes.
2023-11-11 07:50:20 +01:00

158 lines
5.4 KiB
Python

# code based on pysssss repo
import importlib.util
import glob
import os
import sys
from .nnodes import init, get_ext_dir
import folder_paths
import requests
import subprocess
import traceback
import platform
import torch
NODE_CLASS_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS = {}
def check_nvidia_gpu():
try:
# Utilizza torch per verificare la presenza di una GPU NVIDIA
return torch.cuda.is_available() and 'NVIDIA' in torch.cuda.get_device_name(0)
except Exception as e:
print(f"Error while checking for NVIDIA GPU: {e}")
return False
def get_cuda_version():
try:
if torch.cuda.is_available():
cuda_version = torch.version.cuda.replace(".","").strip()
return "cu"+cuda_version
else:
return "No NVIDIA GPU available"
except Exception as e:
print(f"Error while checking CUDA version: {e}")
return "Unable to determine CUDA version"
def check_avx2_support():
import cpuinfo
try:
info = cpuinfo.get_cpu_info()
return 'avx2' in info['flags']
except Exception as e:
print(f"Error while checking AVX2 support: {e}")
return False
def get_python_version():
return platform.python_version()
def check_and_install(package, import_name=""):
if import_name == "":
import_name = package
try:
importlib.import_module(import_name)
print(f"{import_name} is already installed.")
except ImportError:
print(f"{import_name} is not installed. Installing...")
if package == "llama_cpp":
install_llama()
else:
install_package(package)
def install_package(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", "--no-cache-dir", package])
def install_llama():
gpu = check_nvidia_gpu()
avx2 = check_avx2_support()
python_version = get_python_version()
#python -m pip install llama-cpp-python --force-reinstall --no-deps --index-url=https://jllllll.github.io/llama-cpp-python-cuBLAS-wheels/AVX2/cu117
if avx2:
avx="AVX2"
else:
avx="AVX"
if gpu:
cuda = get_cuda_version()
subprocess.check_call([sys.executable, "-m", "pip", "install", "llama-cpp-python", "--no-cache-dir", "--force-reinstall", "--no-deps" , f"--index-url=https://jllllll.github.io/llama-cpp-python-cuBLAS-wheels/{avx}/{cuda}"])
else:
subprocess.check_call([sys.executable, "-m", "pip", "install", "llama-cpp-python", "--no-cache-dir", "--force-reinstall"])
# llama wheels https://github.com/jllllll/llama-cpp-python-cuBLAS-wheels
def check_module(package):
import importlib
try:
print("Detected: ", package)
importlib.import_module(package)
return True
except ImportError:
return False
import zipfile
def downloader(link):
print("Downloading dependencies...")
response = requests.get(link, stream=True)
try:
os.makedirs(folder_paths.get_temp_directory())
except:
pass
temp_file = os.path.join(folder_paths.get_temp_directory(), "file.zip")
with open(temp_file, "wb") as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
zip_file = zipfile.ZipFile(temp_file)
target_dir = os.path.join(folder_paths.folder_names_and_paths["custom_nodes"][0][0],"ComfyUI-N-Nodes","libs","rifle") # Cartella dove estrarre lo zip
zip_file.extractall(target_dir)
if init():
py = get_ext_dir("py")
files = glob.glob("*.py", root_dir=py, recursive=False)
check_and_install('py-cpuinfo',"cpuinfo")
check_and_install('gitpython','git')
check_and_install('moviepy')
check_and_install("opencv-python","cv2")
check_and_install('zipfile')
check_and_install('scikit-build',"skbuild")
#LLAMA DEPENTENCIES
check_and_install('typing')
check_and_install('diskcache')
check_and_install('llama_cpp')
#git clone https://github.com/hzwer/Practical-RIFE.git
from git import Repo
if not os.path.exists(os.path.join(folder_paths.folder_names_and_paths["custom_nodes"][0][0],"ComfyUI-N-Nodes","libs","rifle")):
Repo.clone_from("https://github.com/hzwer/Practical-RIFE.git", os.path.join(folder_paths.folder_names_and_paths["custom_nodes"][0][0],"ComfyUI-N-Nodes","libs","rifle"))
#if train_log folder not exists
if not os.path.exists(os.path.join(folder_paths.folder_names_and_paths["custom_nodes"][0][0],"ComfyUI-N-Nodes","libs","rifle","train_log")):
downloader("https://github.com/Nuked88/DreamingAI/raw/main/RIFE_trained_model_v4.7.zip")
for file in files:
try:
name = os.path.splitext(file)[0]
spec = importlib.util.spec_from_file_location(name, os.path.join(py, file))
module = importlib.util.module_from_spec(spec)
sys.modules[name] = module
spec.loader.exec_module(module)
if hasattr(module, "NODE_CLASS_MAPPINGS") and getattr(module, "NODE_CLASS_MAPPINGS") is not None:
NODE_CLASS_MAPPINGS.update(module.NODE_CLASS_MAPPINGS)
if hasattr(module, "NODE_DISPLAY_NAME_MAPPINGS") and getattr(module, "NODE_DISPLAY_NAME_MAPPINGS") is not None:
NODE_DISPLAY_NAME_MAPPINGS.update(module.NODE_DISPLAY_NAME_MAPPINGS)
except Exception as e:
traceback.print_exc()
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"]