Compare commits

...

11 Commits

Author SHA1 Message Date
dd01e98caa Merge 2025-10-27 20:00:27 +01:00
68064e282d Updated readme 2025-10-27 19:56:48 +01:00
4348323abc Added Params-Extension for FreeParamsImmediately 2025-10-27 19:56:39 +01:00
e6297d485f Mapped FreeParamsImmediately-Parameter 2025-10-27 19:46:46 +01:00
305d0a6f3a Updated backends-build 2025-10-27 19:43:07 +01:00
e25d8ad5c9 Removed unused method 2025-10-27 19:34:14 +01:00
c214f0c5a1
Disabled cuda11-builds for now 2025-07-04 14:38:11 +02:00
8834ab9543
Update backends.yml 2025-07-04 09:59:04 +02:00
dd8e41cca1
Update backends.yml 2025-07-03 23:47:35 +02:00
1db7ae59fb
Update backends.yml 2025-07-03 22:29:26 +02:00
849845b0a2
Merge pull request #58 from DarthAffe/Chroma
Added chroma model parameters
2025-06-30 23:51:51 +02:00
10 changed files with 38 additions and 128 deletions

View File

@ -371,41 +371,6 @@ jobs:
name: linux-cuda12 name: linux-cuda12
path: ./build/bin/libstable-diffusion.so path: ./build/bin/libstable-diffusion.so
linux-cuda11:
runs-on: ubuntu-latest
container: nvidia/cuda:11.8.0-devel-ubuntu22.04
steps:
- name: Install dependencies
env:
DEBIAN_FRONTEND: noninteractive
run: |
apt update
apt install -y cmake build-essential ninja-build libgomp1 git
- name: Checkout
id: checkout
uses: actions/checkout@v4.2.2
with:
repository: 'leejet/stable-diffusion.cpp'
ref: '${{ github.event.inputs.commit }}'
submodules: recursive
- name: Build
id: cmake_build
run: |
mkdir build
cd build
cmake .. -DSD_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES="61;75;86;89" -DSD_BUILD_SHARED_LIBS=ON
cmake --build . --config Release
- name: Upload artifact
id: upload_artifact
uses: actions/upload-artifact@v4.6.1
with:
name: linux-cuda11
path: ./build/bin/libstable-diffusion.so
linux-sycl: linux-sycl:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -526,13 +491,11 @@ jobs:
needs: needs:
- windows-cpu - windows-cpu
- windows-cuda12 - windows-cuda12
- windows-cuda11
# - windows-sycl # - windows-sycl
- windows-hip - windows-hip
- windows-vulkan - windows-vulkan
- linux-cpu - linux-cpu
- linux-cuda12 - linux-cuda12
- linux-cuda11
- linux-sycl - linux-sycl
- linux-hip - linux-hip
- osx-cpu - osx-cpu
@ -559,13 +522,10 @@ jobs:
id: pack id: pack
run: | run: |
nuget pack ./Backends/StableDiffusion.NET.Backend.Cpu.nuspec -version ${{ github.event.inputs.version }} nuget pack ./Backends/StableDiffusion.NET.Backend.Cpu.nuspec -version ${{ github.event.inputs.version }}
nuget pack ./Backends/StableDiffusion.NET.Backend.Cuda11.Windows.nuspec -version ${{ github.event.inputs.version }}
nuget pack ./Backends/StableDiffusion.NET.Backend.Cuda12.Windows.nuspec -version ${{ github.event.inputs.version }} nuget pack ./Backends/StableDiffusion.NET.Backend.Cuda12.Windows.nuspec -version ${{ github.event.inputs.version }}
nuget pack ./Backends/StableDiffusion.NET.Backend.Cuda11.Linux.nuspec -version ${{ github.event.inputs.version }}
nuget pack ./Backends/StableDiffusion.NET.Backend.Cuda12.Linux.nuspec -version ${{ github.event.inputs.version }} nuget pack ./Backends/StableDiffusion.NET.Backend.Cuda12.Linux.nuspec -version ${{ github.event.inputs.version }}
nuget pack ./Backends/StableDiffusion.NET.Backend.Cuda.nuspec -version ${{ github.event.inputs.version }} nuget pack ./Backends/StableDiffusion.NET.Backend.Cuda.nuspec -version ${{ github.event.inputs.version }}
nuget pack ./Backends/StableDiffusion.NET.Backend.Rocm.nuspec -version ${{ github.event.inputs.version }} nuget pack ./Backends/StableDiffusion.NET.Backend.Rocm.nuspec -version ${{ github.event.inputs.version }}
nuget pack ./Backends/StableDiffusion.NET.Backend.Sycl.nuspec -version ${{ github.event.inputs.version }}
nuget pack ./Backends/StableDiffusion.NET.Backend.Vulkan.nuspec -version ${{ github.event.inputs.version }} nuget pack ./Backends/StableDiffusion.NET.Backend.Vulkan.nuspec -version ${{ github.event.inputs.version }}
- name: Upload artifacts - name: Upload artifacts

View File

@ -9,15 +9,13 @@
<license type="expression">MIT</license> <license type="expression">MIT</license>
<icon>sd_net_cuda.png</icon> <icon>sd_net_cuda.png</icon>
<projectUrl>https://github.com/DarthAffe/StableDiffusion.NET</projectUrl> <projectUrl>https://github.com/DarthAffe/StableDiffusion.NET</projectUrl>
<description>CUDA-Backend (11 and 12) for StableDiffusion.NET.</description> <description>CUDA-Backend (12) for StableDiffusion.NET.</description>
<releaseNotes></releaseNotes> <releaseNotes></releaseNotes>
<copyright>Copyright © Darth Affe 2024</copyright> <copyright>Copyright © Darth Affe 2024</copyright>
<readme>readme.md</readme> <readme>readme.md</readme>
<dependencies> <dependencies>
<dependency id="StableDiffusion.NET.Backend.Cuda11.Windows" version="$version$" />
<dependency id="StableDiffusion.NET.Backend.Cuda12.Windows" version="$version$" /> <dependency id="StableDiffusion.NET.Backend.Cuda12.Windows" version="$version$" />
<dependency id="StableDiffusion.NET.Backend.Cuda11.Linux" version="$version$" />
<dependency id="StableDiffusion.NET.Backend.Cuda12.Linux" version="$version$" /> <dependency id="StableDiffusion.NET.Backend.Cuda12.Linux" version="$version$" />
</dependencies> </dependencies>
</metadata> </metadata>

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata>
<id>StableDiffusion.NET.Backend.Cuda11.Linux</id>
<version>$version$</version>
<title>StableDiffusion.NET.Backend.Cuda11.Linux</title>
<authors>Darth Affe &amp; stable-diffusion.cpp Authors</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<icon>sd_net_cuda.png</icon>
<projectUrl>https://github.com/DarthAffe/StableDiffusion.NET</projectUrl>
<description>CUDA 11 Linux Backend for StableDiffusion.NET.</description>
<releaseNotes></releaseNotes>
<copyright>Copyright © Darth Affe 2024</copyright>
<readme>readme.md</readme>
</metadata>
<files>
<file src="StableDiffusion.NET.Backend.props" target="build/net8.0/StableDiffusion.NET.Backend.Cuda.props" />
<file src="linux-cuda11/libstable-diffusion.so" target="runtimes\linux-x64\native\cuda11\libstable-diffusion.so" />
<file src="sd_net_cuda.png" target="sd_net_cuda.png" />
<file src="readme.md" target="readme.md" />
<file src="ggml.txt" target="ggml.txt" />
<file src="stable-diffusion.cpp.txt" target="stable-diffusion.cpp.txt" />
</files>
</package>

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata>
<id>StableDiffusion.NET.Backend.Cuda11.Windows</id>
<version>$version$</version>
<title>StableDiffusion.NET.Backend.Cuda11.Windows</title>
<authors>Darth Affe &amp; stable-diffusion.cpp Authors</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<icon>sd_net_cuda.png</icon>
<projectUrl>https://github.com/DarthAffe/StableDiffusion.NET</projectUrl>
<description>CUDA 11 Windows Backend for StableDiffusion.NET.</description>
<releaseNotes></releaseNotes>
<copyright>Copyright © Darth Affe 2024</copyright>
<readme>readme.md</readme>
</metadata>
<files>
<file src="StableDiffusion.NET.Backend.props" target="build/net8.0/StableDiffusion.NET.Backend.Cuda.props" />
<file src="windows-cuda11/stable-diffusion.dll" target="runtimes\win-x64\native\cuda11\stable-diffusion.dll" />
<file src="sd_net_cuda.png" target="sd_net_cuda.png" />
<file src="readme.md" target="readme.md" />
<file src="ggml.txt" target="ggml.txt" />
<file src="stable-diffusion.cpp.txt" target="stable-diffusion.cpp.txt" />
</files>
</package>

