diff --git a/__init__.py b/__init__.py index a746994..c1ab0fc 100644 --- a/__init__.py +++ b/__init__.py @@ -149,7 +149,8 @@ TRAINING_CLASS_MAPPINGS = { METADATA_CLASS_MAPPINGS = { "Sage_ConstructMetadata": Sage_ConstructMetadata, - "Sage_ConstructMetadataLite": Sage_ConstructMetadataLite + "Sage_ConstructMetadataLite": Sage_ConstructMetadataLite, + "Sage_ConstructMetadataFlexible": Sage_ConstructMetadataFlexible } OLLAMA_CLASS_MAPPINGS = { @@ -295,7 +296,8 @@ TRAINING_NAME_MAPPINGS = { METADATA_NAME_MAPPINGS = { "Sage_ConstructMetadata": "Construct Metadata", - "Sage_ConstructMetadataLite": "Construct Metadata Lite" + "Sage_ConstructMetadataLite": "Construct Metadata Lite", + "Sage_ConstructMetadataFlexible": "Construct Metadata (Flexible)" } OLLAMA_NAME_MAPPINGS = { diff --git a/example_workflows/Chroma Example.jpg b/example_workflows/Chroma Example.jpg old mode 100755 new mode 100644 index 2f4dc3e..cd4e8b4 Binary files a/example_workflows/Chroma Example.jpg and b/example_workflows/Chroma Example.jpg differ diff --git a/example_workflows/Chroma Example.json b/example_workflows/Chroma Example.json index 29c1102..a600ad5 100644 --- a/example_workflows/Chroma Example.json +++ b/example_workflows/Chroma Example.json @@ -1 +1 @@ -{"id":"5470cdf7-350e-4d04-90a7-19a6167764b5","revision":0,"last_node_id":154,"last_link_id":252,"nodes":[{"id":88,"type":"SaveImage","pos":[2946.4208984375,-5746.08642578125],"size":[600.9757690429688,625.0556640625],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":242},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.30","Node name for S&R":"SaveImage"},"widgets_values":["ComfyUI"]},{"id":139,"type":"Sage_KSamplerTiledDecoder","pos":[2081.927001953125,-5750.42431640625],"size":[274.02325439453125,409.5736389160156],"flags":{},"order":13,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":250},{"localized_name":"sampler_info","name":"sampler_info","type":"SAMPLER_INFO","link":228},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":230},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":231},{"localized_name":"latent_image","name":"latent_image","type":"LATENT","link":232},{"localized_name":"vae","name":"vae","type":"VAE","link":252},{"localized_name":"tiling_info","name":"tiling_info","shape":7,"type":"TILING_INFO","link":227},{"localized_name":"advanced_info","name":"advanced_info","shape":7,"type":"ADV_SAMPLER_INFO","link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":null},{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[234,242]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"1a98f4bb37562ea56b04345f92b282dab301bfdf","Node name for S&R":"Sage_KSamplerTiledDecoder"},"widgets_values":[1]},{"id":142,"type":"PreviewImage","pos":[2371.25634765625,-5751.04296875],"size":[538.9635009765625,630.3754272460938],"flags":{},"order":14,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":234}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.30","Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":149,"type":"Sage_UNETSelector","pos":[1124.8057861328125,-5751.08837890625],"size":[270,82],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"unet_name","name":"unet_name","type":"COMBO","widget":{"name":"unet_name"},"link":null},{"localized_name":"weight_dtype","name":"weight_dtype","type":"COMBO","widget":{"name":"weight_dtype"},"link":null}],"outputs":[{"localized_name":"unet_info","name":"unet_info","type":"UNET_INFO","links":[246]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"4beecb785ba4f5ec0c7f3b6946d42afbef92434e","Node name for S&R":"Sage_UNETSelector"},"widgets_values":["chroma/chroma-unlocked-v42-detail-calibrated_float8_e4m3fn_scaled_learned.safetensors","default"]},{"id":150,"type":"Sage_CLIPSelector","pos":[1123.9034423828125,-5631.17724609375],"size":[270,82],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"clip_name","name":"clip_name","type":"COMBO","widget":{"name":"clip_name"},"link":null},{"localized_name":"clip_type","name":"clip_type","type":"COMBO","widget":{"name":"clip_type"},"link":null}],"outputs":[{"localized_name":"clip_info","name":"clip_info","type":"CLIP_INFO","links":[247]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"4beecb785ba4f5ec0c7f3b6946d42afbef92434e","Node name for S&R":"Sage_CLIPSelector"},"widgets_values":["t5/t5xxl_fp8_e4m3fn_scaled.safetensors","chroma"]},{"id":151,"type":"Sage_VAESelector","pos":[1129.06494140625,-5506.10009765625],"size":[256.6423645019531,58],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"vae_name","name":"vae_name","type":"COMBO","widget":{"name":"vae_name"},"link":null}],"outputs":[{"localized_name":"vae_info","name":"vae_info","type":"VAE_INFO","links":[248]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"4beecb785ba4f5ec0c7f3b6946d42afbef92434e","Node name for S&R":"Sage_VAESelector"},"widgets_values":["ae.safetensors"]},{"id":154,"type":"Sage_UnetClipVaeToModelInfo","pos":[1131.4879150390625,-5402.2197265625],"size":[252.7833251953125,66],"flags":{"collapsed":true},"order":8,"mode":0,"inputs":[{"localized_name":"unet_info","name":"unet_info","type":"UNET_INFO","link":246},{"localized_name":"clip_info","name":"clip_info","type":"CLIP_INFO","link":247},{"localized_name":"vae_info","name":"vae_info","type":"VAE_INFO","link":248}],"outputs":[{"localized_name":"model_info","name":"model_info","type":"MODEL_INFO","links":[249]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"4beecb785ba4f5ec0c7f3b6946d42afbef92434e","Node name for S&R":"Sage_UnetClipVaeToModelInfo"},"widgets_values":[]},{"id":152,"type":"Sage_ModelLoraStackLoader","pos":[1132.708251953125,-5371.00390625],"size":[208.34999084472656,106],"flags":{"collapsed":false},"order":10,"mode":0,"inputs":[{"localized_name":"model_info","name":"model_info","type":"MODEL_INFO","link":249},{"localized_name":"lora_stack","name":"lora_stack","shape":7,"type":"LORA_STACK","link":null},{"localized_name":"model_shifts","name":"model_shifts","shape":7,"type":"MODEL_SHIFTS","link":null}],"outputs":[{"localized_name":"model","name":"model","type":"MODEL","links":[250]},{"localized_name":"clip","name":"clip","type":"CLIP","links":[251]},{"localized_name":"vae","name":"vae","type":"VAE","links":[252]},{"localized_name":"lora_stack","name":"lora_stack","type":"LORA_STACK","links":null},{"localized_name":"keywords","name":"keywords","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui_sageutils","ver":"4beecb785ba4f5ec0c7f3b6946d42afbef92434e","Node name for S&R":"Sage_ModelLoraStackLoader"},"widgets_values":[]},{"id":145,"type":"Sage_QuickResPicker","pos":[1128.760986328125,-5235.2509765625],"size":[210,126],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"aspect_ratio","name":"aspect_ratio","type":"COMBO","widget":{"name":"aspect_ratio"},"link":null},{"localized_name":"orientation","name":"orientation","type":"COMBO","widget":{"name":"orientation"},"link":null},{"localized_name":"multiplier","name":"multiplier","type":"FLOAT","widget":{"name":"multiplier"},"link":null}],"outputs":[{"localized_name":"width","name":"width","type":"INT","links":[243]},{"localized_name":"height","name":"height","type":"INT","links":[244]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"045f16a5a8ff8f6d4094325dc61ac848ac344969","Node name for S&R":"Sage_QuickResPicker"},"widgets_values":["7:9","Landscape",1]},{"id":140,"type":"Sage_TilingInfo","pos":[1923.1153564453125,-5288.60498046875],"size":[210,130],"flags":{"collapsed":false},"order":4,"mode":0,"inputs":[{"localized_name":"tile_size","name":"tile_size","type":"INT","widget":{"name":"tile_size"},"link":null},{"localized_name":"overlap","name":"overlap","type":"INT","widget":{"name":"overlap"},"link":null},{"localized_name":"temporal_size","name":"temporal_size","type":"INT","widget":{"name":"temporal_size"},"link":null},{"localized_name":"temporal_overlap","name":"temporal_overlap","type":"INT","widget":{"name":"temporal_overlap"},"link":null}],"outputs":[{"localized_name":"TILING_INFO","name":"TILING_INFO","type":"TILING_INFO","links":[227]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"1a98f4bb37562ea56b04345f92b282dab301bfdf","Node name for S&R":"Sage_TilingInfo"},"widgets_values":[512,64,64,8]},{"id":126,"type":"Sage_SetText","pos":[1348.697021484375,-5290.7587890625],"size":[346.9613952636719,175.16212463378906],"flags":{},"order":5,"mode":0,"inputs":[{"localized_name":"prefix","name":"prefix","shape":7,"type":"STRING","link":null},{"localized_name":"suffix","name":"suffix","shape":7,"type":"STRING","link":null},{"localized_name":"str","name":"str","type":"STRING","widget":{"name":"str"},"link":null}],"outputs":[{"localized_name":"str","name":"str","type":"STRING","links":[197]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"1a98f4bb37562ea56b04345f92b282dab301bfdf","Node name for S&R":"Sage_SetText"},"widgets_values":["Artist name, watermark, and signature."]},{"id":100,"type":"Sage_EmptyLatentImagePassthrough","pos":[1705.4796142578125,-5290.63232421875],"size":[210,170],"flags":{"collapsed":true},"order":9,"mode":0,"inputs":[{"localized_name":"width","name":"width","type":"INT","widget":{"name":"width"},"link":243},{"localized_name":"height","name":"height","type":"INT","widget":{"name":"height"},"link":244},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null},{"localized_name":"sd3","name":"sd3","type":"BOOLEAN","widget":{"name":"sd3"},"link":null}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","links":[232]},{"localized_name":"width","name":"width","type":"INT","links":null},{"localized_name":"height","name":"height","type":"INT","links":null}],"properties":{"cnr_id":"comfyui_sageutils","ver":"ada34c266f8268cb86ac1f1c916c5c7ddf44d2b4","Node name for S&R":"Sage_EmptyLatentImagePassthrough"},"widgets_values":[1024,1024,1,true]},{"id":110,"type":"T5TokenizerOptions","pos":[1712.709716796875,-5248.38525390625],"size":[210,82],"flags":{"collapsed":true},"order":11,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":251},{"localized_name":"min_padding","name":"min_padding","type":"INT","widget":{"name":"min_padding"},"link":null},{"localized_name":"min_length","name":"min_length","type":"INT","widget":{"name":"min_length"},"link":null}],"outputs":[{"localized_name":"CLIP","name":"CLIP","type":"CLIP","links":[180]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"T5TokenizerOptions"},"widgets_values":[1,0]},{"id":120,"type":"Sage_DualCLIPTextEncode","pos":[1712.45263671875,-5192.57763671875],"size":[210,118],"flags":{"collapsed":true},"order":12,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":180},{"localized_name":"pos","name":"pos","shape":7,"type":"STRING","link":181},{"localized_name":"neg","name":"neg","shape":7,"type":"STRING","link":197},{"localized_name":"clean","name":"clean","type":"BOOLEAN","widget":{"name":"clean"},"link":null}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","links":[230]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[231]},{"localized_name":"pos_text","name":"pos_text","type":"STRING","links":null},{"localized_name":"neg_text","name":"neg_text","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui_sageutils","ver":"766095f60ef1d196b39cc26e0e4df139c9a481e3","Node name for S&R":"Sage_DualCLIPTextEncode"},"widgets_values":[false]},{"id":102,"type":"Sage_SetText","pos":[1410.0362548828125,-5751.96728515625],"size":[655.8792114257812,415.6824035644531],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"prefix","name":"prefix","shape":7,"type":"STRING","link":null},{"localized_name":"suffix","name":"suffix","shape":7,"type":"STRING","link":null},{"localized_name":"str","name":"str","type":"STRING","widget":{"name":"str"},"link":null}],"outputs":[{"localized_name":"str","name":"str","type":"STRING","links":[181]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"ada34c266f8268cb86ac1f1c916c5c7ddf44d2b4","Node name for S&R":"Sage_SetText"},"widgets_values":["This is a digital anime-style drawing with detailed shading and cross hatching.\n\nA ferret girl is dancing in the forest at sunset. She has white fur, with tufts sticking out.\n\nShe is wearing a white blouse with a blue vest and a multicolored dress. She has on a silver necklace and three gold hoop earrings. She is smiling, and in a dynamic pose.\n\nThere are blue and white flowers and clouds in the sky. there is a stream to the right."]},{"id":141,"type":"Sage_SamplerInfo","pos":[2149.003173828125,-5297.1640625],"size":[210,178],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null}],"outputs":[{"localized_name":"SAMPLER_INFO","name":"SAMPLER_INFO","type":"SAMPLER_INFO","links":[228]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"1a98f4bb37562ea56b04345f92b282dab301bfdf","Node name for S&R":"Sage_SamplerInfo"},"widgets_values":[0,"fixed",36,6,"euler","normal"]}],"links":[[180,110,0,120,0,"CLIP"],[181,102,0,120,1,"STRING"],[197,126,0,120,2,"STRING"],[227,140,0,139,6,"TILING_INFO"],[228,141,0,139,1,"SAMPLER_INFO"],[230,120,0,139,2,"CONDITIONING"],[231,120,1,139,3,"CONDITIONING"],[232,100,0,139,4,"LATENT"],[234,139,1,142,0,"IMAGE"],[242,139,1,88,0,"IMAGE"],[243,145,0,100,0,"INT"],[244,145,1,100,1,"INT"],[246,149,0,154,0,"UNET_INFO"],[247,150,0,154,1,"CLIP_INFO"],[248,151,0,154,2,"VAE_INFO"],[249,154,0,152,0,"MODEL_INFO"],[250,152,0,139,0,"MODEL"],[251,152,1,110,0,"CLIP"],[252,152,2,139,5,"VAE"]],"groups":[{"id":2,"title":"Image","bounding":[1114.4017333984375,-5824.64306640625,1810.650390625,718.2066650390625],"color":"#3f789e","font_size":24,"flags":{}},{"id":3,"title":"Save","bounding":[2936.4208984375,-5819.6865234375,616.4301147460938,712.291748046875],"color":"#3f789e","font_size":24,"flags":{}}],"config":{},"extra":{"ds":{"scale":1.1,"offset":[-1007.4009983292888,5794.628237737316]},"frontendVersion":"1.18.9","node_versions":{"comfy-core":"0.3.19"},"VHS_latentpreview":true,"VHS_latentpreviewrate":0,"VHS_MetadataImage":true,"VHS_KeepIntermediate":true},"version":0.4} \ No newline at end of file +{"id":"5470cdf7-350e-4d04-90a7-19a6167764b5","revision":0,"last_node_id":160,"last_link_id":262,"nodes":[{"id":150,"type":"Sage_CLIPSelector","pos":[1123.9034423828125,-5631.17724609375],"size":[270,82],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"clip_name","name":"clip_name","type":"COMBO","widget":{"name":"clip_name"},"link":null},{"localized_name":"clip_type","name":"clip_type","type":"COMBO","widget":{"name":"clip_type"},"link":null}],"outputs":[{"localized_name":"clip_info","name":"clip_info","type":"CLIP_INFO","links":[247]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"4beecb785ba4f5ec0c7f3b6946d42afbef92434e","Node name for S&R":"Sage_CLIPSelector"},"widgets_values":["t5/t5xxl_fp8_e4m3fn_scaled.safetensors","chroma"]},{"id":151,"type":"Sage_VAESelector","pos":[1129.06494140625,-5506.10009765625],"size":[256.6423645019531,58],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"vae_name","name":"vae_name","type":"COMBO","widget":{"name":"vae_name"},"link":null}],"outputs":[{"localized_name":"vae_info","name":"vae_info","type":"VAE_INFO","links":[248]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"4beecb785ba4f5ec0c7f3b6946d42afbef92434e","Node name for S&R":"Sage_VAESelector"},"widgets_values":["ae.safetensors"]},{"id":154,"type":"Sage_UnetClipVaeToModelInfo","pos":[1131.4879150390625,-5402.2197265625],"size":[252.7833251953125,66],"flags":{"collapsed":false},"order":10,"mode":0,"inputs":[{"localized_name":"unet_info","name":"unet_info","type":"UNET_INFO","link":246},{"localized_name":"clip_info","name":"clip_info","type":"CLIP_INFO","link":247},{"localized_name":"vae_info","name":"vae_info","type":"VAE_INFO","link":248}],"outputs":[{"localized_name":"model_info","name":"model_info","type":"MODEL_INFO","links":[249,254]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"4beecb785ba4f5ec0c7f3b6946d42afbef92434e","Node name for S&R":"Sage_UnetClipVaeToModelInfo"},"widgets_values":[]},{"id":149,"type":"Sage_UNETSelector","pos":[1124.8057861328125,-5751.08837890625],"size":[270,82],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"unet_name","name":"unet_name","type":"COMBO","widget":{"name":"unet_name"},"link":null},{"localized_name":"weight_dtype","name":"weight_dtype","type":"COMBO","widget":{"name":"weight_dtype"},"link":null}],"outputs":[{"localized_name":"unet_info","name":"unet_info","type":"UNET_INFO","links":[246]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"4beecb785ba4f5ec0c7f3b6946d42afbef92434e","Node name for S&R":"Sage_UNETSelector"},"widgets_values":["chroma/chroma-unlocked-v48-detail-calibrated_float8_e4m3fn_scaled_learned_nodistill.safetensors","fp8_e4m3fn"]},{"id":126,"type":"Sage_SetText","pos":[1408.696533203125,-5472.57763671875],"size":[346.9613952636719,175.16212463378906],"flags":{},"order":3,"mode":0,"inputs":[{"localized_name":"prefix","name":"prefix","shape":7,"type":"STRING","link":null},{"localized_name":"suffix","name":"suffix","shape":7,"type":"STRING","link":null},{"localized_name":"str","name":"str","type":"STRING","widget":{"name":"str"},"link":null}],"outputs":[{"localized_name":"str","name":"str","type":"STRING","links":[197]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"1a98f4bb37562ea56b04345f92b282dab301bfdf","Node name for S&R":"Sage_SetText"},"widgets_values":["Artist name, watermark, and signature."]},{"id":152,"type":"Sage_ModelLoraStackLoader","pos":[1130.8902587890625,-5291.91552734375],"size":[208.34999084472656,106],"flags":{"collapsed":false},"order":12,"mode":0,"inputs":[{"localized_name":"model_info","name":"model_info","type":"MODEL_INFO","link":249},{"localized_name":"lora_stack","name":"lora_stack","shape":7,"type":"LORA_STACK","link":262},{"localized_name":"model_shifts","name":"model_shifts","shape":7,"type":"MODEL_SHIFTS","link":null}],"outputs":[{"localized_name":"model","name":"model","type":"MODEL","links":[250]},{"localized_name":"clip","name":"clip","type":"CLIP","links":[251]},{"localized_name":"vae","name":"vae","type":"VAE","links":[252]},{"localized_name":"lora_stack","name":"lora_stack","type":"LORA_STACK","links":null},{"localized_name":"keywords","name":"keywords","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui_sageutils","ver":"4beecb785ba4f5ec0c7f3b6946d42afbef92434e","Node name for S&R":"Sage_ModelLoraStackLoader"},"widgets_values":[]},{"id":145,"type":"Sage_QuickResPicker","pos":[1134.21533203125,-5139.79736328125],"size":[210,126],"flags":{},"order":4,"mode":0,"inputs":[{"localized_name":"aspect_ratio","name":"aspect_ratio","type":"COMBO","widget":{"name":"aspect_ratio"},"link":null},{"localized_name":"orientation","name":"orientation","type":"COMBO","widget":{"name":"orientation"},"link":null},{"localized_name":"multiplier","name":"multiplier","type":"FLOAT","widget":{"name":"multiplier"},"link":null}],"outputs":[{"localized_name":"width","name":"width","type":"INT","links":[243]},{"localized_name":"height","name":"height","type":"INT","links":[244]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"045f16a5a8ff8f6d4094325dc61ac848ac344969","Node name for S&R":"Sage_QuickResPicker"},"widgets_values":["7:9","Landscape",1]},{"id":110,"type":"T5TokenizerOptions","pos":[1365.4368896484375,-5261.11181640625],"size":[210,82],"flags":{"collapsed":false},"order":13,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":251},{"localized_name":"min_padding","name":"min_padding","type":"INT","widget":{"name":"min_padding"},"link":null},{"localized_name":"min_length","name":"min_length","type":"INT","widget":{"name":"min_length"},"link":null}],"outputs":[{"localized_name":"CLIP","name":"CLIP","type":"CLIP","links":[180]}],"properties":{"cnr_id":"comfy-core","ver":"0.3.34","Node name for S&R":"T5TokenizerOptions"},"widgets_values":[1,0]},{"id":140,"type":"Sage_TilingInfo","pos":[1604.0240478515625,-5249.51416015625],"size":[210,130],"flags":{"collapsed":false},"order":5,"mode":0,"inputs":[{"localized_name":"tile_size","name":"tile_size","type":"INT","widget":{"name":"tile_size"},"link":null},{"localized_name":"overlap","name":"overlap","type":"INT","widget":{"name":"overlap"},"link":null},{"localized_name":"temporal_size","name":"temporal_size","type":"INT","widget":{"name":"temporal_size"},"link":null},{"localized_name":"temporal_overlap","name":"temporal_overlap","type":"INT","widget":{"name":"temporal_overlap"},"link":null}],"outputs":[{"localized_name":"TILING_INFO","name":"TILING_INFO","type":"TILING_INFO","links":[227]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"1a98f4bb37562ea56b04345f92b282dab301bfdf","Node name for S&R":"Sage_TilingInfo"},"widgets_values":[512,64,64,8]},{"id":141,"type":"Sage_SamplerInfo","pos":[1606.275634765625,-5081.70947265625],"size":[210,178],"flags":{},"order":6,"mode":0,"inputs":[{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"steps","name":"steps","type":"INT","widget":{"name":"steps"},"link":null},{"localized_name":"cfg","name":"cfg","type":"FLOAT","widget":{"name":"cfg"},"link":null},{"localized_name":"sampler_name","name":"sampler_name","type":"COMBO","widget":{"name":"sampler_name"},"link":null},{"localized_name":"scheduler","name":"scheduler","type":"COMBO","widget":{"name":"scheduler"},"link":null}],"outputs":[{"localized_name":"SAMPLER_INFO","name":"SAMPLER_INFO","type":"SAMPLER_INFO","links":[228,255]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"1a98f4bb37562ea56b04345f92b282dab301bfdf","Node name for S&R":"Sage_SamplerInfo"},"widgets_values":[0,"fixed",36,6,"euler","normal"]},{"id":139,"type":"Sage_KSamplerTiledDecoder","pos":[2006.4730224609375,-5748.60595703125],"size":[274.02325439453125,410],"flags":{},"order":15,"mode":0,"inputs":[{"localized_name":"model","name":"model","type":"MODEL","link":250},{"localized_name":"sampler_info","name":"sampler_info","type":"SAMPLER_INFO","link":228},{"localized_name":"positive","name":"positive","type":"CONDITIONING","link":230},{"localized_name":"negative","name":"negative","type":"CONDITIONING","link":231},{"localized_name":"latent_image","name":"latent_image","type":"LATENT","link":232},{"localized_name":"vae","name":"vae","type":"VAE","link":252},{"localized_name":"tiling_info","name":"tiling_info","shape":7,"type":"TILING_INFO","link":227},{"localized_name":"advanced_info","name":"advanced_info","shape":7,"type":"ADV_SAMPLER_INFO","link":null},{"localized_name":"denoise","name":"denoise","type":"FLOAT","widget":{"name":"denoise"},"link":null}],"outputs":[{"localized_name":"LATENT","name":"LATENT","type":"LATENT","links":null},{"localized_name":"IMAGE","name":"IMAGE","type":"IMAGE","links":[234,253]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"1a98f4bb37562ea56b04345f92b282dab301bfdf","Node name for S&R":"Sage_KSamplerTiledDecoder"},"widgets_values":[1]},{"id":120,"type":"Sage_DualCLIPTextEncode","pos":[1776.089111328125,-5464.396484375],"size":[210,118],"flags":{"collapsed":false},"order":14,"mode":0,"inputs":[{"localized_name":"clip","name":"clip","type":"CLIP","link":180},{"localized_name":"pos","name":"pos","shape":7,"type":"STRING","link":181},{"localized_name":"neg","name":"neg","shape":7,"type":"STRING","link":197},{"localized_name":"clean","name":"clean","type":"BOOLEAN","widget":{"name":"clean"},"link":null}],"outputs":[{"localized_name":"positive","name":"positive","type":"CONDITIONING","links":[230]},{"localized_name":"negative","name":"negative","type":"CONDITIONING","links":[231]},{"localized_name":"pos_text","name":"pos_text","type":"STRING","links":[258]},{"localized_name":"neg_text","name":"neg_text","type":"STRING","links":[259]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"766095f60ef1d196b39cc26e0e4df139c9a481e3","Node name for S&R":"Sage_DualCLIPTextEncode"},"widgets_values":[false]},{"id":100,"type":"Sage_EmptyLatentImagePassthrough","pos":[1368.2064208984375,-5132.451171875],"size":[210,170],"flags":{"collapsed":false},"order":11,"mode":0,"inputs":[{"localized_name":"width","name":"width","type":"INT","widget":{"name":"width"},"link":243},{"localized_name":"height","name":"height","type":"INT","widget":{"name":"height"},"link":244},{"localized_name":"batch_size","name":"batch_size","type":"INT","widget":{"name":"batch_size"},"link":null},{"localized_name":"sd3","name":"sd3","type":"BOOLEAN","widget":{"name":"sd3"},"link":null}],"outputs":[{"localized_name":"latent","name":"latent","type":"LATENT","links":[232]},{"localized_name":"width","name":"width","type":"INT","links":[260]},{"localized_name":"height","name":"height","type":"INT","links":[261]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"ada34c266f8268cb86ac1f1c916c5c7ddf44d2b4","Node name for S&R":"Sage_EmptyLatentImagePassthrough"},"widgets_values":[1024,1024,1,true]},{"id":142,"type":"PreviewImage","pos":[2298.52783203125,-5746.4970703125],"size":[481.6907653808594,401.2845153808594],"flags":{},"order":17,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":234}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.30","Node name for S&R":"PreviewImage"},"widgets_values":[]},{"id":155,"type":"Sage_SaveImageWithMetadata","pos":[2804.67236328125,-5731.90283203125],"size":[397.9999694824219,465.0909118652344],"flags":{},"order":18,"mode":0,"inputs":[{"localized_name":"images","name":"images","type":"IMAGE","link":253},{"localized_name":"param_metadata","name":"param_metadata","shape":7,"type":"STRING","link":256},{"localized_name":"extra_metadata","name":"extra_metadata","shape":7,"type":"STRING","link":null},{"localized_name":"filename_prefix","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null},{"localized_name":"include_node_metadata","name":"include_node_metadata","type":"BOOLEAN","widget":{"name":"include_node_metadata"},"link":null},{"localized_name":"include_extra_pnginfo_metadata","name":"include_extra_pnginfo_metadata","type":"BOOLEAN","widget":{"name":"include_extra_pnginfo_metadata"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfyui_sageutils","ver":"d30ce7e5efacc752ba73a1a49be7f7b761cf2e0f","Node name for S&R":"Sage_SaveImageWithMetadata"},"widgets_values":["ComfyUI_Meta",true,true]},{"id":157,"type":"Sage_ViewAnything","pos":[2095.581298828125,-5274.62939453125],"size":[654.4757690429688,298.7272644042969],"flags":{},"order":19,"mode":0,"inputs":[{"localized_name":"any","name":"any","type":"*","link":257}],"outputs":[{"localized_name":"STRING","name":"STRING","type":"STRING","links":null}],"properties":{"cnr_id":"comfyui_sageutils","ver":"d30ce7e5efacc752ba73a1a49be7f7b761cf2e0f","Node name for S&R":"Sage_ViewAnything"},"widgets_values":["(aesthetic 25, aesthetic 11, aesthetic 10, aesthetic 9:1.5)\n\nThis is a drawing with detailed shading and shadows and lighting.\n\nA ferret girl is smiling while dancing, in a dynamic pose at a dutch angle. She has lavander and white fur, with tufts sticking out, a bushy tail, and large, expressive eyes. She is wearing a white blouse with a blue vest with celtic knot patterns on it, a multicolored dress, and a blue-green silk scarf tied as a belt. She also has on a silver necklace with a jade pendant and three gold hoop earrings. \n\nThe background is a forest at sunset. There are blue and white flowers and clouds in the sky, and a stream to the right. \nNegative prompt: Artist name, watermark, and signature., Steps: 36, Sampler: Euler, Scheduler type: normal, CFG scale: 6.0, Seed: 0, Size: 1152x896, Model: chroma-unlocked-v48-detail-calibrated_float8_e4m3fn_scaled_learned_nodistill.safetensors, Model hash: 78d02389bc, Model: t5xxl_fp8_e4m3fn_scaled.safetensors, Model hash: a498f0485d, Model: ae.safetensors, Model hash: afc8e28272, Version: v1.10-RC-6-comfyui\n"]},{"id":158,"type":"Sage_TripleQuickLoraStack","pos":[896.4925537109375,-5282.81103515625],"size":[210,250],"flags":{},"order":7,"mode":0,"inputs":[{"localized_name":"lora_stack","name":"lora_stack","shape":7,"type":"LORA_STACK","link":null},{"localized_name":"enabled_1","name":"enabled_1","type":"BOOLEAN","widget":{"name":"enabled_1"},"link":null},{"localized_name":"lora_1_name","name":"lora_1_name","type":"COMBO","widget":{"name":"lora_1_name"},"link":null},{"localized_name":"model_1_weight","name":"model_1_weight","type":"FLOAT","widget":{"name":"model_1_weight"},"link":null},{"localized_name":"enabled_2","name":"enabled_2","type":"BOOLEAN","widget":{"name":"enabled_2"},"link":null},{"localized_name":"lora_2_name","name":"lora_2_name","type":"COMBO","widget":{"name":"lora_2_name"},"link":null},{"localized_name":"model_2_weight","name":"model_2_weight","type":"FLOAT","widget":{"name":"model_2_weight"},"link":null},{"localized_name":"enabled_3","name":"enabled_3","type":"BOOLEAN","widget":{"name":"enabled_3"},"link":null},{"localized_name":"lora_3_name","name":"lora_3_name","type":"COMBO","widget":{"name":"lora_3_name"},"link":null},{"localized_name":"model_3_weight","name":"model_3_weight","type":"FLOAT","widget":{"name":"model_3_weight"},"link":null}],"outputs":[{"localized_name":"lora_stack","name":"lora_stack","type":"LORA_STACK","links":[262]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"d30ce7e5efacc752ba73a1a49be7f7b761cf2e0f","Node name for S&R":"Sage_TripleQuickLoraStack"},"widgets_values":[false,"chroma/chroma-flash-lora_r32-fp32.safetensors",1,false,"chroma/Chroma-RealFur_lora_rank_64-bf16.safetensors",1,false,"chroma/Hyper-CHROMA-8steps-lora-minimal.safetensors",1]},{"id":160,"type":"MarkdownNote","pos":[740.1283569335938,-5741.89990234375],"size":[353.6363525390625,312.7272644042969],"flags":{},"order":8,"mode":0,"inputs":[],"outputs":[],"properties":{},"widgets_values":["**Full Chroma model:** \n[https://huggingface.co/lodestones/Chroma](https://huggingface.co/lodestones/Chroma)\n\n\n**Scaled f8:** \n[https://huggingface.co/Clybius/Chroma-fp8-scaled](https://huggingface.co/Clybius/Chroma-fp8-scaled)\n\n\n**GGUFs (Sorry, not supported by Sage Utils at the moment, though I'm open to suggestions for how to support it properly.):** \n[https://huggingface.co/silveroxides/Chroma-GGUF](https://huggingface.co/silveroxides/Chroma-GGUF)\n\n\n**Chrome LoRA Experiments:** \n[https://huggingface.co/silveroxides/Chroma-LoRA-Experiments](https://huggingface.co/silveroxides/Chroma-LoRA-Experiments)\n"],"color":"#432","bgcolor":"#653"},{"id":102,"type":"Sage_SetText","pos":[1405.4908447265625,-5752.8759765625],"size":[500.42462158203125,247.50057983398438],"flags":{},"order":9,"mode":0,"inputs":[{"localized_name":"prefix","name":"prefix","shape":7,"type":"STRING","link":null},{"localized_name":"suffix","name":"suffix","shape":7,"type":"STRING","link":null},{"localized_name":"str","name":"str","type":"STRING","widget":{"name":"str"},"link":null}],"outputs":[{"localized_name":"str","name":"str","type":"STRING","links":[181]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"ada34c266f8268cb86ac1f1c916c5c7ddf44d2b4","Node name for S&R":"Sage_SetText"},"widgets_values":["(aesthetic 25, aesthetic 11, aesthetic 10, aesthetic 9:1.5)\n\nThis is a drawing with detailed shading and shadows and lighting.\n\nA ferret girl is smiling while dancing, in a dynamic pose at a dutch angle. She has lavander and white fur, with tufts sticking out, a bushy tail, and large, expressive eyes. She is wearing a white blouse with a blue vest with celtic knot patterns on it, a multicolored dress, and a blue-green silk scarf tied as a belt. She also has on a silver necklace with a jade pendant and three gold hoop earrings. \n\nThe background is a forest at sunset. There are blue and white flowers and clouds in the sky, and a stream to the right."]},{"id":156,"type":"Sage_ConstructMetadataFlexible","pos":[1846.491455078125,-5281.90234375],"size":[223.5,194],"flags":{},"order":16,"mode":0,"inputs":[{"localized_name":"model_info","name":"model_info","type":"MODEL_INFO","link":254},{"localized_name":"sampler_info","name":"sampler_info","type":"SAMPLER_INFO","link":255},{"localized_name":"lora_stack","name":"lora_stack","shape":7,"type":"LORA_STACK","link":null},{"localized_name":"positive_string","name":"positive_string","type":"STRING","widget":{"name":"positive_string"},"link":258},{"localized_name":"negative_string","name":"negative_string","type":"STRING","widget":{"name":"negative_string"},"link":259},{"localized_name":"width","name":"width","type":"INT","widget":{"name":"width"},"link":260},{"localized_name":"height","name":"height","type":"INT","widget":{"name":"height"},"link":261},{"localized_name":"metadata_style","name":"metadata_style","type":"COMBO","widget":{"name":"metadata_style"},"link":null}],"outputs":[{"localized_name":"param_metadata","name":"param_metadata","type":"STRING","links":[256,257]}],"properties":{"cnr_id":"comfyui_sageutils","ver":"d30ce7e5efacc752ba73a1a49be7f7b761cf2e0f","Node name for S&R":"Sage_ConstructMetadataFlexible"},"widgets_values":["","",0,0,"A1111 Full"]}],"links":[[180,110,0,120,0,"CLIP"],[181,102,0,120,1,"STRING"],[197,126,0,120,2,"STRING"],[227,140,0,139,6,"TILING_INFO"],[228,141,0,139,1,"SAMPLER_INFO"],[230,120,0,139,2,"CONDITIONING"],[231,120,1,139,3,"CONDITIONING"],[232,100,0,139,4,"LATENT"],[234,139,1,142,0,"IMAGE"],[243,145,0,100,0,"INT"],[244,145,1,100,1,"INT"],[246,149,0,154,0,"UNET_INFO"],[247,150,0,154,1,"CLIP_INFO"],[248,151,0,154,2,"VAE_INFO"],[249,154,0,152,0,"MODEL_INFO"],[250,152,0,139,0,"MODEL"],[251,152,1,110,0,"CLIP"],[252,152,2,139,5,"VAE"],[253,139,1,155,0,"IMAGE"],[254,154,0,156,0,"MODEL_INFO"],[255,141,0,156,1,"SAMPLER_INFO"],[256,156,0,155,1,"STRING"],[257,156,0,157,0,"*"],[258,120,2,156,3,"STRING"],[259,120,3,156,4,"STRING"],[260,100,1,156,5,"INT"],[261,100,2,156,6,"INT"],[262,158,0,152,1,"LORA_STACK"]],"groups":[{"id":3,"title":"Save","bounding":[2794.67236328125,-5805.5029296875,418,548.6907958984375],"color":"#3f789e","font_size":24,"flags":{}}],"config":{},"extra":{"ds":{"scale":1.1,"offset":[-1240.128271056563,5773.719146828256]},"frontendVersion":"1.18.9","node_versions":{"comfy-core":"0.3.19"},"VHS_latentpreview":true,"VHS_latentpreviewrate":0,"VHS_MetadataImage":true,"VHS_KeepIntermediate":true},"version":0.4} \ No newline at end of file diff --git a/nodes/metadata.py b/nodes/metadata.py index 00c06d9..1086d61 100644 --- a/nodes/metadata.py +++ b/nodes/metadata.py @@ -140,6 +140,125 @@ class Sage_ConstructMetadata(_BaseMetadataConstructor): ) return (metadata,) + +class Sage_ConstructMetadataFlexible(_BaseMetadataConstructor): + """Flexible metadata constructor with multiple style options.""" + + @classmethod + def INPUT_TYPES(cls): # type: ignore + inputs = cls._get_common_input_types() + inputs["required"]["metadata_style"] = ( + ["A1111 Full", "A1111 Lite", "Simple"], + {"default": "A1111 Full"} + ) + return inputs + + DESCRIPTION = ("Flexible metadata constructor supporting multiple styles: " + "A1111 Full (with LoRA hashes), A1111 Lite (simplified), " + "and Simple (basic parameters only).") + + def _build_simple_metadata_string(self, positive_string: str, negative_string: str, + sampler_info: dict, width: int, height: int) -> str: + """Build simple metadata string with just basic parameters.""" + lines = [positive_string] + + if negative_string.strip(): + lines.append(f"Negative prompt: {negative_string}") + + # Just the base parameters + base_params = self._build_base_params(sampler_info, width, height) + lines.append(base_params) + + return '\n'.join(lines[:-1]) + ', ' + lines[-1] if len(lines) > 1 else lines[0] + + def _process_lora_stack(self, lora_stack: Optional[list]) -> tuple[list[str], list[dict]]: + """Process LoRA stack to extract hashes and resource information.""" + if not lora_stack: + return [], [] + + lora_hashes = [] + resource_hashes = [] + + for lora in lora_stack: + lora_path = folder_paths.get_full_path_or_raise("loras", lora[0]) + lora_name = Path(lora_path).name + + pull_metadata(lora_path) + lora_data = get_model_dict(lora_path, lora[1]) + if lora_data: + resource_hashes.append(lora_data) + + lora_hash = cache.hash[lora_path] + lora_hashes.append(f"{lora_name}: {lora_hash}") + + return lora_hashes, resource_hashes + + def construct_metadata(self, model_info: dict, positive_string: str, negative_string: str, + width: int, height: int, sampler_info: dict, metadata_style: str, + lora_stack: Optional[list] = None) -> tuple[str]: + """Construct metadata using the selected style.""" + if metadata_style == "A1111 Full": + # Use the same logic as Sage_ConstructMetadata + lora_hashes, resource_hashes = self._process_lora_stack(lora_stack) + + # Build prompt section + prompt_with_loras = f"{positive_string} {lora_to_prompt(lora_stack)}" + lines = [prompt_with_loras] + + if negative_string.strip(): + lines.append(f"Negative prompt: {negative_string}") + + # Build parameter section + base_params = self._build_base_params(sampler_info, width, height) + params = ( + f"{base_params}, " + f"{mi.model_name_and_hash_as_str(model_info)}, " + f"Version: {COMFYUI_VERSION}" + ) + + # Add additional metadata if available + if resource_hashes: + params += f", Civitai resources: {json.dumps(resource_hashes)}" + if lora_hashes: + params += f", Lora hashes: {', '.join(lora_hashes)}" + + lines.append(params) + metadata = '\n'.join(lines[:-1]) + ', ' + lines[-1] if len(lines) > 1 else lines[0] + + elif metadata_style == "A1111 Lite": + # Use the same logic as Sage_ConstructMetadataLite + resource_hashes = collect_resource_hashes(model_info, lora_stack) + lines = [positive_string] + + if negative_string.strip(): + lines.append(f"Negative prompt: {negative_string}") + + # Build parameter section + base_params = self._build_base_params(sampler_info, width, height) + params = ( + f"{base_params}, " + f"Version: {COMFYUI_VERSION}, " + f"Civitai resources: {json.dumps(resource_hashes)}" + ) + lines.append(params) + + metadata = '\n'.join(lines[:-1]) + ', ' + lines[-1] if len(lines) > 1 else lines[0] + + elif metadata_style == "Simple": + # Simple style with just basic parameters + metadata = self._build_simple_metadata_string( + positive_string, negative_string, sampler_info, width, height + ) + else: + # Fallback to A1111 Full if unknown style + return self.construct_metadata( + model_info, positive_string, negative_string, width, height, + sampler_info, "A1111 Full", lora_stack + ) + + return (metadata,) + + class Sage_ConstructMetadataLite(_BaseMetadataConstructor): """Constructs simplified A1111-style metadata without LoRA hash details."""