Skip to content

Commit 2b51929

Browse files
authored
Merge branch 'main' into main
2 parents 42c0448 + 4516c34 commit 2b51929

59 files changed

Lines changed: 1647 additions & 238 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,59 @@ All notable changes to Stability Matrix will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning 2.0](https://semver.org/spec/v2.0.0.html).
77

8+
## v2.15.5
9+
### Added
10+
- Added new package - [Wan2GP](https://github.com/deepbeepmeep/Wan2GP)
11+
- Added [Stable Diffusion WebUI Forge - Neo](https://github.com/Haoming02/sd-webui-forge-classic/tree/neo) as a separate package for convenience
12+
- Added Tiled VAE decoding as an Inference addon thanks to @NeuralFault!
13+
- Added togglable `--uv` argument to the SD.Next launch options
14+
### Changed
15+
- Moved the original Stable Diffusion WebUI Forge to the "Legacy" packages tab due to inactivity
16+
- Updated to cu130 torch index for ComfyUI installs with Nvidia GPUs
17+
- Consolidated and fixed AMD GPU architecture detection
18+
- Updated SageAttention installer to latest v2.2.0-windows.post4 version
19+
- Updated torch index for Forge-based UIs to rocm6.4 / cu128 depending on GPU - thanks to @NeuralFault!
20+
### Fixed
21+
- Fixed [#1450](https://github.com/LykosAI/StabilityMatrix/issues/1450) - Older SD.Next not launching due to forced `--uv` argument
22+
- Fixed duplicate custom node installations when installing workflows from the Workflow Browser - thanks again to @NeuralFault!
23+
#### 🌟 Visionaries
24+
To our incredible Visionaries: **Waterclouds**, **JungleDragon**, **bluepopsicle**, **Bob S**, and **whudunit**! Your generosity drives this project forward and helps us turn ideas into reality. Thank you for being such a vital part of Stability Matrix!
25+
#### 🚀 Pioneers
26+
A massive thank you to our Pioneer crew! Your support keeps the lights on and the updates flowing. Shoutout to: **Szir777**, **Noah M**, **[USA]TechDude**, **Thom**, **SeraphOfSalem**, **Desert Viber**, **Adam**, **Droolguy**, **ACTUALLY_the_Real_Willem_Dafoe**, **takyamtom**, **robek**, **Phil R**, **Tundra Everquill**, **TheTekknician**, and a warm welcome to our new Pioneers, **Benjamin M** and **Ghislain G**!
27+
28+
## v2.15.4
29+
### Changed
30+
- Updated Early Access indicators in the Civitai Details page to be more visible
31+
- Updated error message when attempting to download a website-generation-only model from Civitai
32+
- Updated nunchaku installer to 1.0.2
33+
- Updated Package Import dialog to have Python version selector
34+
### Fixed
35+
- Fixed [#1435](https://github.com/LykosAI/StabilityMatrix/issues/1435) - SwarmUI not launching due to missing dotnet
36+
- Fixed various install and Inference issues with ComfyUI-Zluda - big thanks to @neural_fault for the PRs!
37+
- Fixed sageattention version getting out of sync after torch updates in ComfyUI
38+
- Potentially fixed issue where uv-managed Python versions would not appear in the version selector
39+
### Supporters
40+
#### 🌟 Visionaries
41+
Our heartfelt thanks to the driving force behind our progress, our Visionaries: **Waterclouds**, **JungleDragon**, **bluepopsicle**, **Bob S**, and **whudunit**! Your incredible support is the fuel that powers our development, allowing us to tackle bugs and push forward with confidence.
42+
#### 🚀 Pioneers
43+
A huge shoutout to our amazing Pioneers, who keep the momentum going strong! Thank you for being our trusted crew on this journey: **Szir777**, **Noah M**, **USATechDude**, **Thom**, **SeraphOfSalem**, **Desert Viber**, **Tundra Everquill**, **Adam**, **Droolguy**, **Philip R.**, **ACTUALLY_the_Real_Willem_Dafoe**, **takyamtom**, and **robek**!
44+
45+
## v2.15.3
46+
### Changed
47+
- Updated fallback rocm index for InvokeAI to rocm6.3
48+
- Updated SwarmUI to launch via the launch script for better compatibility
49+
### Fixed
50+
- Fixed cuDNN frontend error on ComfyUI-Zluda startup (thanks @neural_fault!)
51+
- Maybe finally actually fixed threading issue with the Python Packages dialog search box for real this time? (may fix [#1392](https://github.com/LykosAI/StabilityMatrix/issues/1392))
52+
- Fixed potential install failures when moving duplicate files into shared model folders (may fix [#1393](https://github.com/LykosAI/StabilityMatrix/issues/1393))
53+
- Fixed potential threading issues with the Inference image gallery (may fix [#1408](https://github.com/LykosAI/StabilityMatrix/issues/1408))
54+
- Fixed [#1424](https://github.com/LykosAI/StabilityMatrix/issues/1424) - Civitai account 401 error when connecting accounts, updated for new API changes
55+
### Supporters
56+
#### 🌟 Visionaries
57+
Our deepest gratitude to our Visionaries for their foundational support: **Waterclouds**, **JungleDragon**, **bluepopsicle**, **Bob S**, and **whudunit**! Your commitment allows us to focus on the essential work of squashing bugs and improving stability, ensuring a rock-solid experience for everyone.
58+
#### 🚀 Pioneers
59+
A huge thank you to our incredible Pioneers for keeping the project on track! Your support is vital for these important refinement updates. Thank you to **Szir777**, **Noah M**, **USATechDude**, **Thom**, **SeraphOfSalem**, **Desert Viber**, **Tundra Everquill**, **Adam**, **Droolguy**, **Philip R.**, **ACTUALLY_the_Real_Willem_Dafoe**, **takyamtom**, and a warm welcome to our newest Pioneer, **robek**!
60+
861
## v2.15.2
962
### Changed
1063
- Updated Avalonia to 11.3.7

StabilityMatrix.Avalonia/App.axaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,13 @@
9595
<StyleInclude Source="Controls/Inference/UnetModelCard.axaml" />
9696
<StyleInclude Source="Controls/Inference/DiscreteModelSamplingCard.axaml" />
9797
<StyleInclude Source="Controls/Inference/RescaleCfgCard.axaml" />
98+
<StyleInclude Source="Controls/Inference/TiledVAECard.axaml" />
9899
<StyleInclude Source="Controls/Painting/PaintCanvas.axaml" />
99100
<StyleInclude Source="Controls/MarkdownViewer.axaml" />
100101
<StyleInclude Source="Controls/Inference/WanModelCard.axaml" />
101102
<StyleInclude Source="Controls/Inference/PlasmaNoiseCard.axaml" />
102103
<StyleInclude Source="Controls/Inference/NrsCard.axaml" />
104+
<StyleInclude Source="Controls/Inference/CfzCudnnToggleCard.axaml" />
103105
<labs:ControlThemes />
104106

105107
<Style Selector="DockControl">
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<Styles xmlns="https://github.com/avaloniaui"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
xmlns:controls="using:StabilityMatrix.Avalonia.Controls"
4+
xmlns:mocks="clr-namespace:StabilityMatrix.Avalonia.DesignData"
5+
xmlns:vmInference="clr-namespace:StabilityMatrix.Avalonia.ViewModels.Inference"
6+
x:DataType="vmInference:CfzCudnnToggleCardViewModel">
7+
<Design.PreviewWith>
8+
<controls:CfzCudnnToggleCard Width="400" />
9+
</Design.PreviewWith>
10+
11+
<Style Selector="controls|CfzCudnnToggleCard">
12+
<Setter Property="Template">
13+
<ControlTemplate>
14+
<controls:Card x:Name="PART_Card">
15+
<StackPanel Spacing="8">
16+
<TextBlock Text="Disable CUDNN" FontSize="14" FontWeight="Bold" />
17+
<ToggleSwitch
18+
IsChecked="{Binding DisableCudnn}"
19+
Margin="8,0,4,0"
20+
HorizontalAlignment="Stretch" />
21+
</StackPanel>
22+
</controls:Card>
23+
</ControlTemplate>
24+
</Setter>
25+
</Style>
26+
</Styles>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
using Injectio.Attributes;
2+
3+
namespace StabilityMatrix.Avalonia.Controls;
4+
5+
[RegisterTransient<CfzCudnnToggleCard>]
6+
public class CfzCudnnToggleCard : TemplatedControlBase;
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<Styles
2+
xmlns="https://github.com/avaloniaui"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:controls="using:StabilityMatrix.Avalonia.Controls"
5+
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
6+
xmlns:vmInference="clr-namespace:StabilityMatrix.Avalonia.ViewModels.Inference"
7+
x:DataType="vmInference:TiledVAECardViewModel">
8+
<Design.PreviewWith>
9+
<controls:TiledVAECard />
10+
</Design.PreviewWith>
11+
12+
<Style Selector="controls|TiledVAECard">
13+
<!-- Set Defaults -->
14+
<Setter Property="Template">
15+
<ControlTemplate>
16+
<controls:Card x:Name="PART_Card">
17+
<controls:Card.Styles>
18+
<Style Selector="ui|NumberBox">
19+
<Setter Property="Margin" Value="12,0,0,0" />
20+
<Setter Property="MinWidth" Value="70" />
21+
<Setter Property="HorizontalAlignment" Value="Stretch" />
22+
<Setter Property="ValidationMode" Value="InvalidInputOverwritten" />
23+
<Setter Property="SmallChange" Value="32" />
24+
<Setter Property="LargeChange" Value="128" />
25+
<Setter Property="SpinButtonPlacementMode" Value="Inline" />
26+
</Style>
27+
</controls:Card.Styles>
28+
<StackPanel Spacing="8">
29+
<!-- Tile Size -->
30+
<Grid ColumnDefinitions="Auto,*">
31+
<TextBlock
32+
Grid.Column="0"
33+
VerticalAlignment="Center"
34+
Text="Tile Size" />
35+
<ui:NumberBox
36+
Grid.Column="1"
37+
Value="{Binding TileSize, Mode=TwoWay}" />
38+
</Grid>
39+
40+
<!-- Overlap -->
41+
<Grid ColumnDefinitions="Auto,*">
42+
<TextBlock
43+
Grid.Column="0"
44+
VerticalAlignment="Center"
45+
Text="Overlap" />
46+
<ui:NumberBox
47+
Grid.Column="1"
48+
Value="{Binding Overlap, Mode=TwoWay}" />
49+
</Grid>
50+
51+
<!-- Temporal Size (for Video VAEs) -->
52+
<Grid ColumnDefinitions="Auto,*">
53+
<TextBlock
54+
Grid.Column="0"
55+
VerticalAlignment="Center"
56+
Text="Temporal Size" />
57+
<ui:NumberBox
58+
Grid.Column="1"
59+
Value="{Binding TemporalSize, Mode=TwoWay}" />
60+
</Grid>
61+
62+
<!-- Temporal Overlap (for Video VAEs) -->
63+
<Grid ColumnDefinitions="Auto,*">
64+
<TextBlock
65+
Grid.Column="0"
66+
VerticalAlignment="Center"
67+
Text="Temporal Overlap" />
68+
<ui:NumberBox
69+
Grid.Column="1"
70+
Value="{Binding TemporalOverlap, Mode=TwoWay}"
71+
SmallChange="4"
72+
LargeChange="16" />
73+
</Grid>
74+
</StackPanel>
75+
</controls:Card>
76+
</ControlTemplate>
77+
</Setter>
78+
</Style>
79+
</Styles>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using Avalonia;
2+
using Avalonia.Controls;
3+
using Avalonia.Controls.Primitives;
4+
using Injectio.Attributes;
5+
6+
namespace StabilityMatrix.Avalonia.Controls;
7+
8+
[RegisterTransient<TiledVAECard>]
9+
public class TiledVAECard : TemplatedControlBase { }

StabilityMatrix.Avalonia/Helpers/UnixPrerequisiteHelper.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using StabilityMatrix.Avalonia.Languages;
1313
using StabilityMatrix.Core.Exceptions;
1414
using StabilityMatrix.Core.Helper;
15+
using StabilityMatrix.Core.Helper.HardwareInfo;
1516
using StabilityMatrix.Core.Models;
1617
using StabilityMatrix.Core.Models.FileInterfaces;
1718
using StabilityMatrix.Core.Models.Packages;
@@ -59,8 +60,6 @@ private bool IsPythonVersionInstalled(PyVersion version) =>
5960
private DirectoryPath NodeDir => AssetsDir.JoinDir("nodejs");
6061
private string NpmPath => Path.Combine(NodeDir, "bin", "npm");
6162
private bool IsNodeInstalled => File.Exists(NpmPath);
62-
63-
private DirectoryPath DotnetDir => AssetsDir.JoinDir("dotnet");
6463
private string DotnetPath => Path.Combine(DotnetDir, "dotnet");
6564
private string Dotnet7SdkExistsPath => Path.Combine(DotnetDir, "sdk", "7.0.405");
6665
private string Dotnet8SdkExistsPath => Path.Combine(DotnetDir, "sdk", "8.0.101");
@@ -76,13 +75,15 @@ private bool IsPythonVersionInstalled(PyVersion version) =>
7675
// Cached store of whether or not git is installed
7776
private bool? isGitInstalled;
7877

78+
private string ExpectedUvVersion => "0.8.4";
79+
7980
public bool IsVcBuildToolsInstalled => false;
8081
public bool IsHipSdkInstalled => false;
8182
private string UvDownloadPath => Path.Combine(AssetsDir, "uv.tar.gz");
8283
private string UvExtractPath => Path.Combine(AssetsDir, "uv");
8384
public string UvExePath => Path.Combine(UvExtractPath, "uv");
8485
public bool IsUvInstalled => File.Exists(UvExePath);
85-
private string ExpectedUvVersion => "0.8.4";
86+
public DirectoryPath DotnetDir => AssetsDir.JoinDir("dotnet");
8687

8788
// Helper method to get Python download URL for a specific version
8889
private RemoteResource GetPythonDownloadResource(PyVersion version)
@@ -696,6 +697,22 @@ public async Task InstallUvIfNecessary(IProgress<ProgressReport>? progress = nul
696697
File.Delete(UvDownloadPath);
697698
}
698699

700+
public string? GetGfxArchFromAmdGpuName(GpuInfo? gpu = null)
701+
{
702+
gpu ??=
703+
settingsManager.Settings.PreferredGpu
704+
?? HardwareHelper.IterGpuInfo().FirstOrDefault(x => x is { Name: not null, IsAmd: true });
705+
706+
if (gpu?.Name is null || !gpu.IsAmd)
707+
return null;
708+
709+
// Normalize for safer substring checks (handles RX7800 vs RX 7800, etc.)
710+
var name = gpu.Name;
711+
var nameNoSpaces = name.Replace(" ", "", StringComparison.Ordinal);
712+
713+
return gpu.GetAmdGfxArch();
714+
}
715+
699716
private async Task DownloadAndExtractPrerequisite(
700717
IProgress<ProgressReport>? progress,
701718
string downloadUrl,

StabilityMatrix.Avalonia/Helpers/WindowsPrerequisiteHelper.cs

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,9 @@ private string GetPythonLibraryZipPath(PyVersion version) =>
9393
private string NodeDownloadPath => Path.Combine(AssetsDir, "nodejs.zip");
9494
private string Dotnet7DownloadPath => Path.Combine(AssetsDir, "dotnet-sdk-7.0.405-win-x64.zip");
9595
private string Dotnet8DownloadPath => Path.Combine(AssetsDir, "dotnet-sdk-8.0.101-win-x64.zip");
96-
private string DotnetExtractPath => Path.Combine(AssetsDir, "dotnet");
97-
private string DotnetExistsPath => Path.Combine(DotnetExtractPath, "dotnet.exe");
98-
private string Dotnet7SdkExistsPath => Path.Combine(DotnetExtractPath, "sdk", "7.0.405");
99-
private string Dotnet8SdkExistsPath => Path.Combine(DotnetExtractPath, "sdk", "8.0.101");
96+
private string DotnetExistsPath => Path.Combine(DotnetDir, "dotnet.exe");
97+
private string Dotnet7SdkExistsPath => Path.Combine(DotnetDir, "sdk", "7.0.405");
98+
private string Dotnet8SdkExistsPath => Path.Combine(DotnetDir, "sdk", "8.0.101");
10099
private string VcBuildToolsDownloadPath => Path.Combine(AssetsDir, "vs_BuildTools.exe");
101100

102101
private string VcBuildToolsExistsPath =>
@@ -121,6 +120,7 @@ private string GetPythonLibraryZipPath(PyVersion version) =>
121120
public string GitBinPath => Path.Combine(PortableGitInstallDir, "bin");
122121
public bool IsVcBuildToolsInstalled => Directory.Exists(VcBuildToolsExistsPath);
123122
public bool IsHipSdkInstalled => Directory.Exists(HipInstalledPath);
123+
public DirectoryPath DotnetDir => Path.Combine(AssetsDir, "dotnet");
124124

125125
// Check if a specific Python version is installed
126126
public bool IsPythonVersionInstalled(PyVersion version) => File.Exists(GetPythonDllPath(version));
@@ -334,10 +334,10 @@ public async Task InstallPackageRequirements(
334334
await InstallTkinterIfNecessary(PyInstallationManager.Python_3_10_11, progress);
335335
}
336336

337-
// if (prerequisites.Contains(PackagePrerequisite.VcBuildTools))
338-
// {
339-
// await InstallVcBuildToolsIfNecessary(progress);
340-
// }
337+
if (prerequisites.Contains(PackagePrerequisite.VcBuildTools))
338+
{
339+
await InstallVcBuildToolsIfNecessary(progress);
340+
}
341341
}
342342

343343
public async Task InstallAllIfNecessary(IProgress<ProgressReport>? progress = null)
@@ -740,7 +740,7 @@ await DownloadAndExtractPrerequisite(
740740
progress,
741741
Dotnet7DownloadUrl,
742742
Dotnet7DownloadPath,
743-
DotnetExtractPath
743+
DotnetDir
744744
);
745745
}
746746

@@ -750,7 +750,7 @@ await DownloadAndExtractPrerequisite(
750750
progress,
751751
Dotnet8DownloadUrl,
752752
Dotnet8DownloadPath,
753-
DotnetExtractPath
753+
DotnetDir
754754
);
755755
}
756756
}
@@ -782,7 +782,18 @@ await downloadService.DownloadToFileAsync(
782782

783783
var process = ProcessRunner.StartAnsiProcess(
784784
VcBuildToolsDownloadPath,
785-
"--quiet --wait --add Microsoft.VisualStudio.Workload.VCTools;includeRecommended;includeOptional",
785+
"--quiet --wait "
786+
+ "--add Microsoft.VisualStudio.Workload.VCTools "
787+
+ "--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 "
788+
+ "--add Microsoft.VisualStudio.Component.VC.CMake.Project "
789+
+ "--add Microsoft.VisualStudio.Component.VC.Llvm.Clang "
790+
+ "--add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang "
791+
+ "--add Microsoft.VisualStudio.Component.Windows10SDK.18362 "
792+
+ "--add Microsoft.VisualStudio.Component.Windows10SDK.19041 "
793+
+ "--add Microsoft.VisualStudio.Component.Windows10SDK.20348 "
794+
+ "--add Microsoft.VisualStudio.Component.Windows11SDK.22000 "
795+
+ "--add Microsoft.VisualStudio.Component.Windows11SDK.22621 "
796+
+ "--add Microsoft.VisualStudio.Component.Windows11SDK.26100",
786797
outputDataReceived: output =>
787798
progress?.Report(
788799
new ProgressReport(
@@ -921,6 +932,18 @@ public async Task AddMissingLibsToVenv(
921932
// await downloadPath.DeleteAsync();
922933
}
923934

935+
public string? GetGfxArchFromAmdGpuName(GpuInfo? gpu = null)
936+
{
937+
gpu ??=
938+
settingsManager.Settings.PreferredGpu
939+
?? HardwareHelper.IterGpuInfo().FirstOrDefault(x => x is { Name: not null, IsAmd: true });
940+
941+
if (gpu?.Name is null || !gpu.IsAmd)
942+
return null;
943+
944+
return gpu.GetAmdGfxArch();
945+
}
946+
924947
private async Task DownloadAndExtractPrerequisite(
925948
IProgress<ProgressReport>? progress,
926949
string downloadUrl,

0 commit comments

Comments
 (0)