Skip to content

Commit b90e42e

Browse files
committed
v0.4.4 - Multiple LoRA Support
1 parent 53a1242 commit b90e42e

20 files changed

+390
-83
lines changed

DiffuseApp/DiffuseApp/App.xaml

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -357,9 +357,20 @@
357357
<TextBlock DockPanel.Dock="Left" Text="Model" Style="{StaticResource FieldTextBlockStyle}" />
358358
<TextBox Text="{Binding Model}" Style="{StaticResource TextBlockStyle}" IsReadOnly="True" />
359359
</StackPanel>
360-
<StackPanel Margin="0,4,0,0" Visibility="{Binding LoraModel, Converter={StaticResource NullOrEmptyVisibilityConverter}}">
360+
<StackPanel Margin="0,4,0,0" Visibility="{Binding LoraModels, Converter={StaticResource NullVisibilityConverter}, Mode=OneWay}">
361361
<TextBlock DockPanel.Dock="Left" Text="Lora Model" Style="{StaticResource FieldTextBlockStyle}" />
362-
<TextBox Text="{Binding LoraModel}" Style="{StaticResource TextBlockStyle}" IsReadOnly="True" />
362+
<ItemsControl ItemsSource="{Binding LoraModels, Mode=OneWay}">
363+
<ItemsControl.ItemsPanel>
364+
<ItemsPanelTemplate>
365+
<StackPanel IsItemsHost="True" Orientation="Horizontal" />
366+
</ItemsPanelTemplate>
367+
</ItemsControl.ItemsPanel>
368+
<ItemsControl.ItemTemplate>
369+
<DataTemplate>
370+
<TextBox Text="{Binding ., Mode=OneWay}" Style="{StaticResource TextBlockStyle}" IsReadOnly="True" Margin="0,0,4,0" />
371+
</DataTemplate>
372+
</ItemsControl.ItemTemplate>
373+
</ItemsControl>
363374
</StackPanel>
364375
<StackPanel Margin="0,4,0,0" Visibility="{Binding ControlNetModel, Converter={StaticResource NullOrEmptyVisibilityConverter}}">
365376
<TextBlock DockPanel.Dock="Left" Text="ControlNet Model" Style="{StaticResource FieldTextBlockStyle}" />
@@ -425,9 +436,20 @@
425436
<TextBlock Text="Strength" Style="{StaticResource FieldTextBlockStyle}" />
426437
<TextBlock Text="{Binding Options.Strength}" />
427438
</StackPanel>
428-
<StackPanel Visibility="{Binding LoraModel, Converter={StaticResource NullOrEmptyVisibilityConverter}}">
439+
<StackPanel Visibility="{Binding LoraModels, Converter={StaticResource NullVisibilityConverter}}">
429440
<TextBlock Text="Lora Strength" Style="{StaticResource FieldTextBlockStyle}" />
430-
<TextBlock Text="{Binding Options.LoraStrength}" />
441+
<ItemsControl ItemsSource="{Binding Options.LoraStrength}">
442+
<ItemsControl.ItemsPanel>
443+
<ItemsPanelTemplate>
444+
<StackPanel IsItemsHost="True" Orientation="Horizontal" />
445+
</ItemsPanelTemplate>
446+
</ItemsControl.ItemsPanel>
447+
<ItemsControl.ItemTemplate>
448+
<DataTemplate>
449+
<TextBox Text="{Binding ., Mode=OneWay}" Style="{StaticResource TextBlockStyle}" IsReadOnly="True" Margin="0,0,4,0" />
450+
</DataTemplate>
451+
</ItemsControl.ItemTemplate>
452+
</ItemsControl>
431453
</StackPanel>
432454
<StackPanel Visibility="{Binding ControlNetModel, Converter={StaticResource NullOrEmptyVisibilityConverter}}">
433455
<TextBlock Text="ControlNet Strength" Style="{StaticResource FieldTextBlockStyle}" />

DiffuseApp/DiffuseApp/Common/DiffusionHistory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public record DiffusionHistory : IHistoryItem
1818
public string Model { get; init; }
1919

2020
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
21-
public string LoraModel { get; init; }
21+
public string[] LoraModels { get; init; }
2222

2323
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
2424
public string ControlNetModel { get; init; }

