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
- Run on a supported OS (Windows, Linux, or macOS).
- Add a branch for your OS mapping to a yt-dlp binary name you supply manually.
- 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
- Run SE on Windows, Linux, or macOS for yt-dlp support.
- Provide a manual yt-dlp install path for unsupported OSes.
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
- ChatLLM is not available for Linux ARM64.
- Unsupported macOS architecture.
- Unsupported macOS architecture.
- Google Lens OCR is not available for Linux ARM64.
- Google Lens OCR does not support this platform
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/15ed8e47abe68832.
Report an issue: GitHub.