feat: bundle yt-dlp and ffmpeg as sidecars

The app is now self-contained: yt-dlp, ffmpeg and ffprobe ship inside
the bundle and are resolved beside the executable, so a fresh Mac needs
nothing installed. A system copy still wins when present, which is how
to run a newer yt-dlp than the bundled one. yt-dlp is pointed at the
bundled ffmpeg explicitly, since a bundled app has no reason to have one
on PATH.

The binaries stay out of git (~140MB); scripts/fetch-binaries.sh pulls
them. Homebrew's ffmpeg cannot be used — it links a dozen dylibs and
does not relocate — so the static arm64 build is used instead.

Version checks moved to the async Command. yt-dlp is a PyInstaller
bundle that unpacks ~37MB on first run, and the blocking call was
stalling a runtime worker for roughly twenty seconds.

Bundle size goes from 19MB to 153MB.
This commit is contained in:
vincent
2026-08-29 11:41:14 +02:00
parent 9bb7b71225
commit 3296b5436a
6 changed files with 114 additions and 18 deletions
+35
View File
@@ -0,0 +1,35 @@
#!/usr/bin/env bash
# Fetches the helper binaries FlightTube ships as Tauri sidecars.
#
# They are not in git — together they are about 140MB. Run this once before
# building, or after changing the target architecture.
set -euo pipefail
TRIPLE="${1:-aarch64-apple-darwin}"
DEST="$(cd "$(dirname "$0")/.." && pwd)/src-tauri/binaries"
TMP="$(mktemp -d)"
trap 'rm -rf "$TMP"' EXIT
mkdir -p "$DEST"
echo "Fetching yt-dlp (official GitHub release)…"
curl -fsSL -o "$TMP/yt-dlp" \
https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos
# Static arm64 builds; Homebrew's ffmpeg links a dozen dylibs and cannot be
# relocated into an app bundle.
for tool in ffmpeg ffprobe; do
echo "Fetching $tool (static, osxexperts.net)…"
curl -fsSL -A "Mozilla/5.0" -o "$TMP/$tool.zip" "https://www.osxexperts.net/${tool}9arm.zip"
unzip -o -q "$TMP/$tool.zip" -d "$TMP"
done
for tool in yt-dlp ffmpeg ffprobe; do
install -m 0755 "$TMP/$tool" "$DEST/$tool-$TRIPLE"
echo " -> $DEST/$tool-$TRIPLE"
done
echo "Done. Verifying they run:"
for tool in yt-dlp ffmpeg ffprobe; do
"$DEST/$tool-$TRIPLE" -version 2>/dev/null | head -1 || \
"$DEST/$tool-$TRIPLE" --version 2>/dev/null | head -1
done