Skip to content

Remove Bare distribution; auto-download FFmpeg at run time - #800

Merged
Tyrrrz merged 14 commits into
primefrom
copilot/remove-bare-distribution-download-ffmpeg
Apr 1, 2026
Merged

Tyrrrz merged 14 commits into
primefrom
copilot/remove-bare-distribution-download-ffmpeg

Conversation

Copilot AI commented Apr 1, 2026 •

Copy link
Copy Markdown
Contributor

Eliminates the *.Bare distribution by having the app auto-download FFmpeg at startup if not detected, using the dashboard's existing progress bar for visual feedback. The dialog ViewModel/View renames are not included.

Changes

Remove *.Bare distribution

  • CI pack and deploy jobs no longer have a bundle-ffmpeg matrix dimension — all builds publish without bundled FFmpeg

Remove build-time FFmpeg download

  • Removed the DownloadFFmpeg MSBuild target, DownloadFFmpeg property, ffmpeg bundle <None> item groups, and the DownloadFFmpeg.csx script entirely — FFmpeg is no longer downloaded at build time for development or CI builds

Runtime FFmpeg auto-download

  • FFmpeg.DownloadAsync(outputFilePath, progress?, ct?) added to Core — downloads FFmpeg v8.1.0 from Tyrrrz/FFmpegBin GitHub releases using the shared Http.Client; streaming HTTP progress written to a temp archive in Path.GetTempPath(); sets executable bit (UserExecute) on Unix
  • URL construction uses RuntimeInformation.ProcessArchitecture (via GetSystemMoniker()/GetArchitectureMoniker() helpers) for correct platform detection including Rosetta 2 on macOS
  • DashboardViewModel gains an InitializeCommand (triggered from DashboardView.UserControl_OnLoaded) that runs EnsureFFmpegAsync():
    • If a custom FFmpeg path is configured, it is trusted as-is with no further validation
    • If FFmpeg is not found via auto-detection, a user prompt is shown asking whether to download it
    • If confirmed, the download runs using the dashboard's existing IsBusy state and _progressMuxer progress bar, with a snackbar notification (FFmpegDownloadingTitle)
    • If the download fails, an error dialog is shown
  • MainViewModel.InitializeAsync() no longer calls into the dashboard for FFmpeg; the dashboard initializes itself on load

Update service

  • UpdateService now always resolves YoutubeDownloader.{RuntimeIdentifier}.zip — removed the FFmpeg.IsBundled() conditional that previously selected a Bare-suffixed asset
  • Removed FFmpeg.IsBundled() from Core as it is no longer needed

Localization

  • FFmpegMissingMessage updated to a concise auto-download prompt (removes Bare distribution references)
  • Added FFmpegDownloadingTitle in English, French, German, Spanish, and Ukrainian (used as a snackbar notification during download)
  • Removed FFmpegMissingSearchedLabel (searched paths are no longer listed to the user)
  • Removed FFmpegPathMissingMessage and SettingsButton (no longer needed since custom paths are trusted without checks)

Copilot AI and others added 2 commits April 1, 2026 18:15
… auto-download FFmpeg, remove Bare distribution

Agent-Logs-Url: https://github.com/Tyrrrz/YoutubeDownloader/sessions/56ac88b4-7d60-4d66-87c5-fbbfdacfb0b9

Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com>
Comment thread .github/workflows/main.yml Outdated
Comment thread YoutubeDownloader.Core/Downloading/FFmpeg.cs Outdated
Comment thread YoutubeDownloader.Core/Downloading/FFmpeg.cs
…t, and related references

Agent-Logs-Url: https://github.com/Tyrrrz/YoutubeDownloader/sessions/47fed8dd-c5b8-4786-a3f5-6d1ab4a9105a

Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com>

