diff --git a/ui/easydiffusion/model_manager.py b/ui/easydiffusion/model_manager.py index 20fa100b..9a7664ec 100644 --- a/ui/easydiffusion/model_manager.py +++ b/ui/easydiffusion/model_manager.py @@ -179,10 +179,10 @@ def getModels(): "Raised when picklescan reports a problem with a model" pass - def scan_directory(directory, suffixes): + def scan_directory(directory, suffixes, directoriesFirst:bool=True): nonlocal models_scanned tree = [] - for entry in sorted(os.scandir(directory), key = lambda entry: (entry.is_file(), entry.name.lower())): + for entry in sorted(os.scandir(directory), key = lambda entry: (entry.is_file() == directoriesFirst, entry.name.lower())): if entry.is_file(): matching_suffix = list(filter(lambda s: entry.name.endswith(s), suffixes)) if len(matching_suffix) == 0: continue @@ -197,9 +197,10 @@ def getModels(): known_models[entry.path] = mtime tree.append(entry.name[:-len(matching_suffix)]) elif entry.is_dir(): - scan=scan_directory(entry.path, suffixes) + scan=scan_directory(entry.path, suffixes, directoriesFirst=False) + if len(scan) != 0: - tree.append( (entry.name, scan ) ) + tree.append( (entry.name, scan ) ) return tree def listModels(model_type): diff --git a/ui/media/js/main.js b/ui/media/js/main.js index b0842620..d57e4f08 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -1322,9 +1322,12 @@ async function getModels() { } modelField.appendChild(modelOption) } else { - const modelGroup = document.createElement('optgroup') - modelGroup.label = path + modelName[0] - modelField.appendChild(modelGroup) + // Since s can't be nested, don't show empty groups + if (modelName[1].some(child => typeof(child) == 'string')) { + const modelGroup = document.createElement('optgroup') + modelGroup.label = path + modelName[0] + modelField.appendChild(modelGroup) + } modelName[1].forEach( createModelOptions(modelField, selectedModel, path + modelName[0] + "/" ) ) } }