Skip to content

Commit da70012

Browse files
author
David Khristepher Santos
committed
Merge remote-tracking branch 'Kitagawa65536/comfyui-animated-webp-metadata'
2 parents fff2aee + 21b597a commit da70012

1 file changed

Lines changed: 112 additions & 1 deletion

File tree

Diffusion.Scanner/Metadata.cs

Lines changed: 112 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,9 +560,120 @@ private static FileType GetFileType(Stream stream)
560560
{
561561
IEnumerable<Directory> directories = WebPMetadataReader.ReadMetadata(stream);
562562

563+
var format = MetaFormat.Unknown;
564+
563565
try
564566
{
565-
fileParameters = ReadAutomatic1111Parameters(file, directories);
567+
// Added ComfyUI metadata loading
568+
foreach (var directory in directories)
569+
{
570+
if (directory.Name == "Exif IFD0")
571+
{
572+
foreach (var tag in directory.Tags)
573+
{
574+
switch (tag.Name)
575+
{
576+
case "Make":
577+
// The workflow is stored in the Make tag.
578+
if (!string.IsNullOrEmpty(tag.Description))
579+
{
580+
try
581+
{
582+
// Check if it is JSON format
583+
var makeData = tag.Description.Trim().Substring("workflow:".Length);
584+
if (makeData.StartsWith("{"))
585+
{
586+
format = MetaFormat.ComfyUI;
587+
fileParameters ??= new FileParameters();
588+
fileParameters.Workflow = makeData;
589+
590+
var parser = new ComfyUIParser();
591+
var pnodes = parser.Parse(fileParameters.WorkflowId, fileParameters.Workflow);
592+
fileParameters.Nodes = pnodes;
593+
594+
// Generate WorkflowId
595+
var root = JsonDocument.Parse(makeData);
596+
fileParameters.WorkflowId = GetHashCode(root.RootElement).ToString("X");
597+
}
598+
}
599+
catch (Exception e)
600+
{
601+
Logger.Log($"Error parsing Make tag as ComfyUI workflow: {e.Message}");
602+
}
603+
}
604+
break;
605+
606+
case "Model":
607+
// The Model tag contains prompt data
608+
if (!string.IsNullOrEmpty(tag.Description))
609+
{
610+
try
611+
{
612+
// Check if it is JSON format
613+
var modelData = tag.Description.Trim().Substring("prompt:".Length);
614+
if (modelData.StartsWith("{"))
615+
{
616+
format = MetaFormat.ComfyUI;
617+
var tempParameters = ReadComfyUIParameters($"prompt: {modelData}", false);
618+
619+
if (fileParameters == null)
620+
{
621+
fileParameters = tempParameters;
622+
}
623+
else
624+
{
625+
// If both workflow and prompt exist, the prompt information is merged.
626+
if (tempParameters.Nodes != null)
627+
{
628+
fileParameters.WorkflowId = tempParameters.WorkflowId;
629+
fileParameters.Workflow = tempParameters.Workflow;
630+
fileParameters.Nodes = tempParameters.Nodes;
631+
}
632+
}
633+
}
634+
}
635+
catch (Exception e)
636+
{
637+
Logger.Log($"Error parsing Model tag as ComfyUI prompt: {e.Message}");
638+
}
639+
}
640+
break;
641+
}
642+
}
643+
}
644+
// Check User Comment in Exif SubIFD (supports the conventional A1111 format)
645+
else if (directory.Name == "Exif SubIFD")
646+
{
647+
foreach (var tag in directory.Tags)
648+
{
649+
if (tag.Name == "User Comment")
650+
{
651+
if (tag.Description.StartsWith("{\"prompt\":"))
652+
{
653+
format = MetaFormat.ComfyUI;
654+
var tempParameters = ReadComfyUIParameters(tag.Description, true);
655+
656+
if (fileParameters == null)
657+
{
658+
fileParameters = tempParameters;
659+
}
660+
else
661+
{
662+
fileParameters.WorkflowId = tempParameters.WorkflowId;
663+
fileParameters.Workflow = tempParameters.Workflow;
664+
fileParameters.Nodes = tempParameters.Nodes;
665+
}
666+
}
667+
}
668+
}
669+
}
670+
}
671+
672+
// If ComfyUI metadata is not found, load the legacy A1111 parameters
673+
if (fileParameters == null)
674+
{
675+
fileParameters = ReadAutomatic1111Parameters(file, directories);
676+
}
566677
}
567678
catch (Exception e)
568679
{

0 commit comments

Comments
 (0)