Browse Source

Added ability to switch between Shared Folder strategies

pull/165/head
JT 1 year ago
parent
commit
f1517e35c9
  1. 2
      CHANGELOG.md
  2. 9
      StabilityMatrix.Avalonia/Languages/Resources.Designer.cs
  3. 3
      StabilityMatrix.Avalonia/Languages/Resources.resx
  4. 95
      StabilityMatrix.Avalonia/ViewModels/PackageManager/PackageCardViewModel.cs
  5. 414
      StabilityMatrix.Avalonia/Views/PackageManagerPage.axaml
  6. 38
      StabilityMatrix.Core/Models/Packages/ComfyUI.cs
  7. 55
      StabilityMatrix.Core/Models/Packages/VladAutomatic.cs

2
CHANGELOG.md

@ -6,6 +6,8 @@ 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.5.0 ## v2.5.0
### Added
- Added option to change the Shared Folder method for packages using the three-dots menu on the Packages page
### Changed ### Changed
- Model Browser page size is now 20 instead of 14 - Model Browser page size is now 20 instead of 14
### Fixed ### Fixed

9
StabilityMatrix.Avalonia/Languages/Resources.Designer.cs generated

@ -1283,6 +1283,15 @@ namespace StabilityMatrix.Avalonia.Languages {
} }
} }
/// <summary>
/// Looks up a localized string similar to Model Sharing.
/// </summary>
public static string Label_SharedModelStrategyShort {
get {
return ResourceManager.GetString("Label_SharedModelStrategyShort", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Show Model Images. /// Looks up a localized string similar to Show Model Images.
/// </summary> /// </summary>

3
StabilityMatrix.Avalonia/Languages/Resources.resx

@ -642,4 +642,7 @@
<data name="Label_AutoScrollToEnd" xml:space="preserve"> <data name="Label_AutoScrollToEnd" xml:space="preserve">
<value>Automatically scroll to end of console output</value> <value>Automatically scroll to end of console output</value>
</data> </data>
<data name="Label_SharedModelStrategyShort" xml:space="preserve">
<value>Model Sharing</value>
</data>
</root> </root>

95
StabilityMatrix.Avalonia/ViewModels/PackageManager/PackageCardViewModel.cs

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.Notifications; using Avalonia.Controls.Notifications;
@ -20,7 +21,6 @@ using StabilityMatrix.Core.Models;
using StabilityMatrix.Core.Models.FileInterfaces; using StabilityMatrix.Core.Models.FileInterfaces;
using StabilityMatrix.Core.Models.PackageModification; using StabilityMatrix.Core.Models.PackageModification;
using StabilityMatrix.Core.Models.Packages; using StabilityMatrix.Core.Models.Packages;
using StabilityMatrix.Core.Models.Progress;
using StabilityMatrix.Core.Processes; using StabilityMatrix.Core.Processes;
using StabilityMatrix.Core.Services; using StabilityMatrix.Core.Services;
@ -50,6 +50,18 @@ public partial class PackageCardViewModel : ProgressViewModel
[ObservableProperty] [ObservableProperty]
private bool isUnknownPackage; private bool isUnknownPackage;
[ObservableProperty]
private bool isSharedModelSymlink;
[ObservableProperty]
private bool isSharedModelConfig;
[ObservableProperty]
private bool isSharedModelDisabled;
[ObservableProperty]
private bool canUseConfigMethod;
public PackageCardViewModel( public PackageCardViewModel(
ILogger<PackageCardViewModel> logger, ILogger<PackageCardViewModel> logger,
IPackageFactory packageFactory, IPackageFactory packageFactory,
@ -85,11 +97,18 @@ public partial class PackageCardViewModel : ProgressViewModel
var basePackage = packageFactory[value.PackageName]; var basePackage = packageFactory[value.PackageName];
CardImageSource = basePackage?.PreviewImageUri.ToString() ?? Assets.NoImage.ToString(); CardImageSource = basePackage?.PreviewImageUri.ToString() ?? Assets.NoImage.ToString();
InstalledVersion = value.Version?.DisplayVersion ?? "Unknown"; InstalledVersion = value.Version?.DisplayVersion ?? "Unknown";
CanUseConfigMethod =
basePackage?.AvailableSharedFolderMethods.Contains(SharedFolderMethod.Configuration)
?? false;
} }
} }
public override async Task OnLoadedAsync() public override async Task OnLoadedAsync()
{ {
IsSharedModelSymlink = Package?.PreferredSharedFolderMethod == SharedFolderMethod.Symlink;
IsSharedModelConfig =
Package?.PreferredSharedFolderMethod == SharedFolderMethod.Configuration;
IsSharedModelDisabled = Package?.PreferredSharedFolderMethod == SharedFolderMethod.None;
IsUpdateAvailable = await HasUpdate(); IsUpdateAvailable = await HasUpdate();
} }
@ -312,4 +331,78 @@ public partial class PackageCardViewModel : ProgressViewModel
return false; return false;
} }
} }
public void ToggleSharedModelSymlink() => IsSharedModelSymlink = !IsSharedModelSymlink;
public void ToggleSharedModelConfig() => IsSharedModelConfig = !IsSharedModelConfig;
public void ToggleSharedModelNone() => IsSharedModelDisabled = !IsSharedModelDisabled;
// fake radio button stuff
partial void OnIsSharedModelSymlinkChanged(bool oldValue, bool newValue)
{
if (oldValue == newValue)
return;
var basePackage = packageFactory[Package!.PackageName];
if (!newValue)
{
basePackage!.RemoveModelFolderLinks(Package.FullPath!, SharedFolderMethod.Symlink);
return;
}
basePackage!.SetupModelFolders(Package.FullPath!, SharedFolderMethod.Symlink);
settingsManager.Transaction(
s =>
s.InstalledPackages.First(x => x.Id == Package.Id).PreferredSharedFolderMethod =
SharedFolderMethod.Symlink
);
IsSharedModelConfig = false;
IsSharedModelDisabled = false;
}
partial void OnIsSharedModelConfigChanged(bool oldValue, bool newValue)
{
if (oldValue == newValue)
return;
var basePackage = packageFactory[Package!.PackageName];
if (!newValue)
{
basePackage!.RemoveModelFolderLinks(
Package.FullPath!,
SharedFolderMethod.Configuration
);
return;
}
basePackage!.SetupModelFolders(Package.FullPath!, SharedFolderMethod.Configuration);
settingsManager.Transaction(
s =>
s.InstalledPackages.First(x => x.Id == Package.Id).PreferredSharedFolderMethod =
SharedFolderMethod.Configuration
);
IsSharedModelSymlink = false;
IsSharedModelDisabled = false;
}
partial void OnIsSharedModelDisabledChanged(bool oldValue, bool newValue)
{
if (oldValue == newValue)
return;
if (!newValue)
return;
settingsManager.Transaction(
s =>
s.InstalledPackages.First(x => x.Id == Package!.Id).PreferredSharedFolderMethod =
SharedFolderMethod.None
);
IsSharedModelSymlink = false;
IsSharedModelConfig = false;
}
} }