DiffuseApp/DiffuseApp/Common/DiffusionInputOptions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public record DiffusionInputOptions : BaseRecord
2121
private int _steps2;
2222
private float _strength = 1;
2323
private float _controlNetStrength = 1;
24-
private float _loraStrength = 1;
24+
private float[] _loraStrength = [1,1,1,1,1,1];
2525
private int _inputImageCount = 0;
2626
private SchedulerInputOptions _schedulerOptions = new SchedulerInputOptions();
2727

@@ -91,7 +91,7 @@ public float Strength
9191
set { SetProperty(ref _strength, value); }
9292
}
9393

94-
public float LoraStrength
94+
public float[] LoraStrength
9595
{
9696
get { return _loraStrength; }
9797
set { SetProperty(ref _loraStrength, value); }

DiffuseApp/DiffuseApp/Common/PipelineModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class PipelineModel : BaseModel
1010
private DiffusionModel _diffusionModel;
1111
private ControlNetModel _controlNetModel;
1212
private ExtractModel _extractModel;
13-
private LoraAdapterModel _loraAdapterModel;
13+
private LoraAdapterModel[] _loraAdapterModel;
1414
private UpscaleModel _upscaleModel;
1515
private MemoryMode _memoryMode;
1616
private ProcessType _processType;
@@ -40,7 +40,7 @@ public ExtractModel ExtractModel
4040
set { SetProperty(ref _extractModel, value); }
4141
}
4242

