Compare commits

..

1 Commits

Author SHA1 Message Date
dependabot[bot] 79e1b84398
Bump Microsoft.Extensions.Caching.Memory from 7.0.0 to 8.0.0 7 months ago
  1. 12
      CHANGELOG.md
  2. 6
      README.md
  3. 5
      StabilityMatrix.Avalonia/ViewModels/Dialogs/PythonPackagesItemViewModel.cs
  4. 2
      StabilityMatrix.Avalonia/ViewModels/Progress/PackageInstallProgressItemViewModel.cs
  5. 16
      StabilityMatrix.Avalonia/ViewModels/RunningPackageViewModel.cs
  6. 6
      StabilityMatrix.Avalonia/Views/CivitAiBrowserPage.axaml
  7. 2
      StabilityMatrix.Avalonia/Views/ConsoleOutputPage.axaml.cs
  8. 1
      StabilityMatrix.Avalonia/Views/OpenArtBrowserPage.axaml
  9. 16
      StabilityMatrix.Core/Models/Packages/A3WebUI.cs
  10. 4
      StabilityMatrix.Core/Models/Packages/ComfyUI.cs
  11. 13
      StabilityMatrix.Core/Models/Packages/SDWebForge.cs
  12. 2
      StabilityMatrix.Core/Models/Packages/StableDiffusionUx.cs
  13. 52
      StabilityMatrix.Core/Python/PipShowResult.cs
  14. 2
      StabilityMatrix/StabilityMatrix.csproj

12
CHANGELOG.md