View File

@ -27,11 +27,11 @@ StableDiffusionCpp.Progress += (_, args) => Console.WriteLine($"PROGRESS {args.S
Image<ColorRGB>? treeWithTiger; Image<ColorRGB>? treeWithTiger;
// Load a StableDiffusion model in a using block to unload it again after the two images are created // Load a StableDiffusion model in a using block to unload it again after the two images are created
using (DiffusionModel sd = ModelBuilder.StableDiffusion(@"<path to model") using (DiffusionModel sd = new(DiffusionModelParameter.Create()
// .WithVae(@"<optional path to vae>") .WithModelPath(@"N:\StableDiffusion\stable-diffusion-webui\models\Stable-diffusion\animagineXLV3_v30.safetensors")
.WithMultithreading() // .WithVae(@"<optional path to vae>")
.WithFlashAttention() .WithMultithreading()
.Build()) .WithFlashAttention()))
{ {
// Create a image from a prompt // Create a image from a prompt
Image<ColorRGB>? tree = sd.GenerateImage(ImageGenerationParameter.TextToImage("A beautiful tree standing on a small hill").WithSDXLDefaults()); Image<ColorRGB>? tree = sd.GenerateImage(ImageGenerationParameter.TextToImage("A beautiful tree standing on a small hill").WithSDXLDefaults());
@ -43,17 +43,24 @@ using (DiffusionModel sd = ModelBuilder.StableDiffusion(@"<path to model")
File.WriteAllBytes("image2.png", treeWithTiger.ToPng()); File.WriteAllBytes("image2.png", treeWithTiger.ToPng());
} }
// Load a flux kontext model // Load the qwen image edit model
using DiffusionModel flux = ModelBuilder.Flux(@"<path to flux-model.gguf>", using DiffusionModel qwenContext = new(DiffusionModelParameter.Create()
@"<path to clip_l.safetensors>", .WithDiffusionModelPath(@"<Qwen-Image-Edit-2509-path>")
@"<path to t5xxl_fp16.safetensors>", .WithQwen2VLPath(@"<Qwen2.5-VL-7B-Instruct-path>")
@"<path to ae.safetensors>") .WithQwen2VLVisionPath(@"<Qwen2.5-VL-7B-Instruct.mmproj-path>")
.WithMultithreading() .WithVae(@"<qwen_image_vae-path>")
.WithFlashAttention() .WithMultithreading()
.Build(); .WithFlashAttention()
.WithFlowShift(3)
.WithOffloadedParamsToCPU()
.WithImmediatelyFreedParams());
// Perform an edit on the previosly created image // Perform an edit on the previously created image
Image<ColorRGB>? tigerOnMoon = flux.GenerateImage(ImageGenerationParameter.TextToImage("Remove the hill with the grass and place the tree with the tiger on the moon").WithFluxDefaults().WithRefImages(treeWithTiger)); 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()); File.WriteAllBytes("image3.png", tigerOnMoon.ToPng());
``` ```

View File

@ -82,14 +82,6 @@ internal static class ImageHelper
} }
} }
public static unsafe Native.Types.sd_image_t* ToSdImagePtr(this IImage image, bool monochrome = false)
{
Native.Types.sd_image_t* imagePtr = (Native.Types.sd_image_t*)NativeMemory.Alloc((nuint)Marshal.SizeOf<Native.Types.sd_image_t>());
imagePtr[0] = image.ToSdImage(monochrome);
return imagePtr;
}
public static unsafe void Free(this Native.Types.sd_image_t sdImage) public static unsafe void Free(this Native.Types.sd_image_t sdImage)
{ {
if (sdImage.data == null) return; if (sdImage.data == null) return;
@ -127,7 +119,7 @@ internal static class ImageHelper
{ {
int count = images.Length; int count = images.Length;
Native.Types.sd_image_t* imagePtr = (Native.Types.sd_image_t*)NativeMemory.Alloc((nuint)(count * Marshal.SizeOf<Native.Types.sd_image_t>())); Native.Types.sd_image_t* imagePtr = (Native.Types.sd_image_t*)NativeMemory.Alloc((nuint)count, (nuint)Marshal.SizeOf<Native.Types.sd_image_t>());
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
imagePtr[i] = images[i].ToSdImage(monochrome); imagePtr[i] = images[i].ToSdImage(monochrome);

View File

@ -41,6 +41,8 @@ public sealed class DiffusionModelParameter
/// </summary> /// </summary>
public bool VaeDecodeOnly { get; set; } = false; public bool VaeDecodeOnly { get; set; } = false;
public bool FreeParamsImmediately { get; set; } = false;
/// <summary> /// <summary>
/// process vae in tiles to reduce memory usage /// process vae in tiles to reduce memory usage
/// </summary> /// </summary>

View File

@ -80,6 +80,13 @@ public static class DiffusionModelBuilderExtension
return parameter; return parameter;
} }
public static DiffusionModelParameter WithImmediatelyFreedParams(this DiffusionModelParameter parameter, bool immediatelyFreedParams = true)
{
parameter.FreeParamsImmediately = immediatelyFreedParams;
return parameter;
}
public static DiffusionModelParameter WithVaeTiling(this DiffusionModelParameter parameter, bool vaeTiling = true) public static DiffusionModelParameter WithVaeTiling(this DiffusionModelParameter parameter, bool vaeTiling = true)
{ {
parameter.VaeTiling = vaeTiling; parameter.VaeTiling = vaeTiling;

View File

@ -25,7 +25,7 @@ internal static unsafe class DiffusionModelParameterMarshaller
embedding_dir = AnsiStringMarshaller.ConvertToUnmanaged(managed.EmbeddingsDirectory), embedding_dir = AnsiStringMarshaller.ConvertToUnmanaged(managed.EmbeddingsDirectory),
photo_maker_path = AnsiStringMarshaller.ConvertToUnmanaged(managed.StackedIdEmbeddingsDirectory), photo_maker_path = AnsiStringMarshaller.ConvertToUnmanaged(managed.StackedIdEmbeddingsDirectory),
vae_decode_only = (sbyte)(managed.VaeDecodeOnly ? 1 : 0), vae_decode_only = (sbyte)(managed.VaeDecodeOnly ? 1 : 0),
free_params_immediately = 0, // DarthAffe 06.08.2025: Static value free_params_immediately = (sbyte)(managed.FreeParamsImmediately ? 1 : 0),
n_threads = managed.ThreadCount, n_threads = managed.ThreadCount,
wtype = managed.Quantization, wtype = managed.Quantization,
rng_type = managed.RngType, rng_type = managed.RngType,
@ -63,6 +63,7 @@ internal static unsafe class DiffusionModelParameterMarshaller
EmbeddingsDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.embedding_dir) ?? string.Empty, EmbeddingsDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.embedding_dir) ?? string.Empty,
StackedIdEmbeddingsDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.photo_maker_path) ?? string.Empty, StackedIdEmbeddingsDirectory = AnsiStringMarshaller.ConvertToManaged(unmanaged.photo_maker_path) ?? string.Empty,
VaeDecodeOnly = unmanaged.vae_decode_only == 1, VaeDecodeOnly = unmanaged.vae_decode_only == 1,
FreeParamsImmediately = unmanaged.free_params_immediately == 1,
ThreadCount = unmanaged.n_threads, ThreadCount = unmanaged.n_threads,
Quantization = unmanaged.wtype, Quantization = unmanaged.wtype,
RngType = unmanaged.rng_type, RngType = unmanaged.rng_type,

View File

@ -1,5 +1,4 @@
using System; using System;
using System.Runtime.InteropServices;
using HPPH; using HPPH;
using JetBrains.Annotations; using JetBrains.Annotations;