Open-source project
MalloyDelacroix/DownloaderForReddit avatar
MalloyDelacroix/DownloaderForReddit

DownloaderForReddit is a desktop scraper that turns subreddit and user lists into a queryable sqlite archive

The Downloader for Reddit is a GUI application with some advanced features to extract and download submitted content from reddit.

644 stars58 forksPythonGPL-3.0

At a glance

What is it?
MalloyDelacroix/DownloaderForReddit is a PyQt5 application that pulls posts, self text and comments from Reddit, stores everything in sqlite, and adds per list and per user settings, scheduled runs and a filtering database view. It needs Imgur API credentials for Imgur posts, FFmpeg for Reddit video, and only ships Windows executables.
Who is it for?
Use DownloaderForReddit if you want to archive a set of subreddits or users locally with searchable sqlite storage and you want that archive to build itself on a schedule. Do not choose it for headless server side collection or for platforms other than Windows without work, since the packaged executables exist only for Windows and running from source is a separate setup exercise.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Activity is slowing. The repository last received commits 6 months ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 24, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Everything extracted lands in sqlite, not in a folder of files

The core decision in this application is where the output goes. Downloader for Reddit is a GUI application for downloading content, self text and comments submitted to Reddit, and the project states that everything extracted is stored in an sqlite database.

That choice shapes everything else. A built-in database view window lets you view and filter all the stored data, and the database can also be opened with any software capable of reading an sqlite file, so the extracted data can be used and analysed in other ways. There is no separate media folder to manage and no naming scheme to fight with.

The application is built with PyQt5, and the interface is organised around two separate list displays, one for users and one for subreddits. Each list can hold an unlimited number of users or subreddits, lists can be downloaded as a whole or item by item, and user downloads can be constrained to posts made only to the subreddits in the current subreddit list.

The rest of the interface is about narrowing what you collect. Most download settings apply at one of three levels: the whole application, an entire user or subreddit list, or an individual entry, which is what lets the project claim to work at both large and small scale. The output display is likewise configurable, with each output level customisable down to the colour it is shown in.

The audience is a person who wants a local archive of specific communities and accounts, built once and then refreshed.

Scheduling and the database view are where the real work happens

Two features distinguish this from a one shot download script, and both are in the interface rather than in the fetching code.

The first is scheduling. The settings dialog covers download parameters, display settings and notifications, and it also lets you schedule downloads to run at a particular time interval or at certain times on certain days. Combined with the schedule library in the dependency list, that means an archive can be kept up to date without anyone opening the application.

The second is the database view, and its design is worth describing precisely because the filtering is hierarchical. Each object view can be toggled on or off, and each toggle depends on the model view before it. The example given is that if a subreddit is selected and the post view is toggled off, all content for that subreddit is displayed; if posts are toggled on, only posts for the selected subreddit are shown, and only content for the selected post is displayed.

On top of that hierarchy sits a per model filtering system in which, in the project's description, every model can be filtered by almost every parameter through an interface intended to be easy to use.

Together these mean the tool is usable for a broad archive rather than for one subreddit. You can point it at a wide set of sources, then interrogate the sqlite file afterwards for whatever question you actually had.

The project also ships a user manual as a PDF in the repository root, which is where the interaction details live that the README does not spell out.

Running it: a Windows executable or a source checkout

The documented easiest route is a pre-packaged executable from the releases section, with the caveat that stand-alone executables are currently only available for Windows.

To run it that way, extract the DownloaderForReddit folder from the zip and click the DownloaderForReddit.exe file. The project states that everything is self-contained in the folder and there is nothing to install, which means the Python interpreter and the dependency tree travel with the binary.

Running from source is a separate path. The README points at a wiki entry titled Setting Up A Development Environment for that, and the repository root shows what that involves: main.py at the top level, setup.py for packaging, requirements.txt with pinned versions, an alembic.ini and an alembic/ directory for database migrations, and the application package under DownloaderForReddit/.

The dependency list is the clearest description of how the application is built:

code
beautifulsoup4==4.6.3
praw==7.8.1
pyqt5==5.15.9
PyQtNetworkAuth==5.15.4
python-json-logger==0.1.9
requests==2.32.3
SQLAlchemy==1.3.13
toml==0.10.0
alembic==1.4.2
schedule==1.1.0
pyqtspinner==0.1.1
cryptography==3.4.7
redgifs==2.2.0
yt-dlp==2025.4.30

Reddit access goes through praw, the official Reddit API client. HTML parsing uses beautifulsoup4, database access goes through SQLAlchemy with alembic for schema migrations, and scheduling uses the schedule library. yt-dlp and redgifs are present for media extraction, and cryptography is there for credential handling.

Two things to notice about the pins. beautifulsoup4 is pinned at 4.6.3, which is old, and SQLAlchemy is pinned at 1.3.13, the last release of the 1.x series. Anyone rebuilding this environment on a current Python should expect to move those pins.

The packaging metadata confirms the shape of the project:

