
Product
Introducing Reports: An Extensible Reporting Framework for Socket Data
Explore exportable charts for vulnerabilities, dependencies, and usage with Reports, Socket’s new extensible reporting framework.
patreon-dl
Advanced tools
A Patreon downloader written in Node.js.
This repo contains the patreon-dl library and its command-line tool. For GUI application, check out patreon-dl-gui.
You can run patreon-dl from the command-line or use it as a library for your project. Node.js v20 or higher required.
Embedded videos / links
For information on external downloaders, see the Embedded videos / links - external downloader section. Example config is provided for fetching YouTube (replacing the built-in downloader) and Vimeo videos.
Patreon-hosted videos with DRM protection
Some videos served by Patreon are now protected with DRM. Because these videos require a real-time decryption key available only during authorized streaming, they cannot be played back normally after being downloaded.
By default, patreon-dl will skip DRM-protected content to avoid broken downloads. If you still wish to download these files, you can force the download using:
protected.media option (see example.conf).include.protectedMedia option (see documentation).FFmpeg is required when downloading:
Not all video downloads require FFmpeg, but you should have it installed on your system anyway.
patreon-dl supports downloading embedded YouTube videos or from embedded YouTube video links.
The built-in YouTube downloader runs code retrieved from YouTube or Google servers. If Deno is installed on your system, it will be used to execute this code within a secure, sandboxed environment. Without Deno, the code runs without isolation, increasing the risk of security vulnerabilities such as unauthorized access, data corruption, or malicious behavior. For this reason, installing Deno is strongly recommended.
When needed, the downloader will attempt to invoke the deno command. If it’s not found, it will default to unsafe execution. If Deno is installed but the deno executable isn’t available in your system’s PATH, you can manually specify its location using the --deno CLI option or path.to.deno config file option:
// CLI
$ patreon-dl --deno path/to/deno ...
// Config file
[downloader]
path.to.deno = "path/to/deno"
...
If you have a YouTube Premium subscription, you can connect patreon-dl to your account and download videos at qualities available only to Premium accounts (e.g. '1080p Premium'). You will also need to connect to an account (not necessarily Premium) if you get a "Login required" error message during download.
For CLI users, you would configure patreon-dl as follows:
$ patreon-dl --configure-youtube
You can specify external programs to download embedded videos or from embedded links. For YouTube videos, this will replace the built-in downloader.
See the example config on how to configure an external downloader to fetch YouTube, Vimeo and SproutVideo content through yt-dlp. Helper scripts bundled with patreon-dl are used in the case of Vimeo and SproutVideo (patreon-dl-vimeo.js and patreon-dl-sprout.js respectively).
First, install Node.js.
Then, install FFmpeg (if you are going to download videos).
Then, in a terminal, run the following command:
$ npm i -g patreon-dl
The -g option is for installing patreon-dl globally and have the CLI executable added to the PATH. Depending on your usage, you might not need this.
$ patreon-dl [OPTION]... URL
| Option | Alias | Description |
|---|---|---|
--help | -h | Display usage guide |
--config-file <path> | -C | Load configuration file at <path> for setting full options |
--cookie <string> | -c | Cookie for accessing patron-only content; how to obtain cookie. |
--ffmpeg <path> | -f | Path to FFmpeg executable |
--deno <path> | -d | Path to Deno executable |
--out-dir <path> | -o | Directory to save content |
--log-level <level> | -l | Log level of the console logger: info, debug, warn or error; set to none to disable the logger. |
--no-prompt | -y | Do not prompt for confirmation to proceed |
--dry-run | Run without writing files to disk (except logs, if any). Intended for testing / debugging. | |
--list-tiers <creator> | List tiers for the given creator(s). Separate multiple creators with a comma. The purpose of this is to let you find out what tier IDs to set forposts.in.tier filtering option under include section of configuration file. | |
--list-tiers-uid <user ID> | Same as --list-tiers, but takes user ID instead of vanity. | |
--list-posts <creator> | List posts by the given creator(s). Separate multiple creators with a comma. | |
--list-posts-uid <user ID> | Same as --list-posts, but takes user ID instead of vanity. | |
--configure-youtube | Configure YouTube connection. patreon-dl supports downloading embedded YouTube videos. If you have a YouTube Premium account, you can connect patreon-dl to it for downloading Premium-quality streams. You will also need to connect to an account if you get a "Login required" error message during download. |
// Download products from a creator's shop
https://www.patreon.com/<creator>/shop
https://www.patreon.com/c/<creator>/shop
https://www.patreon.com/cw/<creator>/shop
// Download a single product
https://www.patreon.com/<creator>/shop/<slug>-<product_id>
// Download posts by creator
https://www.patreon.com/<creator>/posts
https://www.patreon.com/c/<creator>/posts
https://www.patreon.com/cw/<creator>/posts
https://www.patreon.com/user/posts?u=<user_id>
// Dowload a single post
https://www.patreon.com/posts/<post_id>
https://www.patreon.com/posts/<slug>-<post_id>
// Download posts in a collection
https://www.patreon.com/collection/<collection_id>
Some creators host their Patreon pages on custom domains. You can provide this custom URL to patreon-dl, which will download posts from the associated creator.
You may specify multiple URLs by separating them with a comma. E.g.:
// First download posts by johndoe, followed by posts by janedoe.
$ patreon-dl "https://www.patreon.com/johndoe/posts,https://www.patreon.com/janedoe/posts"
You can also use a file to supply URLs to patreon-dl. For example, you can have a urls.txt that has the following content:
# Each URL is placed in its own line
# Comments (lines starting with '#') will be ignored
https://www.patreon.com/johndoe/posts
https://www.patreon.com/janedoe/posts
You can then pass urls.txt to patreon-dl:
$ patreon-dl urls.txt
In this file, you can also override include options provided in a configuration file passed to patreon-dl (through the -C option). include options allow you specify what to include in downloads. This overriding mechanism allows you to specify different content to download for each target URL. For example, you might have the following include option in your configuration file:
...
[include]
# Include posts that belong only to tier ID '-1' (public tier)
posts.in.tier = -1
...
Then, in your urls.txt, you can override as follows:
# URL 1
https://www.patreon.com/johndoe/posts
# Override 'posts.in.tier = -1' in [include] section of configuration file.
# This will cause downloader to download posts from URL 1 belonging to tier with
# ID '123456' or '789100'.
include.posts.in.tier = 123456, 789100
# Other include options - they basically have the same name as those
# in the configuation file, but prepended with 'include.':
#
# include.locked.content
# include.posts.with.media.type
# include.posts.published.after
# include.posts.published.before
# include.campaign.info
# include.content.info
# include.preview.media
# include.content.media
# include.protected.media
# include.all.media.variants
# include.images.by.filename
# include.audio.by.filename
# include.attachments.by.filename
# include.comments
# URL 2
https://www.patreon.com/janedoe/posts
# If you don't place any 'include.*' statements here, the downloader will use
# options from configuration file or default values if none provided.
# URL 3
...
Content is saved with the following directory structure:
out-dir
├── campaign
├── campaign_info
├── posts
│ ├── post 1
│ │ ├── post_info
│ │ ├── images
│ │ ├── ...
│ ├── post 2
│ ├── post_info
│ ├── images
│ ├── ...
├──shop
├── product 1
├── product_info
├── content_media
├── ...
Command-line options are limited. To access the full range of options, create a configuration file and pass it to patreon-dl with the (capital) -C option.
Refer to the example config to see what options are offered. Also see How to obtain Cookie.
Note that you can override an option from a configuration file with one provided at the command-line, provided of course that a command-line equivalent is available.
patreon-dl comes with a web server that allows you to browse downloaded content. To start the web server:
$ patreon-dl-server [OPTION]
| Option | Alias | Description |
|---|---|---|
--help | -h | Display usage guide |
--data-dir <dir> | -i | Directory containing downloaded content. Default: current working directory |
--port <number> | -p | Web server port. Default: 3000, or a random port if 3000 is already in use. |
--log-level <level> | -l | Log level of the console logger: info, debug, warn or error; set to none to disable the logger. Default: info |
--log-file <file> | -f | Save logs to <file>. |
Say you downloaded something with patreon-dl:
$ patreon-dl -o "C:\PatreonDownloads" <url>
This will download content to C:\PatreonDownloads. To view the downloaded content, start patreon-dl server as follows:
$ patreon-dl-server -i "C:\PatreonDownloads"
...info: Web server is running on <URL>
Note the URL shown in the output. Open this URL in a web browser to begin viewing the downloaded content.
Keep in mind that the web server is in no way secure. It is meant for local browsing and should not be exposed to outside parties!
3.8.1
3.8.0
--list-posts / --list-posts-uid (#126).3.7.1
include.protectedMedia / protected.media option.v3.7.0
media.filename.format (patreon-dl-gui#51)v3.6.1
v3.6.0
v3.5.0
https://www.patreon.com/<creator>/shop). This will download all products from a creator's shop.
productsPublished / products.published.after / products.published.before option to set publish date criteria of products included in download.stopOn / stop.on option now also applies to products, the postPreviouslyDownloaded and postPublishDateOutOfRange values have been deprecated in favor of previouslyDownloaded and publishDateOutOfRange, respectively.include.mediaThumbnails optionv3.4.0
pathToDeno / --deno / path.to.deno option (used by built-in YouTube downloader)maxVideoResolution / max.video.resolution option to limit video downloads to a maximum resolution (see example.conf) (@eisenbruch - #105) - extended to include site-hosted videosv3.3.1
DB.getInstance() returning same instance despite different DB pathAPI.getInstance() returning same instance despite different DB instancev3.3.0
v3.2.1
getCampaign()--list-tiers / --list-tiers-uidv3.2.0
yt-dlp in Vimeo download scriptconfig.include.mediaByFilename optionsDownloader.getCampaign(params): enable lookup by params.campaignIdv3.1.0
request.userAgent optionv3.0.0
patreon-dl.v2.4.3
v2.4.2
v2.4.1
post-url and cookie to available external downloader exec paramscookie in DownloaderConfigv2.4.0
https://www.patreon.com/cw/<creator>/postsstopOn option (#63)proxy option (#62)URLHelper, FetcherErrorgetDefaultDownloaderOptions()ConsoleLogger / FileLogger: add getDefaultConfig()v2.3.0
podcast type to include.postsWithMediaType optioninclude.comments optionv2.2.0
v2.1.1
v2.1.0
https://www.patreon.com/c/<creator>/postsv2.0.0
include options:
v1.7.0
--dry-run / dryRun optionhttps://www.patreon.com/posts/<post_id>v1.6.2
v1.6.1
v1.6.0
v1.5.0
https://www.patreon.com/user/posts?u=<user_id>PatreonDownloader.getCampaign() to take userId arg--list-tiers-uidv1.4.0
--list-tiersinclude optionsv1.3.0
content.publishDate field to the content dir name format (PR #12 by kazuoteramoto)v1.2.2
v1.2.1
v1.2.0
v1.1.1
v1.1.0
v1.0.1
v1.0.0
This project is licensed under the MIT License and includes third-party software—see the NOTICE file for attributions.
FAQs
Patreon Downloader
The npm package patreon-dl receives a total of 242 weekly downloads. As such, patreon-dl popularity was classified as not popular.
We found that patreon-dl demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Explore exportable charts for vulnerabilities, dependencies, and usage with Reports, Socket’s new extensible reporting framework.

Product
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.