From c6432feb5d6a654c28e0b195280ec343d0523a39 Mon Sep 17 00:00:00 2001 From: NeuralFault Date: Fri, 24 Oct 2025 18:39:29 -0400 Subject: [PATCH 01/16] Add CFZ CUDNN Toggle feature and fix build issues --- .../Inference/CfzCudnnToggleCard.axaml | 35 ++++ .../Inference/CfzCudnnToggleCard.axaml.cs | 3 + .../StabilityMatrix.Avalonia.csproj | 2 +- .../Inference/CfzCudnnToggleCardViewModel.cs | 21 ++ .../InferenceFluxTextToImageViewModel.cs | 7 +- .../InferenceTextToImageViewModel.cs | 9 +- .../Inference/Modules/CfzCudnnToggleModule.cs | 60 ++++++ .../Api/Comfy/Nodes/ComfyNodeBuilder.cs | 17 ++ WARP.md | 183 ++++++++++++++++++ 9 files changed, 329 insertions(+), 8 deletions(-) create mode 100644 StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml create mode 100644 StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml.cs create mode 100644 StabilityMatrix.Avalonia/ViewModels/Inference/CfzCudnnToggleCardViewModel.cs create mode 100644 StabilityMatrix.Avalonia/ViewModels/Inference/Modules/CfzCudnnToggleModule.cs create mode 100644 WARP.md diff --git a/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml b/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml new file mode 100644 index 00000000..362fee76 --- /dev/null +++ b/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml @@ -0,0 +1,35 @@ + + + + + + + diff --git a/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml.cs b/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml.cs new file mode 100644 index 00000000..b0b560e4 --- /dev/null +++ b/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml.cs @@ -0,0 +1,3 @@ +namespace StabilityMatrix.Avalonia.Controls; + +public class CfzCudnnToggleCard : TemplatedControlBase; diff --git a/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj b/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj index b07d45ee..41aee84e 100644 --- a/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj +++ b/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj @@ -9,8 +9,8 @@ ./Assets/Icon.ico 2.16.0-dev.999 $(Version) - true true + true diff --git a/StabilityMatrix.Avalonia/ViewModels/Inference/CfzCudnnToggleCardViewModel.cs b/StabilityMatrix.Avalonia/ViewModels/Inference/CfzCudnnToggleCardViewModel.cs new file mode 100644 index 00000000..07c7df47 --- /dev/null +++ b/StabilityMatrix.Avalonia/ViewModels/Inference/CfzCudnnToggleCardViewModel.cs @@ -0,0 +1,21 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using Injectio.Attributes; +using StabilityMatrix.Avalonia.Controls; +using StabilityMatrix.Avalonia.ViewModels.Base; +using StabilityMatrix.Core.Attributes; + +namespace StabilityMatrix.Avalonia.ViewModels.Inference; + +[View(typeof(CfzCudnnToggleCard))] +[ManagedService] +[RegisterTransient] +public partial class CfzCudnnToggleCardViewModel : LoadableViewModelBase +{ + public const string ModuleKey = "CfzCudnnToggle"; + + [ObservableProperty] + private bool enableCudnn = false; + + [ObservableProperty] + private bool cudnnBenchmark; +} diff --git a/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceFluxTextToImageViewModel.cs b/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceFluxTextToImageViewModel.cs index da8cb545..3eef2d35 100644 --- a/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceFluxTextToImageViewModel.cs +++ b/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceFluxTextToImageViewModel.cs @@ -96,7 +96,8 @@ RunningPackageService runningPackageService typeof(FluxHiresFixModule), typeof(UpscalerModule), typeof(SaveImageModule), - typeof(FaceDetailerModule) + typeof(FaceDetailerModule), + typeof(CfzCudnnToggleModule), }; modulesCard.DefaultModules = new[] { typeof(FluxHiresFixModule), typeof(UpscalerModule) }; modulesCard.InitializeDefaults(); @@ -121,7 +122,7 @@ protected override void BuildPrompt(BuildPromptEventArgs args) builder.Connections.Seed = args.SeedOverride switch { { } seed => Convert.ToUInt64(seed), - _ => Convert.ToUInt64(SeedCardViewModel.Seed) + _ => Convert.ToUInt64(SeedCardViewModel.Seed), }; var applyArgs = args.ToModuleApplyStepEventArgs(); @@ -217,7 +218,7 @@ CancellationToken cancellationToken FilesToTransfer = buildPromptArgs.FilesToTransfer, BatchIndex = i, // Only clear output images on the first batch - ClearOutputImages = i == 0 + ClearOutputImages = i == 0, }; batchArgs.Add(generationArgs); diff --git a/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceTextToImageViewModel.cs b/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceTextToImageViewModel.cs index 039f1a7a..ec95e557 100644 --- a/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceTextToImageViewModel.cs +++ b/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceTextToImageViewModel.cs @@ -103,7 +103,8 @@ TabContext tabContext typeof(HiresFixModule), typeof(UpscalerModule), typeof(SaveImageModule), - typeof(FaceDetailerModule) + typeof(FaceDetailerModule), + typeof(CfzCudnnToggleModule), }; modulesCard.DefaultModules = new[] { typeof(HiresFixModule), typeof(UpscalerModule) }; modulesCard.InitializeDefaults(); @@ -158,7 +159,7 @@ protected override void BuildPrompt(BuildPromptEventArgs args) builder.Connections.Seed = args.SeedOverride switch { { } seed => Convert.ToUInt64(seed), - _ => Convert.ToUInt64(SeedCardViewModel.Seed) + _ => Convert.ToUInt64(SeedCardViewModel.Seed), }; var applyArgs = args.ToModuleApplyStepEventArgs(); @@ -319,13 +320,13 @@ CancellationToken cancellationToken OutputNodeNames = buildPromptArgs.Builder.Connections.OutputNodeNames.ToArray(), Parameters = SaveStateToParameters(new GenerationParameters()) with { - Seed = Convert.ToUInt64(seed) + Seed = Convert.ToUInt64(seed), }, Project = inferenceProject, FilesToTransfer = buildPromptArgs.FilesToTransfer, BatchIndex = i, // Only clear output images on the first batch - ClearOutputImages = i == 0 + ClearOutputImages = i == 0, }; batchArgs.Add(generationArgs); diff --git a/StabilityMatrix.Avalonia/ViewModels/Inference/Modules/CfzCudnnToggleModule.cs b/StabilityMatrix.Avalonia/ViewModels/Inference/Modules/CfzCudnnToggleModule.cs new file mode 100644 index 00000000..cbab7bb9 --- /dev/null +++ b/StabilityMatrix.Avalonia/ViewModels/Inference/Modules/CfzCudnnToggleModule.cs @@ -0,0 +1,60 @@ +using System.Linq; +using Injectio.Attributes; +using StabilityMatrix.Avalonia.Models.Inference; +using StabilityMatrix.Avalonia.Services; +using StabilityMatrix.Avalonia.ViewModels.Base; +using StabilityMatrix.Core.Attributes; +using StabilityMatrix.Core.Models.Api.Comfy.Nodes; +using StabilityMatrix.Core.Models.Api.Comfy.NodeTypes; +using StabilityMatrix.Core.Models.Inference; + +namespace StabilityMatrix.Avalonia.ViewModels.Inference.Modules; + +[ManagedService] +[RegisterTransient] +public class CfzCudnnToggleModule : ModuleBase +{ + /// + public CfzCudnnToggleModule(IServiceManager vmFactory) + : base(vmFactory) + { + Title = "CFZ CUDNN Toggle"; + AddCards(vmFactory.Get()); + } + + /// + /// Applies CUDNN Toggle to the Model and Conditioning connections + /// + protected override void OnApplyStep(ModuleApplyStepEventArgs e) + { + var card = GetCard(); + + // Apply to all models in the pipeline + foreach (var modelConnections in e.Builder.Connections.Models.Values.Where(m => m.Model is not null)) + { + var cudnnToggleOutput = e.Nodes.AddTypedNode( + new ComfyNodeBuilder.CUDNNToggleAutoPassthrough + { + Name = e.Nodes.GetUniqueName($"CUDNNToggle_{modelConnections.Name}"), + Model = modelConnections.Model, + Conditioning = modelConnections.Conditioning?.Positive, + Latent = null, // Optional, we're not using latent passthrough here + EnableCudnn = card.EnableCudnn, + CudnnBenchmark = card.CudnnBenchmark, + } + ); + + // Update the model connection with the output from CUDNN toggle + modelConnections.Model = cudnnToggleOutput.Output1; + + // Update conditioning if it was provided + if (modelConnections.Conditioning is not null) + { + modelConnections.Conditioning = new ConditioningConnections( + cudnnToggleOutput.Output2, + modelConnections.Conditioning.Negative + ); + } + } + } +} diff --git a/StabilityMatrix.Core/Models/Api/Comfy/Nodes/ComfyNodeBuilder.cs b/StabilityMatrix.Core/Models/Api/Comfy/Nodes/ComfyNodeBuilder.cs index a78508e8..f6e514b2 100644 --- a/StabilityMatrix.Core/Models/Api/Comfy/Nodes/ComfyNodeBuilder.cs +++ b/StabilityMatrix.Core/Models/Api/Comfy/Nodes/ComfyNodeBuilder.cs @@ -997,6 +997,23 @@ public record BrownNoise : ComfyTypedNodeBase public required ulong Seed { get; init; } = 0; } + /// + /// CUDNN Toggle node for controlling CUDA Deep Neural Network library settings (CUDNNToggleAutoPassthrough) + /// + [TypedNodeOptions( + Name = "CUDNNToggleAutoPassthrough", + RequiredExtensions = ["https://github.com/patientx/ComfyUI-Zluda"] + )] + public record CUDNNToggleAutoPassthrough + : ComfyTypedNodeBase + { + public ModelNodeConnection? Model { get; init; } + public ConditioningNodeConnection? Conditioning { get; init; } + public LatentNodeConnection? Latent { get; init; } + public required bool EnableCudnn { get; init; } = false; + public required bool CudnnBenchmark { get; init; } = false; + } + /// /// Custom KSampler node using alternative noise distribution (Lykos_JDC_PlasmaSampler) /// diff --git a/WARP.md b/WARP.md new file mode 100644 index 00000000..538b1b16 --- /dev/null +++ b/WARP.md @@ -0,0 +1,183 @@ +# WARP.md + +This file provides guidance to WARP (warp.dev) when working with code in this repository. + +## Overview + +Stability Matrix is a multi-platform package manager and inference UI for Stable Diffusion, built with C# .NET 9, Avalonia UI, and following MVVM architecture. It manages various AI packages (ComfyUI, Automatic1111, Fooocus, etc.) with embedded Python/Git dependencies and a built-in inference interface. + +## Build & Development Commands + +### Prerequisites +- .NET 9 SDK +- Platform-specific runtime identifier required: `win-x64`, `linux-x64`, or `osx-arm64` + +### Build +```bash +# Debug build (specify runtime) +dotnet build ./StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj -r win-x64 -c Debug +dotnet build ./StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj -r linux-x64 -c Debug +dotnet build ./StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj -r osx-arm64 -c Debug + +# Windows uses net8.0-windows10.0.17763.0 framework, output in: +# StabilityMatrix.Avalonia/bin/Debug/net8.0-windows10.0.17763.0/win-x64/ + +# Other platforms use net8.0 framework, output in: +# StabilityMatrix.Avalonia/bin/Debug/net8.0/{runtime}/ +``` + +### Testing +```bash +# Run all unit tests +dotnet test StabilityMatrix.Tests + +# Run UI tests (Windows only) +dotnet test StabilityMatrix.UITests +``` + +### Code Formatting +```bash +# Install Husky.Net and pre-commit hooks (run once) +dotnet tool restore && dotnet husky install + +# Format C# code with CSharpier +dotnet csharpier format + +# Format AXAML files with XamlStyler +dotnet xstyler -f +``` + +### OpenAPI Client Generation +```bash +# Regenerate API clients (Refitter) +dotnet husky run -g generate-openapi +``` + +### Release Build +```bash +# Single file publish for distribution +dotnet publish ./StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj \ + -r win-x64 -c Release \ + -p:Version= \ + -p:PublishSingleFile=true \ + -p:IncludeNativeLibrariesForSelfExtract=true \ + -p:PublishReadyToRun=true + +# macOS (requires Build/build_macos_app.sh script) +./Build/build_macos_app.sh -v + +# Linux AppImage (requires PupNet) +pupnet -r linux-x64 -c Release --kind appimage --app-version --clean +``` + +## Architecture + +### Project Structure +- **StabilityMatrix.Avalonia**: Main UI application using Avalonia MVVM framework +- **StabilityMatrix.Core**: Business logic, API clients, package management, Python interop +- **StabilityMatrix.Native**: Platform-specific native code abstractions +- **StabilityMatrix.Native.Windows/macOS**: Platform implementations +- **StabilityMatrix.Tests**: Unit tests using MSTest +- **StabilityMatrix.UITests**: UI automation tests +- **analyzers/**: Roslyn analyzers for code quality + +### Key Concepts + +#### Package System +The package system manages different Stable Diffusion packages through a plugin architecture: +- `BasePackage`: Abstract base defining package interface (download, install, update, run, shutdown) +- `BaseGitPackage`: Git-based package implementation for most packages +- Individual package implementations: `ComfyUI`, `A3WebUI`, `Fooocus`, `SDWebForge`, etc. +- `IPackageFactory`: Factory for instantiating package types +- Each package defines its Python version, torch variants, launch options, and shared folder configuration + +#### Shared Folder System +Packages share model files through configurable methods: +- **SharedFolderMethod**: `Symlink` (default), `Configuration`, or `None` +- **SharedFolderType**: Model types like `StableDiffusion`, `Lora`, `VAE`, `Controlnet`, etc. +- **SharedFolderLayout**: Defines which model types map to which package directories +- Configured per-package via `SetupModelFolders()`, `UpdateModelFolders()`, `RemoveModelFolderLinks()` + +#### Dependency Injection +The app uses Microsoft.Extensions.DependencyInjection: +- Service registration in `App.axaml.cs` via `ConfigureServices()` +- Attribute-based registration: `[Singleton]`, `[Transient]` from StabilityMatrix.Core.Attributes +- ViewModels registered through `ConfigurePageViewModels()` +- `IServiceManager` for managing page ViewModels +- MessagePipe for event bus and inter-process communication + +#### MVVM Architecture +- **ViewModels**: Inherit from `ViewModelBase`, use CommunityToolkit.Mvvm for commands/properties +- **Views**: AXAML files with compiled bindings (AvaloniaUseCompiledBindingsByDefault=true) +- **Services**: Injected into ViewModels, handle business logic +- **DesignData**: Mock data for XAML designer previews + +#### Inference System +Built-in Stable Diffusion inference UI: +- Card-based modular UI system (`StackCardViewModel`, `InferenceTabViewModelBase`) +- Workspaces saved as `.smproj` project files +- Metadata embedded in generated images (ComfyUI nodes, A1111 metadata) +- Custom prompt language with syntax highlighting (`ImagePrompt.tmLanguage.json`) +- Integration with local package installs or remote ComfyUI instances + +#### Database +- LiteDB for local storage (`ILiteDbContext`) +- Models: `InstalledPackage`, `LocalModelFile`, settings, etc. +- Repositories handle CRUD operations + +#### Model Management +- `IModelIndexService`: Indexes and tracks models across packages +- `ITrackedDownloadService`: Manages downloads from CivitAI, HuggingFace +- Metadata extraction and preview generation +- Checkpoint browser with filtering/search + +### Code Patterns + +#### Naming Conventions +- PascalCase: classes, records, structs, public members +- camelCase: private/internal fields (NO underscore prefix) +- Interfaces: `I` prefix (e.g., `IPackageFactory`) +- File-scoped namespaces always + +#### Project Organization +- `Models/`: Data models and DTOs +- `ViewModels/`: MVVM ViewModels +- `Services/`: Business logic services +- `Api/`: Refit API interfaces +- `Extensions/`: Extension methods only +- `Converters/`: XAML and JSON converters +- `Helper/`: Utilities and helpers +- `DesignData/`: XAML designer mock data + +#### ViewModels +- PageViewModels inherit from `PageViewModelBase` and use `[ManagedService]` attribute +- DialogViewModels inherit from `ContentDialogViewModelBase` or `TaskDialogViewModelBase` +- Implement proper disposal via `DisposableViewModelBase` for resources +- Use `LoadableViewModelBase` for async initialization + +#### Platform-Specific Code +- Check `Compat.IsWindows`, `Compat.IsLinux`, `Compat.IsMacOS`, `Compat.IsArm` +- Platform services injected based on platform (e.g., `IPrerequisiteHelper`) +- Native interop through StabilityMatrix.Native abstractions + +### Adding New Packages +1. Create class in `StabilityMatrix.Core/Models/Packages/` inheriting `BaseGitPackage` +2. Implement required properties: `Name`, `DisplayName`, `Author`, `LaunchCommand`, etc. +3. Define `SharedFolderLayout` for model folder mappings +4. Override `InstallPackage()` for custom setup if needed +5. Register in `PackageFactory.cs` +6. Add launch options via `LaunchOptions` property + +### Testing Strategy +- Unit tests use MSTest framework +- Mock dependencies with NSubstitute +- UI tests use Avalonia's headless testing +- `InternalsVisibleTo` enables testing internal members + +## Important Files +- `.editorconfig`: Code style rules (120 char line length, var usage) +- `.csharpierrc.yaml`: C# formatter config +- `Directory.Packages.props`: Centralized package version management +- `ConditionalSymbols.props`: Conditional compilation symbols +- `global.json`: .NET SDK version pinning (9.0.0) +- `.husky/task-runner.json`: Pre-commit hooks and tasks From a62b6c073dfcc2344682655559aa8dd165cc8521 Mon Sep 17 00:00:00 2001 From: NeuralFault Date: Sat, 25 Oct 2025 20:38:29 -0400 Subject: [PATCH 02/16] CUDNN Disable module for SM Inference to fix CUDNN error with ComfyUI-Zluda --- -p:PublishSingleFile=true | 0 .DS_Store | Bin 0 -> 12292 bytes StabilityMatrix.Avalonia/.DS_Store | Bin 0 -> 10244 bytes .../Inference/CfzCudnnToggleCard.axaml | 21 +- .../Inference/CfzCudnnToggleCard.axaml.cs | 3 + .../StabilityMatrix.Avalonia.csproj | 2 +- .../ViewModels/Base/LoadableViewModelBase.cs | 2 + .../InferenceFluxTextToImageViewModel.cs | 2 +- .../InferenceTextToImageViewModel.cs | 2 +- .../Inference/Modules/CfzCudnnToggleModule.cs | 47 ++--- .../Api/Comfy/Nodes/ComfyNodeBuilder.cs | 9 +- StabilityMatrix.Native.Windows/.DS_Store | Bin 0 -> 8196 bytes WARP.md | 183 ------------------ 13 files changed, 44 insertions(+), 227 deletions(-) create mode 100644 -p:PublishSingleFile=true create mode 100644 .DS_Store create mode 100644 StabilityMatrix.Avalonia/.DS_Store create mode 100644 StabilityMatrix.Native.Windows/.DS_Store delete mode 100644 WARP.md diff --git a/-p:PublishSingleFile=true b/-p:PublishSingleFile=true new file mode 100644 index 00000000..e69de29b diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3c4e10a15574756bdea84be66c38c751c336cfbc GIT binary patch literal 12292 zcmeHNO>7%Q6n>K?#BS2YO_MZ~0#?nTQmYW4r67drx(TfdG*O(kDg8;;_Qu_2vtxGG zNzLE^v#i7OJP9^t?djvTmv#1$bfa4p}P-L$joxNedPLfElpXLfepdpmDu zzIpGBiAWS0)t8745m5@6%S`Ssdv(l zXduzRR?=;+UxjOf_W z+4WR+D!sF(ch~N|%%1+edj|Fl4h|0O8-BX~nFF(#y=9{^Uvp){sh*OybPIOFoXzxk zH{?>WBArRsT(r!k8Q;9+m#o`()E^_5GOO1fHccfCn1sFV4}{CybGr5p=_d=xn#Jm;nd8+@>Sa? zoA!iLkiIV$W-N??-&~0-)s2ef)N&{O2)=VVmuF-}%1|z-080l}YhfvJ-`otU(~fjZ z5KRWRx%}HA0;W#K%#;Fxds>?vdCQK!*V4k6?EXjCImlc6GA1_8OgXU z89%CG%=t0nj_CExHHUcqoL^WC(R zc6qgKlrO-qfU|N+I=*2!rmG07s);UFE?Q1iE*01>@)T_;c#uk`(zBW2J9l1tdGtv3 z__1Smk7Vz>&h?|Oyn6R;IyIPk@r|k3d3(W;9|oUOgpf$PVxRXT+z&s-*NW&d@$|N- zr?-*G5L@~$tambDnU3+|q#72f1Q7VRtHc+7hZ|e08Yg3&%ZPFt7Ftu$CwY<{_FF4dR`}61jot{xN+p5L$KH(XkpqTaAXmg|1csdk za>osBpmu~#I~<8hU{r3^bDNlM+SoT@h$W|~wDnI@F^RR$95bu7*7+X?1=@OwHR51W}(aJw%e|j0RADoi5eh>5^ z`dl+9hu7pZseIFUTx-hYYdJ19A|w2IK*8s*WzgDqkDD+U;XSVbP5N8(&{@cFXkMAB z9?hY&oBVnhh7noaIKM4IkK@o=iN>Qcl*V-#z39~dqz2K9;53)z#7>Nru64RJzR)

