Skip to content

Commit 3d76f0e

Browse files
authored
Merge pull request #1504 from LykosAI/main
v2.15.5
2 parents 7fa112e + b632936 commit 3d76f0e

File tree

20 files changed

+618
-197
lines changed

20 files changed

+618
-197
lines changed

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,26 @@ 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+
828
## v2.15.4
929
### Changed
1030
- Updated Early Access indicators in the Civitai Details page to be more visible

StabilityMatrix.Avalonia/Helpers/UnixPrerequisiteHelper.cs

Lines changed: 3 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -697,9 +697,9 @@ public async Task InstallUvIfNecessary(IProgress<ProgressReport>? progress = nul
697697
File.Delete(UvDownloadPath);
698698
}
699699

700-
public string? GetGfxArchFromAmdGpuName()
700+
public string? GetGfxArchFromAmdGpuName(GpuInfo? gpu = null)
701701
{
702-
var gpu =
702+
gpu ??=
703703
settingsManager.Settings.PreferredGpu
704704
?? HardwareHelper.IterGpuInfo().FirstOrDefault(x => x is { Name: not null, IsAmd: true });
705705

@@ -710,54 +710,7 @@ public async Task InstallUvIfNecessary(IProgress<ProgressReport>? progress = nul
710710
var name = gpu.Name;
711711
var nameNoSpaces = name.Replace(" ", "", StringComparison.Ordinal);
712712

713-
return name switch
714-
{
715-
// RDNA4
716-
_ when Has("9060") || Has("9070") => "gfx1201",
717-
718-
// RDNA3.5 APUs
719-
_ when Has("860M") => "gfx1152",
720-
_ when Has("890M") => "gfx1150",
721-
_ when Has("8040S") || Has("8050S") || Has("8060S") || Has("880M") || Has("Z2 Extreme") =>
722-
"gfx1151",
723-
724-
// RDNA3 APUs (Phoenix)
725-
_ when Has("740M") || Has("760M") || Has("780M") || Has("Z1") || Has("Z2") => "gfx1103",
726-
727-
// RDNA3 dGPU Navi33
728-
_ when Has("7400") || Has("7500") || Has("7600") || Has("7650") || Has("7700S") => "gfx1102",
729-
730-
// RDNA3 dGPU Navi32
731-
_ when Has("7700") || Has("RX 7800") || HasNoSpace("RX7800") => "gfx1101",
732-
733-
// RDNA3 dGPU Navi31 (incl. Pro)
734-
_ when Has("W7800") || Has("7900") || Has("7950") || Has("7990") => "gfx1100",
735-
736-
// RDNA2 APUs (Rembrandt)
737-
_ when Has("660M") || Has("680M") => "gfx1035",
738-
739-
// RDNA2 Navi24 low-end (incl. some mobiles)
740-
_ when Has("6300") || Has("6400") || Has("6450") || Has("6500") || Has("6550") || Has("6500M") =>
741-
"gfx1034",
742-
743-
// RDNA2 Navi23
744-
_ when Has("6600") || Has("6650") || Has("6700S") || Has("6800S") || Has("6600M") => "gfx1032",
745-
746-
// RDNA2 Navi22 (note: desktop 6800 is NOT here; that’s Navi21/gfx1030)
747-
_ when Has("6700") || Has("6750") || Has("6800M") || Has("6850M") => "gfx1031",
748-
749-
// RDNA2 Navi21 (big die)
750-
_ when Has("6800") || Has("6900") || Has("6950") => "gfx1030",
751-
752-
_ => null,
753-
};
754-
755-
bool HasNoSpace(string s) =>
756-
nameNoSpaces.Contains(
757-
s.Replace(" ", "", StringComparison.Ordinal),
758-
StringComparison.OrdinalIgnoreCase
759-
);
760-
bool Has(string s) => name.Contains(s, StringComparison.OrdinalIgnoreCase);
713+
return gpu.GetAmdGfxArch();
761714
}
762715

763716
private async Task DownloadAndExtractPrerequisite(

StabilityMatrix.Avalonia/Helpers/WindowsPrerequisiteHelper.cs

Lines changed: 3 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -932,67 +932,16 @@ public async Task AddMissingLibsToVenv(
932932
// await downloadPath.DeleteAsync();
933933
}
934934

935-
public string? GetGfxArchFromAmdGpuName()
935+
public string? GetGfxArchFromAmdGpuName(GpuInfo? gpu = null)
936936
{
937-
var gpu =
937+
gpu ??=
938938
settingsManager.Settings.PreferredGpu
939939
?? HardwareHelper.IterGpuInfo().FirstOrDefault(x => x is { Name: not null, IsAmd: true });
940940

941941
if (gpu?.Name is null || !gpu.IsAmd)
942942
return null;
943943

944-
// Normalize for safer substring checks (handles RX7800 vs RX 7800, etc.)
945-
var name = gpu.Name;
946-
var nameNoSpaces = name.Replace(" ", "", StringComparison.Ordinal);
947-
948-
return name switch
949-
{
950-
// RDNA4
951-
_ when Has("9060") || Has("9070") => "gfx1201",
952-
953-
// RDNA3.5 APUs
954-
_ when Has("860M") => "gfx1152",
955-
_ when Has("890M") => "gfx1150",
956-
_ when Has("8040S") || Has("8050S") || Has("8060S") || Has("880M") || Has("Z2 Extreme") =>
957-
"gfx1151",
958-
959-
// RDNA3 APUs (Phoenix)
960-
_ when Has("740M") || Has("760M") || Has("780M") || Has("Z1") || Has("Z2") => "gfx1103",
961-
962-
// RDNA3 dGPU Navi33
963-
_ when Has("7400") || Has("7500") || Has("7600") || Has("7650") || Has("7700S") => "gfx1102",
964-
965-
// RDNA3 dGPU Navi32
966-
_ when Has("7700") || Has("RX 7800") || HasNoSpace("RX7800") => "gfx1101",
967-
968-
// RDNA3 dGPU Navi31 (incl. Pro)
969-
_ when Has("W7800") || Has("7900") || Has("7950") || Has("7990") => "gfx1100",
970-
971-
// RDNA2 APUs (Rembrandt)
972-
_ when Has("660M") || Has("680M") => "gfx1035",
973-
974-
// RDNA2 Navi24 low-end (incl. some mobiles)
975-
_ when Has("6300") || Has("6400") || Has("6450") || Has("6500") || Has("6550") || Has("6500M") =>
976-
"gfx1034",
977-
978-
// RDNA2 Navi23
979-
_ when Has("6600") || Has("6650") || Has("6700S") || Has("6800S") || Has("6600M") => "gfx1032",
980-
981-
// RDNA2 Navi22 (note: desktop 6800 is NOT here; that’s Navi21/gfx1030)
982-
_ when Has("6700") || Has("6750") || Has("6800M") || Has("6850M") => "gfx1031",
983-
984-
// RDNA2 Navi21 (big die)
985-
_ when Has("6800") || Has("6900") || Has("6950") => "gfx1030",
986-
987-
_ => null,
988-
};
989-
990-
bool HasNoSpace(string s) =>
991-
nameNoSpaces.Contains(
992-
s.Replace(" ", "", StringComparison.Ordinal),
993-
StringComparison.OrdinalIgnoreCase
994-
);
995-
bool Has(string s) => name.Contains(s, StringComparison.OrdinalIgnoreCase);
944+
return gpu.GetAmdGfxArch();
996945
}
997946

998947
private async Task DownloadAndExtractPrerequisite(

StabilityMatrix.Avalonia/ViewModels/Inference/ImageGalleryCardViewModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ or NotifyCollectionChangedAction.Reset
105105
{
106106
if (sources.Count == 0)
107107
{
108-
SelectedImageIndex = 0;
108+
SelectedImageIndex = -1;
109109
}
110110
else if (SelectedImageIndex == -1)
111111
{
@@ -159,7 +159,7 @@ private async Task FlyoutPreview(IImage? image)
159159
var viewerVm = vmFactory.Get<ImageViewerViewModel>();
160160
viewerVm.ImageSource = new ImageSource((Bitmap)image);
161161

162-
var dialog = new BetterContentDialog { Content = new ImageViewerDialog { DataContext = viewerVm, } };
162+
var dialog = new BetterContentDialog { Content = new ImageViewerDialog { DataContext = viewerVm } };
163163

164164
await dialog.ShowAsync();
165165
}

StabilityMatrix.Avalonia/ViewModels/PackageManager/PackageCardViewModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,7 @@ private async Task ChangeVersion()
602602

603603
viewModel.SelectedBasePackage = basePackage;
604604
viewModel.CanSelectBasePackage = false;
605+
viewModel.ShowPythonVersionSelection = false;
605606
viewModel.IsReleaseMode = Package.Version?.IsReleaseMode ?? false;
606607

607608
var dialog = new TaskDialog

StabilityMatrix.Avalonia/ViewModels/PackageManager/PackageInstallBrowserViewModel.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ IPyInstallationManager pyInstallationManager
4444
[ObservableProperty]
4545
private string searchFilter = string.Empty;
4646

47-
private SourceCache<BasePackage, string> packageSource = new(p => p.GithubUrl);
47+
private SourceCache<BasePackage, string> packageSource = new(p => p.Name);
4848

4949
public IObservableCollection<BasePackage> InferencePackages { get; } =
5050
new ObservableCollectionExtended<BasePackage>();
@@ -119,10 +119,7 @@ protected override void OnInitialLoaded()
119119
.ObserveOn(SynchronizationContext.Current)
120120
.Subscribe();
121121

122-
packageSource.EditDiff(
123-
packageFactory.GetAllAvailablePackages(),
124-
(a, b) => a.GithubUrl == b.GithubUrl
125-
);
122+
packageSource.EditDiff(packageFactory.GetAllAvailablePackages(), (a, b) => a.Name == b.Name);
126123
}
127124

128125
public void OnPackageSelected(BasePackage? package)

StabilityMatrix.Core/Helper/Factory/PackageFactory.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,13 @@ public BasePackage GetNewBasePackage(InstalledPackage installedPackage)
215215
prerequisiteHelper,
216216
pyInstallationManager
217217
),
218+
"forge-neo" => new ForgeNeo(
219+
githubApiCache,
220+
settingsManager,
221+
downloadService,
222+
prerequisiteHelper,
223+
pyInstallationManager
224+
),
218225
"framepack" => new FramePack(
219226
githubApiCache,
220227
settingsManager,
@@ -236,6 +243,13 @@ public BasePackage GetNewBasePackage(InstalledPackage installedPackage)
236243
prerequisiteHelper,
237244
pyInstallationManager
238245
),
246+
"Wan2GP" => new Wan2GP(
247+
githubApiCache,
248+
settingsManager,
249+
downloadService,
250+
prerequisiteHelper,
251+
pyInstallationManager
252+
),
239253
_ => throw new ArgumentOutOfRangeException(nameof(installedPackage)),
240254
};
241255
}

