diff --git a/CHANGELOG.md b/CHANGELOG.md
index c3acb129c..b710c54bd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,18 @@ All notable changes to Stability Matrix will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning 2.0](https://semver.org/spec/v2.0.0.html).
+## v2.9.1
+### Added
+- Fixed [#498](https://github.com/LykosAI/StabilityMatrix/issues/498) Added "Pony" category to CivitAI Model Browser
+### Changed
+- Changed package deletion warning dialog to require additional confirmation
+### Fixed
+- Fixed [#502](https://github.com/LykosAI/StabilityMatrix/issues/502) - missing launch options for Forge
+- Fixed [#500](https://github.com/LykosAI/StabilityMatrix/issues/500) - missing output images in Forge when using output sharing
+- Fixed [#490](https://github.com/LykosAI/StabilityMatrix/issues/490) - `mpmath has no attribute 'rational'` error on macOS
+- Fixed incorrect progress text when deleting a checkpoint from the Checkpoints page
+- Fixed incorrect icon colors on macOS
+
## v2.9.0
### Added
- Added new package: [StableSwarmUI](https://github.com/Stability-AI/StableSwarmUI) by Stability AI
diff --git a/StabilityMatrix.Avalonia/Languages/Resources.Designer.cs b/StabilityMatrix.Avalonia/Languages/Resources.Designer.cs
index 0538cae24..dd2b597d0 100644
--- a/StabilityMatrix.Avalonia/Languages/Resources.Designer.cs
+++ b/StabilityMatrix.Avalonia/Languages/Resources.Designer.cs
@@ -392,6 +392,15 @@ public static string Action_OpenWebUI {
}
}
+ ///
+ /// Looks up a localized string similar to Preview Preprocessor.
+ ///
+ public static string Action_PreviewPreprocessor {
+ get {
+ return ResourceManager.GetString("Action_PreviewPreprocessor", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Quit.
///
@@ -671,6 +680,15 @@ public static string Label_Accounts {
}
}
+ ///
+ /// Looks up a localized string similar to This action cannot be undone..
+ ///
+ public static string Label_ActionCannotBeUndone {
+ get {
+ return ResourceManager.GetString("Label_ActionCannotBeUndone", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Addons.
///
@@ -743,6 +761,15 @@ public static string Label_AreYouSure {
}
}
+ ///
+ /// Looks up a localized string similar to Are you sure you want to delete {0} images?.
+ ///
+ public static string Label_AreYouSureDeleteImages {
+ get {
+ return ResourceManager.GetString("Label_AreYouSureDeleteImages", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Augmentation Level.
///
@@ -851,6 +878,15 @@ public static string Label_CFGScale {
}
}
+ ///
+ /// Looks up a localized string similar to We're checking some hardware specifications to determine compatibility..
+ ///
+ public static string Label_CheckingHardware {
+ get {
+ return ResourceManager.GetString("Label_CheckingHardware", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Checkpoint Manager.
///
@@ -860,6 +896,15 @@ public static string Label_CheckpointManager {
}
}
+ ///
+ /// Looks up a localized string similar to Checkpoints.
+ ///
+ public static string Label_Checkpoints {
+ get {
+ return ResourceManager.GetString("Label_Checkpoints", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to CivitAI.
///
@@ -959,6 +1004,24 @@ public static string Label_ConfirmDelete {
}
}
+ ///
+ /// Looks up a localized string similar to Confirm Exit.
+ ///
+ public static string Label_ConfirmExit {
+ get {
+ return ResourceManager.GetString("Label_ConfirmExit", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Are you sure you want to exit? This will also close any currently running packages..
+ ///
+ public static string Label_ConfirmExitDetail {
+ get {
+ return ResourceManager.GetString("Label_ConfirmExitDetail", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Confirm Password.
///
@@ -1004,6 +1067,15 @@ public static string Label_ConnectingEllipsis {
}
}
+ ///
+ /// Looks up a localized string similar to Console.
+ ///
+ public static string Label_Console {
+ get {
+ return ResourceManager.GetString("Label_Console", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to This will move all generated images from the selected packages to the Consolidated directory of the shared outputs folder. This action cannot be undone..
///
@@ -1229,6 +1301,15 @@ public static string Label_ErrorInstallingPackage {
}
}
+ ///
+ /// Looks up a localized string similar to Everything looks good!.
+ ///
+ public static string Label_EverythingLooksGood {
+ get {
+ return ResourceManager.GetString("Label_EverythingLooksGood", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to You may encounter errors when using a FAT32 or exFAT drive. Select a different drive for a smoother experience..
///
@@ -1589,6 +1670,15 @@ public static string Label_Model {
}
}
+ ///
+ /// Looks up a localized string similar to Model Browser.
+ ///
+ public static string Label_ModelBrowser {
+ get {
+ return ResourceManager.GetString("Label_ModelBrowser", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Model Description.
///
@@ -1715,6 +1805,15 @@ public static string Label_NumImagesSelected {
}
}
+ ///
+ /// Looks up a localized string similar to We recommend a GPU with CUDA support for the best experience. You can continue without one, but some packages may not work, and inference may be slower..
+ ///
+ public static string Label_NvidiaGpuRecommended {
+ get {
+ return ResourceManager.GetString("Label_NvidiaGpuRecommended", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to 1 image selected.
///
@@ -1778,6 +1877,15 @@ public static string Label_PackageEnvironment {
}
}
+ ///
+ /// Looks up a localized string similar to Packages.
+ ///
+ public static string Label_Packages {
+ get {
+ return ResourceManager.GetString("Label_Packages", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Package Type.
///
@@ -2246,6 +2354,15 @@ public static string Label_TimePeriod {
}
}
+ ///
+ /// Looks up a localized string similar to Auto-Scroll to End.
+ ///
+ public static string Label_ToggleAutoScrolling {
+ get {
+ return ResourceManager.GetString("Label_ToggleAutoScrolling", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Trigger words:.
///
@@ -2390,6 +2507,15 @@ public static string Label_WaitingToConnectEllipsis {
}
}
+ ///
+ /// Looks up a localized string similar to Web UI.
+ ///
+ public static string Label_WebUi {
+ get {
+ return ResourceManager.GetString("Label_WebUi", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Width.
///
@@ -2534,6 +2660,15 @@ public static string TeachingTip_MoreCheckpointCategories {
}
}
+ ///
+ /// Looks up a localized string similar to The 'Open Web UI' button has moved to the command bar.
+ ///
+ public static string TeachingTip_WebUiButtonMoved {
+ get {
+ return ResourceManager.GetString("TeachingTip_WebUiButtonMoved", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to The app will relaunch after updating.
///
diff --git a/StabilityMatrix.Avalonia/Languages/Resources.resx b/StabilityMatrix.Avalonia/Languages/Resources.resx
index 4f15299e9..9f35cbfad 100644
--- a/StabilityMatrix.Avalonia/Languages/Resources.resx
+++ b/StabilityMatrix.Avalonia/Languages/Resources.resx
@@ -975,4 +975,49 @@
Config
+
+ Preview Preprocessor
+
+
+ Auto-Scroll to End
+
+
+ Confirm Exit
+
+
+ Are you sure you want to exit? This will also close any currently running packages.
+
+
+ Console
+
+
+ Web UI
+
+
+ Packages
+
+
+ This action cannot be undone.
+
+
+ Are you sure you want to delete {0} images?
+
+
+ We're checking some hardware specifications to determine compatibility.
+
+
+ Everything looks good!
+
+
+ We recommend a GPU with CUDA support for the best experience. You can continue without one, but some packages may not work, and inference may be slower.
+
+
+ Checkpoints
+
+
+ Model Browser
+
+
+ The 'Open Web UI' button has moved to the command bar
+
diff --git a/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj b/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj
index 4929efc41..d1055205b 100644
--- a/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj
+++ b/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj
@@ -65,8 +65,8 @@
-
-
+
+
diff --git a/StabilityMatrix.Avalonia/ViewModels/CheckpointManager/CheckpointFile.cs b/StabilityMatrix.Avalonia/ViewModels/CheckpointManager/CheckpointFile.cs
index f3b817885..c73988173 100644
--- a/StabilityMatrix.Avalonia/ViewModels/CheckpointManager/CheckpointFile.cs
+++ b/StabilityMatrix.Avalonia/ViewModels/CheckpointManager/CheckpointFile.cs
@@ -120,6 +120,7 @@ private async Task DeleteAsync()
if (File.Exists(FilePath))
{
IsLoading = true;
+ Progress = new ProgressReport(0f, "Deleting...");
try
{
await using var delay = new MinimumDelay(200, 500);
diff --git a/StabilityMatrix.Avalonia/ViewModels/Dialogs/ConfirmPackageDeleteDialogViewModel.cs b/StabilityMatrix.Avalonia/ViewModels/Dialogs/ConfirmPackageDeleteDialogViewModel.cs
new file mode 100644
index 000000000..2d0ce30e1
--- /dev/null
+++ b/StabilityMatrix.Avalonia/ViewModels/Dialogs/ConfirmPackageDeleteDialogViewModel.cs
@@ -0,0 +1,21 @@
+using System;
+using CommunityToolkit.Mvvm.ComponentModel;
+using StabilityMatrix.Avalonia.ViewModels.Base;
+using StabilityMatrix.Avalonia.Views.Dialogs;
+using StabilityMatrix.Core.Attributes;
+
+namespace StabilityMatrix.Avalonia.ViewModels.Dialogs;
+
+[View(typeof(ConfirmPackageDeleteDialog))]
+[ManagedService]
+[Transient]
+public partial class ConfirmPackageDeleteDialogViewModel : ContentDialogViewModelBase
+{
+ public required string ExpectedPackageName { get; set; }
+
+ [ObservableProperty]
+ [NotifyPropertyChangedFor(nameof(IsValid))]
+ private string packageName = string.Empty;
+
+ public bool IsValid => ExpectedPackageName.Equals(PackageName, StringComparison.Ordinal);
+}
diff --git a/StabilityMatrix.Avalonia/ViewModels/PackageManager/PackageCardViewModel.cs b/StabilityMatrix.Avalonia/ViewModels/PackageManager/PackageCardViewModel.cs
index ba815fbf3..67426208d 100644
--- a/StabilityMatrix.Avalonia/ViewModels/PackageManager/PackageCardViewModel.cs
+++ b/StabilityMatrix.Avalonia/ViewModels/PackageManager/PackageCardViewModel.cs
@@ -181,13 +181,17 @@ public async Task Uninstall()
return;
}
- var dialog = new ContentDialog
+ var dialogViewModel = vmFactory.Get(vm =>
{
- Title = Resources.Label_ConfirmDelete,
- Content = Resources.Text_PackageUninstall_Details,
- PrimaryButtonText = Resources.Action_OK,
- CloseButtonText = Resources.Action_Cancel,
- DefaultButton = ContentDialogButton.Primary
+ vm.ExpectedPackageName = Package?.DisplayName;
+ });
+
+ var dialog = new BetterContentDialog
+ {
+ Content = dialogViewModel,
+ IsPrimaryButtonEnabled = false,
+ IsSecondaryButtonEnabled = false,
+ IsFooterVisible = false,
};
var result = await dialog.ShowAsync();
diff --git a/StabilityMatrix.Avalonia/Views/Dialogs/ConfirmPackageDeleteDialog.axaml b/StabilityMatrix.Avalonia/Views/Dialogs/ConfirmPackageDeleteDialog.axaml
new file mode 100644
index 000000000..b9690b8df
--- /dev/null
+++ b/StabilityMatrix.Avalonia/Views/Dialogs/ConfirmPackageDeleteDialog.axaml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/StabilityMatrix.Avalonia/Views/Dialogs/ConfirmPackageDeleteDialog.axaml.cs b/StabilityMatrix.Avalonia/Views/Dialogs/ConfirmPackageDeleteDialog.axaml.cs
new file mode 100644
index 000000000..899a2762c
--- /dev/null
+++ b/StabilityMatrix.Avalonia/Views/Dialogs/ConfirmPackageDeleteDialog.axaml.cs
@@ -0,0 +1,13 @@
+using StabilityMatrix.Avalonia.Controls;
+using StabilityMatrix.Core.Attributes;
+
+namespace StabilityMatrix.Avalonia.Views.Dialogs;
+
+[Transient]
+public partial class ConfirmPackageDeleteDialog : UserControlBase
+{
+ public ConfirmPackageDeleteDialog()
+ {
+ InitializeComponent();
+ }
+}
diff --git a/StabilityMatrix.Core/Models/Api/CivitBaseModelType.cs b/StabilityMatrix.Core/Models/Api/CivitBaseModelType.cs
index 9721d717c..855b075ba 100644
--- a/StabilityMatrix.Core/Models/Api/CivitBaseModelType.cs
+++ b/StabilityMatrix.Core/Models/Api/CivitBaseModelType.cs
@@ -8,6 +8,9 @@ public enum CivitBaseModelType
{
All,
+ [StringValue("Pony")]
+ Pony,
+
[StringValue("SD 1.5")]
Sd15,
@@ -32,13 +35,14 @@ public enum CivitBaseModelType
[StringValue("SDXL Lightning")]
SdxlLightning,
+ [StringValue("SDXL Turbo")]
+ SdxlTurbo,
+
[StringValue("SVD")]
SVD,
[StringValue("Stable Cascade")]
StableCascade,
- [StringValue("SDXL Turbo")]
- SdxlTurbo,
Other,
}
diff --git a/StabilityMatrix.Core/Models/Packages/A3WebUI.cs b/StabilityMatrix.Core/Models/Packages/A3WebUI.cs
index df78aa1f2..f823efeba 100644
--- a/StabilityMatrix.Core/Models/Packages/A3WebUI.cs
+++ b/StabilityMatrix.Core/Models/Packages/A3WebUI.cs
@@ -97,6 +97,13 @@ IPrerequisiteHelper prerequisiteHelper
DefaultValue = "7860",
Options = ["--port"]
},
+ new LaunchOptionDefinition
+ {
+ Name = "Share",
+ Type = LaunchOptionType.Bool,
+ Description = "Set whether to share on Gradio",
+ Options = { "--share" }
+ },
new()
{
Name = "VRAM",
diff --git a/StabilityMatrix.Core/Models/Packages/ComfyUI.cs b/StabilityMatrix.Core/Models/Packages/ComfyUI.cs
index 45358a5e5..4bfdc5fcd 100644
--- a/StabilityMatrix.Core/Models/Packages/ComfyUI.cs
+++ b/StabilityMatrix.Core/Models/Packages/ComfyUI.cs
@@ -1,6 +1,5 @@
using System.Diagnostics;
using System.Text.Json;
-using System.Text.Json.Serialization;
using System.Text.RegularExpressions;
using NLog;
using StabilityMatrix.Core.Attributes;
@@ -221,7 +220,7 @@ public override async Task InstallPackage(
{
TorchVersion.Cpu => "cpu",
TorchVersion.Cuda => "cu121",
- TorchVersion.Rocm => "rocm5.6",
+ TorchVersion.Rocm => "rocm5.7",
_
=> throw new ArgumentOutOfRangeException(
nameof(torchVersion),
@@ -232,9 +231,14 @@ public override async Task InstallPackage(
)
};
- if (torchVersion == TorchVersion.Cuda)
+ switch (torchVersion)
{
- pipArgs = pipArgs.WithXFormers("==0.0.22.post4");
+ case TorchVersion.Cuda:
+ pipArgs = pipArgs.WithXFormers("==0.0.22.post4");
+ break;
+ case TorchVersion.Mps:
+ pipArgs = pipArgs.AddArg("mpmath==1.3.0");
+ break;
}
var requirements = new FilePath(installLocation, "requirements.txt");
diff --git a/StabilityMatrix.Core/Models/Packages/SDWebForge.cs b/StabilityMatrix.Core/Models/Packages/SDWebForge.cs
index c603532c4..362e6c26a 100644
--- a/StabilityMatrix.Core/Models/Packages/SDWebForge.cs
+++ b/StabilityMatrix.Core/Models/Packages/SDWebForge.cs
@@ -52,6 +52,27 @@ IPrerequisiteHelper prerequisiteHelper
public override List LaunchOptions =>
[
+ new LaunchOptionDefinition
+ {
+ Name = "Host",
+ Type = LaunchOptionType.String,
+ DefaultValue = "localhost",
+ Options = ["--server-name"]
+ },
+ new LaunchOptionDefinition
+ {
+ Name = "Port",
+ Type = LaunchOptionType.String,
+ DefaultValue = "7860",
+ Options = ["--port"]
+ },
+ new LaunchOptionDefinition
+ {
+ Name = "Share",
+ Type = LaunchOptionType.Bool,
+ Description = "Set whether to share on Gradio",
+ Options = { "--share" }
+ },
new LaunchOptionDefinition
{
Name = "Always Offload from VRAM",
@@ -155,4 +176,9 @@ await requirements.ReadAllTextAsync().ConfigureAwait(false),
await venvRunner.PipInstall(pipArgs, onConsoleOutput).ConfigureAwait(false);
progress?.Report(new ProgressReport(1f, "Install complete", isIndeterminate: false));
}
+
+ public override string? ExtraLaunchArguments { get; set; } =
+ settingsManager.IsLibraryDirSet
+ ? $"--gradio-allowed-path \"{settingsManager.ImagesDirectory}\""
+ : string.Empty;
}