414
StabilityMatrix.Avalonia/Views/PackageManagerPage.axaml

@ -9,6 +9,7 @@
xmlns:packageManager="clr-namespace:StabilityMatrix.Avalonia.ViewModels.PackageManager" xmlns:packageManager="clr-namespace:StabilityMatrix.Avalonia.ViewModels.PackageManager"
xmlns:faicon="clr-namespace:Projektanker.Icons.Avalonia;assembly=Projektanker.Icons.Avalonia" xmlns:faicon="clr-namespace:Projektanker.Icons.Avalonia;assembly=Projektanker.Icons.Avalonia"
xmlns:lang="clr-namespace:StabilityMatrix.Avalonia.Languages" xmlns:lang="clr-namespace:StabilityMatrix.Avalonia.Languages"
xmlns:system="clr-namespace:System;assembly=System.Runtime"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="viewModels:PackageManagerViewModel" x:DataType="viewModels:PackageManagerViewModel"
x:CompileBindings="True" x:CompileBindings="True"
@ -17,124 +18,186 @@
<Grid Margin="16" RowDefinitions="Auto,*,Auto"> <Grid Margin="16" RowDefinitions="Auto,*,Auto">
<!-- Title --> <!-- Title -->
<TextBlock Grid.Row="0" Text="{Binding Title}" <TextBlock Grid.Row="0" Text="{Binding Title}"
Margin="0,0,0,16" Margin="0,0,0,16"
FontSize="24"/> FontSize="24" />
<!-- Cards --> <!-- Cards -->
<ScrollViewer Grid.Row="1"> <ScrollViewer Grid.Row="1">
<ItemsRepeater <ItemsRepeater
ItemsSource="{Binding PackageCards}"> ItemsSource="{Binding PackageCards}">
<ItemsRepeater.Layout> <ItemsRepeater.Layout>
<UniformGridLayout MinColumnSpacing="12" MinRowSpacing="12" /> <UniformGridLayout MinColumnSpacing="12" MinRowSpacing="12" />
</ItemsRepeater.Layout> </ItemsRepeater.Layout>
<ItemsRepeater.ItemTemplate> <ItemsRepeater.ItemTemplate>
<DataTemplate DataType="{x:Type packageManager:PackageCardViewModel}"> <DataTemplate DataType="{x:Type packageManager:PackageCardViewModel}">
<controls:Card Padding="8"> <controls:Card Padding="8">
<Grid RowDefinitions="Auto, Auto, Auto, Auto" <Grid RowDefinitions="Auto, Auto, Auto, Auto"
ColumnDefinitions="*,Auto"> ColumnDefinitions="*,Auto">
<TextBlock Grid.Row="0" <TextBlock Grid.Row="0"
Grid.Column="0" Grid.Column="0"
ToolTip.Tip="{Binding Package.DisplayName, FallbackValue=''}" ToolTip.Tip="{Binding Package.DisplayName, FallbackValue=''}"
Text="{Binding Package.DisplayName, FallbackValue=''}" Text="{Binding Package.DisplayName, FallbackValue=''}"
TextTrimming="WordEllipsis" TextTrimming="WordEllipsis"
TextAlignment="Left" /> TextAlignment="Left" />
<Button <Button
Grid.Row="0" Grid.Row="0"
Grid.Column="1" Grid.Column="1"
HorizontalContentAlignment="Right" HorizontalContentAlignment="Right"
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalContentAlignment="Top" VerticalContentAlignment="Top"
VerticalAlignment="Top" VerticalAlignment="Top"
Padding="4,1" Padding="4,1"
Margin="4,0,0,0" Margin="4,0,0,0"
Classes="transparent" Classes="transparent"
Width="24" Width="24"
BorderThickness="0"> BorderThickness="0">
<ui:SymbolIcon FontSize="18" Symbol="MoreVertical" /> <ui:SymbolIcon FontSize="18" Symbol="MoreVertical" />
<Button.Flyout> <Button.Flyout>
<MenuFlyout Placement="BottomEdgeAlignedLeft"> <MenuFlyout Placement="BottomEdgeAlignedLeft">
<MenuItem Header="{x:Static lang:Resources.Action_CheckForUpdates}" <MenuItem Header="{x:Static lang:Resources.Action_CheckForUpdates}"
IsVisible="{Binding !IsUnknownPackage}" IsVisible="{Binding !IsUnknownPackage}"
Command="{Binding OnLoadedAsync}"> Command="{Binding OnLoadedAsync}">
<MenuItem.Icon> <MenuItem.Icon>
<ui:SymbolIcon Symbol="Refresh" /> <ui:SymbolIcon Symbol="Refresh" />
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<MenuItem <MenuItem
Header="{OnPlatform Default={x:Static lang:Resources.Action_OpenInExplorer}, macOS={x:Static lang:Resources.Action_OpenInFinder}}" Header="{OnPlatform Default={x:Static lang:Resources.Action_OpenInExplorer}, macOS={x:Static lang:Resources.Action_OpenInFinder}}"
Command="{Binding OpenFolder}"> Command="{Binding OpenFolder}">
<MenuItem.Icon> <MenuItem.Icon>
<ui:SymbolIcon Symbol="OpenFolder" /> <ui:SymbolIcon Symbol="OpenFolder" />
</MenuItem.Icon> </MenuItem.Icon>
</MenuItem> </MenuItem>
<Separator /> <MenuItem Header="{x:Static lang:Resources.Label_SharedModelStrategyShort}"
<MenuItem Header="{x:Static lang:Resources.Action_Uninstall}" IsVisible="{Binding !IsUnknownPackage}">
Command="{Binding Uninstall}"> <MenuItem.Icon>
<MenuItem.Icon> <ui:SymbolIcon Symbol="FolderLink" />
<ui:SymbolIcon Symbol="Delete" /> </MenuItem.Icon>
</MenuItem.Icon> <!-- ReSharper disable Xaml.RedundantResource -->
</MenuItem> <MenuItem Header="Symlink"
</MenuFlyout> Command="{Binding ToggleSharedModelSymlink}">
</Button.Flyout> <MenuItem.Icon>
</Button> <CheckBox IsChecked="{Binding IsSharedModelSymlink}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Config"
Command="{Binding ToggleSharedModelConfig}"
IsVisible="{Binding CanUseConfigMethod}">
<MenuItem.Icon>
<CheckBox IsChecked="{Binding IsSharedModelConfig}"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="None"
Command="{Binding ToggleSharedModelNone}">
<MenuItem.Icon>
<CheckBox IsChecked="{Binding IsSharedModelDisabled}"/>
</MenuItem.Icon>
</MenuItem>
<!-- ReSharper enable Xaml.RedundantResource -->
</MenuItem>
<Separator />
<MenuItem Header="{x:Static lang:Resources.Action_Uninstall}"
Command="{Binding Uninstall}">
<MenuItem.Icon>
<ui:SymbolIcon Symbol="Delete" />
</MenuItem.Icon>
</MenuItem>
</MenuFlyout>
</Button.Flyout>
</Button>
<TextBlock Grid.Row="1" <TextBlock Grid.Row="1"
Grid.Column="0" Grid.Column="0"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
Margin="2,0,0,0" Margin="2,0,0,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{Binding InstalledVersion}" /> Text="{Binding InstalledVersion}" />
<!-- Normal packages shows image --> <!-- Normal packages shows image -->
<controls:BetterAdvancedImage <controls:BetterAdvancedImage
Grid.Row="2" Grid.Row="2"
Grid.Column="0" Grid.Column="0"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
Margin="0,8,0,8" Margin="0,8,0,8"
Height="160" Height="160"
Width="200" Width="200"
CornerRadius="4" CornerRadius="4"
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalContentAlignment="Top" VerticalContentAlignment="Top"
HorizontalContentAlignment="Center" HorizontalContentAlignment="Center"
Source="{Binding CardImageSource}" Source="{Binding CardImageSource}"
IsVisible="{Binding !IsUnknownPackage}" IsVisible="{Binding !IsUnknownPackage}"
Stretch="UniformToFill" /> Stretch="UniformToFill" />
<!-- Unknown packages panel -->
<Border
Grid.Row="2"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="0,8,0,8"
Height="160"
Width="200"
CornerRadius="4"
HorizontalAlignment="Center"
IsVisible="{Binding IsUnknownPackage}"
Background="#202020">
<TextBlock
TextAlignment="Center"
VerticalAlignment="Center"
FontSize="18"
TextWrapping="Wrap"
Text="{x:Static lang:Resources.Label_UnknownPackage}"/>
</Border>
<Grid <!-- Unknown packages panel -->
Grid.Row="3" <Border
Grid.Column="0" Grid.Row="2"
Grid.ColumnSpan="2" Grid.Column="0"
IsVisible="{Binding IsUpdateAvailable}" Grid.ColumnSpan="2"
ColumnDefinitions="*, *"> Margin="0,8,0,8"
<!-- Launch and update buttons --> Height="160"
<Button Grid.Column="0" Classes="accent" Width="200"
VerticalAlignment="Bottom" CornerRadius="4"
HorizontalAlignment="Stretch" HorizontalAlignment="Center"
Command="{Binding Launch}"> IsVisible="{Binding IsUnknownPackage}"
Background="#202020">
<TextBlock
TextAlignment="Center"
VerticalAlignment="Center"
FontSize="18"
TextWrapping="Wrap"
Text="{x:Static lang:Resources.Label_UnknownPackage}" />
</Border>
<Grid
Grid.Row="3"
Grid.Column="0"
Grid.ColumnSpan="2"
IsVisible="{Binding IsUpdateAvailable}"
ColumnDefinitions="*, *">
<!-- Launch and update buttons -->
<Button Grid.Column="0" Classes="accent"
VerticalAlignment="Bottom"
HorizontalAlignment="Stretch"
Command="{Binding Launch}">
<StackPanel Orientation="Horizontal" Margin="0,2,0,2">
<faicon:Icon Value="fa-solid fa-rocket"
Margin="0,0,8,0"
FontSize="14" />
<TextBlock Text="{x:Static lang:Resources.Action_Launch}" />
</StackPanel>
</Button>
<Button Grid.Column="1" Classes="accent"
VerticalAlignment="Bottom"
HorizontalAlignment="Stretch"
Command="{Binding Update}">
<StackPanel Orientation="Horizontal" Margin="0,2,0,2">
<faicon:Icon Value="fa-solid fa-download"
Margin="0,0,8,0"
FontSize="14" />
<TextBlock Text="{x:Static lang:Resources.Action_Update}" />
</StackPanel>
</Button>
</Grid>
<!-- Big launch button -->
<Button
Grid.Row="3"
Grid.Column="0"
Grid.ColumnSpan="2"
Classes="accent"
VerticalAlignment="Bottom"
Command="{Binding Launch}"
HorizontalAlignment="Stretch">
<Button.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="!IsUpdateAvailable" />
<Binding Path="!IsUnknownPackage" />
</MultiBinding>
</Button.IsVisible>
<StackPanel Orientation="Horizontal" Margin="0,2,0,2"> <StackPanel Orientation="Horizontal" Margin="0,2,0,2">
<faicon:Icon Value="fa-solid fa-rocket" <faicon:Icon Value="fa-solid fa-rocket"
Margin="0,0,8,0" Margin="0,0,8,0"
@ -142,105 +205,70 @@
<TextBlock Text="{x:Static lang:Resources.Action_Launch}" /> <TextBlock Text="{x:Static lang:Resources.Action_Launch}" />
</StackPanel> </StackPanel>
</Button> </Button>
<Button Grid.Column="1" Classes="accent"
<!-- Import button (for unknown) -->
<Button Grid.Row="3" Grid.Column="0" Classes="transparent-info"
Grid.ColumnSpan="2"
VerticalAlignment="Bottom" VerticalAlignment="Bottom"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Command="{Binding Update}"> Command="{Binding Import}"
IsVisible="{Binding IsUnknownPackage}">
<StackPanel Orientation="Horizontal" Margin="0,2,0,2"> <StackPanel Orientation="Horizontal" Margin="0,2,0,2">
<faicon:Icon Value="fa-solid fa-download" <faicon:Icon Value="fa-solid fa-circle-question"
Margin="0,0,8,0" Margin="0,0,8,0"
FontSize="14" /> FontSize="14" />
<TextBlock Text="{x:Static lang:Resources.Action_Update}" /> <TextBlock Text="{x:Static lang:Resources.Action_Import}" />
</StackPanel> </StackPanel>
</Button> </Button>
</Grid>
<!-- Update overlay -->
<!-- Big launch button --> <Border
<Button Grid.Row="0" Grid.RowSpan="4"
Grid.Row="3" Grid.Column="0"
Grid.Column="0"
Grid.ColumnSpan="2"
Classes="accent"
VerticalAlignment="Bottom"
Command="{Binding Launch}"
HorizontalAlignment="Stretch">
<Button.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="!IsUpdateAvailable" />
<Binding Path="!IsUnknownPackage" />
</MultiBinding>
</Button.IsVisible>
<StackPanel Orientation="Horizontal" Margin="0,2,0,2">
<faicon:Icon Value="fa-solid fa-rocket"
Margin="0,0,8,0"
FontSize="14" />
<TextBlock Text="{x:Static lang:Resources.Action_Launch}" />
</StackPanel>
</Button>
<!-- Import button (for unknown) -->
<Button Grid.Row="3" Grid.Column="0" Classes="transparent-info"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
VerticalAlignment="Bottom" Background="#DD000000"
CornerRadius="4"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Command="{Binding Import}" VerticalAlignment="Stretch"
IsVisible="{Binding IsUnknownPackage}"> IsVisible="{Binding IsProgressVisible}" />
<StackPanel Orientation="Horizontal" Margin="0,2,0,2"> <Grid Grid.Row="0" Grid.RowSpan="4"
<faicon:Icon Value="fa-solid fa-circle-question" Grid.Column="0"
Margin="0,0,8,0" HorizontalAlignment="Stretch"
FontSize="14" /> VerticalAlignment="Center"
<TextBlock Text="{x:Static lang:Resources.Action_Import}" /> RowDefinitions="Auto, *"
</StackPanel> IsVisible="{Binding IsProgressVisible}">
</Button> <controls:ProgressRing
HorizontalAlignment="Center"
<!-- Update overlay --> IsIndeterminate="{Binding IsIndeterminate}"
<Border Width="120"
Grid.Row="0" Grid.RowSpan="4" Height="120"
Grid.Column="0" StartAngle="90"
Grid.ColumnSpan="2" EndAngle="450"
Background="#DD000000" Value="{Binding Value}"
CornerRadius="4" VerticalAlignment="Center" />
HorizontalAlignment="Stretch" <TextBlock Grid.Row="1"
VerticalAlignment="Stretch" HorizontalAlignment="Center"
IsVisible="{Binding IsProgressVisible}" /> Margin="8,8,8,0"
<Grid Grid.Row="0" Grid.RowSpan="4" TextAlignment="Center"
Grid.Column="0" Width="180"
HorizontalAlignment="Stretch" Text="{Binding Text}"
VerticalAlignment="Center" TextWrapping="Wrap"
RowDefinitions="Auto, *" VerticalAlignment="Center" />
IsVisible="{Binding IsProgressVisible}"> </Grid>
<controls:ProgressRing
HorizontalAlignment="Center"
IsIndeterminate="{Binding IsIndeterminate}"
Width="120"
Height="120"
StartAngle="90"
EndAngle="450"
Value="{Binding Value}"
VerticalAlignment="Center" />
<TextBlock Grid.Row="1"
HorizontalAlignment="Center"
Margin="8,8,8,0"
TextAlignment="Center"
Width="180"
Text="{Binding Text}"
TextWrapping="Wrap"
VerticalAlignment="Center" />
</Grid> </Grid>
</Grid> </controls:Card>
</controls:Card> </DataTemplate>
</DataTemplate> </ItemsRepeater.ItemTemplate>
</ItemsRepeater.ItemTemplate> </ItemsRepeater>
</ItemsRepeater>
</ScrollViewer> </ScrollViewer>
<!-- Teaching Tip --> <!-- Teaching Tip -->
<ui:TeachingTip Grid.Row="0" Name="TeachingTip1" <ui:TeachingTip Grid.Row="0" Name="TeachingTip1"
Target="{Binding #AddPackagesButton}" Target="{Binding #AddPackagesButton}"
Title="{x:Static lang:Resources.TeachingTip_AddPackageToGetStarted}" Title="{x:Static lang:Resources.TeachingTip_AddPackageToGetStarted}"
PreferredPlacement="Top" PreferredPlacement="Top"
IsOpen="{Binding !Packages.Count}"/> IsOpen="{Binding !Packages.Count}" />
<!-- Add Packages Button --> <!-- Add Packages Button -->
<Button Grid.Row="2" <Button Grid.Row="2"
Classes="transparent" Classes="transparent"

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