Copilot AI commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • av-build-tel-api-v1.avaloniaui.net
    • Triggering command: /usr/share/dotnet/dotnet dotnet exec --runtimeconfig /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/runtimeconfig.json /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/Avalonia.BuildServices.Collector.dll (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Comment thread YoutubeDownloader/ViewModels/MainViewModel.cs Outdated
@Tyrrrz

Tyrrrz commented Apr 1, 2026

Copy link
Copy Markdown
Owner

@copilot actually, we can probably move the FFmpeg downloading stuff to the dashbaord and use its progress bar to display progress, no need for an extra dialog. Let's do that and revert all the dialog-related renamings.

…sArchitecture, and bump version to 8.1.0

Agent-Logs-Url: https://github.com/Tyrrrz/YoutubeDownloader/sessions/15c889b0-48a7-4d1d-9485-e15cf802988e

Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com>

Copilot AI commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • av-build-tel-api-v1.avaloniaui.net
    • Triggering command: /usr/share/dotnet/dotnet dotnet exec --runtimeconfig /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/runtimeconfig.json /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/Avalonia.BuildServices.Collector.dll (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI commented Apr 1, 2026 •

Copy link
Copy Markdown
Contributor Author

@copilot actually, we can probably move the FFmpeg downloading stuff to the dashbaord and use its progress bar to display progress, no need for an extra dialog. Let's do that and revert all the dialog...

Done in 37ad795. All dialog-related renames have been reverted (the Dialog suffix is gone from all five dialog VMs and Views, and ProgressDialogViewModel/ProgressDialogView are removed). FFmpeg downloading now lives in DashboardViewModel.EnsureFFmpegAsync(), which sets IsBusy = true and feeds progress through the dashboard's existing _progressMuxer so the progress bar in the UI tracks the download. MainViewModel.InitializeAsync() simply delegates to Dashboard.EnsureFFmpegAsync().

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • av-build-tel-api-v1.avaloniaui.net
    • Triggering command: /usr/share/dotnet/dotnet dotnet exec --runtimeconfig /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/runtimeconfig.json /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/Avalonia.BuildServices.Collector.dll (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title Remove Bare distribution; auto-download FFmpeg at runtime; rename dialog VMs/Views with Dialog suffix Remove Bare distribution; auto-download FFmpeg at runtime via dashboard progress bar Apr 1, 2026

@Tyrrrz Tyrrrz left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread YoutubeDownloader.Core/Downloading/FFmpeg.cs Outdated
Comment thread YoutubeDownloader/ViewModels/Components/DashboardViewModel.cs Outdated
Comment thread YoutubeDownloader/ViewModels/Components/DashboardViewModel.cs Outdated
Comment thread YoutubeDownloader/ViewModels/Components/DashboardViewModel.cs Outdated
Comment thread YoutubeDownloader/ViewModels/MainViewModel.cs Outdated
…izeCommand on dashboard

Agent-Logs-Url: https://github.com/Tyrrrz/YoutubeDownloader/sessions/066c2f76-008c-4774-9d9e-bbb017026d32

Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com>

Copilot AI commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • av-build-tel-api-v1.avaloniaui.net
    • Triggering command: /usr/share/dotnet/dotnet dotnet exec --runtimeconfig /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/runtimeconfig.json /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/Avalonia.BuildServices.Collector.dll (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR removes the “Bare” (non-bundled FFmpeg) distribution and shifts FFmpeg acquisition from build-time bundling to a runtime auto-download flow that’s surfaced through the dashboard’s existing busy/progress UI.

Changes:

  • Removed build-time FFmpeg download/copy logic from the app project and CI pipeline.
  • Added a runtime FFmpeg.DownloadAsync(...) helper in Core and a dashboard initialization command that prompts and downloads when FFmpeg is missing.
  • Updated localizations to remove Bare-related messaging and add a “Downloading FFmpeg…” snackbar title.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
YoutubeDownloader/YoutubeDownloader.csproj Removes build-time FFmpeg download target and output-copy items.
YoutubeDownloader/Views/Components/DashboardView.axaml.cs Triggers dashboard initialization on load (to drive FFmpeg ensure/download).
YoutubeDownloader/ViewModels/MainViewModel.cs Removes startup FFmpeg-missing handling from the main initialization path.
YoutubeDownloader/ViewModels/Components/DashboardViewModel.cs Adds InitializeCommand and runtime FFmpeg ensure/download with UI feedback.
YoutubeDownloader.Core/Downloading/FFmpeg.cs Adds runtime download + platform/arch URL selection and Unix executable bit setting.
YoutubeDownloader/Localization/LocalizationManager.cs Adds FFmpegDownloadingTitle and removes searched-path label accessor.
YoutubeDownloader/Localization/LocalizationManager.English.cs Updates FFmpeg-missing prompt and adds downloading title.
YoutubeDownloader/Localization/LocalizationManager.French.cs Updates FFmpeg-missing prompt and adds downloading title.
YoutubeDownloader/Localization/LocalizationManager.German.cs Updates FFmpeg-missing prompt and adds downloading title.
YoutubeDownloader/Localization/LocalizationManager.Spanish.cs Updates FFmpeg-missing prompt and adds downloading title.
YoutubeDownloader/Localization/LocalizationManager.Ukrainian.cs Updates FFmpeg-missing prompt and adds downloading title.
YoutubeDownloader/DownloadFFmpeg.csx Removes the build-time FFmpeg download script entirely.
.github/workflows/main.yml Removes Bare/bundled matrix dimension and standardizes artifacts to YoutubeDownloader.<rid>.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread YoutubeDownloader.Core/Downloading/FFmpeg.cs
Comment thread YoutubeDownloader/ViewModels/Components/DashboardViewModel.cs Outdated
Comment thread .github/workflows/main.yml
Comment thread YoutubeDownloader/ViewModels/Components/DashboardViewModel.cs Outdated
@Tyrrrz

Tyrrrz commented Apr 1, 2026

Copy link
Copy Markdown
Owner

@copilot fix the update service too

…p unused localization strings

Agent-Logs-Url: https://github.com/Tyrrrz/YoutubeDownloader/sessions/236958f5-6d0f-4ece-88ca-4884f756785b

Co-authored-by: Tyrrrz <1935960+Tyrrrz@users.noreply.github.com>

Copilot AI commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • av-build-tel-api-v1.avaloniaui.net
    • Triggering command: /usr/share/dotnet/dotnet dotnet exec --runtimeconfig /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/runtimeconfig.json /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/Avalonia.BuildServices.Collector.dll (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI commented Apr 1, 2026 •

Copy link
Copy Markdown
Contributor Author

@copilot fix the update service too

Done in 44626e7 — UpdateService now always resolves YoutubeDownloader.{RuntimeIdentifier}.zip (removed the FFmpeg.IsBundled() conditional and the Bare fallback). Also removed the now-unused FFmpeg.IsBundled() method from FFmpeg.cs.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • av-build-tel-api-v1.avaloniaui.net
    • Triggering command: /usr/share/dotnet/dotnet dotnet exec --runtimeconfig /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/runtimeconfig.json /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/Avalonia.BuildServices.Collector.dll (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@Tyrrrz

Tyrrrz commented Apr 1, 2026

Copy link
Copy Markdown
Owner

@copilot fix formatting please

@Tyrrrz

Tyrrrz commented Apr 1, 2026

Copy link
Copy Markdown
Owner

@copilot update the readme to remove mentions of the *.Bare distribution

Copilot AI commented Apr 1, 2026 •

Copy link
Copy Markdown
Contributor Author

@copilot fix formatting please

Fixed in 6e1c2f1 — removed trailing spaces after the semicolon on InitializeAsync in DashboardViewModel.cs.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • av-build-tel-api-v1.avaloniaui.net
    • Triggering command: /usr/share/dotnet/dotnet dotnet exec --runtimeconfig /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/runtimeconfig.json /home/REDACTED/.nuget/packages/avalonia.buildservices/0.0.31/tools/netstandard2.0/Avalonia.BuildServices.Collector.dll (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

@copilot update the readme to remove mentions of the *.Bare distribution

Done in 68cb6d7 — replaced the bundled-FFmpeg / Bare-builds note with a description of the new runtime auto-download behavior and the custom path option in settings.

Removed note about FFmpeg requirements and custom installation.
@Tyrrrz Tyrrrz changed the title Remove Bare distribution; auto-download FFmpeg at runtime via dashboard progress bar Remove Bare distribution; auto-download FFmpeg at run time Apr 1, 2026
@Tyrrrz
Tyrrrz merged commit 0cef1c6 into prime Apr 1, 2026
11 checks passed
@Tyrrrz
Tyrrrz deleted the copilot/remove-bare-distribution-download-ffmpeg branch April 1, 2026 20:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants