aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
blob: 7c78d57db6415ac3986797fe837036a326d2e2b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# bunkr_dl

Download every file of a Bunkr album, or of every album found by a Bunkr
search, from the command line.

- Follows paginated albums (`?page=N`, 100 files per page).
- Saves files under their original names.
- Resumes partially downloaded files when run again against the same folder.
- Works with any Bunkr mirror domain, since links are resolved relative to the
  URL you pass.

## Requirements

Python 3 with:

- `requests`
- `beautifulsoup4`
- `lxml`

## Usage

```
bunkr_dl [-h] [-o DIR] url
```

| Option             | Meaning                                              |
|--------------------|------------------------------------------------------|
| `url`              | Album URL (`https://<domain>/a/<id>`) or search URL (containing `?search=`) |
| `-o, --output DIR` | Base download folder (default: `/data/bunkr`)        |
| `-h, --help`       | Show help and exit                                   |

The default folder is set by `DEFAULT_OUTPUT` near the top of the script.

Examples:

```
bunkr_dl https://bunkr.cr/a/XXXXXXXX
bunkr_dl -o ~/Downloads https://bunkr.cr/a/XXXXXXXX
bunkr_dl 'https://bunkr.cr/?search=some%20name'
```

Quote search URLs so the shell leaves `?` and `&` alone.

### Where files go

- Album: `OUTPUT/<album title>/`. If that folder already exists, a ` - 2`,
  ` - 3`, ... suffix is added.
- Search: `OUTPUT/<Search Terms>/<album title>/`, one subfolder per album found.

## How it works

1. Album page: collect the `/f/<slug>` file links, following `?page=N` until a
   page adds nothing new.
2. File page: find the `https://dl.<domain>/file/<id>` download link.
3. POST the id to `/api/_001_v2` on that host to get the storage path and
   original file name.
4. Ask `https://glb-apisign.cdn.cr/sign` for a token and download the signed
   CDN URL.

Bunkr changes domains and page layout often. When the script reports no media,
check these steps against the live pages first.

## License

Copyright (C) 2025-2026 Danilo M. <danix@danix.xyz>

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.