Repository navigation
media downloads
Media pages are resolved and downloaded through the external tools yt-dlp, ffmpeg and
ffprobe. Around fifty sites are preconfigured — YouTube, Vimeo, Twitch, SoundCloud, TikTok,
Instagram, Facebook, X/Twitter, Reddit, ARD Mediathek, ZDF, Arte, ORF, SRF, BBC, France.tv, Rai,
RTVE, Archive.org and others — and the host list is editable under Settings → Media → Media.
The tools are not bundled with the native builds. Install them, or let rDownloader manage them: see External tools. The Docker image already contains them.
Without
ffmpegandffprobe, only formats that already carry both video and audio are offered, and a page without such a format says so before anything is queued.
Paste the page address into the LinkGrabber. The link is analysed with yt-dlp
and appears with its title, duration, uploader and thumbnail.
A playlist or channel expands into one link per video, up to 200 of them. They come from one quick listing of the playlist rather than from opening every video, so even a long playlist is read well within the probe timeout, and one video that cannot be fetched does not fail the rest. YouTube's placeholders for private and deleted videos are left out. After the online check the videos of one playlist form one package named after the playlist — or after the channel when the playlist has no title — tidied by the package-name rules, instead of a package named after the site. Channel and playlist subscriptions read them the same way.
When a check fails, the row says why — yt-dlp's own error message, or its exit code when it gave none — in the language of the interface, with yt-dlp's detail quoted in it.
Two quick choices sit on the row:
- Media variant — Best, 2160p, 1440p, 1080p, 720p, 480p.
- Switch to MP3 audio — audio only, converted to MP3. For another audio format, use Audio format in the format selector below.
For anything finer, expand the row: it opens the format selector.
Pages that name no codecs offer a quality too (dumpert.nl, arte.tv): where no quality
resolves, Best hands the choice to yt-dlp. Where there is nothing to choose at all — no
downloadable format, or video without a single audio track — the selector says This page offers
nothing to choose from and the link is refused when you queue it.
Per link, filter on:
| Criterion | Values |
|---|---|
| Container | as the page offers |
| Video codec | |
| Audio codec | |
| HDR mode | SDR, HDR10, HDR10+, HLG, Dolby Vision |
| Frame rate | |
| Bitrate | |
| Audio language |
The estimated size and the resulting format update live.
Audio format extracts the sound alone as MP3, M4A, Opus or FLAC; Keep the
video downloads the video as usual. It is offered only where ffmpeg is installed.
A combination that matches nothing is explained. The selector shows how many formats each criterion would keep on its own, which distinguishes "this page has no HDR" from "it has AV1 and HDR, but never in the same format".
A selection is either:
- preferred — criteria are dropped in a fixed order until something matches, and the relaxations are named; or
- required — the download fails with a stable error instead of quietly substituting something else.
What is stored is the selection criteria, not the site's format id, and they are resolved again at download time — so a format the site renamed meanwhile falls back to an equivalent one instead of failing.
Only a section in the format selector downloads part of a video: From and To take a
time as seconds, m:ss or h:mm:ss (90, 1:30, 1:02:03); leave From empty for the
beginning or To empty for the end. The end must come after the start. The cut lands on the
nearest keyframe, without re-encoding, so it may start a moment early. It needs ffmpeg; without
it the field is shown but disabled.
Some sites refuse a client that asks too fast. yt-dlp can wait:
- Pause between requests — seconds between the requests it makes while reading a page;
- Pause before each download — seconds before a media download starts.
Both are set globally under Settings → Media → Media (0–600 seconds, 0 = no pause, the default). For one link, tick Own pauses for this link in the format selector and set Between requests and Before the download; left unticked, the settings apply. The quick look-up when a link arrives in the LinkGrabber never pauses.
Multiple audio tracks per file, selected by language, where the container permits them.
Subtitles can be a separate file, embedded in the container, or both, optionally converted to SRT, VTT or ASS.
Manual and auto-generated tracks are kept apart. Auto-generated ones are off by default and are only included when you pick them.
Container limits and missing languages are reported as warnings before queueing, not discovered afterwards.
Cover image, chapter markers, tag metadata and the description with its source URL can each be embedded individually.
A source URL carrying a signature or token is never written into the file, because the signature is a credential.
SponsorBlock segments can be marked as chapters or removed. Both are off by default and limited to sponsor segments unless you choose more categories.
Removing re-encodes the file, and the interface says so. Marking leaves the media untouched.
An approved browser session can be attached per link, before it is queued. The safeguards:
- Only cookies within the profile's scope are handed to
yt-dlp; cookies for other domains are dropped. See Where a cookie may go. - The cookie file is created owner-only, carries no site name, and is removed when the download ends — whether it succeeded, failed or was cancelled.
- A pinned profile that is disabled, expired or scoped to another site fails the download instead of silently fetching the public version of the page.
- The LinkGrabber's online check uses the same profile as the download will: the one the link is pinned to, none when it is set to None, otherwise the approved profile for the site. A page that only shows itself to a signed-in visitor therefore passes the check once its cookies are there. A disabled or expired profile is never picked on its own.
See Security and privacy.
Some sites refuse yt-dlp unless it brings the cookies a browser collects on a visit — Bilibili's
bot check, for instance, answers HTTP 412 Precondition Failed without them. Retrying would only
provoke the check further, so rDownloader does not: the download goes to Blocked with The site
refuses yt-dlp without its cookies (HTTP 412), followed by yt-dlp's own error line.
Give rDownloader the site's cookies in one of two ways:
- An authentication profile — add the site's browser cookies as a browser-session profile under Settings → Accounts → Site logins (Authentication profiles). See Authentication profiles.
- The browser extension — on the site, Share session for this site with rDownloader in the page's context menu sends the cookies your browser holds for it; the profile arrives disabled and is approved in the web interface. See Sharing a site's session.
Then resume the download. With Authentication in the download's details left at Automatic (by domain), it uses the approved profile for the site on its own; set to another profile or to None, switch it first.
Facebook gives out a reel only to a signed-in visitor; without a session yt-dlp reports Cannot
parse data and asks for a bug report, although nothing is broken. rDownloader reads that as what it
is: the link or download goes to Blocked with This video on facebook is only shown to a
signed-in session, without the request to report it, and is not retried every two minutes.
Hand over your Facebook session the same two ways as above — Share session for this site with rDownloader in the extension, or an authentication profile with the site's browser cookies — and check the link again or resume the download. If a profile was already in use, its cookies have probably expired: share the session again.
Direct .m3u8 (HLS) and .mpd (MPEG-DASH) addresses are media sources too, recognised from the
document, not the file extension.
- Variants, alternate audio languages and subtitles feed the ordinary format selector.
- A live manifest is routed to the recorder rather than the file downloader.
- A manifest's credentials are not sent on to a CDN on another origin.
- DRM-protected streams are detected and refused with a stated reason. Ordinary AES-128 encryption is not DRM and works.
Arrange files with a template, globally under Settings → Media → Media or per link, with a live preview against the real metadata:
{uploader}/{upload_year}/{title}
The syntax is rDownloader's own, not yt-dlp's -o. These fields are available:
title · uploader · upload_date · upload_year · extractor · id · resolution · ext
Unknown fields are refused while you type. Absolute paths, drive letters and .. are refused,
and every segment is sanitised like any file name.

