From 1683c8a090c3efc51c43107d5ede0dcd5d506e3b Mon Sep 17 00:00:00 2001
From: Ferenc Szontágh <szf@fsociety.hu>
Date: Sun, 04 Feb 2024 20:45:08 +0000
Subject: [PATCH] added better queue manager, some clean-up and new feature: model management (wip), progressbar
---
ui/utils.hpp | 77 ++++++++++++++++++++++++++++++++++++++
1 files changed, 77 insertions(+), 0 deletions(-)
diff --git a/ui/utils.hpp b/ui/utils.hpp
index f0b351b..de02932 100644
--- a/ui/utils.hpp
+++ b/ui/utils.hpp
@@ -3,6 +3,8 @@
#include <string>
#include <filesystem>
#include <iostream>
+#include <random>
+
#include <opencv2/opencv.hpp>
#include <stable-diffusion.h>
@@ -10,6 +12,47 @@
namespace sd_gui_utils
{
+
+ typedef struct VoidHolder
+ {
+ void *p1;
+ void *p2;
+ } VoidHolder;
+
+ struct ModelFileInfo
+ {
+ std::string name;
+ std::string path;
+ std::string url;
+ std::string poster;
+ std::string sha256;
+ uintmax_t size;
+ std::string size_f;
+ };
+
+ inline void to_json(nlohmann::json &j, const ModelFileInfo &p)
+ {
+ j = nlohmann::json{
+ {"name", p.name},
+ {"path", p.path},
+ {"url", p.url},
+ {"poster", p.poster},
+ {"sha256", p.sha256},
+ {"size", p.size},
+ {"size_f", p.size_f}
+ };
+ }
+
+ inline void from_json(const nlohmann::json &j, ModelFileInfo &p)
+ {
+ j.at("name").get_to(p.name);
+ j.at("path").get_to(p.path);
+ j.at("url").get_to(p.url);
+ j.at("poster").get_to(p.poster);
+ j.at("sha256").get_to(p.sha256);
+ j.at("size").get_to(p.size);
+ j.at("size_f").get_to(p.size_f);
+ }
enum THREAD_STATUS_MESSAGES
{
@@ -49,7 +92,17 @@
bool keep_model_in_memory = true;
bool save_all_image = true;
};
+ inline std::string formatUnixTimestampToDate(long timestamp)
+ {
+ std::time_t time = static_cast<std::time_t>(timestamp);
+ std::tm *timeinfo = std::localtime(&time);
+ std::ostringstream oss;
+ oss << (timeinfo->tm_year + 1900) << "-" << std::setw(2) << std::setfill('0') << (timeinfo->tm_mon + 1) << "-" << std::setw(2) << std::setfill('0') << timeinfo->tm_mday
+ << " " << std::setw(2) << std::setfill('0') << timeinfo->tm_hour << ":" << std::setw(2) << std::setfill('0') << timeinfo->tm_min;
+
+ return oss.str();
+ }
enum DirTypes
{
LORA,
@@ -277,6 +330,7 @@
{"clip_skip", p.clip_skip},
{"width", p.width},
{"height", p.height},
+ {"batch_count", p.batch_count},
{"sample_method", (int)p.sample_method},
{"schedule", (int)p.schedule},
{"sample_steps", p.sample_steps},
@@ -377,6 +431,29 @@
cv::resize(img, square(roi), roi.size());
return square;
+ };
+ inline const unsigned int generateRandomInt(unsigned int min, unsigned int max)
+ {
+ std::random_device rd;
+ std::mt19937 gen(rd());
+
+ std::uniform_int_distribution<unsigned int> dis(min, max);
+ return dis(gen);
+ };
+
+ inline std::pair<double, std::string> humanReadableFileSize(double bytes)
+ {
+ static const char *sizes[] = {"B", "KB", "MB", "GB", "TB"};
+ int div = 0;
+ double size = bytes;
+
+ while (size >= 1024 && div < (sizeof(sizes) / sizeof(*sizes)))
+ {
+ size /= 1024;
+ div++;
+ }
+
+ return std::make_pair(size, sizes[div]);
}
};
--
Gitblit v1.9.3