@ -340,7 +340,7 @@ public class ComfyUI : BaseGitPackage
{ {
return sharedFolderMethod switch return sharedFolderMethod switch
{ {
SharedFolderMethod.Configuration => Task.CompletedTask, SharedFolderMethod.Configuration => RemoveConfigSection(installDirectory),
SharedFolderMethod.None => Task.CompletedTask, SharedFolderMethod.None => Task.CompletedTask,
SharedFolderMethod.Symlink SharedFolderMethod.Symlink
=> base.RemoveModelFolderLinks(installDirectory, sharedFolderMethod), => base.RemoveModelFolderLinks(installDirectory, sharedFolderMethod),
@ -348,6 +348,42 @@ public class ComfyUI : BaseGitPackage
}; };
} }
private Task RemoveConfigSection(string installDirectory)
{
var extraPathsYamlPath = Path.Combine(installDirectory, "extra_model_paths.yaml");
var exists = File.Exists(extraPathsYamlPath);
if (!exists)
{
return Task.CompletedTask;
}
var yaml = File.ReadAllText(extraPathsYamlPath);
using var sr = new StringReader(yaml);
var yamlStream = new YamlStream();
yamlStream.Load(sr);
if (!yamlStream.Documents.Any())
{
return Task.CompletedTask;
}
var root = yamlStream.Documents[0].RootNode;
if (root is not YamlMappingNode mappingNode)
{
return Task.CompletedTask;
}
mappingNode.Children.Remove("stability_matrix");
var serializer = new SerializerBuilder()
.WithNamingConvention(UnderscoredNamingConvention.Instance)
.Build();
var yamlData = serializer.Serialize(mappingNode);
File.WriteAllText(extraPathsYamlPath, yamlData);
return Task.CompletedTask;
}
private async Task InstallRocmTorch( private async Task InstallRocmTorch(
PyVenvRunner venvRunner, PyVenvRunner venvRunner,
IProgress<ProgressReport>? progress = null, IProgress<ProgressReport>? progress = null,

55
StabilityMatrix.Core/Models/Packages/VladAutomatic.cs

@ -444,6 +444,61 @@ public class VladAutomatic : BaseGitPackage
SharedFolderMethod.Symlink SharedFolderMethod.Symlink
=> base.RemoveModelFolderLinks(installDirectory, sharedFolderMethod), => base.RemoveModelFolderLinks(installDirectory, sharedFolderMethod),
SharedFolderMethod.None => Task.CompletedTask, SharedFolderMethod.None => Task.CompletedTask,
SharedFolderMethod.Configuration => RemoveConfigSettings(installDirectory),
_ => Task.CompletedTask _ => Task.CompletedTask
}; };
private Task RemoveConfigSettings(string installDirectory)
{
var configJsonPath = Path.Combine(installDirectory, "config.json");
var exists = File.Exists(configJsonPath);
JsonObject? configRoot;
if (exists)
{
var configJson = File.ReadAllText(configJsonPath);
try
{
configRoot = JsonSerializer.Deserialize<JsonObject>(configJson);
if (configRoot == null)
{
return Task.CompletedTask;
}
}
catch (JsonException e)
{
Logger.Error(e, "Error removing Vlad shared model config");
return Task.CompletedTask;
}
}
else
{
return Task.CompletedTask;
}
configRoot.Remove("ckpt_dir");
configRoot.Remove("diffusers_dir");
configRoot.Remove("vae_dir");
configRoot.Remove("lora_dir");
configRoot.Remove("lyco_dir");
configRoot.Remove("embeddings_dir");
configRoot.Remove("hypernetwork_dir");
configRoot.Remove("codeformer_models_path");
configRoot.Remove("gfpgan_models_path");
configRoot.Remove("bsrgan_models_path");
configRoot.Remove("esrgan_models_path");
configRoot.Remove("realesrgan_models_path");
configRoot.Remove("scunet_models_path");
configRoot.Remove("swinir_models_path");
configRoot.Remove("ldsr_models_path");
configRoot.Remove("clip_models_path");
configRoot.Remove("control_net_models_path");
var configJsonStr = JsonSerializer.Serialize(
configRoot,
new JsonSerializerOptions { WriteIndented = true }
);
File.WriteAllText(configJsonPath, configJsonStr);
return Task.CompletedTask;
}
} }

Loading…
Cancel
Save