SubtitleEdit/subtitleedit · error · PlatformNotSupportedException

Unsupported OS platform

Error message

Unsupported OS platform

What it means

Thrown by GetFullFileName in YtDlpDownloadService when the OS is neither Windows, Linux, nor macOS. The method computes the on-disk filename for the yt-dlp binary (different name per OS: yt-dlp.exe / yt-dlp_linux_aarch64 / yt-dlp_macos). On an unsupported OS it cannot pick a name, so it throws before any download attempt.

Source

Thrown at src/ui/Logic/Download/YtDlpDownloadService.cs:135

    {
        if (OperatingSystem.IsWindows())
        {
            return Path.Combine(Se.DataFolder, "yt-dlp.exe");
        }

        if (OperatingSystem.IsLinux())
        {
            return RuntimeInformation.ProcessArchitecture == Architecture.Arm64
                ? Path.Combine(Se.DataFolder, "yt-dlp_linux_aarch64")
                : Path.Combine(Se.DataFolder, "yt-dlp_linux");
        }

        if (OperatingSystem.IsMacOS())
        {
            return Path.Combine(Se.DataFolder, "yt-dlp_macos");
        }

        throw new PlatformNotSupportedException("Unsupported OS platform");
    }
    private static string GetUrl()
    {
        if (OperatingSystem.IsWindows())
        {
            return WindowsUrl;
        }

        if (OperatingSystem.IsLinux())
        {
            return RuntimeInformation.ProcessArchitecture == Architecture.Arm64 ? LinuxArmUrl : LinuxUrl;
        }

        if (OperatingSystem.IsMacOS())
        {
            return MacUrl;
        }

View on GitHub (pinned to 17a9f07487)

Solutions

  1. Run on a supported OS (Windows, Linux, or macOS).
  2. Add a branch for your OS mapping to a yt-dlp binary name you supply manually.
  3. Pre-place the yt-dlp binary yourself and skip DownloadYtDlp entirely.

Example fix

// before
if (OperatingSystem.IsMacOS()) return Path.Combine(Se.DataFolder, "yt-dlp_macos");
throw new PlatformNotSupportedException("Unsupported OS platform");

// after
if (OperatingSystem.IsMacOS()) return Path.Combine(Se.DataFolder, "yt-dlp_macos");
if (OperatingSystem.IsFreeBSD()) return Path.Combine(Se.DataFolder, "yt-dlp_freebsd");
throw new PlatformNotSupportedException($"Unsupported OS: {RuntimeInformation.OSDescription}");
Defensive patterns

Strategy: validation

Validate before calling

if (!OperatingSystem.IsWindows() && !OperatingSystem.IsLinux() && !OperatingSystem.IsMacOS())
{ /* yt-dlp filename cannot be resolved */ }

Type guard

static bool IsYtDlpPlatformSupported() =>
    OperatingSystem.IsWindows() || OperatingSystem.IsLinux() || OperatingSystem.IsMacOS();

Try / catch

try { await svc.DownloadYtDlp(progress, ct); }
catch (PlatformNotSupportedException ex) when (ex.Message.Contains("Unsupported OS"))
{ /* install yt-dlp manually for this OS */ }

Prevention

When it happens

Trigger: Calling DownloadYtDlp/DownloadVideo/DownloadSubtitlesOnlyAsync on FreeBSD, Solaris, or any OS where OperatingSystem.IsWindows/IsLinux/IsMacOS all return false.

Common situations: Running SE under .NET on BSD or a niche Unix; also triggered by a misreported OS in some container runtimes.

Related errors


AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13). Data as JSON: /api/errors/15ed8e47abe68832. Report an issue: GitHub.