|
|
import os |
|
|
|
|
|
import folder_paths |
|
|
import numpy as np |
|
|
import torch |
|
|
from PIL import Image |
|
|
|
|
|
|
|
|
eas_cache_dir = '/stable-diffusion-cache/models' |
|
|
|
|
|
script_directory = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
|
|
|
|
|
def tensor2pil(image): |
|
|
return Image.fromarray(np.clip(255. * image.cpu().numpy(), 0, 255).astype(np.uint8)) |
|
|
|
|
|
def numpy2pil(image): |
|
|
return Image.fromarray(np.clip(255. * image, 0, 255).astype(np.uint8)) |
|
|
|
|
|
def to_pil(image): |
|
|
if isinstance(image, Image.Image): |
|
|
return image |
|
|
if isinstance(image, torch.Tensor): |
|
|
return tensor2pil(image) |
|
|
if isinstance(image, np.ndarray): |
|
|
return numpy2pil(image) |
|
|
raise ValueError(f"Cannot convert {type(image)} to PIL.Image") |
|
|
|
|
|
def search_model_in_possible_folders(possible_folders, model): |
|
|
model_name = None |
|
|
|
|
|
for folder in possible_folders: |
|
|
candidate_path = os.path.join(folder_paths.models_dir, folder, model) |
|
|
if os.path.exists(candidate_path): |
|
|
model_name = candidate_path |
|
|
break |
|
|
|
|
|
|
|
|
if model_name is None and os.path.exists(eas_cache_dir): |
|
|
for folder in possible_folders: |
|
|
candidate_path = os.path.join(eas_cache_dir, folder, model) |
|
|
if os.path.exists(candidate_path): |
|
|
model_name = candidate_path |
|
|
break |
|
|
|
|
|
|
|
|
if model_name is None: |
|
|
print(f"Please download cogvideoxfun model to one of the following directories:") |
|
|
for folder in possible_folders: |
|
|
print(f"- {os.path.join(folder_paths.models_dir, folder)}") |
|
|
if os.path.exists(eas_cache_dir): |
|
|
print(f"- {os.path.join(eas_cache_dir, folder)}") |
|
|
raise ValueError("Please download Fun model") |
|
|
|
|
|
return model_name |
|
|
|
|
|
def search_sub_dir_in_possible_folders(possible_folders, sub_dir_name="umt5-xxl"): |
|
|
new_possible_folders = [] |
|
|
|
|
|
for folder in possible_folders: |
|
|
candidate_path = os.path.join(folder_paths.models_dir, folder) |
|
|
if os.path.exists(candidate_path) and os.path.isdir(candidate_path): |
|
|
new_possible_folders.append(candidate_path) |
|
|
for sub_dir in os.listdir(candidate_path): |
|
|
new_possible_folders.append(os.path.join(candidate_path, sub_dir)) |
|
|
|
|
|
|
|
|
if os.path.exists(eas_cache_dir): |
|
|
for folder in possible_folders: |
|
|
candidate_path = os.path.join(eas_cache_dir, folder) |
|
|
if os.path.exists(candidate_path) and os.path.isdir(candidate_path): |
|
|
new_possible_folders.append(candidate_path) |
|
|
for sub_dir in os.listdir(candidate_path): |
|
|
new_possible_folders.append(os.path.join(candidate_path, sub_dir)) |
|
|
|
|
|
for folder in new_possible_folders + possible_folders: |
|
|
final_possible_folder = os.path.join(folder, sub_dir_name) |
|
|
final_possible_folder_basename = os.path.join(folder, os.path.basename(sub_dir_name)) |
|
|
if os.path.exists(final_possible_folder) and os.path.isdir(final_possible_folder): |
|
|
return final_possible_folder |
|
|
if os.path.exists(final_possible_folder_basename) and os.path.isdir(final_possible_folder_basename): |
|
|
return final_possible_folder_basename |
|
|
|
|
|
print(f"Please download {sub_dir_name} tokenizer model to one of the following directories:") |
|
|
for folder in possible_folders: |
|
|
print(f"- {os.path.join(folder_paths.models_dir, folder)}") |
|
|
if os.path.exists(eas_cache_dir): |
|
|
print(f"- {os.path.join(eas_cache_dir, folder)}") |
|
|
raise ValueError("Please download Fun model") |
|
|
|