mirror of
https://github.com/HugeFrog24/jailbirdz-dl.git
synced 2026-06-30 00:27:13 +00:00
Compare commits
19 Commits
main
..
91b536b375
| Author | SHA1 | Date | |
|---|---|---|---|
| 91b536b375 | |||
| 521543db72 | |||
| 18f83d6698 | |||
| d88898d7dd | |||
| edd4c19985 | |||
| 61a80ee513 | |||
| 5b8d809441 | |||
| 884490925c | |||
| 1360ef781c | |||
| 8db1c640dd | |||
| bf0efef146 | |||
| 75727100df | |||
| e5ddda0181 | |||
| 04c64810dc | |||
| 78c3cf73b1 | |||
| cadecd8900 | |||
| 6ae4eb9e40 | |||
| e2627df1a3 | |||
| b9bea64471 |
@@ -13,11 +13,6 @@ PINKCUFFS_USERNAME=your-email-or-username
|
||||
PINKCUFFS_PASSWORD=your-password
|
||||
PINKCUFFS_LOGIN_COOKIE=wordpress_logged_in_<hash>=<value>
|
||||
|
||||
# femuniverse.com credentials (separate membership)
|
||||
FEMUNIVERSE_USERNAME=your-email-or-username
|
||||
FEMUNIVERSE_PASSWORD=your-password
|
||||
FEMUNIVERSE_LOGIN_COOKIE=wordpress_logged_in_<hash>=<value>
|
||||
|
||||
# PeerTube upload target
|
||||
PEERTUBE_URL=https://your-peertube-instance.example
|
||||
PEERTUBE_USER=admin
|
||||
|
||||
@@ -38,8 +38,6 @@ jobs:
|
||||
JAILBIRDZ_PASSWORD: ${{ secrets.JAILBIRDZ_PASSWORD }}
|
||||
PINKCUFFS_USERNAME: ${{ secrets.PINKCUFFS_USERNAME }}
|
||||
PINKCUFFS_PASSWORD: ${{ secrets.PINKCUFFS_PASSWORD }}
|
||||
FEMUNIVERSE_USERNAME: ${{ secrets.FEMUNIVERSE_USERNAME }}
|
||||
FEMUNIVERSE_PASSWORD: ${{ secrets.FEMUNIVERSE_PASSWORD }}
|
||||
|
||||
- name: Commit updated video_map.json
|
||||
if: always() # save progress even if main.py crashed or timed out
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 𝒥𝒶𝒾𝓁𝒷𝒾𝓇𝒹𝓏-𝒹𝓁
|
||||
|
||||
Jailbirdz.com, Pinkcuffs.com, and Femuniverse.com are Arizona-based subscription video sites publishing arrest and jail roleplay scenarios featuring women. This tool scrapes the member area of any combination of these sites, downloads the videos, and re-hosts them on a self-owned PeerTube instance.
|
||||
Jailbirdz.com and Pinkcuffs.com are Arizona-based subscription video sites publishing arrest and jail roleplay scenarios featuring women. This tool scrapes the member area of one or both sites, downloads the videos, and re-hosts them on a self-owned PeerTube instance.
|
||||
|
||||
> [!NOTE]
|
||||
> This tool does not bypass authentication, modify the site, or intercept anything it isn't entitled to. A valid, paid membership is required. The scraper authenticates using your own session cookie and accesses only content your account can already view in a browser.
|
||||
@@ -23,9 +23,9 @@ cp .env.example .env
|
||||
|
||||
Set credentials for whichever sites you have a membership on. You don't need both.
|
||||
|
||||
**Option A — credentials (recommended):** set `JAILBIRDZ_USERNAME` + `JAILBIRDZ_PASSWORD` (and/or the `PINKCUFFS_*` / `FEMUNIVERSE_*` equivalents) in `.env`. `main.py` logs in automatically on startup.
|
||||
**Option A — credentials (recommended):** set `JAILBIRDZ_USERNAME` + `JAILBIRDZ_PASSWORD` (and/or the `PINKCUFFS_*` equivalents) in `.env`. `main.py` logs in automatically on startup.
|
||||
|
||||
**Option B — manual cookie:** set `JAILBIRDZ_LOGIN_COOKIE` (and/or `PINKCUFFS_LOGIN_COOKIE` / `FEMUNIVERSE_LOGIN_COOKIE`) yourself. Get the value from browser DevTools → Storage → Cookies — copy the full `name=value` of the `wordpress_logged_in_*` cookie.
|
||||
**Option B — manual cookie:** set `JAILBIRDZ_LOGIN_COOKIE` (and/or `PINKCUFFS_LOGIN_COOKIE`) yourself. Get the value from browser DevTools → Storage → Cookies — copy the full `name=value` of the `wordpress_logged_in_*` cookie.
|
||||
|
||||
Sites with no credentials are skipped automatically when running `python main.py`.
|
||||
|
||||
@@ -35,8 +35,6 @@ Sites with no credentials are skipped automatically when running `python main.py
|
||||
- `JAILBIRDZ_LOGIN_COOKIE` — jailbirdz.com session cookie (fallback).
|
||||
- `PINKCUFFS_USERNAME` / `PINKCUFFS_PASSWORD` — pinkcuffs.com login.
|
||||
- `PINKCUFFS_LOGIN_COOKIE` — pinkcuffs.com session cookie (fallback).
|
||||
- `FEMUNIVERSE_USERNAME` / `FEMUNIVERSE_PASSWORD` — femuniverse.com login.
|
||||
- `FEMUNIVERSE_LOGIN_COOKIE` — femuniverse.com session cookie (fallback).
|
||||
- `PEERTUBE_URL` — base URL of your PeerTube instance.
|
||||
- `PEERTUBE_USER` — PeerTube username.
|
||||
- `PEERTUBE_CHANNEL` — channel to upload to.
|
||||
@@ -52,7 +50,6 @@ Discovers all post URLs via the WordPress REST API, then visits each page with a
|
||||
python main.py # scrape all sites you have credentials for
|
||||
python main.py --site jailbirdz # scrape one site only
|
||||
python main.py --site pinkcuffs --site jailbirdz # explicit multi-site
|
||||
python main.py --site femuniverse # femuniverse only
|
||||
```
|
||||
|
||||
Results are written to `video_map.json`. Safe to re-run — already-scraped posts are skipped.
|
||||
@@ -69,7 +66,7 @@ Options:
|
||||
--reorganize Rename existing files to match current naming mode
|
||||
-w, --workers N Concurrent downloads (default: 4)
|
||||
-n, --dry-run Print what would be downloaded
|
||||
--site SITE Limit to one site (jailbirdz, pinkcuffs, or femuniverse); repeatable
|
||||
--site SITE Limit to one site (jailbirdz or pinkcuffs); repeatable
|
||||
```
|
||||
|
||||
Resumes partial downloads. The chosen naming mode is saved to `.naming_mode` inside the output directory and persists across runs. Filenames that would clash are placed into subfolders.
|
||||
@@ -108,10 +105,6 @@ gh secret set JAILBIRDZ_PASSWORD
|
||||
# pinkcuffs (if you have a membership)
|
||||
gh secret set PINKCUFFS_USERNAME
|
||||
gh secret set PINKCUFFS_PASSWORD
|
||||
|
||||
# femuniverse (if you have a membership)
|
||||
gh secret set FEMUNIVERSE_USERNAME
|
||||
gh secret set FEMUNIVERSE_PASSWORD
|
||||
```
|
||||
|
||||
**Seed CI with your current progress before the first run:**
|
||||
|
||||
@@ -15,9 +15,4 @@ SITES: Final[dict[str, dict[str, str]]] = {
|
||||
"cookie_domain": "pinkcuffs.com",
|
||||
"env_prefix": "PINKCUFFS",
|
||||
},
|
||||
"femuniverse": {
|
||||
"base_url": "https://www.femuniverse.com",
|
||||
"cookie_domain": "femuniverse.com",
|
||||
"env_prefix": "FEMUNIVERSE",
|
||||
},
|
||||
}
|
||||
|
||||
Vendored
+947
-3393
File diff suppressed because one or more lines are too long
@@ -49,7 +49,6 @@ DEFAULT_BATCH_SIZE = 1
|
||||
DEFAULT_POLL = 30
|
||||
UPLOADED_FILE = ".uploaded"
|
||||
PT_NAME_MAX = 120
|
||||
PT_DESC_MIN = 3 # PeerTube rejects descriptions shorter than this
|
||||
|
||||
|
||||
# ── Text helpers ─────────────────────────────────────────────────────
|
||||
@@ -63,11 +62,6 @@ def clean_description(raw: str) -> str:
|
||||
text = re.sub(r"<[^>]+>", "", text)
|
||||
text = html.unescape(text)
|
||||
text = re.sub(r"\n{3,}", "\n\n", text).strip()
|
||||
# PeerTube enforces a 3-char minimum on descriptions; a sub-minimum
|
||||
# description (e.g. a stray ".") makes the upload-init 400. Drop it so
|
||||
# it's omitted from the request rather than rejected.
|
||||
if len(text) < PT_DESC_MIN:
|
||||
return ""
|
||||
return text[:10000]
|
||||
|
||||
|
||||
|
||||
+3
-3078
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user