Core .NET client library for Stable Diffusion WebUI (AUTOMATIC1111) API without dependency injection. Lightweight package with minimal dependencies. Supports Text-to-Image, Image-to-Image generation, model management, progress tracking, and more. Compatible with .NET Standard 2.0+, .NET Framework 4.7.2+, .NET Core 2.0+, .NET 5.0+.
$ dotnet add package StableDiffusionNet.CoreCore библиотека для работы с Stable Diffusion WebUI API.
dotnet add package StableDiffusionNet.Core
Или через NuGet Package Manager:
Install-Package StableDiffusionNet.Core
using StableDiffusionNet;
using StableDiffusionNet.Models.Requests;
// Создание клиента с настройками по умолчанию
var client = StableDiffusionClientBuilder.CreateDefault("http://localhost:7860");
// Генерация изображения
var request = new TextToImageRequest
{
Prompt = "a beautiful sunset over mountains, highly detailed, 4k",
NegativePrompt = "blurry, low quality",
Width = 512,
Height = 512,
Steps = 30
};
var response = await client.TextToImage.GenerateAsync(request);
using StableDiffusionNet;
using StableDiffusionNet.Logging;
// Создание клиента с дополнительными настройками
var client = new StableDiffusionClientBuilder()
.WithBaseUrl("http://localhost:7860")
.WithTimeout(600)
.WithRetry(retryCount: 3, retryDelayMilliseconds: 1000)
.WithApiKey("your-api-key-if-needed")
.WithDetailedLogging()
.Build();
// Реализуйте IStableDiffusionLogger
public class ConsoleLogger : IStableDiffusionLogger
{
public void Log(LogLevel logLevel, string message)
{
Console.WriteLine($"[{logLevel}] {message}");
}
public void Log(LogLevel logLevel, Exception exception, string message)
{
Console.WriteLine($"[{logLevel}] {message}: {exception}");
}
public bool IsEnabled(LogLevel logLevel) => true;
}
// Реализуйте IStableDiffusionLoggerFactory
public class ConsoleLoggerFactory : IStableDiffusionLoggerFactory
{
public IStableDiffusionLogger CreateLogger<T>() => new ConsoleLogger();
public IStableDiffusionLogger CreateLogger(string categoryName) => new ConsoleLogger();
}
// Используйте с Builder
var client = new StableDiffusionClientBuilder()
.WithBaseUrl("http://localhost:7860")
.WithLoggerFactory(new ConsoleLoggerFactory())
.Build();
var request = new TextToImageRequest
{
Prompt = "a cute cat, highly detailed",
Width = 512,
Height = 512,
Steps = 20,
CfgScale = 7.5
};
var response = await client.TextToImage.GenerateAsync(request);
ImageHelper.Base64ToImage(response.Images[0], "output.png");var initImage = ImageHelper.ImageToBase64("input.png");
var request = new ImageToImageRequest
{
InitImages = new List<string> { initImage },
Prompt = "transform into van gogh style",
DenoisingStrength = 0.7
};
var response = await client.ImageToImage.GenerateAsync(request);// Получить список моделей
var models = await client.Models.GetModelsAsync();
// Получить текущую модель
var currentModel = await client.Models.GetCurrentModelAsync();
// Установить модель
await client.Models.SetModelAsync("sd_xl_base_1.0.safetensors");var progress = await client.Progress.GetProgressAsync();
Console.WriteLine($"Progress: {progress.Progress:P}");Библиотека включает надежную собственную реализацию retry с экспоненциальной задержкой:
using StableDiffusionNet.Exceptions;
try
{
var response = await client.TextToImage.GenerateAsync(request);
}
catch (ApiException ex)
{
Console.WriteLine($"API Error: {ex.Message}");
Console.WriteLine($"Status Code: {ex.StatusCode}");
Console.WriteLine($"Response: {ex.ResponseBody}");
}
catch (ConfigurationException ex)
{
Console.WriteLine($"Configuration Error: {ex.Message}");
}
catch (StableDiffusionException ex)
{
Console.WriteLine($"General Error: {ex.Message}");
}Если вам нужна интеграция с Microsoft.Extensions.DependencyInjection, используйте пакет StableDiffusionNet.DependencyInjection:
dotnet add package StableDiffusionNet.DependencyInjectionservices.AddStableDiffusion(options =>
{
options.BaseUrl = "http://localhost:7860";
});MIT License