Skip to content
This repository was archived by the owner on Nov 27, 2024. It is now read-only.

Commit cef01e0

Browse files
committed
Update Console examples to support pipelines
1 parent 51ae43c commit cef01e0

File tree

7 files changed

+131
-38
lines changed

7 files changed

+131
-38
lines changed

OnnxStack.Console/Examples/StableDebug.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ public async Task RunAsync()
2929
{
3030
Directory.CreateDirectory(_outputDirectory);
3131

32-
var model = _stableDiffusionService.Models.First();
33-
await _stableDiffusionService.LoadModel(model);
34-
3532
var prompt = "High-fashion photography in an abandoned industrial warehouse, with dramatic lighting and edgy outfits, detailed clothing, intricate clothing, seductive pose, action pose, motion, beautiful digital artwork, atmospheric, warm sunlight, photography, neo noir, bokeh, beautiful dramatic lighting, shallow depth of field, photorealism, volumetric lighting, Ultra HD, raytracing, studio quality, octane render";
3633
var negativePrompt = "painting, drawing, sketches, monochrome, grayscale, illustration, anime, cartoon, graphic, text, crayon, graphite, abstract, easynegative, low quality, normal quality, worst quality, lowres, close up, cropped, out of frame, jpeg artifacts, duplicate, morbid, mutilated, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, glitch, deformed, mutated, cross-eyed, ugly, dehydrated, bad anatomy, bad proportions, gross proportions, cloned face, disfigured, malformed limbs, missing arms, missing legs fused fingers, too many fingers,extra fingers, extra limbs,, extra arms, extra legs,disfigured,";
3734
while (true)
@@ -52,11 +49,20 @@ public async Task RunAsync()
5249
Strength = 0.6f
5350
};
5451

55-
foreach (var schedulerType in Enum.GetValues<SchedulerType>())
52+
foreach (var model in _stableDiffusionService.Models)
5653
{
57-
promptOptions.SchedulerType = schedulerType;
58-
OutputHelpers.WriteConsole("Generating Image...", ConsoleColor.Green);
59-
await GenerateImage(model, promptOptions, schedulerOptions);
54+
OutputHelpers.WriteConsole($"Loading Model `{model.Name}`...", ConsoleColor.Green);
55+
await _stableDiffusionService.LoadModel(model);
56+
57+
foreach (var schedulerType in Helpers.GetPipelineSchedulers(model.PipelineType))
58+
{
59+
promptOptions.SchedulerType = schedulerType;
60+
OutputHelpers.WriteConsole($"Generating {schedulerType} Image...", ConsoleColor.Green);
61+
await GenerateImage(model, promptOptions, schedulerOptions);
62+
}
63+
64+
OutputHelpers.WriteConsole($"Unloading Model `{model.Name}`...", ConsoleColor.Green);
65+
await _stableDiffusionService.UnloadModel(model);
6066
}
6167
break;
6268
}

OnnxStack.Console/Examples/StableDiffusionBatch.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ public async Task RunAsync()
2929
{
3030
Directory.CreateDirectory(_outputDirectory);
3131

32-
var model = _stableDiffusionService.Models.First();
33-
await _stableDiffusionService.LoadModel(model);
34-
3532
while (true)
3633
{
3734
OutputHelpers.WriteConsole("Please type a prompt and press ENTER", ConsoleColor.Yellow);
@@ -60,12 +57,21 @@ public async Task RunAsync()
6057
InferenceSteps = 22,
6158
Strength = 0.6f
6259
};
63-
foreach (var schedulerType in Enum.GetValues<SchedulerType>())
64-
{
65-
promptOptions.SchedulerType = schedulerType;
6660

67-
OutputHelpers.WriteConsole("Generating Image...", ConsoleColor.Green);
68-
await GenerateImage(model, promptOptions, schedulerOptions);
61+
foreach (var model in _stableDiffusionService.Models)
62+
{
63+
OutputHelpers.WriteConsole($"Loading Model `{model.Name}`...", ConsoleColor.Green);
64+
await _stableDiffusionService.LoadModel(model);
65+
66+
foreach (var schedulerType in Helpers.GetPipelineSchedulers(model.PipelineType))
67+
{
68+
promptOptions.SchedulerType = schedulerType;
69+
OutputHelpers.WriteConsole($"Generating {schedulerType} Image...", ConsoleColor.Green);
70+
await GenerateImage(model, promptOptions, schedulerOptions);
71+
}
72+
73+
OutputHelpers.WriteConsole($"Unloading Model `{model.Name}`...", ConsoleColor.Green);
74+
await _stableDiffusionService.UnloadModel(model);
6975
}
7076
}
7177
}

OnnxStack.Console/Examples/StableDiffusionExample.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@ public async Task RunAsync()
2828
{
2929
Directory.CreateDirectory(_outputDirectory);
3030

31-
var model = _stableDiffusionService.Models.First();
32-
await _stableDiffusionService.LoadModel(model);
33-
3431
while (true)
3532
{
3633
OutputHelpers.WriteConsole("Please type a prompt and press ENTER", ConsoleColor.Yellow);
@@ -50,12 +47,21 @@ public async Task RunAsync()
5047
{
5148
Seed = Random.Shared.Next()
5249
};
53-
foreach (var schedulerType in Enum.GetValues<SchedulerType>())
50+
51+
foreach (var model in _stableDiffusionService.Models)
5452
{
55-
promptOptions.SchedulerType = schedulerType;
53+
OutputHelpers.WriteConsole($"Loading Model `{model.Name}`...", ConsoleColor.Green);
54+
await _stableDiffusionService.LoadModel(model);
55+
56+
foreach (var schedulerType in Helpers.GetPipelineSchedulers(model.PipelineType))
57+
{
58+
promptOptions.SchedulerType = schedulerType;
59+
OutputHelpers.WriteConsole($"Generating {schedulerType} Image...", ConsoleColor.Green);
60+
await GenerateImage(model, promptOptions, schedulerOptions);
61+
}
5662

57-
OutputHelpers.WriteConsole("Generating Image...", ConsoleColor.Green);
58-
await GenerateImage(model, promptOptions, schedulerOptions);
63+
OutputHelpers.WriteConsole($"Unloading Model `{model.Name}`...", ConsoleColor.Green);
64+
await _stableDiffusionService.UnloadModel(model);
5965
}
6066
}
6167
}

OnnxStack.Console/Examples/StableDiffusionGenerator.cs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,28 +31,33 @@ public async Task RunAsync()
3131
{
3232
Directory.CreateDirectory(_outputDirectory);
3333

34-
var model = _stableDiffusionService.Models.First();
35-
await _stableDiffusionService.LoadModel(model);
36-
3734
var seed = Random.Shared.Next();
38-
foreach (var generationPrompt in _generationPrompts)
35+
foreach (var model in _stableDiffusionService.Models)
3936
{
40-
var promptOptions = new PromptOptions
41-
{
42-
Prompt = generationPrompt.Value
43-
};
37+
OutputHelpers.WriteConsole($"Loading Model `{model.Name}`...", ConsoleColor.Green);
38+
await _stableDiffusionService.LoadModel(model);
4439

45-
var schedulerOptions = new SchedulerOptions
40+
foreach (var generationPrompt in _generationPrompts)
4641
{
47-
Seed = Random.Shared.Next()
48-
};
49-
foreach (var schedulerType in Enum.GetValues<SchedulerType>())
50-
{
51-
promptOptions.SchedulerType = schedulerType;
42+
var promptOptions = new PromptOptions
43+
{
44+
Prompt = generationPrompt.Value
45+
};
5246

53-
OutputHelpers.WriteConsole("Generating Image...", ConsoleColor.Green);
54-
await GenerateImage(model, promptOptions, schedulerOptions, generationPrompt.Key);
47+
var schedulerOptions = new SchedulerOptions
48+
{
49+
Seed = Random.Shared.Next()
50+
};
51+
foreach (var schedulerType in Helpers.GetPipelineSchedulers(model.PipelineType))
52+
{
53+
promptOptions.SchedulerType = schedulerType;
54+
OutputHelpers.WriteConsole($"Generating {schedulerType} Image...", ConsoleColor.Green);
55+
await GenerateImage(model, promptOptions, schedulerOptions, generationPrompt.Key);
56+
}
5557
}
58+
59+
OutputHelpers.WriteConsole($"Unloading Model `{model.Name}`...", ConsoleColor.Green);
60+
await _stableDiffusionService.UnloadModel(model);
5661
}
5762
OutputHelpers.WriteConsole("Complete :)", ConsoleColor.DarkMagenta);
5863
OutputHelpers.ReadConsole(ConsoleColor.Gray);

OnnxStack.Console/Helpers.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using OnnxStack.StableDiffusion.Enums;
2+
3+
namespace OnnxStack.Console
4+
{
5+
internal static class Helpers
6+
{
7+
public static SchedulerType[] GetPipelineSchedulers(DiffuserPipelineType pipelineType)
8+
{
9+
return pipelineType switch
10+
{
11+
DiffuserPipelineType.StableDiffusion => new[]
12+
{
13+
SchedulerType.LMS,
14+
SchedulerType.Euler,
15+
SchedulerType.EulerAncestral,
16+
SchedulerType.DDPM,
17+
SchedulerType.DDIM,
18+
SchedulerType.KDPM2
19+
},
20+
DiffuserPipelineType.LatentConsistency => new[]
21+
{
22+
SchedulerType.LCM
23+
},
24+
_ => default
25+
};
26+
}
27+
}
28+
}

OnnxStack.Console/appsettings.json

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,47 @@
4949
"OnnxModelPath": "D:\\Repositories\\stable-diffusion-v1-5\\vae_decoder\\model.onnx"
5050
}
5151
]
52+
},
53+
{
54+
"Name": "LCM-Dreamshaper-V7",
55+
"IsEnabled": true,
56+
"PadTokenId": 49407,
57+
"BlankTokenId": 49407,
58+
"TokenizerLimit": 77,
59+
"EmbeddingsLength": 768,
60+
"ScaleFactor": 0.18215,
61+
"PipelineType": "LatentConsistency",
62+
"Diffusers": [
63+
"TextToImage",
64+
"ImageToImage"
65+
],
66+
"DeviceId": 0,
67+
"InterOpNumThreads": 0,
68+
"IntraOpNumThreads": 0,
69+
"ExecutionMode": "ORT_SEQUENTIAL",
70+
"ExecutionProvider": "DirectML",
71+
"ModelConfigurations": [
72+
{
73+
"Type": "Tokenizer",
74+
"OnnxModelPath": "D:\\Repositories\\LCM-Dreamshaper-V7-ONNX\\tokenizer\\model.onnx"
75+
},
76+
{
77+
"Type": "Unet",
78+
"OnnxModelPath": "D:\\Repositories\\LCM-Dreamshaper-V7-ONNX\\unet\\model.onnx"
79+
},
80+
{
81+
"Type": "TextEncoder",
82+
"OnnxModelPath": "D:\\Repositories\\LCM-Dreamshaper-V7-ONNX\\text_encoder\\model.onnx"
83+
},
84+
{
85+
"Type": "VaeEncoder",
86+
"OnnxModelPath": "D:\\Repositories\\LCM-Dreamshaper-V7-ONNX\\vae_encoder\\model.onnx"
87+
},
88+
{
89+
"Type": "VaeDecoder",
90+
"OnnxModelPath": "D:\\Repositories\\LCM-Dreamshaper-V7-ONNX\\vae_decoder\\model.onnx"
91+
}
92+
]
5293
}
5394
]
5495
}

OnnxStack.UI/UserControls/ModelPickerControl.xaml.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ private async Task LoadModel()
110110
{
111111
_logger.LogInformation($"'{model.Name}' Unloading...");
112112
await _stableDiffusionService.UnloadModel(model.ModelOptions);
113+
model.IsLoaded = false;
113114
}
114115
}
115116

0 commit comments

Comments
 (0)