Skip to content

Commit ce89973

Browse files
authored
Merge branch 'dev' into downmerg
2 parents b5c4bb9 + 373b890 commit ce89973

164 files changed

Lines changed: 23817 additions & 1233 deletions

File tree

Some content is hidden

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

CHANGELOG.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,109 @@ 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.16.0-dev.3
9+
### Added
10+
- Added enable/disable toggle for environment variables in Settings, allowing variables to be temporarily disabled without deleting them
11+
- Added single-instance window activation signaling so reopening the app restores and focuses the existing desktop window instead of launching a duplicate instance
12+
- Added notification system with localizable banner and markdown detail dialog UI
13+
- Added warning in data directory selector when a OneDrive folder is selected
14+
- Added support in the Checkpoints page to distinguish standard updates from Early Access-only updates - thanks to @x0x0b!
15+
- Added torch index for Strix/Gorgon Point Ryzen AI APUs on Windows - thanks to @NeuralFault!
16+
### Changed
17+
- Improved safetensor checkpoint classification to correctly detect UNet-only models for Wan Video, HiDream, Z-Image, Hunyuan3D, and diffusers-format Flux architectures, ensuring they are routed to the DiffusionModels folder
18+
- GGUF checkpoint downloads now go directly to the DiffusionModels folder instead of StableDiffusion
19+
- Configured portable Git to suppress detached HEAD advice messages
20+
- Settings file saves are now atomic to prevent corruption from interrupted writes
21+
### Fixed
22+
- Fixed the Package Manager "Add Package" teaching tip opening inopportunely while packages were still loading or after opening the add-package dialog
23+
- Fixed downloaded checkpoint going to StableDiffusion folder when a saved download preference existed, even for GGUF files that should always go to DiffusionModels
24+
- Fixed potential crash when adding metadata to malformed or non-PNG image data in Inference
25+
- Fixed non-Latin-1 characters (e.g. Japanese, Chinese, Korean, emoji) in image generation parameters being stored in PNG tEXt chunks, violating the PNG specification and causing character corruption (mojibake) in standard-compliant parsers. Non-Latin-1 content now uses spec-compliant iTXt chunks with proper UTF-8 encoding ([#1535](https://github.com/LykosAI/StabilityMatrix/issues/1535))
26+
- Fixed an issue where `Align Your Steps` scheduler and Unet Loader workflows ignored Regional Prompting (and other addon) conditioning modifiers.
27+
- Fixed bold text not rendering in markdown dialogs on Windows 11 due to Avalonia 11.3.x variable font regression with Segoe UI Variable Text
28+
- Fixed Japanese text appearing compressed/squished in markdown dialogs by ensuring the bundled NotoSansJP font is used for CTextBlock rendering
29+
- Fixed ContentDialog title and buttons not using the correct font for Japanese locale (NotoSansJP) when shown as overlay
30+
- Added missing `CBold` and `CItalic` inline styles to the markdown style sheet
31+
- Fixed downloads failing with "The request message was already sent" when the server doesn't return Content-Length on the first attempt, caused by reusing a consumed HttpRequestMessage in the retry loop
32+
- Fixed downloads from sources that redirect to CivitAI/HuggingFace (e.g. CivArchive) failing with Unauthorized by resolving the redirect target URL and applying auth headers for the correct domain
33+
- Fixed dropdown menu overlayed in Inference UI Model Cards not being scrollable on Linux - thanks to @NeuralFault!
34+
- Fixed [#1598](https://github.com/LykosAI/StabilityMatrix/issues/1598) - download progress bar showing 100% immediately for fresh downloads due to missing Content-Length fallback when Content-Range header is absent
35+
- Fixed [#1597](https://github.com/LykosAI/StabilityMatrix/issues/1597) - reForge launch failing due to setuptools version
36+
- Fixed [#1596](https://github.com/LykosAI/StabilityMatrix/issues/1596) - package installs and managed embedded Python startup being poisoned by inherited shell Python activation variables such as `PYTHONHOME`, `PYTHONPATH`, `VIRTUAL_ENV`, and Conda environment variables
37+
- Fixed [#1590](https://github.com/LykosAI/StabilityMatrix/issues/1590) - Startup crash when settings file is corrupted. Settings files are now self-healing with automatic recovery from null bytes, truncated JSON, and missing brackets
38+
- Potentially fixed [#1578](https://github.com/LykosAI/StabilityMatrix/issues/1578) - `SocketException: Address already in use` on Linux startup by cleaning stale interprocess socket files and reactivating the existing window
39+
- Fixed [#1397](https://github.com/LykosAI/StabilityMatrix/issues/1397), [#610](https://github.com/LykosAI/StabilityMatrix/issues/610) - duplicate pip package entries in results - thanks to @e-nord!
40+
41+
## v2.16.0-dev.2
42+
### Added
43+
- Added Regional Prompting addon to Inference - paint detailed masks to apply different prompts, strengths, and settings to specific regions of your image
44+
- Multi-layer mask editor with Photoshop-style interface for managing layers with independent masks, prompts, colors, and opacity
45+
- Professional brush tools: freehand brush/eraser with pressure sensitivity, rectangle/ellipse shapes with fill/stroke modes, paint bucket flood fill
46+
- Brush feathering/softness control for smooth, blended mask edges (0 = hard edge, 1 = soft/blurred)
47+
- Per-layer prompt and strength controls, export/import masks as PNG, duplicate layers, image reference layers for tracing
48+
- GPU-accelerated rendering with compact gzip-compressed metadata serialization
49+
- Added new Model Picker dialog for Inference with grid/list views, search, filtering, and NSFW overlay
50+
- Added browse buttons to all model dropdowns in Inference (Model, Refiner, VAE, Text Encoders, CLIP Vision)
51+
- Added inline search box to model combo box dropdowns with fuzzy matching
52+
- Added NVIDIA driver version warning when launching ComfyUI with CUDA 13.0 (cu130) and driver versions below 580.x
53+
- Added legacy Python warning when launching InvokeAI installations using Python 3.10.11
54+
- Added Tiled VAE Decode to the Inference video workflows - thanks to @NeuralFault!
55+
- Added recoverable error dialog for UI thread exceptions, with option to continue instead of exiting
56+
### Changed
57+
- Disabled update checking for legacy InvokeAI installations using Python 3.10.11
58+
- Hide rating stars in the Civitai browser page if no rating is available
59+
- Updated uv to v0.9.30
60+
- Updated PortableGit to v2.52.0.windows.1
61+
- Updated Sage/Triton/Nunchaku installers to use GitHub API to fetch latest releases
62+
- Updated ComfyUI installations and updates to automatically install ComfyUI Manager
63+
- Updated gfx110X Windows ROCm nightly index - thanks to @NeuralFault!
64+
- Updated ComfyUI-Zluda install to more closely match the author's intended installation method - thanks to @NeuralFault!
65+
- Updated Forge Classic installs/updates to use the upstream install script for better version compatibility with torch/sage/triton/nunchaku
66+
### Fixed
67+
- Fixed parsing of escape sequences in Inference such as `\\`
68+
- Fixed batch notification firing when only one image is generated
69+
- Fixed [#1546](https://github.com/LykosAI/StabilityMatrix/issues/1546), [#1541](https://github.com/LykosAI/StabilityMatrix/issues/1541) - "No module named 'pkg_resources'" error when installing Automatic1111/Forge/reForge packages
70+
- Fixed [#1545](https://github.com/LykosAI/StabilityMatrix/issues/1545), [#1518](https://github.com/LykosAI/StabilityMatrix/issues/1518), [#1513](https://github.com/LykosAI/StabilityMatrix/issues/1513), [#1488](https://github.com/LykosAI/StabilityMatrix/issues/1488) - Forge Neo update breaking things
71+
- Fixed [#1529](https://github.com/LykosAI/StabilityMatrix/issues/1529) - "Selected commit is null" error when installing packages and rate limited by GitHub
72+
- Fixed [#1525](https://github.com/LykosAI/StabilityMatrix/issues/1525) - Crash after downloading a model
73+
- Fixed [#1523](https://github.com/LykosAI/StabilityMatrix/issues/1523), [#1499](https://github.com/LykosAI/StabilityMatrix/issues/1499), [#1494](https://github.com/LykosAI/StabilityMatrix/issues/1494) - Automatic1111 using old stable diffusion repo
74+
- Fixed [#1505](https://github.com/LykosAI/StabilityMatrix/issues/1505) - incorrect port argument for Wan2GP
75+
- Possibly fix [#1502](https://github.com/LykosAI/StabilityMatrix/issues/1502) - English fonts not displaying correctly on Linux in Chinese environments
76+
- Fixed [#1476](https://github.com/LykosAI/StabilityMatrix/issues/1476) - Incorrect shared output folder for Forge Classic/Neo
77+
- Fixed [#1466](https://github.com/LykosAI/StabilityMatrix/issues/1466) - crash after moving portable install
78+
- Fixed [#1445](https://github.com/LykosAI/StabilityMatrix/issues/1445) - Linux app updates not actually updating - thanks to @NeuralFault!
79+
### Supporters
80+
#### 🌟 Visionaries
81+
Huge shoutout to our amazing Visionaries: **Waterclouds**, **JungleDragon**, **bluepopsicle**, **Bob S**, and **whudunit**! Your continued support fuels every new feature and improvement in Stability Matrix. We couldn't do it without you - thank you for believing in what we're building!
82+
83+
## v2.16.0-dev.1
84+
### Added
85+
#### New Feature: 🧪 Image Lab - Conversational Image Generation for ComfyUI
86+
- We've added a brand new conversational interface for image generation! Image Lab lets you iterate on images naturally through chat, rather than just one-off prompts.
87+
- Local-First Power: Native support for Flux Kontext and Qwen Image Edit running entirely locally via your ComfyUI backend.
88+
- Smart Setup: Stability Matrix automatically detects and helps you download the specific models and LoRAs needed for these local workflows.
89+
- Interactive Tools: Drag-and-drop image inputs, use the built-in annotation tool to draw on images, and keep persistent conversation history.
90+
- Cloud Option: Includes optional support for Nano Banana (Gemini 3 Pro/2.5) for users who want to leverage external reasoning models.
91+
- Added new package - [Wan2GP](https://github.com/deepbeepmeep/Wan2GP)
92+
- Added [Stable Diffusion WebUI Forge - Neo](https://github.com/Haoming02/sd-webui-forge-classic/tree/neo) as a separate package for convenience
93+
- Added Intel GPU support for ComfyUI
94+
- Added "Run Python Command" option to the package card's 3-dots menu for running arbitrary Python code in the package's virtual environment
95+
- Added togglable `--uv` argument to the SD.Next launch options
96+
- Added Tiled VAE decoding as an Inference addon thanks to @NeuralFault!
97+
### Changed
98+
- Moved the original Stable Diffusion WebUI Forge to the "Legacy" packages tab due to inactivity
99+
- Updated to cu130 torch index for ComfyUI installs with Nvidia GPUs
100+
- Consolidated and fixed AMD GPU architecture detection
101+
- Updated SageAttention installer to latest v2.2.0-windows.post4 version
102+
- Video files can now be opened directly from the Output browser
103+
- Videos will now appear with thumbnails in the Output browser
104+
### Fixed
105+
- Fixed [#1450](https://github.com/LykosAI/StabilityMatrix/issues/1450) - Older SD.Next not launching due to forced `--uv` argument
106+
- Fixed duplicate custom node installations when installing workflows from the Workflow Browser - thanks again to @NeuralFault!
107+
### Supporters
108+
#### 🌟 Visionaries
109+
A massive thank you to our esteemed Visionaries: **Waterclouds**, **JungleDragon**, **bluepopsicle**, **Bob S**, and **whudunit**! Your generosity is the powerhouse behind Stability Matrix, enabling us to keep building and refining with confidence. We are truly grateful for your partnership!
110+
8111
## v2.15.7
9112
### Added
10113
- Added single-instance window activation signaling so reopening the app restores and focuses the existing desktop window instead of launching a duplicate instance

StabilityMatrix.Avalonia/App.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
<StyleInclude Source="Controls/Inference/SharpenCard.axaml" />
9090
<StyleInclude Source="Controls/Inference/FreeUCard.axaml" />
9191
<StyleInclude Source="Controls/Inference/ControlNetCard.axaml" />
92+
<StyleInclude Source="Controls/Inference/RegionalPromptCard.axaml" />
9293
<StyleInclude Source="Controls/Inference/PromptExpansionCard.axaml" />
9394
<StyleInclude Source="Controls/Inference/ExtraNetworkCard.axaml" />
9495
<StyleInclude Source="Controls/Inference/LayerDiffuseCard.axaml" />

StabilityMatrix.Avalonia/App.axaml.cs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
using StabilityMatrix.Avalonia.ViewModels.Progress;
5252
using StabilityMatrix.Avalonia.Views;
5353
using StabilityMatrix.Core.Api;
54+
using StabilityMatrix.Core.Api.Handlers;
5455
using StabilityMatrix.Core.Api.LykosAuthApi;
5556
using StabilityMatrix.Core.Api.PromptGenApi;
5657
using StabilityMatrix.Core.Attributes;
@@ -65,6 +66,7 @@
6566
using StabilityMatrix.Core.Models.Settings;
6667
using StabilityMatrix.Core.Python;
6768
using StabilityMatrix.Core.Services;
69+
using StabilityMatrix.Core.Services.ImageGeneration;
6870
using StabilityMatrix.Core.Updater;
6971
using ApiOptions = StabilityMatrix.Core.Models.Configs.ApiOptions;
7072
using Application = Avalonia.Application;
@@ -149,6 +151,11 @@ public override void OnFrameworkInitializationCompleted()
149151
{
150152
base.OnFrameworkInitializationCompleted();
151153

154+
if (!Debugger.IsAttached || Program.Args.DebugExceptionDialog)
155+
{
156+
Dispatcher.UIThread.UnhandledException += Dispatcher_UnhandledException;
157+
}
158+
152159
if (Design.IsDesignMode)
153160
{
154161
DesignData.DesignData.Initialize();
@@ -389,6 +396,7 @@ internal static void ConfigurePageViewModels(IServiceCollection services)
389396
{
390397
provider.GetRequiredService<PackageManagerViewModel>(),
391398
provider.GetRequiredService<InferenceViewModel>(),
399+
provider.GetRequiredService<BananaVisionPageViewModel>(),
392400
provider.GetRequiredService<CheckpointsPageViewModel>(),
393401
provider.GetRequiredService<CheckpointBrowserViewModel>(),
394402
provider.GetRequiredService<OutputsPageViewModel>(),
@@ -503,8 +511,19 @@ internal static IServiceCollection ConfigureServices(bool disableMessagePipeInte
503511
{
504512
services.AddSingleton<ILiteDbContext, LiteDbContext>();
505513
services.AddSingleton<IDisposable>(p => p.GetRequiredService<ILiteDbContext>());
514+
515+
// BananaVision has its own database to preserve conversations when main DB is cleared
516+
services.AddSingleton<IBananaVisionDbContext, BananaVisionDbContext>();
517+
services.AddSingleton<IDisposable>(p => p.GetRequiredService<IBananaVisionDbContext>());
506518
}
507519

520+
// Image generation services
521+
services.AddSingleton<IImageGenerationProvider, GeminiImageGenerationProvider>();
522+
services.AddSingleton<IImageGenerationProvider, Gemini3ProImageGenerationProvider>();
523+
services.AddSingleton<IImageGenerationProvider, FluxKontextProvider>();
524+
services.AddSingleton<IImageGenerationProvider, QwenImageEditProvider>();
525+
services.AddSingleton<IImageGenerationChatService, ImageGenerationChatService>();
526+
508527
services.AddTransient<IGitHubClient, GitHubClient>(_ =>
509528
{
510529
var client = new GitHubClient(new ProductHeaderValue("StabilityMatrix"));
@@ -728,7 +747,7 @@ internal static IServiceCollection ConfigureServices(bool disableMessagePipeInte
728747
}
729748
)
730749
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { AllowAutoRedirect = false })
731-
.AddPolicyHandler(retryPolicy)
750+
.AddPolicyHandler(retryPolicyLonger)
732751
.AddHttpMessageHandler(serviceProvider => new TokenAuthHeaderHandler(
733752
serviceProvider.GetRequiredService<LykosAuthTokenProvider>()
734753
));
@@ -764,6 +783,19 @@ internal static IServiceCollection ConfigureServices(bool disableMessagePipeInte
764783
})
765784
.AddPolicyHandler(retryPolicy); // Assuming retryPolicy is suitable
766785

786+
services
787+
.AddRefitClient<IGeminiApi>(defaultRefitSettings)
788+
.ConfigureHttpClient(c =>
789+
{
790+
c.BaseAddress = new Uri("https://generativelanguage.googleapis.com");
791+
c.Timeout = TimeSpan.FromMinutes(5); // Higher timeout for image generation
792+
})
793+
.AddHttpMessageHandler<GeminiApiKeyHandler>()
794+
.AddPolicyHandler(retryPolicyLonger);
795+
796+
// Register GeminiApiKeyHandler
797+
services.AddTransient<GeminiApiKeyHandler>();
798+
767799
// Apizr clients
768800
services.AddApizrManagerFor<IOpenModelDbApi, OpenModelDbManager>(options =>
769801
{
@@ -1039,6 +1071,14 @@ private static void OnServiceProviderDisposing(ServiceProvider serviceProvider)
10391071
Logger.Trace("Disposing {Count} Disposables", disposables.Count);
10401072
}
10411073

1074+
private static void Dispatcher_UnhandledException(object? sender, DispatcherUnhandledExceptionEventArgs e)
1075+
{
1076+
if (Program.ShowExceptionDialog(e.Exception, true))
1077+
{
1078+
e.Handled = true;
1079+
}
1080+
}
1081+
10421082
private static void TaskScheduler_UnobservedTaskException(
10431083
object? sender,
10441084
UnobservedTaskExceptionEventArgs e

0 commit comments

Comments
 (0)