QN-l{85)Eum4T#RM(ircxs|QK(VX{4t zMZS*AiTkYtr6R$FyQqY^I*La*sTPFKIQL_L4g9ox(X#f8k D+2E|h literal 0 HcmV?d00001 diff --git a/StabilityMatrix.Avalonia/.DS_Store b/StabilityMatrix.Avalonia/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7c6ee2b1a794fa2ec7718fbf61f58248561c5334 GIT binary patch literal 10244 zcmeHM&2Jk;6n~SX$=dmHzFH6<-1vf&D5OBCDh{|#3PgYs#Zj6lDe2nYINPju&F;o& zh=P2DBNuL5_ydr*aD_hrj$Ao#M_f3!zc)K}ch`=D1VWLRv1Z@w%=^uI?>8T-855Bx zoz!j-<%!5ZW|?&OK>B)!c*>z!RAil1(1D6!d883eA9KKr^5j&t^x!2 zW^*z|BdMR70nLDBpvwU74|!ykMJ3yjlv@WL@(2Jqgld^k#yLP@@=6w!Y)4W;(Pwme z5DF^P5ko|9wC7nJvZ!P`k`bIl1Sg>^3w1&f(mHT?sZOF8N&VCeXa;&2xQVJP-NT99 zrbhhyzUFwot;7nzS z{bN55$-@0Yn8JOP!VSY-fS-jsiIj~2-aOLLbanfAHQ@IkO6d6r9<}6+ho80~8T%&2 z*dSG)=_b7FXrER^X-d^j4@Yu{hiH&W2fPIU%+uBq4r}MkKVh_FHuq<+tro| zM*Q3f=C@p~6HX>OIyOErnVXuPnVOxNo143S!HFl9n zRxD@TEqP(+HFj)7!JbQ#<)&G+-Fo5OKO+(|h2m>bDMy74uf}Yrq@*bP_&6$Vxt?nQ zv=O})iXSQ!gBGwB%Ct|PQk%Y}Z|OVwiGHEq=`VUJ#>I6pFBZh2xGnC8qPQnE#h!R1 zOriQ6=nU~Isy`(J-|?v-Zk2u4@!UFUSbLOKa0}?*XJLhR?*x-`U#|4{+&3i3g}yJ* zsZ}d@g~#=?O1}jwK2ZEjVdP3rVpgFSU?tYEm#kv_hGZuFl50JVnS`DVO$T1p=>y;$ z>_}{_&;G^hUQEQ+eU|QHhh*>gR#e@NCN1(Vkig7zF+NainRjRx_TepZ-(Hx{L@)F7 zp2RxXc}$GMF>OLNz#6|D!J`^Iz_UVYa__IB{1I%JsJ|pS9)pC9kpv%o*iUF@&_D0t zbvl7$dufE<(?5Gu#}9ia)l; ztkC16N0OhoR+cv44@cm`vqrxe!*etdg@Luo{PUNkdI?8y8?Qp2=LLUX9ORJBBoDlf zY|OnS%$^q7dH(YE(~P_TL+n{90y%&Gh;h2`&w7WgRagmSOre~+JpQS1mn$G{by!+G zgU>y4M2rHo^2m>n zIq?y{9Z7jNfCsB^y}XXc3tz{}+Y8h!a~mg=i%Pa5i5jH;{LcV={@3S!zSZV?m-tEg Ie{}wT21bfX6aWAK literal 0 HcmV?d00001 diff --git a/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml b/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml index 362fee76..086a3512 100644 --- a/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml +++ b/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml @@ -12,21 +12,18 @@ - - - - + + + Margin="8,0,4,0" + HorizontalAlignment="Stretch" /> - + + Margin="8,0,4,0" + HorizontalAlignment="Stretch" /> diff --git a/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml.cs b/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml.cs index b0b560e4..c969f977 100644 --- a/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml.cs +++ b/StabilityMatrix.Avalonia/Controls/Inference/CfzCudnnToggleCard.axaml.cs @@ -1,3 +1,6 @@ +using Injectio.Attributes; + namespace StabilityMatrix.Avalonia.Controls; +[RegisterTransient] public class CfzCudnnToggleCard : TemplatedControlBase; diff --git a/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj b/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj index 41aee84e..b07d45ee 100644 --- a/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj +++ b/StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj @@ -9,8 +9,8 @@ ./Assets/Icon.ico 2.16.0-dev.999 $(Version) - true true + true diff --git a/StabilityMatrix.Avalonia/ViewModels/Base/LoadableViewModelBase.cs b/StabilityMatrix.Avalonia/ViewModels/Base/LoadableViewModelBase.cs index a3cd9d11..a42f7391 100644 --- a/StabilityMatrix.Avalonia/ViewModels/Base/LoadableViewModelBase.cs +++ b/StabilityMatrix.Avalonia/ViewModels/Base/LoadableViewModelBase.cs @@ -26,6 +26,7 @@ namespace StabilityMatrix.Avalonia.ViewModels.Base; [JsonDerivedType(typeof(RescaleCfgCardViewModel), RescaleCfgCardViewModel.ModuleKey)] [JsonDerivedType(typeof(PlasmaNoiseCardViewModel), PlasmaNoiseCardViewModel.ModuleKey)] [JsonDerivedType(typeof(NrsCardViewModel), NrsCardViewModel.ModuleKey)] +[JsonDerivedType(typeof(CfzCudnnToggleCardViewModel), CfzCudnnToggleCardViewModel.ModuleKey)] [JsonDerivedType(typeof(FreeUModule))] [JsonDerivedType(typeof(HiresFixModule))] [JsonDerivedType(typeof(FluxHiresFixModule))] @@ -41,6 +42,7 @@ namespace StabilityMatrix.Avalonia.ViewModels.Base; [JsonDerivedType(typeof(RescaleCfgModule))] [JsonDerivedType(typeof(PlasmaNoiseModule))] [JsonDerivedType(typeof(NRSModule))] +[JsonDerivedType(typeof(CfzCudnnToggleModule))] public abstract class LoadableViewModelBase : ViewModelBase, IJsonLoadableState { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); diff --git a/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceFluxTextToImageViewModel.cs b/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceFluxTextToImageViewModel.cs index 3eef2d35..fb4db596 100644 --- a/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceFluxTextToImageViewModel.cs +++ b/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceFluxTextToImageViewModel.cs @@ -95,9 +95,9 @@ RunningPackageService runningPackageService { typeof(FluxHiresFixModule), typeof(UpscalerModule), + typeof(CfzCudnnToggleModule), typeof(SaveImageModule), typeof(FaceDetailerModule), - typeof(CfzCudnnToggleModule), }; modulesCard.DefaultModules = new[] { typeof(FluxHiresFixModule), typeof(UpscalerModule) }; modulesCard.InitializeDefaults(); diff --git a/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceTextToImageViewModel.cs b/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceTextToImageViewModel.cs index ec95e557..528ce0bb 100644 --- a/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceTextToImageViewModel.cs +++ b/StabilityMatrix.Avalonia/ViewModels/Inference/InferenceTextToImageViewModel.cs @@ -102,9 +102,9 @@ TabContext tabContext { typeof(HiresFixModule), typeof(UpscalerModule), + typeof(CfzCudnnToggleModule), typeof(SaveImageModule), typeof(FaceDetailerModule), - typeof(CfzCudnnToggleModule), }; modulesCard.DefaultModules = new[] { typeof(HiresFixModule), typeof(UpscalerModule) }; modulesCard.InitializeDefaults(); diff --git a/StabilityMatrix.Avalonia/ViewModels/Inference/Modules/CfzCudnnToggleModule.cs b/StabilityMatrix.Avalonia/ViewModels/Inference/Modules/CfzCudnnToggleModule.cs index cbab7bb9..a1287f49 100644 --- a/StabilityMatrix.Avalonia/ViewModels/Inference/Modules/CfzCudnnToggleModule.cs +++ b/StabilityMatrix.Avalonia/ViewModels/Inference/Modules/CfzCudnnToggleModule.cs @@ -3,6 +3,7 @@ using StabilityMatrix.Avalonia.Models.Inference; using StabilityMatrix.Avalonia.Services; using StabilityMatrix.Avalonia.ViewModels.Base; +using StabilityMatrix.Avalonia.ViewModels.Inference; using StabilityMatrix.Core.Attributes; using StabilityMatrix.Core.Models.Api.Comfy.Nodes; using StabilityMatrix.Core.Models.Api.Comfy.NodeTypes; @@ -18,43 +19,43 @@ public class CfzCudnnToggleModule : ModuleBase public CfzCudnnToggleModule(IServiceManager vmFactory) : base(vmFactory) { - Title = "CFZ CUDNN Toggle"; - AddCards(vmFactory.Get()); + Title = "Disable CUDNN (ComfyUI-Zluda)"; } ///

