Skip to content
This repository was archived by the owner on Dec 9, 2025. It is now read-only.

Commit dd382d7

Browse files
committed
UI Scaffold
1 parent 23b0c27 commit dd382d7

File tree

7 files changed

+572
-5
lines changed

7 files changed

+572
-5
lines changed

OnnxStack.Console/Examples/UpscaleStreamExample.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public UpscaleStreamExample()
1515

1616
public int Index => 10;
1717

18-
public string Name => "Streaming Video Upscale Demo";
18+
public string Name => "Upscale Video Streaming Demo";
1919

2020
public string Description => "Upscales a video stream";
2121

OnnxStack.UI/MainWindow.xaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,19 @@
8787
<views:UpscaleView UISettings="{Binding UISettings}" Margin="0,6,0,0"/>
8888
</TabItem>
8989

90+
<!--Feature Extractor-->
91+
<TabItem>
92+
<TabItem.Header>
93+
<StackPanel Orientation="Horizontal" Margin="5">
94+
<StackPanel Orientation="Horizontal">
95+
<userControls:FontAwesome Icon="&#xf424;" IconStyle="Light"/>
96+
</StackPanel>
97+
<TextBlock Text="Feature Extractor" Margin="5,0,0,0"/>
98+
</StackPanel>
99+
</TabItem.Header>
100+
<views:FeatureExtractorView UISettings="{Binding UISettings}" Margin="0,6,0,0"/>
101+
</TabItem>
102+
90103
<!--Log Window-->
91104
<TabItem DockPanel.Dock="Right" HorizontalAlignment="Right">
92105
<TabItem.Header>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
using System.Windows.Media.Imaging;
2+
3+
namespace OnnxStack.UI.Models
4+
{
5+
public record FeatureExtractorResult(BitmapSource Image, double Elapsed);
6+
}

OnnxStack.UI/UserControls/SchedulerControl.xaml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@
3232
<Label>Scheduler</Label>
3333
<ComboBox ItemsSource="{Binding SchedulerTypes}" SelectedItem="{Binding SchedulerOptions.SchedulerType}"/>
3434
</StackPanel>
35-
<StackPanel Margin="5,0,0,0" VerticalAlignment="Bottom" Visibility="{Binding SelectedModel.IsControlNet, Converter={StaticResource BooleanToVisibilityConverter}, FallbackValue=Collapsed}">
36-
<CheckBox IsChecked="{Binding SchedulerOptions.IsControlImageProcessingEnabled}" Content="Process Input Image" Margin="0,0,0,3"/>
37-
</StackPanel>
35+
3836
</UniformGrid>
3937

4038

OnnxStack.UI/Utils.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using OnnxStack.StableDiffusion.Config;
1+
using OnnxStack.Core.Image;
2+
using OnnxStack.StableDiffusion.Config;
23
using OnnxStack.UI.Models;
34
using System;
45
using System.Collections.ObjectModel;
@@ -18,6 +19,21 @@ public static string RandomString()
1819
return Path.GetFileNameWithoutExtension(Path.GetRandomFileName());
1920
}
2021

