mirror of
https://github.com/SamueleLorefice/ComfySharp
synced 2026-01-15 01:35:48 +00:00
Added special cases handling and a setting class for it to be defined externally
This commit is contained in:
@@ -23,14 +23,14 @@ public class ComfyClient {
|
||||
nodes= new();
|
||||
|
||||
try {
|
||||
dbGenerator = new(ConversionSettings.FromFile("conv_config.json"));
|
||||
dbGenerator = new(ConversionSettings.FromFile(Path.Combine(Environment.CurrentDirectory, "conv_config.json")));
|
||||
}
|
||||
catch (Exception e) {
|
||||
Console.WriteLine(e);
|
||||
}
|
||||
finally {
|
||||
ConversionSettings settings = new();
|
||||
settings.Save("conv_config.json");
|
||||
settings.Save( "conv_config.json");
|
||||
dbGenerator = new(settings);
|
||||
Console.WriteLine("created empty settings file");
|
||||
}
|
||||
@@ -68,7 +68,7 @@ public class ComfyClient {
|
||||
|
||||
if (req is { IsSuccessStatusCode: true, Content: not null }) {
|
||||
var doc = await req.Content.ReadFromJsonAsync<JsonDocument>();
|
||||
|
||||
dbGenerator.GenerateClasses(doc);
|
||||
//ObjectInfoParser.Parse(doc, out nodes);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="conv_config.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -1,29 +1,31 @@
|
||||
using System.Text.Json;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace ComfySharp;
|
||||
|
||||
[Serializable]
|
||||
[DataContract, JsonSerializable(typeof(ConversionSettings))]
|
||||
public class ConversionSettings {
|
||||
public List<string> EnumConvertAsString = new();
|
||||
public List<string> EnumConvertAsBool = new();
|
||||
|
||||
[DataMember(IsRequired = true)] public List<string> EnumConvertAsString = new();
|
||||
[DataMember(IsRequired = true)] public List<string> EnumConvertAsBool = new();
|
||||
|
||||
public static ConversionSettings FromFile(string path) {
|
||||
if (!File.Exists(path)) throw new FileNotFoundException("Could not find settings file", path);
|
||||
string json = File.ReadAllText(path);
|
||||
ConversionSettings? settings = FromJson(json);
|
||||
return settings;
|
||||
}
|
||||
|
||||
|
||||
public static ConversionSettings FromJson(string json) {
|
||||
ConversionSettings? settings = JsonSerializer.Deserialize<ConversionSettings>(json);
|
||||
if(settings is null) throw new NullReferenceException("Could not deserialize settings file");
|
||||
if (settings is null) throw new NullReferenceException("Could not deserialize settings file");
|
||||
return settings;
|
||||
}
|
||||
|
||||
|
||||
public static string ToJson(ConversionSettings settings) => JsonSerializer.Serialize(settings);
|
||||
|
||||
|
||||
public void Save(string path) => File.WriteAllText(path, ToJson());
|
||||
|
||||
public string ToJson() => JsonSerializer.Serialize(this);
|
||||
|
||||
|
||||
public string ToJson() => JsonSerializer.Serialize(this, new JsonSerializerOptions { WriteIndented = true, IncludeFields = true });
|
||||
|
||||
}
|
||||
@@ -18,6 +18,9 @@ public class NodeDBGenerator {
|
||||
private Dictionary<string, List<string>> knownEnums = new();
|
||||
public Dictionary<string, List<string>> GetKnownEnums() => knownEnums;
|
||||
|
||||
private Dictionary<string, List<string>> knownStringLists = new();
|
||||
public Dictionary<string, List<string>> GetKnownStringLists() => knownStringLists;
|
||||
|
||||
public int Count => nodes.Count;
|
||||
private int typeFields = 0;
|
||||
private int enumFields = 0;
|
||||
@@ -62,6 +65,26 @@ public class NodeDBGenerator {
|
||||
enumFields++;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds or updates a known string list, avoids duplicates.
|
||||
/// </summary>
|
||||
/// <param name="type">stringList typename</param>
|
||||
/// <param name="values">Collection of string values for this StringList</param>
|
||||
private void AddKnownStringList(string type, ICollection<string> values) {
|
||||
if (!knownStringLists.ContainsKey(type)) {
|
||||
knownStringLists.Add(type, values.ToList());
|
||||
Console.WriteLine("Added new known stringList: {0}", type);
|
||||
}
|
||||
else {
|
||||
values.ToList().ForEach(value => {
|
||||
if (!knownStringLists[type].Contains(value)) {
|
||||
knownStringLists[type].Add(value);
|
||||
Console.WriteLine("Added new value to already known stringList: {0}", value);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void GenerateClasses(JsonDocument document) {
|
||||
foreach (var node in document.RootElement.EnumerateObject()) ScanNode(node);
|
||||
|
||||
@@ -120,13 +143,16 @@ public class NodeDBGenerator {
|
||||
Console.WriteLine("Encountered a special case: {0}", inputProperty.Name);
|
||||
return;
|
||||
}
|
||||
// these are all lists of strings and not enums
|
||||
if (inputProperty.Name == "image" || inputProperty.Name == "ckpt_name" || inputProperty.Name == "lora_name" || inputProperty.Name == "control_net_name"){
|
||||
|
||||
}
|
||||
List<string> enumValues = new();
|
||||
|
||||
List<string> enumValues = new(); //holds all the values of the enum, valid for both following cases
|
||||
inputProperty.Value[0].EnumerateArray().ToList().ForEach(value => enumValues.Add(value.ToString()));
|
||||
AddKnownEnum(inputProperty.Name, enumValues);
|
||||
|
||||
// these are all lists of strings and not enums
|
||||
if (settings.EnumConvertAsString.Contains(inputProperty.Name)) {
|
||||
AddKnownStringList(inputProperty.Name, enumValues);
|
||||
} else {
|
||||
AddKnownEnum(inputProperty.Name, enumValues);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"EnumConvertAsString": [
|
||||
"ckpt_name",
|
||||
"image",
|
||||
"lora_name",
|
||||
"control_net_name",
|
||||
"config_name",
|
||||
"clip_name",
|
||||
"clip_name1",
|
||||
"clip_name2",
|
||||
"unet_name",
|
||||
"model_path",
|
||||
"hypernetwork_name",
|
||||
"model_name",
|
||||
"Select to add LoRA",
|
||||
"Select to add Wildcard",
|
||||
"preset",
|
||||
"preset_repo_id",
|
||||
"checkpoint",
|
||||
"video",
|
||||
"model",
|
||||
"bbox_detector",
|
||||
"pose_estimator",
|
||||
"preprocessor",
|
||||
"cascade_xml",
|
||||
"style",
|
||||
"style1",
|
||||
"style2",
|
||||
"style3",
|
||||
"style4"
|
||||
],
|
||||
"EnumConvertAsBool": []
|
||||
}
|
||||
Reference in New Issue
Block a user