- /// Applies CUDNN Toggle to the Model and Conditioning connections + /// Applies CUDNN Toggle node between sampler latent output and VAE decode + /// This prevents "GET was unable to find an engine" errors on AMD cards with Zluda /// protected override void OnApplyStep(ModuleApplyStepEventArgs e) { - var card = GetCard(); + // Get the primary connection (can be latent or image) + var primary = e.Builder.Connections.Primary; + if (primary == null) + { + return; // No primary connection to process + } - // Apply to all models in the pipeline - foreach (var modelConnections in e.Builder.Connections.Models.Values.Where(m => m.Model is not null)) + // Check if primary is a latent (from sampler output) + if (primary.IsT0) // T0 is LatentNodeConnection { + var latentConnection = primary.AsT0; + + // Insert CUDNN toggle node between sampler and VAE decode var cudnnToggleOutput = e.Nodes.AddTypedNode( new ComfyNodeBuilder.CUDNNToggleAutoPassthrough { - Name = e.Nodes.GetUniqueName($"CUDNNToggle_{modelConnections.Name}"), - Model = modelConnections.Model, - Conditioning = modelConnections.Conditioning?.Positive, - Latent = null, // Optional, we're not using latent passthrough here - EnableCudnn = card.EnableCudnn, - CudnnBenchmark = card.CudnnBenchmark, + Name = e.Nodes.GetUniqueName("CUDNNToggle"), + Model = null, + Conditioning = null, + Latent = latentConnection, // Pass through the latent from sampler + enable_cudnn = false, + cudnn_benchmark = false, } ); - // Update the model connection with the output from CUDNN toggle - modelConnections.Model = cudnnToggleOutput.Output1; - - // Update conditioning if it was provided - if (modelConnections.Conditioning is not null) - { - modelConnections.Conditioning = new ConditioningConnections( - cudnnToggleOutput.Output2, - modelConnections.Conditioning.Negative - ); - } + // Update the primary connection to use the CUDNN toggle latent output (Output3) + // This ensures VAE decode receives latent from CUDNN toggle instead of directly from sampler + e.Builder.Connections.Primary = cudnnToggleOutput.Output3; } } } diff --git a/StabilityMatrix.Core/Models/Api/Comfy/Nodes/ComfyNodeBuilder.cs b/StabilityMatrix.Core/Models/Api/Comfy/Nodes/ComfyNodeBuilder.cs index f6e514b2..010cb15c 100644 --- a/StabilityMatrix.Core/Models/Api/Comfy/Nodes/ComfyNodeBuilder.cs +++ b/StabilityMatrix.Core/Models/Api/Comfy/Nodes/ComfyNodeBuilder.cs @@ -1000,18 +1000,15 @@ public record BrownNoise : ComfyTypedNodeBase /// /// CUDNN Toggle node for controlling CUDA Deep Neural Network library settings (CUDNNToggleAutoPassthrough) /// - [TypedNodeOptions( - Name = "CUDNNToggleAutoPassthrough", - RequiredExtensions = ["https://github.com/patientx/ComfyUI-Zluda"] - )] + [TypedNodeOptions(Name = "CUDNNToggleAutoPassthrough")] public record CUDNNToggleAutoPassthrough : ComfyTypedNodeBase { public ModelNodeConnection? Model { get; init; } public ConditioningNodeConnection? Conditioning { get; init; } public LatentNodeConnection? Latent { get; init; } - public required bool EnableCudnn { get; init; } = false; - public required bool CudnnBenchmark { get; init; } = false; + public required bool enable_cudnn { get; init; } = false; + public required bool cudnn_benchmark { get; init; } = false; } /// diff --git a/StabilityMatrix.Native.Windows/.DS_Store b/StabilityMatrix.Native.Windows/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9360ffb633d3faddc3ac79108414aee3e82a3d13 GIT binary patch literal 8196 zcmeHM&2JM&6o2CcvTlHEAb~(z$-=6H1WMBu`XPjH4U`(xCW-?j1?ujuC(goV#@gN3 zq){ZFLF%E$9ysy`aN^iYkG=NLOZx}(&{MDUHy;Ma2^S7ktIk9-zqd2*&3p4(&)0^C zSaqZM9?=XDdB_U=aTI$b)vofcRIoM5j=`R2okB`zlWHV(X}b!?fMdWh;23ZWI0pU= z3}DYz$$Q1VZ(3dH7;p^yFBwqlLkU@7#bVE(UOG_dD*$j5)jC1OJwV%(ELJS`3~E#K zX>Je9nlgLEV8$HnC8Z9mSnL@z=ERISG3%Mx8w%6jVOP@X#3}||=@@Vf>}Eji{S)*l zW%%Pe?(eH4X_g|&YKe@(M265*ldFn6`&=hTL?gKK$0UZdp6;y`cC)ta>si=N;w+z= z`-K%oM)&O>^Txb!?{0lfcI$bNZ)DXVy{(>>q)fuT9E3Mx-fj3(m!!ypSnyOE#7z#B zJGWxdl-;V_5Y0^6)=h&~^ok9CW^3!?_vg-(K00@9`%G!;6D6Ph;KS|hqBmWB_xxhx zezGp)Lp>^DcA=qz=J`eW2$CIh9Chqy*w6jZ{O0@p@f6<}KXCBSgg<%s$mG=I^z`)6 zV>8E3oOr9@9|?o#ek)aRUXqDStH}mmjw31R@wa?A=MQovH2lLudW*dI^~B>Gce1 m6BJ5C)$8jx@Wnq2A(w1h#bVDOT9Dj_08N7{90UI-1Ahb0Ohx?w literal 0 HcmV?d00001 diff --git a/WARP.md b/WARP.md deleted file mode 100644 index 538b1b16..00000000 --- a/WARP.md +++ /dev/null @@ -1,183 +0,0 @@ -# WARP.md - -This file provides guidance to WARP (warp.dev) when working with code in this repository. - -## Overview - -Stability Matrix is a multi-platform package manager and inference UI for Stable Diffusion, built with C# .NET 9, Avalonia UI, and following MVVM architecture. It manages various AI packages (ComfyUI, Automatic1111, Fooocus, etc.) with embedded Python/Git dependencies and a built-in inference interface. - -## Build & Development Commands - -### Prerequisites -- .NET 9 SDK -- Platform-specific runtime identifier required: `win-x64`, `linux-x64`, or `osx-arm64` - -### Build -```bash -# Debug build (specify runtime) -dotnet build ./StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj -r win-x64 -c Debug -dotnet build ./StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj -r linux-x64 -c Debug -dotnet build ./StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj -r osx-arm64 -c Debug - -# Windows uses net8.0-windows10.0.17763.0 framework, output in: -# StabilityMatrix.Avalonia/bin/Debug/net8.0-windows10.0.17763.0/win-x64/ - -# Other platforms use net8.0 framework, output in: -# StabilityMatrix.Avalonia/bin/Debug/net8.0/{runtime}/ -``` - -### Testing -```bash -# Run all unit tests -dotnet test StabilityMatrix.Tests - -# Run UI tests (Windows only) -dotnet test StabilityMatrix.UITests -``` - -### Code Formatting -```bash -# Install Husky.Net and pre-commit hooks (run once) -dotnet tool restore && dotnet husky install - -# Format C# code with CSharpier -dotnet csharpier format - -# Format AXAML files with XamlStyler -dotnet xstyler -f -``` - -### OpenAPI Client Generation -```bash -# Regenerate API clients (Refitter) -dotnet husky run -g generate-openapi -``` - -### Release Build -```bash -# Single file publish for distribution -dotnet publish ./StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj \ - -r win-x64 -c Release \ - -p:Version= \ - -p:PublishSingleFile=true \ - -p:IncludeNativeLibrariesForSelfExtract=true \ - -p:PublishReadyToRun=true - -# macOS (requires Build/build_macos_app.sh script) -./Build/build_macos_app.sh -v - -# Linux AppImage (requires PupNet) -pupnet -r linux-x64 -c Release --kind appimage --app-version --clean -``` - -## Architecture - -### Project Structure -- **StabilityMatrix.Avalonia**: Main UI application using Avalonia MVVM framework -- **StabilityMatrix.Core**: Business logic, API clients, package management, Python interop -- **StabilityMatrix.Native**: Platform-specific native code abstractions -- **StabilityMatrix.Native.Windows/macOS**: Platform implementations -- **StabilityMatrix.Tests**: Unit tests using MSTest -- **StabilityMatrix.UITests**: UI automation tests -- **analyzers/**: Roslyn analyzers for code quality - -### Key Concepts - -#### Package System -The package system manages different Stable Diffusion packages through a plugin architecture: -- `BasePackage`: Abstract base defining package interface (download, install, update, run, shutdown) -- `BaseGitPackage`: Git-based package implementation for most packages -- Individual package implementations: `ComfyUI`, `A3WebUI`, `Fooocus`, `SDWebForge`, etc. -- `IPackageFactory`: Factory for instantiating package types -- Each package defines its Python version, torch variants, launch options, and shared folder configuration - -#### Shared Folder System -Packages share model files through configurable methods: -- **SharedFolderMethod**: `Symlink` (default), `Configuration`, or `None` -- **SharedFolderType**: Model types like `StableDiffusion`, `Lora`, `VAE`, `Controlnet`, etc. -- **SharedFolderLayout**: Defines which model types map to which package directories -- Configured per-package via `SetupModelFolders()`, `UpdateModelFolders()`, `RemoveModelFolderLinks()` - -#### Dependency Injection -The app uses Microsoft.Extensions.DependencyInjection: -- Service registration in `App.axaml.cs` via `ConfigureServices()` -- Attribute-based registration: `[Singleton]`, `[Transient]` from StabilityMatrix.Core.Attributes -- ViewModels registered through `ConfigurePageViewModels()` -- `IServiceManager` for managing page ViewModels -- MessagePipe for event bus and inter-process communication - -#### MVVM Architecture -- **ViewModels**: Inherit from `ViewModelBase`, use CommunityToolkit.Mvvm for commands/properties -- **Views**: AXAML files with compiled bindings (AvaloniaUseCompiledBindingsByDefault=true) -- **Services**: Injected into ViewModels, handle business logic -- **DesignData**: Mock data for XAML designer previews - -#### Inference System -Built-in Stable Diffusion inference UI: -- Card-based modular UI system (`StackCardViewModel`, `InferenceTabViewModelBase`) -- Workspaces saved as `.smproj` project files -- Metadata embedded in generated images (ComfyUI nodes, A1111 metadata) -- Custom prompt language with syntax highlighting (`ImagePrompt.tmLanguage.json`) -- Integration with local package installs or remote ComfyUI instances - -#### Database -- LiteDB for local storage (`ILiteDbContext`) -- Models: `InstalledPackage`, `LocalModelFile`, settings, etc. -- Repositories handle CRUD operations - -#### Model Management -- `IModelIndexService`: Indexes and tracks models across packages -- `ITrackedDownloadService`: Manages downloads from CivitAI, HuggingFace -- Metadata extraction and preview generation -- Checkpoint browser with filtering/search - -### Code Patterns - -#### Naming Conventions -- PascalCase: classes, records, structs, public members -- camelCase: private/internal fields (NO underscore prefix) -- Interfaces: `I` prefix (e.g., `IPackageFactory`) -- File-scoped namespaces always - -#### Project Organization -- `Models/`: Data models and DTOs -- `ViewModels/`: MVVM ViewModels -- `Services/`: Business logic services -- `Api/`: Refit API interfaces -- `Extensions/`: Extension methods only -- `Converters/`: XAML and JSON converters -- `Helper/`: Utilities and helpers -- `DesignData/`: XAML designer mock data - -#### ViewModels -- PageViewModels inherit from `PageViewModelBase` and use `[ManagedService]` attribute -- DialogViewModels inherit from `ContentDialogViewModelBase` or `TaskDialogViewModelBase` -- Implement proper disposal via `DisposableViewModelBase` for resources -- Use `LoadableViewModelBase` for async initialization - -#### Platform-Specific Code -- Check `Compat.IsWindows`, `Compat.IsLinux`, `Compat.IsMacOS`, `Compat.IsArm` -- Platform services injected based on platform (e.g., `IPrerequisiteHelper`) -- Native interop through StabilityMatrix.Native abstractions - -### Adding New Packages -1. Create class in `StabilityMatrix.Core/Models/Packages/` inheriting `BaseGitPackage` -2. Implement required properties: `Name`, `DisplayName`, `Author`, `LaunchCommand`, etc. -3. Define `SharedFolderLayout` for model folder mappings -4. Override `InstallPackage()` for custom setup if needed -5. Register in `PackageFactory.cs` -6. Add launch options via `LaunchOptions` property - -### Testing Strategy -- Unit tests use MSTest framework -- Mock dependencies with NSubstitute -- UI tests use Avalonia's headless testing -- `InternalsVisibleTo` enables testing internal members - -## Important Files -- `.editorconfig`: Code style rules (120 char line length, var usage) -- `.csharpierrc.yaml`: C# formatter config -- `Directory.Packages.props`: Centralized package version management -- `ConditionalSymbols.props`: Conditional compilation symbols -- `global.json`: .NET SDK version pinning (9.0.0) -- `.husky/task-runner.json`: Pre-commit hooks and tasks From 93e49c10d696d075f7673b05e939605289c92e18 Mon Sep 17 00:00:00 2001 From: NeuralFault Date: Sat, 25 Oct 2025 21:22:43 -0400 Subject: [PATCH 03/16] Delete -p:PublishSingleFile=true deleted unneeded file --- -p:PublishSingleFile=true | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 -p:PublishSingleFile=true diff --git a/-p:PublishSingleFile=true b/-p:PublishSingleFile=true deleted file mode 100644 index e69de29b..00000000 From a722034832679d957fc9a0daf3a3f1972f1d1fb2 Mon Sep 17 00:00:00 2001 From: NeuralFault Date: Sat, 25 Oct 2025 21:23:08 -0400 Subject: [PATCH 04/16] Delete .DS_Store --- .DS_Store | Bin 12292 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 3c4e10a15574756bdea84be66c38c751c336cfbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12292 zcmeHNO>7%Q6n>K?#BS2YO_MZ~0#?nTQmYW4r67drx(TfdG*O(kDg8;;_Qu_2vtxGG zNzLE^v#i7OJP9^t?djvTmv#1$bfa4p}P-L$joxNedPLfElpXLfepdpmDu zzIpGBiAWS0)t8745m5@6%S`Ssdv(l zXduzRR?=;+UxjOf_W z+4WR+D!sF(ch~N|%%1+edj|Fl4h|0O8-BX~nFF(#y=9{^Uvp){sh*OybPIOFoXzxk zH{?>WBArRsT(r!k8Q;9+m#o`()E^_5GOO1fHccfCn1sFV4}{CybGr5p=_d=xn#Jm;nd8+@>Sa? zoA!iLkiIV$W-N??-&~0-)s2ef)N&{O2)=VVmuF-}%1|z-080l}YhfvJ-`otU(~fjZ z5KRWRx%}HA0;W#K%#;Fxds>?vdCQK!*V4k6?EXjCImlc6GA1_8OgXU z89%CG%=t0nj_CExHHUcqoL^WC(R zc6qgKlrO-qfU|N+I=*2!rmG07s);UFE?Q1iE*01>@)T_;c#uk`(zBW2J9l1tdGtv3 z__1Smk7Vz>&h?|Oyn6R;IyIPk@r|k3d3(W;9|oUOgpf$PVxRXT+z&s-*NW&d@$|N- zr?-*G5L@~$tambDnU3+|q#72f1Q7VRtHc+7hZ|e08Yg3&%ZPFt7Ftu$CwY<{_FF4dR`}61jot{xN+p5L$KH(XkpqTaAXmg|1csdk za>osBpmu~#I~<8hU{r3^bDNlM+SoT@h$W|~wDnI@F^RR$95bu7*7+X?1=@OwHR51W}(aJw%e|j0RADoi5eh>5^ z`dl+9hu7pZseIFUTx-hYYdJ19A|w2IK*8s*WzgDqkDD+U;XSVbP5N8(&{@cFXkMAB z9?hY&oBVnhh7noaIKM4IkK@o=iN>Qcl*V-#z39~dqz2K9;53)z#7>Nru64RJzR)