Settings → Media → Media:
| Setting | Default |
|---|---|
| Default variant or full default criteria | Best |
| Parallel media jobs | 2 (1–8) |
| Probe timeout | 60 seconds (5–600) |
| Host list | ~50 presets, editable |
| Output template | — |
| Pause between requests | 0 seconds (0–600) |
| Pause before each download | 0 seconds (0–600) |
The paths to yt-dlp and ffmpeg are set with the other program paths under Settings → Tools → Paths; empty
means the vendor folder, then PATH.
File names and paths are sanitised for the current platform and shortened to the permitted path lengths.
Settings → Tools → Status shows each tool's version and a verdict — Supported, Too old, Known bad or Version unknown — and, where a tool is behind, which capabilities that blocks; everything else keeps downloading. rDownloader can also download and update the tools itself, off unless you switch it on. Both are explained on External tools.
Settings → Services → Media downloads. Matching links are refused at intake and anything queued moves to Blocked.
- The LinkGrabber
- Livestream recording
- Image galleries
- Subscriptions — channels and playlists on a schedule
- External tools — installing and version-checking yt-dlp and ffmpeg
Getting started
- Installation
- Building from source
- Translating rDownloader
- First run
- Your first download
- The interface
Using rDownloader
- The download queue
- Download history
- The LinkGrabber
- Site rules
- Hosters and accounts
- Usenet and NZB
- BitTorrent
- Video and audio downloads
- Image galleries
- Livestream recording
- FTP, SFTP and WebDAV
- Object storage
- Subscriptions
- Remote jobs
- Storage, categories and rules
- Watched folders
- Post-processing
- Bandwidth and power
- Notifications
- Automation
- Statistics
- Keyboard and accessibility
Integrations
- Browser extension
- Desktop capture agent
- Command line client
- REST API
- MCP server
- Automation tool compatibility
Operating
- Docker and NAS
- Synology NAS
- Reverse proxy
- Accounts, sessions and permissions
- Sign in with an identity provider
- External tools
- Backup and restore
- Updates
- Security and privacy
- Diagnostics and maintenance
- Troubleshooting
- Defaults and limits
- Support matrix
Plugins
Plugin development
- Developing a plugin
- Resolver
- Transfer backend
- Intake parser
- Intake parser with mirrors
- Folder crawler
- Remote job
- Sign-in
- OAuth sign-in
- Metadata enricher
- Notification destination
- Post-processing step
- Upload destination
- Stream transform
- Plugin reference
- Packaging, signing and distribution
- Running a plugin repository
Reference