The first full release since 3.14.7. It brings in OF-Scraper-Community, the maintained fork, up to its 3.16.13: hundreds of fixes, Fansly support, and a test suite that runs on every change. These notes cover the highlights. Each version's full notes are linked at the bottom.
Install
The package on PyPI is now ofscraper-community. The ofscraper package there is still 3.14.7. The command is still ofscraper.
- New install:
uv tool install ofscraper-community,pipx install ofscraper-communityorpip install ofscraper-community. - Coming from
ofscraper: uninstall it first (uv tool uninstall ofscraper,pipx uninstall ofscraperorpip uninstall ofscraper), then install as above. Both install the sameofscrapercommand, so only one can be installed. If pip already has both, uninstall both, then installofscraper-communityagain. Your config folder, auth and databases are used as they are. - Requirements: Python 3.11 to 3.15, and ffmpeg 6 or newer (8 works) for DRM videos.
- Windows, macOS and Linux builds are attached below.
New
- Fansly support: posts, messages, purchases, labels and livestream recording. Videos download in the best quality, whether served as HLS or DASH. Stream segments download in parallel and resume after a stop. Switch sites with the site setting.
- Stop without quitting: the first Ctrl+C stops the current downloads or fetch, and a second one quits. The check table has a Stop Downloads button (Ctrl+X). Unfinished files resume on the next run.
- Check table from the Action Menu, plus an open-folder key (
o), a Clear Filters button, hideable columns (h), paste into the ID filters and progress while it fetches. - Esc goes back from any prompt.
- Permanent skips: a skip script can print
skip-permanent.--retry-permanent-skipsandofscraper db --unmark-permanent-skipsundo it. - Stash sync copies OnlyFans and Fansly details of your downloads into Stash (see STASH.md).
--before/--aftertakeMM/DD/YYYYand relative dates such as "3 weeks ago".- Daemon:
SIGUSR1starts an idle pass, andSIGTERMstops it cleanly.
Downloads
- Downloads keep going after an IP change: links are signed for the IP that fetched them, so after a reconnect or VPN switch every remaining download failed with 403. A rejected link is now fetched again and the download resumes. This covers posts, messages, purchases, stories, highlights and DRM videos.
- Resume works again for normal and DRM videos. A half-finished file is continued only if it still matches the server. Retries continue instead of starting from 0.
- Nothing broken is saved as done: 0-byte DRM files, error pages and empty replies are no longer marked downloaded. Filename collisions no longer overwrite files.
- Nothing hangs: requests have a read timeout. An expired link fails at once instead of retrying for a minute, and a cancelled request stops.
- The speed limit works, and retry and wait settings are used as set.
- Size limits (
-sm/-sx) see the whole DRM video, and size-skipped files are tried again next run. Rows wrongly saved as downloaded by the old behaviour are repaired once, after a backup. - DRM: cdrm works, the configured ffmpeg path is used, ffmpeg 8 is accepted, and purchased posts get their keys from the right endpoint.
Login
- A logged-out session is reported as bad auth. Network errors are reported as network errors, and an unusable dynamic rule says so instead of asking for auth again.
- Quit and main at the auth prompt do what they say, and manual dynamic rules load again.
- Session cookies and other auth values are masked in every log line, so logs are safer to share.
Fixes across the app
- Config: settings that were ignored or misread are now read as written. These include
incremental_downloads: false, cache modes,download_sems: 0,textlength, quoted paths and an empty ffmpeg path. New settings get the built-in defaults. - Command line: a typo prints a short usage message instead of a traceback, and a failed run exits with status 1.
- Console: names with emoji no longer crash consoles that aren't UTF-8.
--output LOWis quiet, the display redraws cleanly after a resize, and a failure for one creator names the creator and moves on. - Database:
ofscraper dbonly reads, works with older databases, and--post-id/--media-idmatch. Merge DB's keeps downloaded state. - Scripts: naming, skip, after-download and other scripts get their whole input in UTF-8. Their answer is used as soon as they exit, and they stop when ofscraper stops.
- Scanning: posts with no date no longer stop a scan. The last page of a timeline is kept, and subscriptions are paged without repeats.
- Docker: runs as
USER_ID/GROUP_ID, saves into the mounted data folder and ships an arm64 ffmpeg.
Security
- CVE-2025-69872: the API cache could run code planted in the cache folder. Cache entries are now read as plain data only.
- Dependencies with known vulnerabilities are updated, and the lock file is audited for new advisories on every change.
Full notes
Each Community release lists every change with its PR: 3.15.1, 3.16.0, 3.16.1, 3.16.2, 3.16.3, 3.16.4, 3.16.5, 3.16.6, 3.16.7, 3.16.8, 3.16.9, 3.16.10, 3.16.11, 3.16.12, 3.16.13. Changes before 3.15.1 are in the 3.14.7...3.15.0 history.
Merged into this repo through #670, #675, #676 and #677.
Full list: 3.14.7...3.16.13