Markdown Converter
Agent skill for markdown-converter
This is a UE5 Editor plugin that generates AI-powered documentation for Blueprint assets. It analyzes Blueprint graphs, extracts structured data, and uses Ollama API to create human-readable explanations and Markdown documentation.
Sign in to like and favorite skills
This is a UE5 Editor plugin that generates AI-powered documentation for Blueprint assets. It analyzes Blueprint graphs, extracts structured data, and uses Ollama API to create human-readable explanations and Markdown documentation.
Specification Framework: This project uses GitHub Spec Kit (github.com/github/spec-kit) for feature specifications, following their best practices and philosophy for clear, actionable, and stakeholder-focused requirements.
FBlueprintDocModule handles UI integration and orchestrates processingFBlueprintTraverser extracts functions, variables, and node connections from Blueprint graphsFLLMExplanationGenerator sends data chunks to Ollama API for explanationsFDocumentationFileGenerator converts JSON structures to Markdown filesFBlueprintProcessingQueueManager handles multiple Blueprints sequentially// why: explanation commentsUCLASS, UPROPERTY, UFUNCTION)FBlueprintNodeDetailsSource/blueprintdoc/ ├── Public/Core/ # Main module classes ├── Public/LLM/ # AI integration ├── Public/Documentation/ # Output generation ├── Private/ # Implementation details └── BlueprintDoc.Build.cs # Module dependencies
Plugins/blueprintdoc/Output/ folderbSkipLLM = true in FLLMExplanationGenerator to test JSON generation without API callsResponse.txt for API response debuggingUE_LOG for debugging LLM interactionsBlueprintTraverser.cppFBlueprintNodeDetails if new connection types neededif (!Blueprint) { UE_LOG(LogTemp, Error, TEXT("Invalid Blueprint provided")); return false; }
TSharedPtr<FJsonObject> JsonObj = MakeShareable(new FJsonObject()); JsonObj->SetStringField(TEXT("name"), FunctionDetails.Name); // Use FJsonObjectConverter for complex structs
TSharedRef<IHttpRequest> Request = FHttpModule::Get().CreateRequest(); Request->OnProcessRequestComplete().BindRaw(this, &FClass::OnRequestComplete); Request->ProcessRequest();
for (UEdGraphNode* Node : Graph->Nodes) { if (ShouldSkipNode(Node)) continue; // Process node connections and properties }