@ -5,18 +5,6 @@ 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/), 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). and this project adheres to [Semantic Versioning 2.0](https://semver.org/spec/v2.0.0.html).
## v2.10.3
### Changed
- Centered OpenArt browser cards
### Fixed
- Fixed MPS install on macOS for ComfyUI, A1111, SDWebUI Forge, and SDWebUI UX causing torch to be upgraded to dev nightly versions and causing incompatibilities with dependencies.
- Fixed crash when failing to parse Python package details
- Fixed "Auto Scroll to End" not working in some scenarios
- Fixed "Auto Scroll to End" toggle button not scrolling to the end when toggled on
- Fixed/reverted output folder name changes for Automatic1111
- Fixed xformers being uninstalled with every ComfyUI update
- Fixed missing progress text during package installs
## v2.10.2 ## v2.10.2
### Changed ### Changed
- Updated translations for Spanish and Turkish - Updated translations for Spanish and Turkish

6
README.md

@ -6,8 +6,7 @@
[release]: https://github.com/LykosAI/StabilityMatrix/releases/latest [release]: https://github.com/LykosAI/StabilityMatrix/releases/latest
[download-win-x64]: https://github.com/LykosAI/StabilityMatrix/releases/latest/download/StabilityMatrix-win-x64.zip [download-win-x64]: https://github.com/LykosAI/StabilityMatrix/releases/latest/download/StabilityMatrix-win-x64.zip
[download-linux-appimage-x64]: https://github.com/LykosAI/StabilityMatrix/releases/latest/download/StabilityMatrix-linux-x64.zip [download-linux-x64]: https://github.com/LykosAI/StabilityMatrix/releases/latest/download/StabilityMatrix-linux-x64.zip
[download-linux-aur-x64]: https://aur.archlinux.org/packages/stabilitymatrix
[download-macos-arm64]: https://github.com/LykosAI/StabilityMatrix/releases/latest/download/StabilityMatrix-macos-arm64.dmg [download-macos-arm64]: https://github.com/LykosAI/StabilityMatrix/releases/latest/download/StabilityMatrix-macos-arm64.dmg
[auto1111]: https://github.com/AUTOMATIC1111/stable-diffusion-webui [auto1111]: https://github.com/AUTOMATIC1111/stable-diffusion-webui
@ -32,8 +31,7 @@
![Header image for Stability Matrix, Multi-Platform Package Manager and Inference UI for Stable Diffusion](https://cdn.lykos.ai/static/sm-banner-rounded.webp) ![Header image for Stability Matrix, Multi-Platform Package Manager and Inference UI for Stable Diffusion](https://cdn.lykos.ai/static/sm-banner-rounded.webp)
[![Windows](https://img.shields.io/badge/Windows%2010,%2011-%230079d5.svg?style=for-the-badge&logo=Windows%2011&logoColor=white)][download-win-x64] [![Windows](https://img.shields.io/badge/Windows%2010,%2011-%230079d5.svg?style=for-the-badge&logo=Windows%2011&logoColor=white)][download-win-x64]
[![Linux (AppImage)](https://img.shields.io/badge/Linux%20(AppImage)-FCC624?style=for-the-badge&logo=linux&logoColor=black)][download-linux-appimage-x64] [![Linux](https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black)][download-linux-x64]
[![Arch Linux (AUR)](https://img.shields.io/badge/Arch%20Linux%20(AUR)-1793D1?style=for-the-badge&logo=archlinux&logoColor=white)][download-linux-aur-x64]
[![macOS](https://img.shields.io/badge/mac%20os%20%28apple%20silicon%29-000000?style=for-the-badge&logo=macos&logoColor=F0F0F0)][download-macos-arm64] [![macOS](https://img.shields.io/badge/mac%20os%20%28apple%20silicon%29-000000?style=for-the-badge&logo=macos&logoColor=F0F0F0)][download-macos-arm64]
Multi-Platform Package Manager and Inference UI for Stable Diffusion Multi-Platform Package Manager and Inference UI for Stable Diffusion

5
StabilityMatrix.Avalonia/ViewModels/Dialogs/PythonPackagesItemViewModel.cs

@ -6,7 +6,6 @@ using Avalonia.Controls;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using Semver; using Semver;
using StabilityMatrix.Avalonia.ViewModels.Base; using StabilityMatrix.Avalonia.ViewModels.Base;
using StabilityMatrix.Core.Exceptions;
using StabilityMatrix.Core.Helper; using StabilityMatrix.Core.Helper;
using StabilityMatrix.Core.Models.FileInterfaces; using StabilityMatrix.Core.Models.FileInterfaces;
using StabilityMatrix.Core.Python; using StabilityMatrix.Core.Python;
@ -115,10 +114,6 @@ public partial class PythonPackagesItemViewModel : ViewModelBase
} }
} }
} }
catch (ProcessException)
{
// Ignore
}
finally finally
{ {
IsLoading = false; IsLoading = false;

2
StabilityMatrix.Avalonia/ViewModels/Progress/PackageInstallProgressItemViewModel.cs

@ -43,7 +43,7 @@ public class PackageInstallProgressItemViewModel : ProgressItemViewModelBase
private void PackageModificationRunnerOnProgressChanged(object? sender, ProgressReport e) private void PackageModificationRunnerOnProgressChanged(object? sender, ProgressReport e)
{ {
Progress.Value = e.Percentage; Progress.Value = e.Percentage;
Progress.Description = e.ProcessOutput?.Text ?? e.Message; Progress.Description = e.Message;
Progress.IsIndeterminate = e.IsIndeterminate; Progress.IsIndeterminate = e.IsIndeterminate;
Progress.Text = packageModificationRunner.CurrentStep?.ProgressTitle; Progress.Text = packageModificationRunner.CurrentStep?.ProgressTitle;
Name = packageModificationRunner.CurrentStep?.ProgressTitle; Name = packageModificationRunner.CurrentStep?.ProgressTitle;

16
StabilityMatrix.Avalonia/ViewModels/RunningPackageViewModel.cs

@ -74,14 +74,6 @@ public partial class RunningPackageViewModel : PageViewModelBase, IDisposable, I
); );
} }
public override void OnLoaded()
{
if (AutoScrollToEnd)
{
EventManager.Instance.OnScrollToBottomRequested();
}
}
private void BasePackageOnExited(object? sender, int e) private void BasePackageOnExited(object? sender, int e)
{ {
IsRunning = false; IsRunning = false;
@ -112,14 +104,6 @@ public partial class RunningPackageViewModel : PageViewModelBase, IDisposable, I
} }
} }
partial void OnAutoScrollToEndChanged(bool value)
{
if (value)
{
EventManager.Instance.OnScrollToBottomRequested();
}
}
[RelayCommand] [RelayCommand]
private async Task Restart() private async Task Restart()
{ {

6
StabilityMatrix.Avalonia/Views/CivitAiBrowserPage.axaml

@ -33,7 +33,7 @@
</Transitions> </Transitions>
</Setter> </Setter>
<Style Selector="^ vendorLabs|BetterAsyncImage"> <Style Selector="^ labs|AsyncImage">
<Setter Property="Transitions"> <Setter Property="Transitions">
<Transitions> <Transitions>
<TransformOperationsTransition Property="RenderTransform" <TransformOperationsTransition Property="RenderTransform"
@ -49,7 +49,7 @@
<Style Selector="^:pointerover"> <Style Selector="^:pointerover">
<Setter Property="BoxShadow" Value="0 0 40 0 #60000000"/> <Setter Property="BoxShadow" Value="0 0 40 0 #60000000"/>
<Setter Property="Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />
<Style Selector="^ vendorLabs|BetterAsyncImage"> <Style Selector="^ labs|AsyncImage">
<Setter Property="CornerRadius" Value="12"/> <Setter Property="CornerRadius" Value="12"/>
<Setter Property="RenderTransform" Value="scale(1.03, 1.03)"/> <Setter Property="RenderTransform" Value="scale(1.03, 1.03)"/>
</Style> </Style>
@ -61,7 +61,7 @@
<Style Selector="^:not(:pointerover)"> <Style Selector="^:not(:pointerover)">
<Setter Property="BoxShadow" Value="0 0 20 0 #60000000"/> <Setter Property="BoxShadow" Value="0 0 20 0 #60000000"/>
<Setter Property="Cursor" Value="Arrow" /> <Setter Property="Cursor" Value="Arrow" />
<Style Selector="^ vendorLabs|BetterAsyncImage"> <Style Selector="^ labs|AsyncImage">
<Setter Property="CornerRadius" Value="8"/> <Setter Property="CornerRadius" Value="8"/>
<Setter Property="RenderTransform" Value="scale(1, 1)"/> <Setter Property="RenderTransform" Value="scale(1, 1)"/>
</Style> </Style>

2
StabilityMatrix.Avalonia/Views/ConsoleOutputPage.axaml.cs

@ -36,8 +36,8 @@ public partial class ConsoleOutputPage : UserControlBase
protected override void OnLoaded(RoutedEventArgs e) protected override void OnLoaded(RoutedEventArgs e)
{ {
EventManager.Instance.ScrollToBottomRequested += OnScrollToBottomRequested;
base.OnLoaded(e); base.OnLoaded(e);
EventManager.Instance.ScrollToBottomRequested += OnScrollToBottomRequested;
} }
private void OnScrollToBottomRequested(object? sender, EventArgs e) private void OnScrollToBottomRequested(object? sender, EventArgs e)

1
StabilityMatrix.Avalonia/Views/OpenArtBrowserPage.axaml

@ -305,7 +305,6 @@
<ScrollViewer Grid.Row="2" <ScrollViewer Grid.Row="2"
ScrollChanged="ScrollViewer_OnScrollChanged" ScrollChanged="ScrollViewer_OnScrollChanged"
HorizontalContentAlignment="Center"
IsVisible="{Binding !IsLoading}"> IsVisible="{Binding !IsLoading}">
<ItemsRepeater ItemsSource="{Binding SearchResults}" <ItemsRepeater ItemsSource="{Binding SearchResults}"
ItemTemplate="{StaticResource OpenArtWorkflowTemplate}"> ItemTemplate="{StaticResource OpenArtWorkflowTemplate}">

16
StabilityMatrix.Core/Models/Packages/A3WebUI.cs

@ -73,13 +73,13 @@ public class A3WebUI(
public override Dictionary<SharedOutputType, IReadOnlyList<string>>? SharedOutputFolders => public override Dictionary<SharedOutputType, IReadOnlyList<string>>? SharedOutputFolders =>
new() new()
{ {
[SharedOutputType.Extras] = new[] { "outputs/extras-images" }, [SharedOutputType.Extras] = new[] { "output/extras-images" },
[SharedOutputType.Saved] = new[] { "log/images" }, [SharedOutputType.Saved] = new[] { "log/images" },
[SharedOutputType.Img2Img] = new[] { "outputs/img2img-images" }, [SharedOutputType.Img2Img] = new[] { "output/img2img-images" },
[SharedOutputType.Text2Img] = new[] { "outputs/txt2img-images" }, [SharedOutputType.Text2Img] = new[] { "output/txt2img-images" },
[SharedOutputType.Img2ImgGrids] = new[] { "outputs/img2img-grids" }, [SharedOutputType.Img2ImgGrids] = new[] { "output/img2img-grids" },
[SharedOutputType.Text2ImgGrids] = new[] { "outputs/txt2img-grids" }, [SharedOutputType.Text2ImgGrids] = new[] { "output/txt2img-grids" },
[SharedOutputType.SVD] = new[] { "outputs/svd" } [SharedOutputType.SVD] = new[] { "output/svd" }
}; };
[SuppressMessage("ReSharper", "ArrangeObjectCreationWhenTypeNotEvident")] [SuppressMessage("ReSharper", "ArrangeObjectCreationWhenTypeNotEvident")]
@ -186,7 +186,7 @@ public class A3WebUI(
public override string MainBranch => "master"; public override string MainBranch => "master";
public override string OutputFolderName => "outputs"; public override string OutputFolderName => "output";
public override IPackageExtensionManager ExtensionManager => new A3WebUiExtensionManager(this); public override IPackageExtensionManager ExtensionManager => new A3WebUiExtensionManager(this);
@ -223,7 +223,7 @@ public class A3WebUI(
TorchVersion.Cpu => "cpu", TorchVersion.Cpu => "cpu",
TorchVersion.Cuda => "cu121", TorchVersion.Cuda => "cu121",
TorchVersion.Rocm => "rocm5.6", TorchVersion.Rocm => "rocm5.6",
TorchVersion.Mps => "cpu", TorchVersion.Mps => "nightly/cpu",
_ => throw new ArgumentOutOfRangeException(nameof(torchVersion), torchVersion, null) _ => throw new ArgumentOutOfRangeException(nameof(torchVersion), torchVersion, null)
} }
) )

4
StabilityMatrix.Core/Models/Packages/ComfyUI.cs

@ -209,7 +209,8 @@ public class ComfyUI(
pipArgs = torchVersion switch pipArgs = torchVersion switch
{ {
TorchVersion.DirectMl => pipArgs.WithTorchDirectML(), TorchVersion.DirectMl => pipArgs.WithTorchDirectML(),
TorchVersion.Mps => pipArgs.WithTorch().WithTorchVision().WithTorchExtraIndex("cpu"), TorchVersion.Mps
=> pipArgs.AddArg("--pre").WithTorch().WithTorchVision().WithTorchExtraIndex("nightly/cpu"),
_ _
=> pipArgs => pipArgs
.AddArg("--upgrade") .AddArg("--upgrade")
@ -245,6 +246,7 @@ public class ComfyUI(
excludePattern: "torch" excludePattern: "torch"
); );
await venvRunner.PipUninstall("xformers", onConsoleOutput).ConfigureAwait(false);
await venvRunner.PipInstall(pipArgs, onConsoleOutput).ConfigureAwait(false); await venvRunner.PipInstall(pipArgs, onConsoleOutput).ConfigureAwait(false);
progress?.Report(new ProgressReport(1, "Installed Package Requirements", isIndeterminate: false)); progress?.Report(new ProgressReport(1, "Installed Package Requirements", isIndeterminate: false));

13
StabilityMatrix.Core/Models/Packages/SDWebForge.cs

@ -40,17 +40,6 @@ public class SDWebForge(
public override IPackageExtensionManager ExtensionManager => null; public override IPackageExtensionManager ExtensionManager => null;
public override string OutputFolderName => "output"; public override string OutputFolderName => "output";
public override PackageDifficulty InstallerSortOrder => PackageDifficulty.ReallyRecommended; public override PackageDifficulty InstallerSortOrder => PackageDifficulty.ReallyRecommended;
public override Dictionary<SharedOutputType, IReadOnlyList<string>>? SharedOutputFolders =>
new()
{
[SharedOutputType.Extras] = new[] { "output/extras-images" },
[SharedOutputType.Saved] = new[] { "log/images" },
[SharedOutputType.Img2Img] = new[] { "output/img2img-images" },
[SharedOutputType.Text2Img] = new[] { "output/txt2img-images" },
[SharedOutputType.Img2ImgGrids] = new[] { "output/img2img-grids" },
[SharedOutputType.Text2ImgGrids] = new[] { "output/txt2img-grids" },
[SharedOutputType.SVD] = new[] { "output/svd" }
};
public override List<LaunchOptionDefinition> LaunchOptions => public override List<LaunchOptionDefinition> LaunchOptions =>
[ [
@ -173,7 +162,7 @@ public class SDWebForge(
TorchVersion.Cpu => "cpu", TorchVersion.Cpu => "cpu",
TorchVersion.Cuda => "cu121", TorchVersion.Cuda => "cu121",
TorchVersion.Rocm => "rocm5.6", TorchVersion.Rocm => "rocm5.6",
TorchVersion.Mps => "cpu", TorchVersion.Mps => "nightly/cpu",
_ => throw new ArgumentOutOfRangeException(nameof(torchVersion), torchVersion, null) _ => throw new ArgumentOutOfRangeException(nameof(torchVersion), torchVersion, null)
} }
); );

2
StabilityMatrix.Core/Models/Packages/StableDiffusionUx.cs

@ -211,7 +211,7 @@ public class StableDiffusionUx(
new PipInstallArgs() new PipInstallArgs()
.WithTorch("==2.1.2") .WithTorch("==2.1.2")
.WithTorchVision() .WithTorchVision()
.WithTorchExtraIndex("cpu"), .WithTorchExtraIndex("nightly/cpu"),
onConsoleOutput onConsoleOutput
) )
.ConfigureAwait(false); .ConfigureAwait(false);

52
StabilityMatrix.Core/Python/PipShowResult.cs

@ -1,5 +1,4 @@
using System.Diagnostics; using StabilityMatrix.Core.Extensions;
using StabilityMatrix.Core.Extensions;
namespace StabilityMatrix.Core.Python; namespace StabilityMatrix.Core.Python;
@ -32,20 +31,6 @@ public record PipShowResult
.SplitLines(StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) .SplitLines(StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries)
// Filter warning lines // Filter warning lines
.Where(line => !line.StartsWith("WARNING", StringComparison.OrdinalIgnoreCase)) .Where(line => !line.StartsWith("WARNING", StringComparison.OrdinalIgnoreCase))
.ToList();
var indexOfLicense = GetIndexBySubstring(lines, "License:");
var indexOfLocation = GetIndexBySubstring(lines, "Location:");
var licenseText =
indexOfLicense == -1 ? null : string.Join('\n', lines[indexOfLicense..indexOfLocation]);
if (indexOfLicense != -1)
{
lines.RemoveRange(indexOfLicense, indexOfLocation - indexOfLicense);
}
var linesDict = lines
.Select(line => line.Split(':', 2)) .Select(line => line.Split(':', 2))
.Where(split => split.Length == 2) .Where(split => split.Length == 2)
.Select(split => new KeyValuePair<string, string>(split[0].Trim(), split[1].Trim())) .Select(split => new KeyValuePair<string, string>(split[0].Trim(), split[1].Trim()))
@ -53,37 +38,22 @@ public record PipShowResult
return new PipShowResult return new PipShowResult
{ {
Name = linesDict["Name"], Name = lines["Name"],
Version = linesDict["Version"], Version = lines["Version"],
Summary = linesDict.GetValueOrDefault("Summary"), Summary = lines.GetValueOrDefault("Summary"),
HomePage = linesDict.GetValueOrDefault("Home-page"), HomePage = lines.GetValueOrDefault("Home-page"),
Author = linesDict.GetValueOrDefault("Author"), Author = lines.GetValueOrDefault("Author"),
AuthorEmail = linesDict.GetValueOrDefault("Author-email"), AuthorEmail = lines.GetValueOrDefault("Author-email"),
License = licenseText, License = lines.GetValueOrDefault("License"),
Location = linesDict.GetValueOrDefault("Location"), Location = lines.GetValueOrDefault("Location"),
Requires = linesDict Requires = lines
.GetValueOrDefault("Requires") .GetValueOrDefault("Requires")
?.Split(',', StringSplitOptions.TrimEntries) ?.Split(',', StringSplitOptions.TrimEntries)
.ToList(), .ToList(),
RequiredBy = linesDict RequiredBy = lines
.GetValueOrDefault("Required-by") .GetValueOrDefault("Required-by")
?.Split(',', StringSplitOptions.TrimEntries) ?.Split(',', StringSplitOptions.TrimEntries)
.ToList() .ToList()
}; };
} }
private static int GetIndexBySubstring(List<string> lines, string searchString)
{
var index = -1;
for (var i = 0; i < lines.Count; i++)
{
if (!lines[i].StartsWith(searchString, StringComparison.OrdinalIgnoreCase))
continue;
index = i;
break;
}
return index;
}
} }

2
StabilityMatrix/StabilityMatrix.csproj

@ -22,7 +22,7 @@
<PackageReference Include="LiteDB" Version="5.0.16" /> <PackageReference Include="LiteDB" Version="5.0.16" />
<PackageReference Include="LiteDB.Async" Version="0.1.6" /> <PackageReference Include="LiteDB.Async" Version="0.1.6" />
<PackageReference Include="MdXaml" Version="1.20.1" /> <PackageReference Include="MdXaml" Version="1.20.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="7.0.8" /> <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="7.0.8" />

Loading…
Cancel
Save