Skip to content

Commit 87f2167

Browse files
committed
v0.6.0 - AMD LoRA, Environment Update, Optimizations
1 parent c8fa7dd commit 87f2167

37 files changed

+741
-202
lines changed

DiffuseApp/DiffuseApp/App.xaml.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,16 @@ private static Settings LoadSettingsFile()
126126
private async Task AppStartup()
127127
{
128128
var historyService = _appHost.Services.GetService<IHistoryService>();
129+
var hardwareService = _appHost.Services.GetService<IHardwareService>();
130+
131+
// Load History
129132
await historyService.InitializeAsync();
130133

134+
// Load Devices
135+
var devices = hardwareService.GetGPUDevices();
136+
_settings.InitializeDevices(devices);
137+
138+
// Open Main Window
131139
MainWindow = _appHost.Services.GetMainWindow();
132140
MainWindow.Show();
133141
_splashscreen.Close();
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
1-
using TensorStack.Common;
1+
using Diffuse.Services;
2+
using TensorStack.Common;
23
using TensorStack.Python.Common;
34

45
namespace Diffuse.Common
56
{
67
public record DeviceModel : Device
78
{
89
public DeviceModel() { }
9-
public DeviceModel(Device options) : base(options)
10+
public DeviceModel(Device options, GPUDevice gpuDevice) : base(options)
1011
{
11-
IsLoraSupported = options.Vendor != VendorType.AMD;
12+
PCIBusId = gpuDevice.PCIBusId;
13+
IsLoraSupported = options.Vendor == VendorType.Nvidia || options.Vendor == VendorType.AMD;
14+
DefaultDataType = options.Vendor == VendorType.AMD ? DataType.Int8 : DataType.Float8;
1215
DataTypes = options.Vendor == VendorType.AMD
1316
? [DataType.Bfloat16, DataType.Float16, DataType.Int8]
1417
: [DataType.Bfloat16, DataType.Float16, DataType.Float8, DataType.Int8];
1518
}
1619

1720
public DataType[] DataTypes { get; init; }
1821
public bool IsLoraSupported { get; init; }
22+
public int PCIBusId { get; init; }
23+
public DataType DefaultDataType { get; init; }
1924
}
2025
}

DiffuseApp/DiffuseApp/Common/DiffusionDefaultOptions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public record DiffusionDefaultOptions
1616
public int FrameChunk { get; set; }
1717
public int FrameChunkOverlap { get; set; }
1818
public int NoiseCondition { get; set; }
19+
public float Strength { get; set; } = 1;
1920

2021
public SchedulerType Scheduler { get; set; }
2122
public SchedulerType[] Schedulers { get; set; }
@@ -35,9 +36,8 @@ public record DiffusionDefaultOptions
3536
public int MaxImageSeqLen { get; set; } = 4096;
3637
public bool UseDynamicShifting { get; set; }
3738
public int SampleRate { get; set; } = 24000;
38-
public int FramesMin { get; set; }
39-
public int FramesMax { get; set; }
4039
public bool IsStochasticSampling { get; set; }
40+
public int[] FrameOptions { get; set; }
4141

4242
public virtual bool Equals(DiffusionDefaultOptions other) => ReferenceEquals(this, other);
4343
public override int GetHashCode() => RuntimeHelpers.GetHashCode(this);

DiffuseApp/DiffuseApp/Common/DiffusionModel.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@ public bool IsValid
4040
}
4141

4242

43+
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
44+
public MemoryMode? UserMemoryMode { get; set; }
45+
46+
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
47+
public DataType? UserDataType { get; set; }
48+
49+
4350
public void Initialize(string modelDirectory)
4451
{
4552
if (Source == ModelSourceType.Folder)

DiffuseApp/DiffuseApp/Common/EnvironmentModel.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
11
using System.Collections.Generic;
22
using System.Text.Json.Serialization;
33
using TensorStack.Common;
4+
using TensorStack.Python.Common;
45

56
namespace Diffuse.Common
67
{
78
public class EnvironmentModel
89
{
910
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
1011
public int Id { get; set; }
11-
1212
public string Name { get; set; }
1313
public EnvironmentType Type { get; set; }
1414
public VendorType Vendor { get; set; }
15+
public int Version { get; set; }
16+
public EnvironmentMode Status { get; set; }
1517
public int Device { get; set; }
1618
public string Pipeline { get; set; }
1719
public bool IsDefault { get; set; }
1820
public string Environment { get; set; }
1921
public string[] Requirements { get; set; }
2022
public Dictionary<string, string> Variables { get; set; }
23+
2124
}
2225

2326
public enum EnvironmentType

DiffuseApp/DiffuseApp/Common/PipelineModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public DataType DataType
8080
public bool IsLoadRequired(PipelineModel pipeline)
8181
{
8282
return pipeline is null
83+
|| pipeline.Device != _device
8384
|| pipeline.DiffusionModel != _diffusionModel
8485
|| pipeline.MemoryMode != _memoryMode
8586
|| pipeline.DataType != _dataType;

DiffuseApp/DiffuseApp/Controls/DiffusionInputControl.xaml

Lines changed: 74 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,51 @@
118118

119119
</UniformGrid>
120120

121+
122+
123+
<!--Frames / FrameRate-->
124+
<StackPanel Visibility="{Binding Pipeline.DiffusionModel.DefaultOptions.FrameOptions, Converter={StaticResource NullVisibilityConverter}, FallbackValue=Collapsed}">
125+
<UniformGrid Columns="3">
126+
<StackPanel Margin="0,0,2,0">
127+
<TextBlock Text="Frames" Style="{StaticResource FieldTextBlockStyle}" />
128+
<ComboBox ItemsSource="{Binding Pipeline.DiffusionModel.DefaultOptions.FrameOptions}" SelectedItem="{Binding Options.Frames}" />
129+
</StackPanel>
130+
<StackPanel Margin="2,0,2,0">
131+
<TextBlock Text="Frame Rate" Style="{StaticResource FieldTextBlockStyle}" />
132+
<ComboBox ItemsSource="{Binding FrameRates}" SelectedItem="{Binding Options.FrameRate}" >
133+
<ComboBox.ItemTemplate>
134+
<DataTemplate>
135+
<TextBlock Text="{Binding ., StringFormat={}{0} fps}"/>
136+
</DataTemplate>
137+
</ComboBox.ItemTemplate>
138+
</ComboBox>
139+
</StackPanel>
140+
141+
<DockPanel Margin="2,0,0,0">
142+
<TextBlock DockPanel.Dock="Top" Text="Duration" Style="{StaticResource FieldTextBlockStyle}" />
143+
<TextBox IsReadOnly="True" IsHitTestVisible="False" Opacity=".8">
144+
<TextBox.Text>
145+
<MultiBinding Converter="{StaticResource FramesToTimeSpanConverter}" StringFormat="{}{0:mm\:ss\.ff}">
146+
<Binding Path="Options.Frames" />
147+
<Binding Path="Options.FrameRate" />
148+
</MultiBinding>
149+
</TextBox.Text>
150+
</TextBox>
151+
</DockPanel>
152+
</UniformGrid>
153+
154+
<!--Frame Chunk-->
155+
<StackPanel Visibility="{Binding Pipeline.DiffusionModel.DefaultOptions.FrameChunk, Converter={StaticResource GreaterThanToVisibilityConverter}, ConverterParameter=0, FallbackValue=Collapsed}">
156+
<UniformGrid Columns="3" Margin="0,4,0,0">
157+
<CommonControls:SliderControl Text="Chunk Size" Value="{Binding Options.FrameChunk}" Minimum="1" Maximum="{Binding Pipeline.DiffusionModel.DefaultOptions.Frames}" TickFrequency="1" ValueFormat="N0" Margin="0,0,2,0"/>
158+
<CommonControls:SliderControl Text="Overlap" Value="{Binding Options.FrameChunkOverlap}" Minimum="1" Maximum="{Binding Pipeline.DiffusionModel.DefaultOptions.Frames}" TickFrequency="1" ValueFormat="N0" Margin="2,0,2,0"/>
159+
<CommonControls:SliderControl Text="Noise Condition" Value="{Binding Options.NoiseCondition}" Minimum="1" Maximum="100" TickFrequency="1" ValueFormat="N0" Margin="2,0,0,0"/>
160+
</UniformGrid>
161+
</StackPanel>
162+
163+
</StackPanel>
164+
165+
121166
<!--ImageEdit-->
122167
<StackPanel Visibility="{Binding ProcessType, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=ImageEdit}">
123168
<CommonControls:SliderControl Text="Input Images" Value="{Binding Options.InputImageCount}" Minimum="1" Maximum="4" TickFrequency="1" ValueFormat="N0" />
@@ -134,8 +179,7 @@
134179
</UniformGrid>
135180
</StackPanel>
136181

137-
138-
<!--GuidanceScale-->
182+
<!--Guidance Scale-->
139183
<StackPanel Visibility="{Binding IsGuidance2Enabled, Converter={StaticResource InverseBooleanToVisibilityConverter}}">
140184
<CommonControls:SliderControl Text="Guidance" Value="{Binding Options.GuidanceScale}" Minimum="1" Maximum="20" TickFrequency="0.1" ValueFormat="F2"/>
141185
</StackPanel>
@@ -146,12 +190,18 @@
146190
</UniformGrid>
147191
</StackPanel>
148192

149-
150193
<!--ImageToImage-->
151194
<StackPanel Visibility="{Binding ProcessType, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=ImageToImage}">
152195
<CommonControls:SliderControl Text="Strength" Value="{Binding Options.Strength}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01"/>
153196
</StackPanel>
154197

198+
<!--VideoToVideo-->
199+
<StackPanel Visibility="{Binding ProcessType, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=VideoToVideo}">
200+
<StackPanel Visibility="{Binding Pipeline.DiffusionModel.DefaultOptions.Strength, Converter={StaticResource LessThanToVisibilityConverter}, ConverterParameter=1}">
201+
<CommonControls:SliderControl Text="Strength" Value="{Binding Options.Strength}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01"/>
202+
</StackPanel>
203+
</StackPanel>
204+
155205
<!--ImageInpaint-->
156206
<StackPanel Visibility="{Binding ProcessType, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=ImageInpaint}">
157207
<CommonControls:SliderControl Text="Strength" Value="{Binding Options.Strength}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01"/>
@@ -168,9 +218,7 @@
168218
<CommonControls:SliderControl Text="ControlNet Strength" Value="{Binding Options.ControlNetStrength}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01"/>
169219
</StackPanel>
170220

171-
172-
173-
<!--LoraStrength-->
221+
<!--Lora Strength-->
174222
<ItemsControl ItemsSource="{Binding Options.LoraOptions}">
175223
<ItemsControl.ItemTemplate>
176224
<DataTemplate>
@@ -198,36 +246,31 @@
198246
</ItemsControl.ItemsPanel>
199247
</ItemsControl>
200248

201-
<StackPanel Visibility="{Binding Pipeline.DiffusionModel.DefaultOptions.FramesMin, Converter={StaticResource GreaterThanToVisibilityConverter}, ConverterParameter=0}">
202-
<UniformGrid Columns="2">
203-
<CommonControls:SliderControl Text="Frames" Minimum="{Binding Pipeline.DiffusionModel.DefaultOptions.FramesMin}" Maximum="{Binding Pipeline.DiffusionModel.DefaultOptions.FramesMax}" Value="{Binding Options.Frames}" TickFrequency="1" Margin="0,0,3,0"/>
204-
<CommonControls:SliderControl Text="Frame Rate" Value="{Binding Options.FrameRate}" Minimum="8" Maximum="60" TickFrequency="1" ValueFormat="F0" Margin="3,0,0,0"/>
205-
</UniformGrid>
206-
</StackPanel>
207-
208249

209-
210-
<!--FlowMatch-->
211-
<StackPanel Visibility="{Binding IsSchedulerFlowMatch, Converter={StaticResource BooleanToVisibilityConverter}, FallbackValue=Collapsed}">
212-
<StackPanel>
213-
<CommonControls:SliderControl Text="Shift" Value="{Binding Options.SchedulerOptions.Shift}" Minimum="1" Maximum="10" TickFrequency="0.1" ValueFormat="F2"/>
250+
<StackPanel Margin="0,0,0,10">
251+
<!--FlowMatch-->
252+
<StackPanel Visibility="{Binding IsSchedulerFlowMatch, Converter={StaticResource BooleanToVisibilityConverter}, FallbackValue=Collapsed}">
253+
<StackPanel>
254+
<CommonControls:SliderControl Text="Shift" Value="{Binding Options.SchedulerOptions.Shift}" Minimum="1" Maximum="10" TickFrequency="0.1" ValueFormat="F2"/>
255+
</StackPanel>
256+
<UniformGrid Columns="2" Margin="0,6,0,0">
257+
<Grid HorizontalAlignment="Left">
258+
<CheckBox Content="Dynamic Shifting" IsChecked="{Binding Options.SchedulerOptions.UseDynamicShifting}" />
259+
</Grid>
260+
<Grid HorizontalAlignment="Right">
261+
<CheckBox Content="Stochastic Sampling" IsChecked="{Binding Options.SchedulerOptions.StochasticSampling}" />
262+
</Grid>
263+
</UniformGrid>
214264
</StackPanel>
215-
<UniformGrid Columns="2" Margin="0,6,0,0">
216-
<Grid HorizontalAlignment="Left">
217-
<CheckBox Content="Dynamic Shifting" IsChecked="{Binding Options.SchedulerOptions.UseDynamicShifting}" />
218-
</Grid>
219-
<Grid HorizontalAlignment="Right">
220-
<CheckBox Content="Stochastic Sampling" IsChecked="{Binding Options.SchedulerOptions.StochasticSampling}" />
265+
266+
<!--Karras-->
267+
<StackPanel Margin="0,6,0,0" Visibility="{Binding IsSchedulerKarras, Converter={StaticResource BooleanToVisibilityConverter}, FallbackValue=Collapsed}">
268+
<Grid>
269+
<CheckBox Content="Karras Sigmas" IsChecked="{Binding Options.SchedulerOptions.UseKarrasSigmas}" />
221270
</Grid>
222-
</UniformGrid>
271+
</StackPanel>
223272
</StackPanel>
224273

225-
<!--Karras-->
226-
<StackPanel Margin="0,6,0,0" Visibility="{Binding IsSchedulerKarras, Converter={StaticResource BooleanToVisibilityConverter}, FallbackValue=Collapsed}">
227-
<Grid>
228-
<CheckBox Content="Karras Sigmas" IsChecked="{Binding Options.SchedulerOptions.UseKarrasSigmas}" />
229-
</Grid>
230-
</StackPanel>
231274
</StackPanel>
232275
</TabItem>
233276

DiffuseApp/DiffuseApp/Controls/DiffusionInputControl.xaml.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Diffuse.Common;
22
using System;
3+
using System.Collections.Generic;
34
using System.Linq;
45
using System.Threading.Tasks;
56
using System.Windows;
@@ -31,6 +32,7 @@ public partial class DiffusionInputControl : BaseControl
3132

3233
public DiffusionInputControl()
3334
{
35+
FrameRates = [8f, 12f, 16f, 24f, 25f, 30f, 60f];
3436
SeedCommand = new RelayCommand<bool>(GenerateSeed);
3537
AddTriggerWordCommand = new AsyncRelayCommand<string>(AddTriggerWordAsync);
3638
InitializeComponent();
@@ -44,6 +46,7 @@ public DiffusionInputControl()
4446
public ProcessType ProcessType { get; set; }
4547
public RelayCommand<bool> SeedCommand { get; }
4648
public AsyncRelayCommand<string> AddTriggerWordCommand { get; }
49+
public List<float> FrameRates { get; }
4750

4851
public PipelineModel Pipeline
4952
{
@@ -192,7 +195,7 @@ private Task OnPipelineChanged(PipelineModel oldPipeline, PipelineModel newPipel
192195
InputImageCount = ProcessType == ProcessType.ImageEdit ? (previousOptions?.InputImageCount ?? 1) : 0,
193196

194197
// Update
195-
Strength = ProcessType == ProcessType.ImageToImage || ProcessType == ProcessType.ControlNetImageToImage ? (previousOptions?.Strength ?? 0.7f) : 1f,
198+
Strength = ProcessType == ProcessType.ImageToImage || ProcessType == ProcessType.ControlNetImageToImage ? (previousOptions?.Strength ?? 0.7f) : newOptions.Strength,
196199
ControlNetStrength = ProcessType == ProcessType.ControlNetImage || ProcessType == ProcessType.ControlNetImageToImage ? (previousOptions?.ControlNetStrength ?? 0.7f) : 1f,
197200

198201
Steps = newOptions.Steps,

DiffuseApp/DiffuseApp/Controls/DiffusionModelControl.xaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,10 @@
150150
</DockPanel>
151151

152152
<!--MemoryMode-->
153-
154153
<DockPanel>
155154
<TextBox DockPanel.Dock="Left" Text="Memory" IsReadOnly="True" IsHitTestVisible="False" Width="60" FontStyle="Italic" FontSize="11" Opacity="0.7" Padding="4,2,0,0"/>
156155
<DockPanel>
157-
<ComboBox DockPanel.Dock="Right" SelectedItem="{Binding SelectedDataType}" ItemsSource="{Binding DataTypes}" Width="100" SelectionChanged="Memory_SelectionChanged"/>
156+
<ComboBox DockPanel.Dock="Right" SelectedItem="{Binding SelectedDataType}" ItemsSource="{Binding SelectedDevice.DataTypes}" Width="100" SelectionChanged="Memory_SelectionChanged"/>
158157
<ComboBox
159158
SelectedItem="{Binding SelectedMemoryMode}"
160159
ItemsSource="{Binding MemoryModes}"

0 commit comments

Comments
 (0)