GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - DarthAffe/StableDiffusion.NET: C# Wrapper for StableDiffusion.cpp

BranchesTags
Open more actions menu

Latest commit

 

History

177 Commits
177 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
Backends
Backends
 
 
Header
Header
 
 
Resources
Resources
 
 
StableDiffusion.NET
StableDiffusion.NET
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
StableDiffusion.NET.sln
StableDiffusion.NET.sln
 
 
StableDiffusion.NET.sln.DotSettings
StableDiffusion.NET.sln.DotSettings
 
 

Repository files navigation

StableDiffusion.NET

GitHub release (latest by date) Nuget GitHub GitHub 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-events
StableDiffusionCpp.InitializeEvents();

// Register the Log and Progress-events to capture stable-diffusion.cpp output
StableDiffusionCpp.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 created
using (DiffusionModel sd = new(DiffusionModelParameter.Create()
                                                       .WithModelPath(@"<path to model>")
											        // .WithVae(@"<optional path to vae>")
                                                       .WithMultithreading()
                                                       .WithFlashAttention()))
{
    // Create a image from a prompt
    Image<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 creation
    treeWithTiger = 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 model
using DiffusionModel qwenContext = 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 image
Image<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

About

C# Wrapper for StableDiffusion.cpp

Topics

aiimage-generationimage2imageimg2imgstable-diffusiontext2imagetxt2imagetxt2img

Resources

Readme
MIT license
Activity

Stars

120 stars

Watchers

5 watching

Forks

17 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.