Skip to content

Repository files navigation

Videos

Videos app icon

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.

Features

  • 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

Download

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.

Build from source

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.sh

Open 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

Bundled dependencies

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.

Architecture

Videos uses a small MVVM-oriented architecture:

  • SwiftUI views render observable state and forward user intent.
  • AppViewModel coordinates URL analysis and presentation state.
  • DownloadManager owns a serial queue with one active item.
  • YTDLPService performs metadata and media operations.
  • ProcessRunner safely 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.

Tests

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.

Privacy

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.

Open-source compliance

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:

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.app

Scripts/build-release.sh creates an ad-hoc signed app, DMG, and matching source-compliance archive.

Contributing

Issues and pull requests are welcome. Read CONTRIBUTING.md before submitting changes, especially changes to bundled dependencies or process execution.

Support the project

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.

License

Copyright © 2026 Hecbert.

Videos is released under the MIT License.

About

Free, open-source native macOS video and audio downloader built with SwiftUI.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages