namespace AmiReel.Models; public enum EncoderMode { Auto, NvidiaNvenc, CpuX264 } /// /// One render job's parameters. Uses named init properties rather than a positional /// constructor: TrimStart/FadeSeconds/EndCardHoldSeconds are three consecutive /// members (and Width/Height/FramesPerSecond/ThumbnailWidth/ /// ThumbnailHeight five consecutive members), so a positional /// record would let arguments be silently transposed at a call site without the /// compiler catching it. /// public sealed record RenderSettings { public required IReadOnlyList InputFiles { get; init; } public required string EndCardPath { get; init; } public required string OutputDirectory { get; init; } public required string OutputName { get; init; } public required string FfmpegPath { get; init; } public required string FfprobePath { get; init; } public required EncoderMode Encoder { get; init; } public required double TrimStart { get; init; } public required double FadeSeconds { get; init; } public required double EndCardHoldSeconds { get; init; } public required int ThumbnailInterval { get; init; } public bool MoveSourcesToOriginals { get; init; } = true; public int Width { get; init; } = 3840; public int Height { get; init; } = 2160; public int FramesPerSecond { get; init; } = 50; public int ThumbnailWidth { get; init; } = 1280; public int ThumbnailHeight { get; init; } = 720; } public sealed record RenderProgress(double Percent, string Stage, string Message);