How the Multi-Platform Installer Handles Different OS Package Managers in Claude-Video
The multi-platform installer automatically resolves dependencies on macOS via Homebrew while providing manual installation hints for apt/dnf on Linux and winget on Windows, ensuring cross-platform compatibility without requiring elevated privileges.
The claude-video repository provides a /watch skill that requires ffmpeg, ffprobe, and yt-dlp binaries to function across different operating systems. The multi-platform installer located at skills/watch/scripts/setup.py detects the host environment and adapts its installation strategy to leverage native package managers. This approach maintains security by avoiding sudo requirements and ensures idempotency across repeated runs.
OS Detection and Binary Verification
The installer begins by identifying the operating system via platform.system() and scanning for required binaries through the _check_binaries() function.
Platform Identification
The script imports the standard library platform module to determine the host OS at runtime:
import platform
system = platform.system() # Returns 'Darwin', 'Linux', or 'Windows'
Missing Binary Detection
The _check_binaries() function (lines 66-68 in setup.py) returns a list of any missing dependencies from the set of ffmpeg, ffprobe, and yt-dlp. If all binaries are present on PATH, the script exits silently with status code 0.
macOS Homebrew Automation
On Darwin systems, the installer attempts automatic installation using Homebrew. The script first verifies that brew exists on the system; if absent, it displays a friendly error directing users to install Homebrew first.
When Homebrew is available, the script builds a deduplicated package list using the _brew_pkg() helper (lines 165-188) and executes the installation command:
brew install ffmpeg yt-dlp
This automation runs without user intervention during the standard python3 setup.py execution.
Linux Package Manager Hints
For Linux hosts, the installer does not perform automatic installation. Instead, it prints specific install hints covering the most common distribution package managers:
- Debian/Ubuntu:
sudo apt install ffmpeg - Fedora:
sudo dnf install ffmpeg - yt-dlp: Install via
pipxorpip --userto avoid system-wide changes
These recommendations appear in the console output (lines 96-104) when the script detects missing binaries on Linux platforms.
Windows Winget Instructions
On Windows, the installer similarly avoids automatic installation and instead displays winget commands for the user to execute manually:
winget install ffmpeg
winget install yt-dlp
If winget is unavailable, the script suggests using pip as a fallback for installing yt-dlp (lines 106-114).
Unsupported Platforms
If platform.system() returns anything other than Darwin, Linux, or Windows, the installer aborts with a generic manual-install message (lines 122-126), requiring the user to install dependencies manually without specific hints.
Configuration Persistence and Idempotency
The installer guarantees idempotency—re-running the script never overwrites existing API keys or configuration files. After successful completion or manual dependency resolution, the script writes SETUP_COMPLETE=true to ~/.config/watch/.env (lines 42-48) to silence future setup prompts.
The design explicitly avoids sudo or elevated privileges; users must run the suggested commands themselves on Linux and Windows, while macOS installations proceed through the user's existing Homebrew configuration without privilege escalation.
Command-Line Usage Examples
The installer supports several modes via command-line flags:
Silent Pre-flight Check
python3 setup.py --check
Returns exit code 0 if ready, or prints a single actionable line identifying missing binaries.
Machine-Readable Status
python3 setup.py --json
Outputs JSON describing missing binaries, API-key status, and detected platform:
{
"status": "needs_install",
"missing_binaries": ["ffmpeg"],
"platform": "Linux"
}
Full Installation Mode
python3 setup.py
Runs the complete workflow: automatic installation on macOS, hint display on Linux/Windows, and environment scaffolding.
Summary
- The multi-platform installer in
skills/watch/scripts/setup.pyusesplatform.system()to detect macOS, Linux, or Windows. - macOS: Automatically installs missing dependencies via Homebrew using the
_brew_pkg()helper. - Linux: Displays manual installation hints for
aptanddnfpackage managers without auto-installation. - Windows: Shows
wingetcommands for manual execution withpipfallback options. - The script maintains idempotency and writes
SETUP_COMPLETE=trueto~/.config/watch/.envto track completion status. - No
sudoor elevated privileges are required by the script itself.
Frequently Asked Questions
Does the multi-platform installer automatically install dependencies on all operating systems?
No. According to the claude-video source code, automatic installation only occurs on macOS via Homebrew. Linux and Windows implementations print manual installation commands for apt/dnf and winget respectively, requiring the user to execute them with appropriate privileges.
Where does the installer store configuration status?
The script writes SETUP_COMPLETE=true to ~/.config/watch/.env after successful initialization or dependency resolution. This persistent configuration prevents the /watch skill from prompting for setup on subsequent runs.
What happens if I run the installer multiple times?
The installer is designed to be idempotent. Re-running python3 setup.py will not overwrite existing API keys or configuration files. It will re-check for binaries via _check_binaries() and only display installation hints for components still missing from the system PATH.
Which binaries does the multi-platform installer check for?
The installer verifies the presence of three specific binaries: ffmpeg, ffprobe, and yt-dlp. These are checked through the _check_binaries() function in skills/watch/scripts/setup.py, and the script adapts its package manager recommendations based on which binaries are missing and the detected operating system.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →