diff --git a/Content/Conceptor.uasset b/Content/Conceptor.uasset index 98bcfdc..067b32b 100644 Binary files a/Content/Conceptor.uasset and b/Content/Conceptor.uasset differ diff --git a/Source/Conceptor/Private/ConceptorWidgetBase.cpp b/Source/Conceptor/Private/ConceptorWidgetBase.cpp index 1d33734..596a199 100644 --- a/Source/Conceptor/Private/ConceptorWidgetBase.cpp +++ b/Source/Conceptor/Private/ConceptorWidgetBase.cpp @@ -388,7 +388,6 @@ void UConceptorWidgetBase::UpdateModels() { FHttpModule* Http = &FHttpModule::Get(); TSharedRef Request = Http->CreateRequest(); Checkpoints.Empty(); - ControlNets.Empty(); Request->OnProcessRequestComplete().BindLambda([this](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful) { @@ -400,23 +399,20 @@ void UConceptorWidgetBase::UpdateModels() { if (FJsonSerializer::Deserialize(JsonReader, OutValue)) { MainObject = OutValue->AsObject(); - TArray> FilesArray = MainObject->GetArrayField("files"); + TSharedPtr CheckpointLoader = MainObject->GetObjectField("CheckpointLoaderSimple"); + TSharedPtr InputField = CheckpointLoader->GetObjectField("input"); + TSharedPtr RequiredField = InputField->GetObjectField("required"); + TArray> CkeckpointsArray = RequiredField->GetArrayField("ckpt_name"); - for (TSharedPtr& Value : FilesArray) { - TSharedPtr FileObject = Value->AsObject(); - FString FileName; - bool IsCheckpointsFile = FileObject->GetStringField("path").Split("checkpoints\\", nullptr, &FileName); - bool IsControlNetFile = FileObject->GetStringField("path").Split("controlnet\\", nullptr, &FileName); + for (TSharedPtr& Checkpoint : CkeckpointsArray) { + TArray> FileObject = Checkpoint->AsArray(); + if (FileObject.IsEmpty()) continue; - if ((IsCheckpointsFile || IsControlNetFile) && (FileName.Contains(".safetensors") || FileName.Contains(".pth"))) { - if (IsCheckpointsFile) { - Checkpoints.Add(FileName); - UE_LOG(LogTemp, Warning, TEXT("%s added to Checkpoints"), *FileName); - } - else { - ControlNets.Add(FileName); - UE_LOG(LogTemp, Warning, TEXT("%s added to ControlNets"), *FileName); - } + FString FileName = FileObject[0]->AsString(); + + if (FileName.Contains(".safetensors") || FileName.Contains(".pth")) { + Checkpoints.Add(FileName); + UE_LOG(LogTemp, Warning, TEXT("%s added to Checkpoints"), *FileName); } } } @@ -424,7 +420,46 @@ void UConceptorWidgetBase::UpdateModels() { OnModelsUpdated(); }); - Request->SetURL("http://127.0.0.1:8188/internal/files?directory=models"); + Request->SetURL("http://127.0.0.1:8188/api/object_info"); + Request->SetVerb("GET"); + Request->ProcessRequest(); +} + +void UConceptorWidgetBase::UpdateControlNets() { + FHttpModule* Http = &FHttpModule::Get(); + TSharedRef Request = Http->CreateRequest(); + ControlNets.Empty(); + + Request->OnProcessRequestComplete().BindLambda([this](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful) + { + if (bWasSuccessful && Response.IsValid()) + { + TSharedRef> JsonReader = TJsonReaderFactory::Create(Response->GetContentAsString()); + TSharedPtr OutValue; + TSharedPtr MainObject; + + if (FJsonSerializer::Deserialize(JsonReader, OutValue)) { + MainObject = OutValue->AsObject(); + TSharedPtr CNLoader = MainObject->GetObjectField("ControlNetLoader"); + TSharedPtr InputField = CNLoader->GetObjectField("input"); + TSharedPtr RequiredField = InputField->GetObjectField("required"); + TArray> CNArray = RequiredField->GetArrayField("control_net_name"); + TArray> FilenameArray = CNArray[0]->AsArray(); + + for (TSharedPtr& ControlNet : FilenameArray) { + FString FileName = ControlNet->AsString(); + + if (FileName.Contains(".safetensors") || FileName.Contains(".pth")) { + ControlNets.Add(FileName); + UE_LOG(LogTemp, Warning, TEXT("%s added to ControlNets"), *FileName); + } + } + } + } + OnModelsUpdated(); + }); + + Request->SetURL("http://127.0.0.1:8188/api/object_info"); Request->SetVerb("GET"); Request->ProcessRequest(); } diff --git a/Source/Conceptor/Public/ConceptorWidgetBase.h b/Source/Conceptor/Public/ConceptorWidgetBase.h index a1ebc31..a4bbf1b 100644 --- a/Source/Conceptor/Public/ConceptorWidgetBase.h +++ b/Source/Conceptor/Public/ConceptorWidgetBase.h @@ -154,6 +154,9 @@ public: UFUNCTION(BlueprintCallable, Category = "Conceptor") void UpdateModels(); + UFUNCTION(BlueprintCallable, Category = "Conceptor") + void UpdateControlNets(); + UFUNCTION(BlueprintNativeEvent, Category = "Conceptor") void OnModelsUpdated(); virtual void OnModelsUpdated_Implementation();