Skip to content

Commit

Permalink
Fix broken NovelAI metadata reading introduced by FooocusMRE.
Browse files Browse the repository at this point in the history
  • Loading branch information
RupertAvery committed Jan 12, 2024
1 parent f8ed439 commit 51ce55f
Showing 1 changed file with 37 additions and 13 deletions.
50 changes: 37 additions & 13 deletions Diffusion.Scanner/Metadata.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System.Globalization;
using MetadataExtractor.Formats.WebP;
using Diffusion.Common;
using System.Linq;

namespace Diffusion.IO;

Expand Down Expand Up @@ -57,6 +58,8 @@ public enum MetaFormat

decimal aestheticScore = 0;

//string tagData = null;

foreach (var directory in directories)
{
if (directory.Name == "PNG-tEXt")
Expand All @@ -67,19 +70,36 @@ public enum MetaFormat
{
if (tag.Description.StartsWith("parameters:"))
{
var isJson = tag.Description.Substring("parameters: ".Length).Trim().StartsWith("{");
format = isJson ? MetaFormat.RuinedFooocus : MetaFormat.A1111;
fileParameters = isJson ? ReadRuinedFooocusParameters(tag.Description) : ReadA111Parameters(tag.Description);
if (fileParameters == null)
{
var isJson = tag.Description.Substring("parameters: ".Length).Trim().StartsWith("{");
format = isJson ? MetaFormat.RuinedFooocus : MetaFormat.A1111;
fileParameters = isJson ? ReadRuinedFooocusParameters(tag.Description) : ReadA111Parameters(tag.Description);
}
}
else if (tag.Description.StartsWith("Comment:"))
{
format = MetaFormat.FooocusMRE;
fileParameters = ReadFooocusMREParameters(tag.Description);
if (fileParameters == null)
{
if (directory.Tags.Any(t => t.Description == "Software: NovelAI"))
{
format = MetaFormat.NovelAI;
fileParameters = ReadNovelAIParameters(file, directories);
}
else
{
format = MetaFormat.FooocusMRE;
fileParameters = ReadFooocusMREParameters(tag.Description);
}
}
}
else if (tag.Description == "Software: NovelAI")
{
format = MetaFormat.NovelAI;
fileParameters = ReadNovelAIParameters(file, directories);
if (fileParameters == null)
{
format = MetaFormat.NovelAI;
fileParameters = ReadNovelAIParameters(file, directories);
}
}
else if (tag.Description.StartsWith("Dream: "))
{
Expand All @@ -98,9 +118,12 @@ public enum MetaFormat
}
else if (tag.Description.StartsWith("prompt: "))
{
var isJson = tag.Description.Substring("prompt: ".Length).Trim().StartsWith("{");
format = isJson ? MetaFormat.ComfyUI : MetaFormat.EasyDiffusion;
fileParameters = isJson ? ReadComfyUIParameters(file, tag.Description) : ReadEasyDiffusionParameters(file, directories);
if (fileParameters == null)
{
var isJson = tag.Description.Substring("prompt: ".Length).Trim().StartsWith("{");
format = isJson ? MetaFormat.ComfyUI : MetaFormat.EasyDiffusion;
fileParameters = isJson ? ReadComfyUIParameters(file, tag.Description) : ReadEasyDiffusionParameters(file, directories);
}
}
else if (tag.Description.StartsWith("Score:"))
{
Expand Down Expand Up @@ -153,7 +176,7 @@ public enum MetaFormat
{
fileParameters ??= new FileParameters();
fileParameters.AestheticScore = aestheticScore;
if(fileParameters.OtherParameters == null)
if (fileParameters.OtherParameters == null)
{
fileParameters.OtherParameters = $"aesthetic_score: {fileParameters.AestheticScore}";
}
Expand Down Expand Up @@ -653,6 +676,7 @@ private static FileParameters ReadNovelAIParameters(string file, IEnumerable<Dir

var propList = new List<string>();


if (TryFindTag(directories, "PNG-tEXt", "Textual Data", tag => tag.Description.StartsWith("Comment:"), out tag))
{
var json = JsonDocument.Parse(tag.Description.Substring("Comment: ".Length));
Expand All @@ -666,7 +690,7 @@ private static FileParameters ReadNovelAIParameters(string file, IEnumerable<Dir

foreach (var property in properties)
{
if (property.Name != "uc")
if (property.Name != "uc" && property.Name != "prompt")
{
propList.Add($"{property.Name}: {property.Value.ToString()}");
}
Expand Down Expand Up @@ -1105,7 +1129,7 @@ private static FileParameters ReadAutomatic1111Parameters(string file, IEnumerab
{
fileParameters ??= new FileParameters();
fileParameters.AestheticScore = aestheticScore;
if(fileParameters.OtherParameters == null)
if (fileParameters.OtherParameters == null)
{
fileParameters.OtherParameters = $"aesthetic_score: {fileParameters.AestheticScore}";
}
Expand Down

0 comments on commit 51ce55f

Please sign in to comment.