VideoLibrary

Download video once. Watch it anywhere, offline.

VideoLibrary is a native SwiftUI app built on yt-dlp. Paste a link from YouTube, Nebula or 1,000+ other sites; it saves an MP4 to a folder you choose and plays it with word-timed captions.

Free, MIT licensed. Apple silicon, macOS 26 or later. 2.6 MB.

The VideoLibrary window: a sidebar of libraries and uploaders next to a grid of downloaded videos with resolution and length badges.
1,000+
Sites supported through yt-dlp
480p–4K
Resolution you choose per download
AES-GCM
Encryption for saved sign-ins
0
Accounts, servers or analytics

Everything yt-dlp can do, without the terminal.

Downloads, libraries and playback live in one app that stores its index next to your videos, so a library on an external drive works on any Mac you plug it into.

Any site yt-dlp supports

YouTube, Nebula, Vimeo and more. The title appears as soon as yt-dlp picks formats, before captions and thumbnails finish.

Readable errors with a fix

Failures map to a plain explanation and one action: sign in, update yt-dlp or retry. Raw output stays out of the way.

HD by default

Downloads run signed out first, avoiding YouTube's 360p-only response for some accounts. 360p files get a Re-download in HD action that keeps watch progress.

Libraries on any drive

Each library is a folder with its own index. Disconnected drives stay listed and reappear when mounted; videos move between libraries in one step.

Import local files

Add recordings and clips you already have. The file name becomes the title and an early frame the thumbnail. Copy into the library or link in place.

Tools stay current

yt-dlp, ffmpeg and Deno are your Homebrew installs, not bundled copies. Settings shows their versions and updates them in place.

Player

The video fills the window. Controls appear only while you move the pointer.

An AVFoundation player with its own transport bar. Captions sit above the controls, so the two never overlap.

  • Fit window to video, then restore the previous size on exit
  • Picture in Picture and an in-app miniplayer while browsing
  • Frame stepping with , and . at the track's frame rate
  • 0.5× to 2× speed, 5 s and 10 s skips
  • Resume from the last position, per video
The player: a video filling the window with a title bar, a caption and the transport bar at the bottom.
Captions

Auto-captions shown word by word, two stable lines at a time.

YouTube's automatic captions repeat each line as they roll. VideoLibrary reads the per-word timestamps and reveals words as they are spoken, without resizing the caption box.

  • Background: one box, a box per line, outline or none
  • Type: size, font, weight, color and opacity
  • Timing: held through pauses of up to 1.5 s, so the box doesn't flicker
  • Presets with a live preview in Settings
Settings, Captions tab: a live caption preview above the YouTube, Classic, Large & Clear and Minimal presets.
Suggestions

Your YouTube Subscriptions or Home feed, one click from your library.

The feed is read through yt-dlp with your own sign-in, so no Google Cloud project is needed. The YouTube Data API is available as an optional fallback.

  • Search YouTube from the toolbar
  • Hide Shorts and clips under a length you set
  • Size estimate for your chosen resolution before downloading
Suggestions: a grid of videos from the YouTube feed with download buttons.
Music

An optional music player for folders of audio files.

Off by default. Turn it on per library or once for the whole app. Tags and cover art are read with AVFoundation; files are never moved or modified.

  • Songs, Albums, Artists, Playlists; each folder is also a playlist
  • Liked Songs, Recently Played and Most Played
  • Play Next, Add to Queue and a reorderable Up Next
  • Media keys and Control Center; the queue is restored on relaunch
A Music folder playlist: cover art, Play and Shuffle, a song table with likes, artist, album and play counts, and the player bar at the bottom.

Sign-ins are encrypted. Nothing leaves your network.

VideoLibrary only connects to the sites you download from. There is no account, telemetry or update server.

Credential storage

Cookies and tokens are sealed with AES-GCM using a key held in the macOS Keychain. yt-dlp gets a decrypted cookie file in a private temporary folder for each run, removed when the run ends. Plaintext left by earlier versions is migrated on launch, and the debug log redacts tokens before writing.

  • Import a sign-in from Safari, Chrome, Arc, Dia, Brave, Edge, Firefox and others, per profile
  • YouTube and Nebula are stored separately; importing one never replaces the other

Wi-Fi sharing

Optional. Serves your library to a browser on the same network, with captions as WebVTT. Open it on your phone by scanning a QR code.

  • Random 12-character access token, compared in constant time
  • An address is locked out after 20 wrong attempts
  • The OAuth callback server listens on loopback only

Keyboard shortcuts

The player uses the same keys as most video sites.

Play or pause SpaceK
Back or forward 5 seconds ←→
Back or forward 10 seconds JL
Previous or next frame ,.
Volume ↑↓
Mute M
Captions on or off C
Full screen F
Picture in Picture I
Leave full screen or the player Esc

Install

Requires macOS 26 or later on Apple silicon, and Homebrew for the download tools.

  1. Download

    Get VideoLibrary.zip, unzip it and move the app to Applications.

  2. Allow it to open

    The app is not notarized. On first launch, open System Settings › Privacy & Security and choose Open Anyway.

  3. Install the tools

    Use Settings › Tools, or run:

    brew install yt-dlp ffmpeg deno
  4. Add a video

    Click + and paste a link, or pick one from Suggestions.

VideoLibrary 26.10.1

Source, release notes and build history are on GitHub.