From 6f366eb8504cfaa84d08b2f24ed8e83179d0e0f6 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Tue, 6 Oct 2026 13:01:56 +0200 Subject: Initial commit: coomer_dl creator/post/file downloader Downloads every file of a Coomer creator, a single post, or a single file URL via the site's JSON API. Resumes partial files and reuses the creator folder so re-runs only fetch new posts. Co-Authored-By: Claude Opus 5.5 --- README.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 README.md (limited to 'README.md') diff --git a/README.md b/README.md new file mode 100644 index 0000000..ed788e9 --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# coomer_dl + +Download every file of a Coomer creator, of a single post, or a single file, +from the command line. + +- Follows the creator's post pagination (50 posts per API page). +- Saves files as `_`, so a post's files stay together. +- Resumes partial files and skips finished ones when run again against the + same folder, so re-running a creator only fetches what is new. +- Works with any Coomer mirror domain, since API and file URLs are built from + the URL you pass. + +## Requirements + +Python 3.12+ with `requests`. + +## Usage + +``` +coomer_dl [-h] [-o DIR] url +``` + +| Option | Meaning | +|--------------------|------------------------------------------------------| +| `url` | Creator URL (`https:////user/`), post URL (`.../post/`) or file URL (`https:///data/...`) | +| `-o, --output DIR` | Base download folder (default: `/data/coomer`) | +| `-h, --help` | Show help and exit | + +The default folder is set by `DEFAULT_OUTPUT` near the top of the script. + +Examples: + +``` +coomer_dl https://coomer.st/onlyfans/user/NAME +coomer_dl https://coomer.st/onlyfans/user/NAME/post/123456 +coomer_dl -o ~/Downloads 'https://coomer.st/data/ab/cd/HASH.mp4?f=name.mp4' +``` + +Quote file URLs so the shell leaves `?` and `&` alone. + +### Where files go + +- Creator or post: `OUTPUT//_`. +- File URL: `OUTPUT/`, taken from the `?f=` parameter when present. + +## How it works + +1. `GET /api/v1//user//posts?o=N` pages through the posts, or + `GET /api/v1//user//post/` fetches one. +2. Each post has a `file` and `attachments`, each with a storage `path`. +3. `GET /data` redirects to a file node (`nN.`) serving the file. + +API calls send `Accept: text/css`, without it DDoS-Guard answers 403. When the +script reports nothing found, check these steps against the live site first. + +## License + +Copyright (C) 2026 Danilo M. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License version 2 as published by the Free +Software Foundation. See [LICENSE](LICENSE) for the full text. + +## Development Approach + +This project is developed using AI-assisted tools. Code is generated with the help of AI based on human-provided specifications, design decisions, and iterative feedback. + +All contributions are reviewed, tested, and curated by the maintainer before being included in the codebase. AI is used as a productivity and exploration tool, while human oversight remains central to all decisions. + +The goal is to combine the flexibility of AI-assisted development with standard open-source practices such as transparency, review, and accountability. -- cgit v1.2.3