python
setup(
    name='DownloaderForReddit',
    version=__version__,
    packages=[''],
    url='https://github.com/MalloyDelacroix/DownloaderForReddit',
    license='GNU GPLv3',

The version is read from the package itself rather than hardcoded, and the licence field names GPLv3.

Imgur posts need your own client id and secret, with a daily ceiling

Any Imgur content requires credentials before anything can be downloaded. The README is explicit that you need an imgur client id and client secret, and that they are obtained by registering an application at the Imgur OAuth2 add client page.

The settings it recommends are worth reading before you register, because they affect what you can do with the result. The application name is Downloader For Reddit, the authorization type is anonymous usage without user authorization, the authorization callback URL can be any valid URL, and the application website points back at the project repository. The email is where the credentials are sent, and the client id and secret are then entered on the Imgur category of the settings menu.

Anonymous usage matters here. The application is not asking for user authorisation, so it is not acting on behalf of a logged in Imgur user, which keeps the credential set to an id and a secret.

The ceiling is the real constraint. Imgur allows 12,500 downloads per day and 500 downloads per hour, and the application shows your remaining Imgur credits and reset time from the help menu under Imgur Credits.

That number is the practical limit on an archive that includes Imgur hosted images, and it is worth checking against the size of the lists you plan to download before you start. A first run across a large set of users will hit the hourly cap, and the scheduling feature is what lets such a job continue over days rather than fail.

Reddit video arrives as two files that FFmpeg has to merge

Reddit hosts video in a way that shapes the output of this tool, and the documentation explains the consequence plainly.

Videos downloaded from v.redd.it are saved as two files, one video file and one audio file, because of the way Reddit hosts them. To merge those two into one playable video after download, FFmpeg must be installed and available on the system path. The README links to a wikiHow article for installing FFmpeg on Windows.

That is a hard external dependency rather than an optional extra. Without FFmpeg on the path you get a video file and an audio file per post and no playable video, and the documentation does not describe a fallback for when the merge fails.

The dependency list explains where the rest of the media handling comes from. yt-dlp is pinned at 2025.4.30, which is a recent build of the general purpose media downloader, and redgifs is present as well, alongside requests for direct HTTP fetches. The presence of yt-dlp in particular suggests that some sources are pulled through that tool rather than through a bespoke downloader.

For an evaluation, the practical question is whether your target content is hosted on v.redd.it at all, and if it is, whether you are willing to keep FFmpeg installed and on the path on whatever machine runs the archive.

GPLv3, a January release, and a push from April

The licence is GPLv3, confirmed both in the setup.py metadata field and in the LICENSE file at the repository root. For a desktop application that a user installs and runs locally, the copyleft obligations are less intrusive than they are for a server, but if you modify it and distribute the modified build, the terms apply to what you distribute.

The release history is regular enough to rely on. The published tags are v3.17.1 from 2026-01-06, v3.17.0 from 2025-07-16 and v3.16.1 from 2025-05-20, so the project ships a few times a year with patch releases for a stable 3.17 line. The repository is not archived, and the last push was on 2026-04-14.

That gap between the last push and the newest tag is the thing to note. Work continued for roughly three months after v3.17.1 without a new release, which is a normal pattern for a solo maintained desktop application where the author commits in batches.

The repository also shows the tooling around the application: a .gitpod.yml and .gitpod.Dockerfile for a ready to code browser environment, build_github.spec and build_venv.spec as PyInstaller style packaging specifications for the standalone executables, a CHANGE_LOG.md, a Tests/ directory, and Tools/ and Resources/ directories.

One comparison is worth making for yourself if you are weighing this against writing a small script. A script using praw directly gives you the data and nothing else. This application gives you a database, a filtering interface, three levels of settings scope and a scheduler, in exchange for a PyQt5 dependency tree, a pinned environment that has drifted, and Windows only binaries.

Editorial conclusion

Use DownloaderForReddit if you want to archive a set of subreddits or users locally with searchable sqlite storage and you want that archive to build itself on a schedule. Do not choose it for headless server side collection or for platforms other than Windows without work, since the packaged executables exist only for Windows and running from source is a separate setup exercise. Before starting, register an Imgur client id and secret, install FFmpeg on the path for Reddit video, and confirm that the pinned dependency versions in requirements.txt, such as praw 7.8.1 and pyqt5 5.15.9, still resolve on your Python version.

Frequently asked questions

What is DownloaderForReddit and what does it download?

It is a PyQt5 GUI application that downloads content, self text and comments submitted to Reddit, either by user or by subreddit. Everything extracted is stored in an sqlite database that can be viewed in a built-in database view or read with any sqlite capable tool.

How do I install DownloaderForReddit?

The easiest route is a pre-packaged executable from the releases section, although stand-alone executables are currently only available for Windows. Extract the folder from the zip and run DownloaderForReddit.exe, since everything is self-contained. Running from source is covered by the wiki entry on setting up a development environment.

Do I need API credentials to download Imgur posts?

Yes. An imgur client id and client secret are required and are obtained by registering an application on the Imgur OAuth2 add client page. They are entered on the Imgur category of the settings menu, and the recommended authorization type is anonymous usage without user authorization.

Why are downloaded Reddit videos split in two?

Because of the way Reddit hosts video, files from v.redd.it are saved as one video file and one audio file. FFmpeg must be installed and on the system path for the application to merge them into one playable video.

How do I schedule downloads in DownloaderForReddit?

The settings dialog can schedule downloads to run at a particular time interval or at certain times on certain days, alongside download parameters, display settings and notifications.

What licence is DownloaderForReddit released under?

GPLv3, as stated in the setup.py metadata field and in the LICENSE file at the repository root.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. MalloyDelacroix/DownloaderForReddit on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/malloydelacroix-downloaderforreddit.svg)](https://hysenlabs.com/projects/malloydelacroix-downloaderforreddit)

Was this useful?