| |
|
|
| from directory_setup import models_dir, vaes_dir, control_dir, loras_dir, output_dir |
|
|
| import os |
| import time |
| from ipywidgets import widgets |
| from IPython.display import display, HTML |
|
|
|
|
| |
| env = os.getenv('ENV_NAME') |
| root_path = os.getenv('ROOT_PATH') |
| webui_path = os.getenv('WEBUI_PATH') |
| free_plan = os.getenv('FREE_PLAN') |
|
|
|
|
| |
| |
| css_file_path = f"{root_path}/CSS/auto_cleaner.css" |
| with open(css_file_path , "r") as f: |
| CSS_AC = f.read() |
| display(HTML(f"<style>{CSS_AC}</style>")) |
|
|
|
|
| |
| directories = { |
| "Изображения": output_dir, |
| "Модели": models_dir, |
| "Vae": vaes_dir, |
| "LoRa": loras_dir, |
| "ControlNet Модели": control_dir |
| } |
|
|
| """ functions """ |
| def clean_directory(directory, directory_type): |
| deleted_files = 0 |
|
|
| for root, dirs, files in os.walk(directory): |
| for file in files: |
| file_path = os.path.join(root, file) |
|
|
| if file.endswith(".txt"): |
| continue |
| if file.endswith((".safetensors", ".pt")) or directory_type == "Images": |
| deleted_files += 1 |
|
|
| os.remove(file_path) |
| return deleted_files |
|
|
| def update_memory_info(): |
| disk_space = psutil.disk_usage(os.getcwd()) |
| total = disk_space.total / (1024 ** 3) |
| used = disk_space.used / (1024 ** 3) |
| free = disk_space.free / (1024 ** 3) |
|
|
| storage_info.value = f''' |
| <div class="storage_info_AC">Всего: {total:.2f} GB <span style="color: #555">|</span> Используется: {used:.2f} GB <span style="color: #555">|</span> Свободно: {free:.2f} GB</div> |
| ''' |
|
|
| def on_execute_button_press(button): |
| selected_cleaners = auto_cleaner_widget.value |
| deleted_files_dict = {} |
|
|
| for option in selected_cleaners: |
| if option in directories: |
| deleted_files_dict[option] = clean_directory(directories[option], option) |
|
|
| output.clear_output() |
|
|
| with output: |
| for message in generate_messages(deleted_files_dict): |
| message_widget = HTML(f'<p class="output_message_AC">{message}</p>') |
| display(message_widget) |
|
|
| update_memory_info() |
|
|
| def on_clear_button_press(button): |
| container.add_class("hide") |
| time.sleep(0.5) |
| widgets.Widget.close_all() |
|
|
| def generate_messages(deleted_files_dict): |
| messages = [] |
| word_variants = { |
| "Изображения": "Изображений", |
| "Модели": "Моделей", |
| "Vae": "Vae", |
| "LoRa": "LoRa", |
| "ControlNet Модели": "ControlNet Моделей" |
| } |
| for key, value in deleted_files_dict.items(): |
| object_word = word_variants.get(key) |
| messages.append(f"Удалено {value} {object_word}") |
| return messages |
|
|
|
|
| |
| import psutil |
| disk_space = psutil.disk_usage(os.getcwd()) |
| total = disk_space.total / (1024 ** 3) |
| used = disk_space.used / (1024 ** 3) |
| free = disk_space.free / (1024 ** 3) |
|
|
|
|
| |
| |
| AutoCleaner_options = AutoCleaner_options = list(directories.keys()) |
| instruction_label = widgets.HTML(''' |
| <span class="instruction_AC">Используйте <span style="color: #B2B2B2;">ctrl</span> или <span style="color: #B2B2B2;">shift</span> для множественного выбора.</span> |
| ''') |
| auto_cleaner_widget = widgets.SelectMultiple(options=AutoCleaner_options, layout=widgets.Layout(width="auto")).add_class("custom-select-multiple_AC") |
| output = widgets.Output().add_class("output_AC") |
|
|
| execute_button = widgets.Button(description='Выполнить Очистку').add_class("button_execute_AC").add_class("button_AC") |
| execute_button.on_click(on_execute_button_press) |
| clear_button = widgets.Button(description='Скрыть Виджет').add_class("button_clear_AC").add_class("button_AC") |
| clear_button.on_click(on_clear_button_press) |
|
|
| storage_info = widgets.HTML(f''' |
| <div class="storage_info_AC">Всего: {total:.2f} GB <span style="color: #555">|</span> Используется: {used:.2f} GB <span style="color: #555">|</span> Свободно: {free:.2f} GB</div> |
| ''') |
|
|
| buttons = widgets.HBox([execute_button, clear_button]) |
| lower_information_panel = widgets.HBox([buttons, storage_info]).add_class("lower_information_panel_AC") |
|
|
| container = widgets.VBox([instruction_label, widgets.HTML('<hr>'), auto_cleaner_widget, output, widgets.HTML('<hr>'), lower_information_panel]).add_class("container_AC") |
|
|
| display(container) |
|
|
|
|