aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAUTOMATIC1111 <16777216c@gmail.com>2023-07-08 13:45:59 +0000
committerAUTOMATIC1111 <16777216c@gmail.com>2023-07-08 13:45:59 +0000
commitd7d6e8cfc8b85a99a48f82975ee213d487783c28 (patch)
treedce93111020e5ce887be82e3cd904157154186a1
parent7a6abc59ea1ecd8bb311de1719b018fb5960cd80 (diff)
downloadstable-diffusion-webui-gfx803-d7d6e8cfc8b85a99a48f82975ee213d487783c28.tar.gz
stable-diffusion-webui-gfx803-d7d6e8cfc8b85a99a48f82975ee213d487783c28.tar.bz2
stable-diffusion-webui-gfx803-d7d6e8cfc8b85a99a48f82975ee213d487783c28.zip
use natural sort for shared.walk_files and shared.listfiles, as well as for dirs in extra networks
-rw-r--r--extensions-builtin/Lora/lora.py2
-rw-r--r--modules/shared.py14
-rw-r--r--modules/ui_extra_networks.py4
3 files changed, 14 insertions, 6 deletions
diff --git a/extensions-builtin/Lora/lora.py b/extensions-builtin/Lora/lora.py
index 34ff57dd..cd46e6c7 100644
--- a/extensions-builtin/Lora/lora.py
+++ b/extensions-builtin/Lora/lora.py
@@ -443,7 +443,7 @@ def list_available_loras():
os.makedirs(shared.cmd_opts.lora_dir, exist_ok=True)
candidates = list(shared.walk_files(shared.cmd_opts.lora_dir, allowed_extensions=[".pt", ".ckpt", ".safetensors"]))
- for filename in sorted(candidates, key=str.lower):
+ for filename in candidates:
if os.path.isdir(filename):
continue
diff --git a/modules/shared.py b/modules/shared.py
index b29c3307..48478a68 100644
--- a/modules/shared.py
+++ b/modules/shared.py
@@ -1,6 +1,7 @@
import datetime
import json
import os
+import re
import sys
import threading
import time
@@ -832,8 +833,12 @@ mem_mon = modules.memmon.MemUsageMonitor("MemMon", device, opts)
mem_mon.start()
+def natural_sort_key(s, regex=re.compile('([0-9]+)')):
+ return [int(text) if text.isdigit() else text.lower() for text in regex.split(s)]
+
+
def listfiles(dirname):
- filenames = [os.path.join(dirname, x) for x in sorted(os.listdir(dirname), key=str.lower) if not x.startswith(".")]
+ filenames = [os.path.join(dirname, x) for x in sorted(os.listdir(dirname), key=natural_sort_key) if not x.startswith(".")]
return [file for file in filenames if os.path.isfile(file)]
@@ -858,8 +863,11 @@ def walk_files(path, allowed_extensions=None):
if allowed_extensions is not None:
allowed_extensions = set(allowed_extensions)
- for root, _, files in os.walk(path, followlinks=True):
- for filename in files:
+ items = list(os.walk(path, followlinks=True))
+ items = sorted(items, key=lambda x: natural_sort_key(x[0]))
+
+ for root, _, files in items:
+ for filename in sorted(files, key=natural_sort_key):
if allowed_extensions is not None:
_, ext = os.path.splitext(filename)
if ext not in allowed_extensions:
diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py
index 1efd00b0..693cafb6 100644
--- a/modules/ui_extra_networks.py
+++ b/modules/ui_extra_networks.py
@@ -90,8 +90,8 @@ class ExtraNetworksPage:
subdirs = {}
for parentdir in [os.path.abspath(x) for x in self.allowed_directories_for_previews()]:
- for root, dirs, _ in os.walk(parentdir, followlinks=True):
- for dirname in dirs:
+ for root, dirs, _ in sorted(os.walk(parentdir, followlinks=True), key=lambda x: shared.natural_sort_key(x[0])):
+ for dirname in sorted(dirs, key=shared.natural_sort_key):
x = os.path.join(root, dirname)
if not os.path.isdir(x):