diff --git a/__init__.py b/__init__.py index 171f710..fc4b28f 100644 --- a/__init__.py +++ b/__init__.py @@ -497,6 +497,7 @@ async def get_model_list(request): break abs_path = os.path.join(cwd, model) stats = pathlib.Path(abs_path).stat() + sizeBytes = stats.st_size model_modified = stats.st_mtime_ns model_created = stats.st_ctime_ns if use_safetensor_thumbnail and image is None and model_ext == ".safetensors": @@ -513,12 +514,21 @@ async def get_model_list(request): image = model + image_ext image_modified = model_modified rel_path = "" if cwd == model_base_path else os.path.relpath(cwd, model_base_path) - info = (model, image, base_path_index, rel_path, model_modified, model_created, image_modified) + info = ( + model, + image, + base_path_index, + rel_path, + model_modified, + model_created, + image_modified, + sizeBytes, + ) file_infos.append(info) - file_infos.sort(key=lambda tup: tup[4], reverse=True) # TODO: remove sort; sorted on client + #file_infos.sort(key=lambda tup: tup[4], reverse=True) # TODO: remove sort; sorted on client model_items = [] - for model, image, base_path_index, rel_path, model_modified, model_created, image_modified in file_infos: + for model, image, base_path_index, rel_path, model_modified, model_created, image_modified, sizeBytes in file_infos: item = { "name": model, "path": "/" + os.path.join(model_type, str(base_path_index), rel_path, model).replace(os.path.sep, "/"), # relative logical path @@ -527,6 +537,7 @@ async def get_model_list(request): "dateCreated": model_created, #"dateLastUsed": "", # TODO: track server-side, send increment client-side #"countUsed": 0, # TODO: track server-side, send increment client-side + "sizeBytes": sizeBytes, } if image is not None: raw_post = os.path.join(model_type, str(base_path_index), rel_path, image) diff --git a/web/model-manager.js b/web/model-manager.js index 0882abe..ed0df15 100644 --- a/web/model-manager.js +++ b/web/model-manager.js @@ -1273,6 +1273,7 @@ class DirectoryDropdown { const MODEL_SORT_DATE_CREATED = "dateCreated"; const MODEL_SORT_DATE_MODIFIED = "dateModified"; +const MODEL_SORT_SIZE_BYTES = "sizeBytes"; const MODEL_SORT_DATE_NAME = "name"; class ModelGrid { @@ -1354,6 +1355,9 @@ class ModelGrid { case MODEL_SORT_DATE_CREATED: compareFn = (a, b) => { return b[MODEL_SORT_DATE_CREATED] - a[MODEL_SORT_DATE_CREATED]; }; break; + case MODEL_SORT_SIZE_BYTES: + compareFn = (a, b) => { return b[MODEL_SORT_SIZE_BYTES] - a[MODEL_SORT_SIZE_BYTES]; }; + break; default: console.warn("Invalid filter sort value: '" + sortBy + "'"); return list; @@ -2977,12 +2981,14 @@ class ModelTab { onchange: () => updateModelGrid(), }, [ - $el("option", { value: MODEL_SORT_DATE_CREATED }, ["Created (newest to oldest)"]), - $el("option", { value: "-" + MODEL_SORT_DATE_CREATED }, ["Created (oldest to newest)"]), - $el("option", { value: MODEL_SORT_DATE_MODIFIED }, ["Modified (newest to oldest)"]), - $el("option", { value: "-" + MODEL_SORT_DATE_MODIFIED }, ["Modified (oldest to newest)"]), + $el("option", { value: MODEL_SORT_DATE_CREATED }, ["Created (newest first)"]), + $el("option", { value: "-" + MODEL_SORT_DATE_CREATED }, ["Created (oldest first)"]), + $el("option", { value: MODEL_SORT_DATE_MODIFIED }, ["Modified (newest first)"]), + $el("option", { value: "-" + MODEL_SORT_DATE_MODIFIED }, ["Modified (oldest first)"]), $el("option", { value: MODEL_SORT_DATE_NAME }, ["Name (A-Z)"]), $el("option", { value: "-" + MODEL_SORT_DATE_NAME }, ["Name (Z-A)"]), + $el("option", { value: MODEL_SORT_SIZE_BYTES }, ["Size (largest first)"]), + $el("option", { value: "-" + MODEL_SORT_SIZE_BYTES }, ["Size (smallest first)"]), ], ), ]),