Videos is a free, open-source, native SwiftUI utility for downloading permitted video as MP4 or audio as MP3 from URLs supported by yt-dlp.
Only download content you have permission to save. You are responsible for complying with the source website's terms and applicable copyright laws.
Videos does not bypass DRM, authentication, paywalls, or access controls.
- Native SwiftUI interface for macOS 26 and later
- URL paste, clipboard suggestion, validation, and drag-and-drop
- Asynchronous metadata, thumbnails, creator, duration, and available quality
- MP4 output with compatible H.264/AAC preference and safe fallbacks
- MP3 output at Best, 320, 256, 192, or 128 kbps
- Structured real-time progress, speed, size, ETA, and processing stages
- Serial queue, retry, cancellation, temporary-file cleanup, and friendly errors
- Keep Both, Replace, and Cancel filename-collision handling
- Local download history and Finder integration
- Destination bookmarks, notifications, and Dock progress
- Liquid Glass styling, light/dark appearance, reduced motion, and accessibility
- Built-in third-party license viewer and manual update checks
- No accounts, telemetry, advertising, or feature locks
The current macOS installer is published on GitHub Releases.
Release builds bundle yt-dlp, FFmpeg, LAME, and Deno. Users do not need
Homebrew, Terminal, PATH configuration, or manual dependency selection.
The current distribution is ad-hoc signed rather than notarized. On first launch, macOS may require Control-clicking Videos in Finder and choosing Open.
Requirements:
- macOS 26 or newer
- Xcode 26 or newer with the macOS 26 SDK
Clone the repository, then fetch and verify the pinned media tools:
./Scripts/update-media-tools.shOpen VideosForMac.xcodeproj, select the VideosForMac scheme and My Mac,
then press ⌘R.
Command-line build:
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
xcodebuild \
-project VideosForMac.xcodeproj \
-scheme VideosForMac \
-destination 'platform=macOS' \
build| Component | Pinned version | Purpose |
|---|---|---|
| yt-dlp | nightly 2026.07.21.234255 | Metadata extraction and downloading |
| FFmpeg | 8.1.2 | Stream merging, MP4 conversion, MP3 extraction |
| LAME | 3.100 | MP3 encoding through a dynamically linked LGPL library |
| Deno | 2.8.1 | JavaScript runtime used by current yt-dlp extractors |
Pinned URLs and SHA-256 values are stored in
Vendor/MediaTools/manifest.json. Scripts/update-media-tools.sh downloads
each architecture over HTTPS, verifies its source checksum, creates universal
arm64 + x86_64 artifacts, and verifies the resulting bundled checksums.
Xcode copies the tools into Videos.app/Contents/MacOS/Tools. The app resolves
only those bundled paths during normal use and passes arguments directly to
Process; it never invokes /bin/sh -c. yt-dlp receives
--no-remote-components, Deno runs without external permissions, and every
source URL follows an option separator.
See Dependency integration and Distribution.
Videos uses a small MVVM-oriented architecture:
- SwiftUI views render observable state and forward user intent.
AppViewModelcoordinates URL analysis and presentation state.DownloadManagerowns a serial queue with one active item.YTDLPServiceperforms metadata and media operations.ProcessRunnersafely launches and cancels child processes.- Codable stores persist preferences and essential history locally.
Media is created inside a unique temporary directory and moved to the selected destination only after processing succeeds. Failed or cancelled temporary work is cleaned up. Deleting a history entry never deletes the downloaded file.
See Architecture.
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
xcodebuild test \
-project VideosForMac.xcodeproj \
-scheme VideosForMac \
-destination 'platform=macOS'The deterministic suite covers URL validation, format/quality mapping, filenames, arguments, structured progress, dependency resolution, history, queueing, retry paths, process output, and cancellation. Normal tests do not contact media websites and do not execute the bundled media tools.
See Testing and QA.
Videos has no account system, analytics, telemetry, advertising, or app-owned backend. Preferences and download history stay on the Mac. A source URL is sent only to the selected source website and its normal media/CDN endpoints so yt-dlp can analyse or download it. Videos does not transmit download URLs, titles, history, or destination paths to the project website.
The website contains no analytics. Optional donations are handled outside the app and do not unlock features or change the MIT license.
The Videos source code is licensed under the MIT License. Bundled tools keep their own licenses and notices; those terms are not replaced by the MIT license.
Release compliance materials:
- Technical audit
- Third-party notices
- Corresponding-source record
- Machine-readable SBOM
ThirdPartyLicenses/SourceCompliance/
Before a release:
./Scripts/generate-sbom.py --enrich-licenses --query-osv
./Scripts/collect-deno-licenses.py
./Scripts/audit-release.sh --strict --distribution=adhoc \
--app=/absolute/path/to/Videos.appScripts/build-release.sh creates an ad-hoc signed app, DMG, and matching
source-compliance archive.
Issues and pull requests are welcome. Read CONTRIBUTING.md before submitting changes, especially changes to bundled dependencies or process execution.
Videos is free. If you want to support development, optional donation links are available on videosformac.lat. The PayPal and cryptocurrency destinations remain placeholders until the project owner publishes the final details.
Copyright © 2026 Hecbert.
Videos is released under the MIT License.