43-
public LoraAdapterModel LoraAdapterModel
43+
public LoraAdapterModel[] LoraAdapterModel
4444
{
4545
get { return _loraAdapterModel; }
4646
set { SetProperty(ref _loraAdapterModel, value); }

DiffuseApp/DiffuseApp/Controls/DiffusionInputControl.xaml

Lines changed: 53 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,43 @@
220220

221221
<!--LoraStrength-->
222222
<UniformGrid Visibility="{Binding Pipeline.LoraAdapterModel, Converter={StaticResource NullVisibilityConverter}, FallbackValue=Collapsed}">
223-
<CommonControls:SliderControl Text="Lora Strength" Value="{Binding Options.LoraStrength}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01" />
223+
<Grid Visibility="{Binding Pipeline.LoraAdapterModel.Length, Converter={StaticResource GreaterOrEqualThanToVisibilityConverter}, ConverterParameter=1}">
224+
<TextBlock Text="{Binding Pipeline.LoraAdapterModel[0].Name, StringFormat={}({0})}" FontSize="8" Margin="0,6,0,0" Opacity=".9" HorizontalAlignment="Center"/>
225+
<CommonControls:SliderControl Text="Lora" Value="{Binding Options.LoraStrength[0]}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01" />
226+
</Grid>
227+
<Grid Visibility="{Binding Pipeline.LoraAdapterModel.Length, Converter={StaticResource GreaterOrEqualThanToVisibilityConverter}, ConverterParameter=2}">
228+
<TextBlock Text="{Binding Pipeline.LoraAdapterModel[1].Name, StringFormat={}({0})}" FontSize="8" Margin="0,6,0,0" Opacity=".9" HorizontalAlignment="Center"/>
229+
<CommonControls:SliderControl Text="Lora" Value="{Binding Options.LoraStrength[1]}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01" />
230+
</Grid>
231+
<Grid Visibility="{Binding Pipeline.LoraAdapterModel.Length, Converter={StaticResource GreaterOrEqualThanToVisibilityConverter}, ConverterParameter=3}">
232+
<TextBlock Text="{Binding Pipeline.LoraAdapterModel[2].Name, StringFormat={}({0})}" FontSize="8" Margin="0,6,0,0" Opacity=".9" HorizontalAlignment="Center"/>
233+
<CommonControls:SliderControl Text="Lora" Value="{Binding Options.LoraStrength[2]}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01" />
234+
</Grid>
235+
<Grid Visibility="{Binding Pipeline.LoraAdapterModel.Length, Converter={StaticResource GreaterOrEqualThanToVisibilityConverter}, ConverterParameter=4}">
236+
<TextBlock Text="{Binding Pipeline.LoraAdapterModel[3].Name, StringFormat={}({0})}" FontSize="8" Margin="0,6,0,0" Opacity=".9" HorizontalAlignment="Center"/>
237+
<CommonControls:SliderControl Text="Lora" Value="{Binding Options.LoraStrength[3]}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01" />
238+
</Grid>
239+
<Grid Visibility="{Binding Pipeline.LoraAdapterModel.Length, Converter={StaticResource GreaterOrEqualThanToVisibilityConverter}, ConverterParameter=5}">
240+
<TextBlock Text="{Binding Pipeline.LoraAdapterModel[4].Name, StringFormat={}({0})}" FontSize="8" Margin="0,6,0,0" Opacity=".9" HorizontalAlignment="Center"/>
241+
<CommonControls:SliderControl Text="Lora" Value="{Binding Options.LoraStrength[4]}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01" />
242+
</Grid>
243+
<Grid Visibility="{Binding Pipeline.LoraAdapterModel.Length, Converter={StaticResource GreaterOrEqualThanToVisibilityConverter}, ConverterParameter=6}">
244+
<TextBlock Text="{Binding Pipeline.LoraAdapterModel[5].Name, StringFormat={}({0})}" FontSize="8" Margin="0,6,0,0" Opacity=".9" HorizontalAlignment="Center"/>
245+
<CommonControls:SliderControl Text="Lora" Value="{Binding Options.LoraStrength[5]}" IsPercent="True" Minimum="0.01" Maximum="1" TickFrequency="0.01" />
246+
</Grid>
247+
<UniformGrid.Style>
248+
<Style TargetType="{x:Type UniformGrid}">
249+
<Setter Property="Columns" Value="2"/>
250+
<Style.Triggers>
251+
<DataTrigger Binding="{Binding Pipeline.LoraAdapterModel.Length}" Value="1">
252+
<Setter Property="Columns" Value="1"/>
253+
</DataTrigger>
254+
</Style.Triggers>
255+
</Style>
256+
</UniformGrid.Style>
224257
</UniformGrid>
225258

226259

227-
228260
<!--FlowMatch-->
229261
<StackPanel Visibility="{Binding IsSchedulerFlowMatch, Converter={StaticResource BooleanToVisibilityConverter}, FallbackValue=Collapsed}">
230262
<StackPanel>
@@ -480,31 +512,36 @@
480512
<DockPanel Margin="0,4,0,10">
481513

482514
<!--LoRA Triggers-->
483-
<DockPanel DockPanel.Dock="Bottom" Visibility="{Binding Pipeline.LoraAdapterModel.Triggers, FallbackValue=Collapsed, Converter={StaticResource NullVisibilityConverter}}">
484-
<TextBlock DockPanel.Dock="Top" Text="LoRA Triggers" Style="{StaticResource FieldTextBlockStyle}"/>
485-
<ListBox ItemsSource="{Binding Pipeline.LoraAdapterModel.Triggers}" ItemContainerStyle="{StaticResource TransparentListBoxItem}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" Background="Transparent" BorderThickness="0" HorizontalAlignment="Left">
486-
<ListBox.ItemsPanel>
487-
<ItemsPanelTemplate>
488-
<WrapPanel IsItemsHost="True" />
489-
</ItemsPanelTemplate>
490-
</ListBox.ItemsPanel>
491-
<ListBox.ItemTemplate>
515+
<DockPanel DockPanel.Dock="Bottom" >
516+
<ItemsControl ItemsSource="{Binding Pipeline.LoraAdapterModel}">
517+
<ItemsControl.ItemTemplate>
492518
<DataTemplate>
493-
<Button Content="{Binding}" Command="{Binding AddTriggerWordCommand, RelativeSource={RelativeSource AncestorType={x:Type local:DiffusionInputControl}}}" CommandParameter="{Binding}" Background="{StaticResource ButtonBackgroundDisabled}" FontSize="10" Margin="0,2,3,0" Padding="6,0"/>
519+
<ListBox ItemsSource="{Binding Triggers}" ItemContainerStyle="{StaticResource TransparentListBoxItem}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" Background="Transparent" BorderThickness="0" HorizontalAlignment="Left">
520+
<ListBox.ItemsPanel>
521+
<ItemsPanelTemplate>
522+
<WrapPanel IsItemsHost="True" />
523+
</ItemsPanelTemplate>
524+
</ListBox.ItemsPanel>
525+
<ListBox.ItemTemplate>
526+
<DataTemplate>
527+
<Button Content="{Binding}" Command="{Binding AddTriggerWordCommand, RelativeSource={RelativeSource AncestorType={x:Type local:DiffusionInputControl}}}" CommandParameter="{Binding}" Background="{StaticResource ButtonBackgroundDisabled}" FontSize="9" Margin="0,2,3,0" Padding="3,0" ToolTip="Add LoRA Trigger word"/>
528+
</DataTemplate>
529+
</ListBox.ItemTemplate>
530+
</ListBox>
494531
</DataTemplate>
495-
</ListBox.ItemTemplate>
496-
</ListBox>
532+
</ItemsControl.ItemTemplate>
533+
</ItemsControl>
497534
</DockPanel>
498535

499536
<!--Prompts-->
500537
<UniformGrid Columns="1" >
501538
<DockPanel>
502539
<TextBlock DockPanel.Dock="Top" Text="Prompt" Style="{StaticResource FieldTextBlockStyle}" />
503-
<TextBox Text="{Binding Options.Prompt}" TextWrapping="Wrap" AcceptsReturn="True" MinHeight="80"/>
540+
<TextBox Text="{Binding Options.Prompt}" TextWrapping="Wrap" AcceptsReturn="True" />
504541
</DockPanel>
505542
<DockPanel x:Name="PanelNegativePrompt" Visibility="{Binding Options.GuidanceScale, Converter={StaticResource GreaterThanToVisibilityConverter}, ConverterParameter=1, FallbackValue=Collapsed}">
506543
<TextBlock DockPanel.Dock="Top" Text="Negative Prompt" Style="{StaticResource FieldTextBlockStyle}" />
507-
<TextBox Text="{Binding Options.NegativePrompt, UpdateSourceTrigger=PropertyChanged}" TextWrapping="Wrap" AcceptsReturn="True" MinHeight="80"/>
544+
<TextBox Text="{Binding Options.NegativePrompt, UpdateSourceTrigger=PropertyChanged}" TextWrapping="Wrap" AcceptsReturn="True" />
508545
</DockPanel>
509546
<UniformGrid.Style>
510547
<Style TargetType="{x:Type UniformGrid}">

DiffuseApp/DiffuseApp/Controls/DiffusionInputControl.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ private Task OnPipelineChanged(PipelineModel oldPipeline, PipelineModel newPipel
181181
Prompt = previousOptions?.Prompt,
182182
NegativePrompt = previousOptions?.NegativePrompt,
183183
Seed = previousOptions?.Seed ?? 0,
184-
LoraStrength = previousOptions?.LoraStrength ?? 1f,
184+
LoraStrength = previousOptions?.LoraStrength ?? [1f, 1f, 1f, 1f, 1f, 1f],
185185
InputImageCount = ProcessType == ProcessType.ImageEdit ? (previousOptions?.InputImageCount ?? 1) : 0,
186186

187187
// Update

DiffuseApp/DiffuseApp/Controls/DiffusionModelControl.xaml

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171

7272
</DockPanel>
7373

74-
<UniformGrid Columns="1">
74+
<StackPanel>
7575

7676
<!--Device-->
7777
<DockPanel>
@@ -134,13 +134,9 @@
134134
<DockPanel Visibility="{Binding IsLoraEnabled, Converter={StaticResource BooleanToVisibilityConverter}}">
135135
<TextBox DockPanel.Dock="Left" Text="LoRA" IsReadOnly="True" IsHitTestVisible="False" Width="60" FontStyle="Italic" FontSize="11" Opacity="0.7" Padding="4,2,0,0"/>
136136
<Grid>
137-
<ComboBox
138-
SelectedItem="{Binding SelectedLora}"
139-
ItemsSource="{Binding LoraCollectionView}"
140-
ItemTemplate="{StaticResource ComboBoxDataTemplateModel}"
141-
HorizontalContentAlignment="Stretch"
142-
IsSynchronizedWithCurrentItem="False"/>
143-
<TextBlock Text="No models found." FontStyle="Italic" Opacity=".4" Margin="5,2,0,0" IsHitTestVisible="False" Visibility="{Binding LoraCollectionView.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}}"/>
137+
<Controls:LoraAdapterControl
138+
LoraCollectionView="{Binding LoraCollectionView}"
139+
LoraAdapters="{Binding LoraAdapters, Mode=TwoWay}"/>
144140
</Grid>
145141
</DockPanel>
146142

@@ -184,8 +180,9 @@
184180
</DockPanel>
185181

186182

183+
187184

188-
</UniformGrid>
185+
</StackPanel>
189186
</DockPanel>
190187

191188
</Grid>

0 commit comments

Comments
 (0)