Skip to content

DarthAffe/StableDiffusion.NET

Repository files navigation

StableDiffusion.NET

GitHub release (latest by date)NugetGitHubGitHub Repo stars

Based on https://github.com/leejet/stable-diffusion.cpp

Usage

Setup

Install the StableDiffusion.NET-Nuget and at least one of the Backend-Packages.
StableDiffusion.NET is using semantic versioning. Backend-packages are compatible as long as the version does only differ in the last digit.
If GPU-support is available it will prefer this over CPU.
If you want to add your own native-libraries or need more control over which backend to load, check the static Backends class.

Example

1. Create a model

stable diffusion:

// Enable the Log- and Progress-eventsStableDiffusionCpp.InitializeEvents();// Register the Log and Progress-events to capture stable-diffusion.cpp outputStableDiffusionCpp.Log+=(_,args)=>Console.WriteLine($"LOG [{args.Level}]: {args.Text}");StableDiffusionCpp.Progress+=(_,args)=>Console.WriteLine($"PROGRESS {args.Step} / {args.Steps} ({(args.Progress*100):N2} %) {args.IterationsPerSecond:N2} it/s ({args.Time})");Image<ColorRGB>?treeWithTiger;// Load a StableDiffusion model in a using block to unload it again after the two images are createdusing(DiffusionModelsd=new(DiffusionModelParameter.Create().WithModelPath(@"<path to model>")// .WithVae(@"<optional path to vae>").WithMultithreading().WithFlashAttention())){// Create a image from a promptImage<ColorRGB>?tree=sd.GenerateImage(ImageGenerationParameter.TextToImage("A beautiful tree standing on a small hill").WithSDXLDefaults());// (optional) Save the image (requires the HPPH System.Dawing or SkiaSharp extension)File.WriteAllBytes("image1.png",tree.ToPng());// Use the previously created image for an image-to-image creationtreeWithTiger=sd.GenerateImage(ImageGenerationParameter.ImageToImage("A cute tiger in front of a tree on a small hill",tree).WithSDXLDefaults());File.WriteAllBytes("image2.png",treeWithTiger.ToPng());}// Load the qwen image edit modelusingDiffusionModelqwenContext=new(DiffusionModelParameter.Create().WithDiffusionModelPath(@"<Qwen-Image-Edit-2509-path>").WithQwen2VLPath(@"<Qwen2.5-VL-7B-Instruct-path>").WithQwen2VLVisionPath(@"<Qwen2.5-VL-7B-Instruct.mmproj-path>").WithVae(@"<qwen_image_vae-path>").WithMultithreading().WithFlashAttention().WithFlowShift(3).WithOffloadedParamsToCPU().WithImmediatelyFreedParams());// Perform an edit on the previously created imageImage<ColorRGB>?tigerOnMoon=qwenContext.GenerateImage(ImageGenerationParameter.TextToImage("Remove the background and place the tree and the tiger on the moon.").WithSize(1024,1024).WithCfg(2.5f).WithSampler(Sampler.Euler).WithRefImages(treeWithTiger));File.WriteAllBytes("image3.png",tigerOnMoon.ToPng());

To process the resulting image further you can write your own extensions or install one of the HPPH-extension sets:
HPPH.System.Drawing
HPPH.SkiaSharp

Packages

No packages published

Contributors 3

  •  
  •  
  •