22+
public static async Task<BitmapImage> ToBitmapAsync(this OnnxImage onnxImage)
23+
{
24+
using (var memoryStream = new MemoryStream())
25+
{
26+
await onnxImage.SaveAsync(memoryStream);
27+
var image = new BitmapImage();
28+
image.BeginInit();
29+
image.CacheOption = BitmapCacheOption.OnLoad;
30+
image.StreamSource = memoryStream;
31+
image.EndInit();
32+
image.Freeze();
33+
return image;
34+
}
35+
}
36+
2137
public static BitmapImage CreateBitmap(byte[] imageBytes)
2238
{
2339
using (var memoryStream = new MemoryStream(imageBytes))
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
<UserControl x:Class="OnnxStack.UI.Views.FeatureExtractorView"
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6+
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
7+
xmlns:userControls="clr-namespace:OnnxStack.UI.UserControls"
8+
Name="UI" mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="800" >
9+
<Grid DataContext="{Binding ElementName=UI}" >
10+
<Grid.ColumnDefinitions>
11+
<ColumnDefinition x:Name="col1" Width="360" />
12+
<ColumnDefinition Width="4" />
13+
<ColumnDefinition Width="*" />
14+
</Grid.ColumnDefinitions>
15+
16+
<!--Control Panel-->
17+
<DockPanel Grid.Column="0" DataContext="{Binding ElementName=UI}" Margin="3,3,3,0">
18+
<UniformGrid DockPanel.Dock="Bottom" Columns="2" Height="30">
19+
<Button Content="Cancel" Command="{Binding CancelCommand}" Margin="0,0,1,0" />
20+
<Button Content="Generate" Command="{Binding GenerateCommand}" IsEnabled="{Binding SelectedModel.IsLoaded, FallbackValue=False, TargetNullValue=False}" IsDefault="True" Margin="1,0,0,0"/>
21+
</UniformGrid>
22+
<DockPanel >
23+
<userControls:UpscalePickerControl DockPanel.Dock="Top"
24+
UISettings="{Binding UISettings}"
25+
IsEnabled="{Binding IsGenerating, Converter={StaticResource InverseBoolConverter}}"
26+
SelectedModel="{Binding SelectedModel, Mode=TwoWay}"/>
27+
<DockPanel IsEnabled="{Binding SelectedModel.IsLoaded, FallbackValue=False, TargetNullValue=False}">
28+
29+
<UniformGrid DockPanel.Dock="Top" Columns="1" Margin="5" >
30+
<StackPanel Orientation="Horizontal">
31+
<TextBlock Text="Scale Factor:" Margin="0,0,5,0" FontStyle="Italic" Opacity=".6"/>
32+
<TextBlock Text="{Binding UpscaleInfo.ScaleFactor}" />
33+
</StackPanel>
34+
35+
<StackPanel Orientation="Horizontal">
36+
<TextBlock Text="Sample Size:" Margin="0,0,5,0" FontStyle="Italic" Opacity=".6"/>
37+
<TextBlock Text="{Binding UpscaleInfo.SampleSize}" />
38+
</StackPanel>
39+
40+
<StackPanel Orientation="Horizontal">
41+
<TextBlock Text="Input Size:" Margin="0,0,5,0" FontStyle="Italic" Opacity=".6"/>
42+
<TextBlock Text="{Binding UpscaleInfo.InputWidth}" />
43+
<TextBlock Text="x" Margin="5,0,5,0"/>
44+
<TextBlock Text="{Binding UpscaleInfo.InputHeight}" />
45+
</StackPanel>
46+
47+
<StackPanel Orientation="Horizontal">
48+
<TextBlock Text="Output Size:" Margin="0,0,5,0" FontStyle="Italic" Opacity=".6"/>
49+
<TextBlock Text="{Binding UpscaleInfo.OutputWidth}" />
50+
<TextBlock Text="x" Margin="5,0,5,0"/>
51+
<TextBlock Text="{Binding UpscaleInfo.OutputHeight}" />
52+
</StackPanel>
53+
54+
</UniformGrid>
55+
56+
57+
<StackPanel >
58+
<Border BorderBrush="Gainsboro" BorderThickness="2">
59+
<Image Source="{Binding InputImage, FallbackValue={StaticResource PlaceholderImage}, TargetNullValue={StaticResource PlaceholderImage}}"
60+
Height="{Binding ElementName=col1, Path=Width.Value}"></Image>
61+
</Border>
62+
<StackPanel Margin="0,5,0,0">
63+
<TextBlock Text="Load Image" />
64+
<userControls:FilePickerTextBox FileName="{Binding ImageFile, Mode=TwoWay}" />
65+
</StackPanel>
66+
</StackPanel>
67+
68+
69+
70+
71+
72+
73+
74+
75+
76+
77+
78+
</DockPanel>
79+
</DockPanel>
80+
</DockPanel>
81+
82+
<GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" Width="4" />
83+
84+
<!--Content Panel-->
85+
<DockPanel Grid.Column="2" Margin="3,0,0,0">
86+
87+
<!--Generate Tab-->
88+
<TabControl SelectedIndex="{Binding SelectedTabIndex}">
89+
<TabItem>
90+
<TabItem.Header>
91+
<StackPanel Orientation="Horizontal" Margin="15,5">
92+
<userControls:FontAwesome Icon="&#xf0d0;" IconStyle="Light"/>
93+
<TextBlock Text="Generate" Margin="5,0,0,0"/>
94+
</StackPanel>
95+
</TabItem.Header>
96+
<DockPanel VerticalAlignment="Center" HorizontalAlignment="Center">
97+
98+
<Border BorderBrush="Gainsboro" BorderThickness="2" Margin="40">
99+
<DockPanel Margin="2">
100+
101+
<StackPanel DockPanel.Dock="Bottom">
102+
103+
<StackPanel Visibility="{Binding HasResult, Converter={StaticResource InverseBooleanToVisibilityConverter}}" Margin="0,4">
104+
<ProgressBar IsIndeterminate="{Binding IsGenerating}" Height="22" />
105+
</StackPanel>
106+
<StackPanel Visibility="{Binding HasResult, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="0,4">
107+
<UniformGrid Columns="4" Margin="0,3">
108+
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
109+
<StackPanel Orientation="Horizontal">
110+
<TextBlock Text="Input:" Margin="0,0,5,0" FontStyle="Italic" FontSize="10" Opacity=".6" VerticalAlignment="Center"/>
111+
<TextBlock Text="{Binding ResultImage.Info.InputWidth}" />
112+
<TextBlock Text="x" Margin="2,0,2,0"/>
113+
<TextBlock Text="{Binding ResultImage.Info.InputHeight}" />
114+
</StackPanel>
115+
</StackPanel>
116+
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
117+
<StackPanel Orientation="Horizontal">
118+
<TextBlock Text="Output:" Margin="0,0,5,0" FontStyle="Italic" FontSize="10" Opacity=".6" VerticalAlignment="Center"/>
119+
<TextBlock Text="{Binding ResultImage.Info.OutputWidth}" />
120+
<TextBlock Text="x" Margin="2,0,2,0"/>
121+
<TextBlock Text="{Binding ResultImage.Info.OutputHeight}" />
122+
</StackPanel>
123+
</StackPanel>
124+
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
125+
<TextBlock Text="Scale Factor:" Margin="0,0,5,0" FontStyle="Italic" FontSize="10" Opacity=".6" VerticalAlignment="Center"/>
126+
<TextBlock Text="{Binding ResultImage.Info.ScaleFactor}" />
127+
</StackPanel>
128+
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
129+
<TextBlock Text="Elapsed:" Margin="5,0,0,0" FontSize="10" Opacity=".6" VerticalAlignment="Center" FontStyle="Italic"/>
130+
<TextBlock Text="{Binding ResultImage.Elapsed, StringFormat={}{0:F1}s}" Margin="5,0,0,0"/>
131+
</StackPanel>
132+
</UniformGrid>
133+
</StackPanel>
134+
<UniformGrid Columns="3" Height="30" IsEnabled="{Binding HasResult}">
135+
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}}, Path=SaveImageCommand}" CommandParameter="{Binding ResultImage}" ToolTip="Save Image File">
136+
<StackPanel Orientation="Horizontal">
137+
<userControls:FontAwesome Icon="&#xf0c7;" IconStyle="Light" Size="13" />
138+
<TextBlock Text="Save Image" Margin="5,0,0,0"/>
139+
</StackPanel>
140+
</Button>
141+
<TextBlock />
142+
<CheckBox IsChecked="{Binding ShowFullImage}" Content="Show Full Image" BorderThickness="0,1,1,1" HorizontalAlignment="Center" VerticalAlignment="Center" />
143+
</UniformGrid>
144+
</StackPanel>
145+
146+
147+
<ScrollViewer HorizontalScrollBarVisibility="{Binding ScrollBarVisibility}" VerticalScrollBarVisibility="{Binding ScrollBarVisibility}" >
148+
<Viewbox>
149+
<Image Source="{Binding ResultImage.Image, FallbackValue={StaticResource PlaceholderImage}, TargetNullValue={StaticResource PlaceholderImage}}" >
150+
<Image.ContextMenu>
151+
<ContextMenu>
152+
<MenuItem Header="Copy" Command="{Binding CopyImageCommand}" IsEnabled="{Binding HasResult}" />
153+
</ContextMenu>
154+
</Image.ContextMenu>
155+
</Image>
156+
</Viewbox>
157+
</ScrollViewer>
158+
159+
160+
</DockPanel>
161+
</Border>
162+
163+
</DockPanel>
164+
</TabItem>
165+
166+
<!--History Tab-->
167+
<TabItem>
168+
<TabItem.Header>
169+
<StackPanel Orientation="Horizontal" Margin="15,5">
170+
<userControls:FontAwesome Icon="&#xf03a;" IconStyle="Light"/>
171+
<TextBlock Text="History" Margin="5,0,0,0"/>
172+
</StackPanel>
173+
</TabItem.Header>
174+
<DockPanel>
175+
<DockPanel DockPanel.Dock="Bottom" HorizontalAlignment="Right">
176+
<StackPanel Orientation="Horizontal" Margin="0,4,0,0">
177+
<Button Command="{Binding ClearHistoryCommand}" Padding="10,3" Height="30">
178+
<userControls:FontAwesome Icon="&#xf2ed;" IconStyle="Light"/>
179+
</Button>
180+
</StackPanel>
181+
</DockPanel>
182+
<ListBox ItemsSource="{Binding}" ItemContainerStyle="{StaticResource ImageResultListBoxItem}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" >
183+
<ListBox.DataContext>
184+
<CollectionViewSource Source="{Binding ImageResults, ElementName=UI}">
185+
<CollectionViewSource.SortDescriptions>
186+
<scm:SortDescription PropertyName="Timestamp" Direction="Descending" />
187+
</CollectionViewSource.SortDescriptions>
188+
</CollectionViewSource>
189+
</ListBox.DataContext>
190+
<ListBox.ItemsPanel>
191+
<ItemsPanelTemplate>
192+
<WrapPanel />
193+
</ItemsPanelTemplate>
194+
</ListBox.ItemsPanel>
195+
</ListBox>
196+
</DockPanel>
197+
</TabItem>
198+
199+
</TabControl>
200+
</DockPanel>
201+
</Grid>
202+
</UserControl>

0 commit comments

Comments
 (0)