Files
RiceRound-ComfyUI_RiceRound/input_node.py
T
2024-12-26 10:14:46 +08:00

157 lines
5.8 KiB
Python

_Y='RiceRound/Advanced'
_X='number'
_W='bridge'
_V='only image.'
_U='load_image'
_T='prompt'
_S='unique_id'
_R='BOOLEAN'
_Q='str'
_P='MASK'
_O='tooltip'
_N='hidden'
_M='数值'
_L='IMAGE'
_K='optional'
_J='FLOAT'
_I='load'
_H='INT'
_G='name'
_F='value'
_E='RiceRound/Input'
_D=True
_C='required'
_B='default'
_A='STRING'
import hashlib,json,os,re,time,random
from PIL import Image,ImageOps
from PIL.PngImagePlugin import PngInfo
from.rice_prompt_info import RicePromptInfo
import folder_paths
from nodes import LoadImage
import requests,sys
from.utils import pil2tensor
from comfy.utils import ProgressBar
class _BasicTypes(str):
basic_types=[_A]
def __eq__(B,other):A=other;return A in B.basic_types or isinstance(A,(list,_BasicTypes))
def __ne__(A,other):return not A.__eq__(other)
BasicTypes=_BasicTypes('BASIC')
class RiceRoundSimpleChoiceNode:
def __init__(A):A.prompt_info=RicePromptInfo()
@classmethod
def INPUT_TYPES(A):return{_C:{_G:(_A,{_B:'Parameter'}),_B:(_A,{_B:''})},_K:{},_N:{_S:'UNIQUE_ID',_T:'PROMPT','extra_pnginfo':'EXTRA_PNGINFO'}}
RETURN_TYPES=BasicTypes,;RETURN_NAMES=_F,;FUNCTION='placeholder';CATEGORY=_E
def placeholder(B,name,default,**C):
A=int(C.pop(_S,0));D=C.pop(_T,None);E=_D
if D:
for(G,F)in D.items():
if F.get('class_type','')=='RiceRoundDecryptNode':E=False;break
if E:
for H in range(10):
if A in B.prompt_info.choice_node_map:break
time.sleep(1)
if A not in B.prompt_info.choice_node_map:print(f"Warning: RiceRoundSimpleChoiceNode {A} not found in prompt_info.choice_node_map")
return default,
class RiceRoundAdvancedChoiceNode(RiceRoundSimpleChoiceNode):
def __init__(A):super().__init__()
class RiceRoundSimpleImageNode(LoadImage):
def __init__(A):super().__init__()
RETURN_TYPES=_L,;RETURN_NAMES=_F,;OUTPUT_NODE=_D;CATEGORY=_E;FUNCTION=_U
def load_image(B,image):A,C=super().load_image(image);return A,
class RiceRoundDownloadImageNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{'image_url':(_A,{_B:''})},_K:{},_N:{}}
RETURN_TYPES=_L,;RETURN_NAMES=_F,;OUTPUT_NODE=_D;FUNCTION=_U;CATEGORY=_E
def load_image(B,image_url,**C):A=Image.open(requests.get(image_url,stream=_D).raw);A=ImageOps.exif_transpose(A);return pil2tensor(A),
class RiceRoundImageBridgeNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{'images':(_L,{_O:_V})},_K:{}}
RETURN_TYPES=_L,;RETURN_NAMES=_F,;OUTPUT_NODE=_D;FUNCTION=_W;CATEGORY=_E
def bridge(A,images,**B):return images,
class RiceRoundMaskBridgeNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{'mask':(_P,{_O:_V})}}
RETURN_TYPES=_P,;RETURN_NAMES=_F,;OUTPUT_NODE=_D;FUNCTION=_W;CATEGORY=_E
def bridge(A,mask,**B):return mask,
class RiceRoundDownloadMaskNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{'mask_url':(_A,{_B:''})}}
RETURN_TYPES=_P,;RETURN_NAMES=_F,;OUTPUT_NODE=_D;FUNCTION='load_mask';CATEGORY=_E
def load_mask(E,mask_url,**F):
C=mask_url
try:
D=requests.get(C,stream=_D,timeout=10);D.raise_for_status();A=Image.open(D.raw)
if A.mode!='L':A=A.convert('L')
return pil2tensor(A),
except requests.exceptions.RequestException as B:print(f"Error downloading mask from {C}: {str(B)}");raise
except Exception as B:print(f"Error processing mask: {str(B)}");raise
class RiceRoundIntNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{_G:(_A,{_B:_M}),_X:(_H,{_B:0}),'min':(_H,{_B:0}),'max':(_H,{_B:100})}}
RETURN_TYPES=_H,;RETURN_NAMES=_F,;OUTPUT_NODE=_D;FUNCTION=_I;CATEGORY=_E
def load(A,name,number,min,max,**B):return number,
class RiceRoundStrToIntNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{_G:(_A,{_B:_M}),_Q:(_A,)}}
RETURN_TYPES=_H,;RETURN_NAMES=_F,;OUTPUT_NODE=_D;FUNCTION=_I;CATEGORY=_E
def load(A,name,str,**B):return int(str),
class RiceRoundFloatNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{_G:(_A,{_B:_M}),_X:(_J,{_B:.0}),'min':(_J,{_B:.0}),'max':(_J,{_B:1e2})}}
RETURN_TYPES=_J,;RETURN_NAMES=_F,;OUTPUT_NODE=_D;FUNCTION=_I;CATEGORY=_E
def load(A,name,number,min,max,**B):return number,
class RiceRoundStrToFloatNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{_G:(_A,{_B:_M}),_Q:(_A,)}}
RETURN_TYPES=_J,;RETURN_NAMES=_F,;OUTPUT_NODE=_D;FUNCTION=_I;CATEGORY=_E
def load(A,name,str,**B):return float(str),
class RiceRoundBooleanNode:
@classmethod
def INPUT_TYPES(A):return{_C:{_G:(_A,{_B:'开关'}),_F:(_R,{_B:False})}}
RETURN_TYPES=_R,;RETURN_NAMES=_F,;FUNCTION='execute';CATEGORY=_E
def execute(A,name,value):return value,
class RiceRoundStrToBooleanNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{_G:(_A,{_B:'开关'}),_Q:(_A,)}}
RETURN_TYPES=_R,;RETURN_NAMES=_F,;OUTPUT_NODE=_D;FUNCTION=_I;CATEGORY=_E
def load(A,name,str,**B):return str.lower()=='true',
class RiceRoundInputTextNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{'text_info':(_A,{'multiline':_D,_O:'The text to be encoded.'})}}
RETURN_TYPES=_A,;OUTPUT_NODE=_D;FUNCTION=_I;CATEGORY=_E
def load(D,text_info,**E):
B=text_info;A=''
try:C=json.loads(B);A=C.get('content','')
except json.JSONDecodeError:A=B
return A,
class RiceRoundRandomSeedNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{},_K:{},_N:{}}
RETURN_TYPES=_H,;FUNCTION='random';CATEGORY=_E
@classmethod
def IS_CHANGED(A):return random.randint(0,999999)
def random(B):A=random.randint(0,999999);print('产生随机数 ',A);return A,
class RiceRoundDebugNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{'text':(_A,{_B:'Hello, World!'})}}
RETURN_TYPES=_A,;FUNCTION='debug';CATEGORY=_Y
def debug(A,text):print(f"RiceDebugNode text: {text}");return text,
class RiceRoundTempTokenNode:
def __init__(A):0
@classmethod
def INPUT_TYPES(A):return{_C:{'text':(_A,{_B:''})}}
RETURN_TYPES=_A,;FUNCTION='temp_token';CATEGORY=_Y
def temp_token(A,text):return text,