StupidGame's picture
Upload 1941 files
baa8e90
from .libs.utils import any_typ
from server import PromptServer
cache = {}
class CacheBackendData:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"key": ("STRING", {"multiline": False, "placeholder": "Input data key (e.g. 'model a', 'chunli lora', 'girl latent 3', ...)"}),
"tag": ("STRING", {"multiline": False, "placeholder": "Tag: short description"}),
"data": (any_typ,),
}
}
RETURN_TYPES = (any_typ,)
RETURN_NAMES = ("data opt",)
FUNCTION = "doit"
CATEGORY = "InspirePack/Backend"
OUTPUT_NODE = True
def doit(self, key, tag, data):
global cache
if key == '*':
print(f"[Inspire Pack] CacheBackendData: '*' is reserved key. Cannot use that key")
cache[key] = (tag, (False, data))
return (data,)
class CacheBackendDataNumberKey:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"key": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
"tag": ("STRING", {"multiline": False, "placeholder": "Tag: short description"}),
"data": (any_typ,),
}
}
RETURN_TYPES = (any_typ,)
RETURN_NAMES = ("data opt",)
FUNCTION = "doit"
CATEGORY = "InspirePack/Backend"
OUTPUT_NODE = True
def doit(self, key, tag, data):
global cache
cache[key] = (tag, (False, data))
return (data,)
class CacheBackendDataList:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"key": ("STRING", {"multiline": False, "placeholder": "Input data key (e.g. 'model a', 'chunli lora', 'girl latent 3', ...)"}),
"tag": ("STRING", {"multiline": False, "placeholder": "Tag: short description"}),
"data": (any_typ,),
}
}
INPUT_IS_LIST = True
RETURN_TYPES = (any_typ,)
RETURN_NAMES = ("data opt",)
OUTPUT_IS_LIST = (True,)
FUNCTION = "doit"
CATEGORY = "InspirePack/Backend"
OUTPUT_NODE = True
def doit(self, key, tag, data):
global cache
if key == '*':
print(f"[Inspire Pack] CacheBackendDataList: '*' is reserved key. Cannot use that key")
cache[key[0]] = (tag[0], (True, data))
return (data,)
class CacheBackendDataNumberKeyList:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"key": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
"tag": ("STRING", {"multiline": False, "placeholder": "Tag: short description"}),
"data": (any_typ,),
}
}
INPUT_IS_LIST = True
RETURN_TYPES = (any_typ,)
RETURN_NAMES = ("data opt",)
OUTPUT_IS_LIST = (True,)
FUNCTION = "doit"
CATEGORY = "InspirePack/Backend"
OUTPUT_NODE = True
def doit(self, key, tag, data):
global cache
cache[key[0]] = (tag[0], (True, data))
return (data,)
class RetrieveBackendData:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"key": ("STRING", {"multiline": False, "placeholder": "Input data key (e.g. 'model a', 'chunli lora', 'girl latent 3', ...)"}),
}
}
RETURN_TYPES = (any_typ,)
RETURN_NAMES = ("data",)
OUTPUT_IS_LIST = (True,)
FUNCTION = "doit"
CATEGORY = "InspirePack/Backend"
def doit(self, key):
global cache
is_list, data = cache[key][1]
if is_list:
return (data,)
else:
return ([data],)
class RetrieveBackendDataNumberKey(RetrieveBackendData):
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"key": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
}
}
class RemoveBackendData:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"key": ("STRING", {"multiline": False, "placeholder": "Input data key ('*' = clear all)"}),
},
"optional": {
"signal_opt": (any_typ,),
}
}
RETURN_TYPES = (any_typ,)
RETURN_NAMES = ("signal",)
FUNCTION = "doit"
CATEGORY = "InspirePack/Backend"
OUTPUT_NODE = True
def doit(self, key, signal_opt=None):
global cache
if key == '*':
cache = {}
elif key in cache:
del cache[key]
else:
print(f"[Inspire Pack] RemoveBackendData: invalid data key {key}")
return (signal_opt,)
class RemoveBackendDataNumberKey(RemoveBackendData):
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"key": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
},
"optional": {
"signal_opt": (any_typ,),
}
}
def doit(self, key, signal_opt=None):
global cache
if key in cache:
del cache[key]
else:
print(f"[Inspire Pack] RemoveBackendDataNumberKey: invalid data key {key}")
return (signal_opt,)
class ShowCachedInfo:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"cache_info": ("STRING", {"multiline": True}),
},
"hidden": {"unique_id": "UNIQUE_ID"},
}
RETURN_TYPES = ()
FUNCTION = "doit"
CATEGORY = "InspirePack/Backend"
OUTPUT_NODE = True
def doit(self, cache_info, unique_id):
global cache
text1 = "---- [String Key Caches] ----\n"
text2 = "---- [Number Key Caches] ----\n"
for k, v in cache.items():
if v[0] == '':
tag = 'N/A(tag)'
else:
tag = v[0]
if isinstance(k, str):
text1 += f'{k}: {tag}\n'
else:
text2 += f'{k}: {tag}\n'
text = text1 + "\n" + text2
PromptServer.instance.send_sync("inspire-node-feedback", {"node_id": unique_id, "widget_name": "cache_info", "type": "text", "data": text})
return ()
@classmethod
def IS_CHANGED(cls, **kwargs):
return float("NaN")
NODE_CLASS_MAPPINGS = {
"CacheBackendData //Inspire": CacheBackendData,
"CacheBackendDataNumberKey //Inspire": CacheBackendDataNumberKey,
"CacheBackendDataList //Inspire": CacheBackendDataList,
"CacheBackendDataNumberKeyList //Inspire": CacheBackendDataNumberKeyList,
"RetrieveBackendData //Inspire": RetrieveBackendData,
"RetrieveBackendDataNumberKey //Inspire": RetrieveBackendDataNumberKey,
"RemoveBackendData //Inspire": RemoveBackendData,
"RemoveBackendDataNumberKey //Inspire": RemoveBackendDataNumberKey,
"ShowCachedInfo //Inspire": ShowCachedInfo,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"CacheBackendData //Inspire": "Cache Backend Data (Inspire)",
"CacheBackendDataNumberKey //Inspire": "Cache Backend Data [NumberKey] (Inspire)",
"CacheBackendDataList //Inspire": "Cache Backend Data List (Inspire)",
"CacheBackendDataNumberKeyList //Inspire": "Cache Backend Data List [NumberKey] (Inspire)",
"RetrieveBackendData //Inspire": "Retrieve Backend Data (Inspire)",
"RetrieveBackendDataNumberKey //Inspire": "Retrieve Backend Data [NumberKey] (Inspire)",
"RemoveBackendData //Inspire": "Remove Backend Data (Inspire)",
"RemoveBackendDataNumberKey //Inspire": "Remove Backend Data [NumberKey] (Inspire)",
"ShowCachedInfo //Inspire": "Show Cached Info (Inspire)",
}