##~ Display Download Results Widgets | by: ANXETY ~## import re import os import json import time import ipywidgets as widgets from ipywidgets import widgets, Layout, Label, Button, VBox, HBox from IPython.display import display, HTML, Javascript, clear_output # ================= DETECT ENV ================= def detect_environment(): free_plan = (os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES') / (1024. ** 3) <= 20) environments = { 'COLAB_GPU': ('Google Colab', "/root" if free_plan else "/content"), 'KAGGLE_URL_BASE': ('Kaggle', "/kaggle/working/content") } for env_var, (environment, path) in environments.items(): if env_var in os.environ: return environment, path, free_plan env, root_path, free_plan = detect_environment() webui_path = f"{root_path}/sdw" # ---------------------------------------------- # CONFIG DIR models_dir = f"{webui_path}/models/Stable-diffusion" vaes_dir = f"{webui_path}/models/VAE" embeddings_dir = f"{webui_path}/embeddings" loras_dir = f"{webui_path}/models/Lora" extensions_dir = f"{webui_path}/extensions" control_dir = f"{webui_path}/models/ControlNet" # ==================== CSS ==================== CSS = """ """ display(HTML(CSS)) # ==================== CSS ==================== # ==================== WIDGETS ==================== # Constants HR = widgets.HTML('
') HEADER_DL = 'DOWNLOAD RESULTS' VERSION = 'v0.31' ## Functions def output_container_generator(header, items): header_widget = widgets.HTML(value=f'
{header} ➤
') content_widgets = [widgets.HTML(value=f'
{item}
') for item in items] container_widget = widgets.VBox([header_widget, *content_widgets]).add_class("outputs_dl") return container_widget def get_files_list(directory, extensions): return [file for file in os.listdir(directory) if file.endswith(extensions)] def get_folders_list(directory): return [folder for folder in os.listdir(extensions_dir) if os.path.isdir(os.path.join(extensions_dir, folder))] def get_controlnets_list(directory, filter_pattern): filter_name = re.compile(filter_pattern) return [ filter_name.match(file).group(1) if filter_name.match(file) else file for file in os.listdir(directory) if not file.endswith(('.txt', '.yaml')) ] ## Widgets header_widget = widgets.HTML(value=f'''
{HEADER_DL} | {VERSION}
''') # Models models_list = get_files_list(models_dir, '.safetensors') models_widget = output_container_generator('Models', models_list) # Vaes vaes_list = get_files_list(vaes_dir, '.safetensors') vaes_widget = output_container_generator('VAEs', vaes_list) # Embeddings embeddings_list = get_files_list(embeddings_dir, ('.safetensors', '.pt')) embeddings_widget = output_container_generator('Embeddings', embeddings_list) # LoRAs loras_list = get_files_list(loras_dir, '.safetensors') loras_widget = output_container_generator('LoRAs', loras_list) # Extensions extensions_list = get_folders_list(extensions_dir) extensions_widget = output_container_generator('Extensions', extensions_list).add_class("extension") # for fix height # ControlNet controlnets_list = get_controlnets_list(control_dir, r'^[^_]*_[^_]*_[^_]*_(.*)_fp16\.safetensors') controlnets_widget = output_container_generator('ControlNets', controlnets_list) ## Sorting and Output widgets_dict = { models_widget: models_list, vaes_widget: vaes_list, embeddings_widget: embeddings_list, loras_widget: loras_list, extensions_widget: extensions_list, controlnets_widget: controlnets_list } outputs_widgets_list = [widget for widget, widget_list in widgets_dict.items() if widget_list] result_output_widget = widgets.HBox(outputs_widgets_list).add_class("result_output_dl") container_widget = widgets.VBox([header_widget, HR, result_output_widget, HR]).add_class("container_dl") display(container_widget)