namespace AmiReel.Models;
/// Visual style applied to a YouTube Short. Mirrors the --style values of amigadb-short-fx-v4.sh.
public enum ShortStyle
{
Brand,
Pixel,
Mirror,
Crop,
Workbench,
Blur,
Crt,
Copper,
Stars,
Grid,
Tiles,
Scan,
Starfield,
Plasma,
Rasterbars,
Vhs,
Monitor,
Split,
Spectrum,
Video,
}
/// How the video style crops the Amiga source before overlaying it.
public enum ShortSourceCropMode
{
Auto,
Center,
}
/// Which moment of the Short a preview still represents.
public enum ShortPreviewShot
{
Opening,
Closing,
}
/// PNG stills of the opening hook and closing title card.
public sealed record ShortPreviewFrames(string OpeningPath, string ClosingPath);
/// One YouTube Shorts render job's parameters (port of amigadb-short-fx-v4.sh).
public sealed record ShortSettings
{
public required string InputFile { get; init; }
public required string OutputPath { get; init; }
public required string Title { get; init; }
public string Group { get; init; } = "";
public string Year { get; init; } = "";
public string Type { get; init; } = "";
public required string Hook { get; init; }
public required string Website { get; init; }
public required string Start { get; init; }
public required double DurationSeconds { get; init; }
public required ShortStyle Style { get; init; }
public string BackgroundImage { get; init; } = "";
public string BackgroundVideo { get; init; } = "";
public double VideoBlur { get; init; }
public double VideoOpacity { get; init; } = 1.0;
public ShortSourceCropMode SourceCropMode { get; init; } = ShortSourceCropMode.Auto;
public int CropLeft { get; init; }
public int CropRight { get; init; }
public int CropTop { get; init; }
public int CropBottom { get; init; }
public int SourceMarginX { get; init; } = 40;
public double SourceFadeInSeconds { get; init; } = 1.5;
public required string FontFile { get; init; }
public required string FfmpegPath { get; init; }
public required string FfprobePath { get; init; }
public int Crf { get; init; } = 16;
public string Preset { get; init; } = "slow";
}