StabilityMatrix.Core/Helper/HardwareInfo/GpuInfo.cs

Lines changed: 53 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -77,42 +77,59 @@ public bool IsWindowsRocmSupportedGpu()
7777
if (!IsAmd || string.IsNullOrWhiteSpace(Name))
7878
return null;
7979

80-
var name = Name.ToLowerInvariant();
81-
82-
if (name.Contains("9070") || name.Contains("R9700"))
83-
return "gfx1201";
84-
85-
if (name.Contains("9060"))
86-
return "gfx1200";
87-
88-
if (name.Contains("z2") || name.Contains("880m") || name.Contains("8050s") || name.Contains("8060s"))
89-
return "gfx1151";
90-
91-
if (name.Contains("740m") || name.Contains("760m") || name.Contains("780m") || name.Contains("z1"))
92-
return "gfx1103";
93-
94-
if (
95-
name.Contains("w7400")
96-
|| name.Contains("w7500")
97-
|| name.Contains("w7600")
98-
|| name.Contains("7500 xt")
99-
|| name.Contains("7600")
100-
|| name.Contains("7650 gre")
101-
|| name.Contains("7700s")
102-
)
103-
return "gfx1102";
104-
105-
if (
106-
name.Contains("v710")
107-
|| name.Contains("7700")
108-
|| (name.Contains("7800") && !name.Contains("w7800"))
109-
)
110-
return "gfx1101";
111-
112-
if (name.Contains("w7800") || name.Contains("7900") || name.Contains("7950") || name.Contains("7990"))
113-
return "gfx1100";
114-
115-
return null;
80+
// Normalize for safer substring checks (handles RX7800 vs RX 7800, etc.)
81+
var name = Name;
82+
var nameNoSpaces = name.Replace(" ", "", StringComparison.Ordinal);
83+
84+
return name switch
85+
{
86+
// RDNA4
87+
_ when Has("R9700") || Has("9070") => "gfx1201",
88+
_ when Has("9060") => "gfx1200",
89+
90+
// RDNA3.5 APUs
91+
_ when Has("860M") => "gfx1152",
92+
_ when Has("890M") => "gfx1150",
93+
_ when Has("8040S") || Has("8050S") || Has("8060S") || Has("880M") || Has("Z2 Extreme") =>
94+
"gfx1151",
95+
96+
// RDNA3 APUs (Phoenix)
97+
_ when Has("740M") || Has("760M") || Has("780M") || Has("Z1") || Has("Z2") => "gfx1103",
98+
99+
// RDNA3 dGPU Navi33
100+
_ when Has("7400") || Has("7500") || Has("7600") || Has("7650") || Has("7700S") => "gfx1102",
101+
102+
// RDNA3 dGPU Navi32
103+
_ when Has("7700") || Has("RX 7800") || HasNoSpace("RX7800") => "gfx1101",
104+
105+
// RDNA3 dGPU Navi31 (incl. Pro)
106+
_ when Has("W7800") || Has("7900") || Has("7950") || Has("7990") => "gfx1100",
107+
108+
// RDNA2 APUs (Rembrandt)
109+
_ when Has("660M") || Has("680M") => "gfx1035",
110+
111+
// RDNA2 Navi24 low-end (incl. some mobiles)
112+
_ when Has("6300") || Has("6400") || Has("6450") || Has("6500") || Has("6550") || Has("6500M") =>
113+
"gfx1034",
114+
115+
// RDNA2 Navi23
116+
_ when Has("6600") || Has("6650") || Has("6700S") || Has("6800S") || Has("6600M") => "gfx1032",
117+
118+
// RDNA2 Navi22 (note: desktop 6800 is NOT here; that’s Navi21/gfx1030)
119+
_ when Has("6700") || Has("6750") || Has("6800M") || Has("6850M") => "gfx1031",
120+
121+
// RDNA2 Navi21 (big die)
122+
_ when Has("6800") || Has("6900") || Has("6950") => "gfx1030",
123+
124+
_ => null,
125+
};
126+
127+
bool HasNoSpace(string s) =>
128+
nameNoSpaces.Contains(
129+
s.Replace(" ", "", StringComparison.Ordinal),
130+
StringComparison.OrdinalIgnoreCase
131+
);
132+
bool Has(string s) => name.Contains(s, StringComparison.OrdinalIgnoreCase);
116133
}
117134

118135
public virtual bool Equals(GpuInfo? other)

StabilityMatrix.Core/Helper/IPrerequisiteHelper.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Diagnostics;
22
using System.Runtime.Versioning;
33
using StabilityMatrix.Core.Exceptions;
4+
using StabilityMatrix.Core.Helper.HardwareInfo;
45
using StabilityMatrix.Core.Models;
56
using StabilityMatrix.Core.Models.FileInterfaces;
67
using StabilityMatrix.Core.Models.Packages;
@@ -298,5 +299,5 @@ Task AddMissingLibsToVenv(
298299
Task InstallPythonIfNecessary(PyVersion version, IProgress<ProgressReport>? progress = null);
299300
Task InstallVirtualenvIfNecessary(PyVersion version, IProgress<ProgressReport>? progress = null);
300301
Task InstallTkinterIfNecessary(PyVersion version, IProgress<ProgressReport>? progress = null);
301-
string? GetGfxArchFromAmdGpuName();
302+
string? GetGfxArchFromAmdGpuName(GpuInfo? gpu = null);
302303
}

0 commit comments

Comments
 (0)