QN-l{85)Eum4T#RM(ircxs|QK(VX{4t zMZS*AiTkYtr6R$FyQqY^I*La*sTPFKIQL_L4g9ox(X#f8k D+2E|h From a6ad7c7ca3f09bd982c8ea964f9eb287b27d4838 Mon Sep 17 00:00:00 2001 From: NeuralFault Date: Sat, 25 Oct 2025 21:23:50 -0400 Subject: [PATCH 05/16] Delete StabilityMatrix.Avalonia/.DS_Store --- StabilityMatrix.Avalonia/.DS_Store | Bin 10244 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 StabilityMatrix.Avalonia/.DS_Store diff --git a/StabilityMatrix.Avalonia/.DS_Store b/StabilityMatrix.Avalonia/.DS_Store deleted file mode 100644 index 7c6ee2b1a794fa2ec7718fbf61f58248561c5334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHM&2Jk;6n~SX$=dmHzFH6<-1vf&D5OBCDh{|#3PgYs#Zj6lDe2nYINPju&F;o& zh=P2DBNuL5_ydr*aD_hrj$Ao#M_f3!zc)K}ch`=D1VWLRv1Z@w%=^uI?>8T-855Bx zoz!j-<%!5ZW|?&OK>B)!c*>z!RAil1(1D6!d883eA9KKr^5j&t^x!2 zW^*z|BdMR70nLDBpvwU74|!ykMJ3yjlv@WL@(2Jqgld^k#yLP@@=6w!Y)4W;(Pwme z5DF^P5ko|9wC7nJvZ!P`k`bIl1Sg>^3w1&f(mHT?sZOF8N&VCeXa;&2xQVJP-NT99 zrbhhyzUFwot;7nzS z{bN55$-@0Yn8JOP!VSY-fS-jsiIj~2-aOLLbanfAHQ@IkO6d6r9<}6+ho80~8T%&2 z*dSG)=_b7FXrER^X-d^j4@Yu{hiH&W2fPIU%+uBq4r}MkKVh_FHuq<+tro| zM*Q3f=C@p~6HX>OIyOErnVXuPnVOxNo143S!HFl9n zRxD@TEqP(+HFj)7!JbQ#<)&G+-Fo5OKO+(|h2m>bDMy74uf}Yrq@*bP_&6$Vxt?nQ zv=O})iXSQ!gBGwB%Ct|PQk%Y}Z|OVwiGHEq=`VUJ#>I6pFBZh2xGnC8qPQnE#h!R1 zOriQ6=nU~Isy`(J-|?v-Zk2u4@!UFUSbLOKa0}?*XJLhR?*x-`U#|4{+&3i3g}yJ* zsZ}d@g~#=?O1}jwK2ZEjVdP3rVpgFSU?tYEm#kv_hGZuFl50JVnS`DVO$T1p=>y;$ z>_}{_&;G^hUQEQ+eU|QHhh*>gR#e@NCN1(Vkig7zF+NainRjRx_TepZ-(Hx{L@)F7 zp2RxXc}$GMF>OLNz#6|D!J`^Iz_UVYa__IB{1I%JsJ|pS9)pC9kpv%o*iUF@&_D0t zbvl7$dufE<(?5Gu#}9ia)l; ztkC16N0OhoR+cv44@cm`vqrxe!*etdg@Luo{PUNkdI?8y8?Qp2=LLUX9ORJBBoDlf zY|OnS%$^q7dH(YE(~P_TL+n{90y%&Gh;h2`&w7WgRagmSOre~+JpQS1mn$G{by!+G zgU>y4M2rHo^2m>n zIq?y{9Z7jNfCsB^y}XXc3tz{}+Y8h!a~mg=i%Pa5i5jH;{LcV={@3S!zSZV?m-tEg Ie{}wT21bfX6aWAK From 3b96d0ff7f0111f027104622fa264c9530a7c1e9 Mon Sep 17 00:00:00 2001 From: NeuralFault Date: Sat, 25 Oct 2025 21:25:51 -0400 Subject: [PATCH 06/16] Delete StabilityMatrix.Native.Windows/.DS_Store --- StabilityMatrix.Native.Windows/.DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 StabilityMatrix.Native.Windows/.DS_Store diff --git a/StabilityMatrix.Native.Windows/.DS_Store b/StabilityMatrix.Native.Windows/.DS_Store deleted file mode 100644 index 9360ffb633d3faddc3ac79108414aee3e82a3d13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHM&2JM&6o2CcvTlHEAb~(z$-=6H1WMBu`XPjH4U`(xCW-?j1?ujuC(goV#@gN3 zq){ZFLF%E$9ysy`aN^iYkG=NLOZx}(&{MDUHy;Ma2^S7ktIk9-zqd2*&3p4(&)0^C zSaqZM9?=XDdB_U=aTI$b)vofcRIoM5j=`R2okB`zlWHV(X}b!?fMdWh;23ZWI0pU= z3}DYz$$Q1VZ(3dH7;p^yFBwqlLkU@7#bVE(UOG_dD*$j5)jC1OJwV%(ELJS`3~E#K zX>Je9nlgLEV8$HnC8Z9mSnL@z=ERISG3%Mx8w%6jVOP@X#3}||=@@Vf>}Eji{S)*l zW%%Pe?(eH4X_g|&YKe@(M265*ldFn6`&=hTL?gKK$0UZdp6;y`cC)ta>si=N;w+z= z`-K%oM)&O>^Txb!?{0lfcI$bNZ)DXVy{(>>q)fuT9E3Mx-fj3(m!!ypSnyOE#7z#B zJGWxdl-;V_5Y0^6)=h&~^ok9CW^3!?_vg-(K00@9`%G!;6D6Ph;KS|hqBmWB_xxhx zezGp)Lp>^DcA=qz=J`eW2$CIh9Chqy*w6jZ{O0@p@f6<}KXCBSgg<%s$mG=I^z`)6 zV>8E3oOr9@9|?o#ek)aRUXqDStH}mmjw31R@wa?A=MQovH2lLudW*dI^~B>Gce1 m6BJ5C)$8jx@Wnq2A(w1h#bVDOT9Dj_08N7{90UI-1Ahb0Ohx?w From 2652d5674c7739f90098c2f30df6b69c414f1ebb Mon Sep 17 00:00:00 2001 From: JT Date: Sat, 14 Oct 2023 12:14:08 -0700 Subject: [PATCH 07/16] Fix xformers install (#299) From 8d7f45a1e05e20ec8c62e116894a8950c046e906 Mon Sep 17 00:00:00 2001 From: Ionite Date: Mon, 11 Mar 2024 17:05:08 -0400 Subject: [PATCH 08/16] Fix merge From eb47868ad7fbe225200d6bca5443fe6cd93ff81d Mon Sep 17 00:00:00 2001 From: NeuralFault Date: Sat, 25 Oct 2025 22:24:04 -0400 Subject: [PATCH 09/16] Remove .DS_Store files --- StabilityMatrix.Avalonia/App.axaml | 1 + .../Inference/InferenceFluxTextToImageViewModel.cs | 6 +++--- .../ViewModels/Inference/InferenceTextToImageViewModel.cs | 6 +++--- .../Models/Api/Comfy/Nodes/ComfyNodeBuilder.cs | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/StabilityMatrix.Avalonia/App.axaml b/StabilityMatrix.Avalonia/App.axaml index fe088a5b..95f8e0d5 100644 --- a/StabilityMatrix.Avalonia/App.axaml +++ b/StabilityMatrix.Avalonia/App.axaml @@ -100,6 +100,7 @@ +