You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.9 KiB
94 lines
2.9 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using CommunityToolkit.Mvvm.ComponentModel; |
|
using StabilityMatrix.Avalonia.Controls; |
|
using StabilityMatrix.Avalonia.Models; |
|
using StabilityMatrix.Avalonia.Models.Inference; |
|
using StabilityMatrix.Avalonia.ViewModels.Base; |
|
using StabilityMatrix.Core.Attributes; |
|
using StabilityMatrix.Core.Models; |
|
using StabilityMatrix.Core.Models.Api.Comfy.Nodes; |
|
|
|
namespace StabilityMatrix.Avalonia.ViewModels.Inference.Video; |
|
|
|
[View(typeof(VideoOutputSettingsCard))] |
|
[ManagedService] |
|
[Transient] |
|
public partial class VideoOutputSettingsCardViewModel |
|
: LoadableViewModelBase, |
|
IParametersLoadableState, |
|
IComfyStep |
|
{ |
|
[ObservableProperty] |
|
private double fps = 6; |
|
|
|
[ObservableProperty] |
|
private bool lossless = true; |
|
|
|
[ObservableProperty] |
|
private int quality = 85; |
|
|
|
[ObservableProperty] |
|
private VideoOutputMethod selectedMethod = VideoOutputMethod.Default; |
|
|
|
[ObservableProperty] |
|
private List<VideoOutputMethod> availableMethods = Enum.GetValues<VideoOutputMethod>().ToList(); |
|
|
|
public void LoadStateFromParameters(GenerationParameters parameters) |
|
{ |
|
Fps = parameters.OutputFps; |
|
Lossless = parameters.Lossless; |
|
Quality = parameters.VideoQuality; |
|
|
|
if (string.IsNullOrWhiteSpace(parameters.VideoOutputMethod)) |
|
return; |
|
|
|
SelectedMethod = Enum.TryParse<VideoOutputMethod>(parameters.VideoOutputMethod, true, out var method) |
|
? method |
|
: VideoOutputMethod.Default; |
|
} |
|
|
|
public GenerationParameters SaveStateToParameters(GenerationParameters parameters) |
|
{ |
|
return parameters with |
|
{ |
|
OutputFps = Fps, |
|
Lossless = Lossless, |
|
VideoQuality = Quality, |
|
VideoOutputMethod = SelectedMethod.ToString(), |
|
}; |
|
} |
|
|
|
public void ApplyStep(ModuleApplyStepEventArgs e) |
|
{ |
|
if (e.Builder.Connections.Primary is null) |
|
throw new ArgumentException("No Primary"); |
|
|
|
var image = e.Builder.Connections.Primary.Match( |
|
_ => |
|
e.Builder.GetPrimaryAsImage( |
|
e.Builder.Connections.PrimaryVAE |
|
?? e.Builder.Connections.Refiner.VAE |
|
?? e.Builder.Connections.Base.VAE |
|
?? throw new ArgumentException("No Primary, Refiner, or Base VAE") |
|
), |
|
image => image |
|
); |
|
|
|
var outputStep = e.Nodes.AddTypedNode( |
|
new ComfyNodeBuilder.SaveAnimatedWEBP |
|
{ |
|
Name = e.Nodes.GetUniqueName("SaveAnimatedWEBP"), |
|
Images = image, |
|
FilenamePrefix = "InferenceVideo", |
|
Fps = Fps, |
|
Lossless = Lossless, |
|
Quality = Quality, |
|
Method = SelectedMethod.ToString().ToLowerInvariant() |
|
} |
|
); |
|
|
|
e.Builder.Connections.OutputNodes.Add(outputStep); |
|
} |
|
}
|
|
|