|
1 | 1 | # 4Charm |
2 | 2 |
|
3 | | -> Workspace context source: `/Users/home/Workspace/Apps/.code-analysis/` (`AGENTS.md`, `monorepo-analysis.md`, `essential-queries.md`). |
4 | | -
|
5 | 3 | [](https://github.com/RazorBackRoar/4Charm/actions/workflows/ci.yml) |
6 | | -[](https://github.com/RazorBackRoar/4Charm/actions/workflows/ruff.yml) |
7 | 4 | [](pyproject.toml) |
8 | 5 | [](LICENSE) |
9 | | -[](https://support.apple.com/en-us/HT211814) |
| 6 | +[](https://support.apple.com/en-us/HT211814) |
11 | 7 | [](https://doc.qt.io/qtforpython/) |
12 | 8 |
|
13 | 9 | ```text |
14 | 10 | ██╗ ██╗ ██████╗██╗ ██╗ █████╗ ██████╗ ███╗ ███╗ |
15 | 11 | ██║ ██║██╔════╝██║ ██║██╔══██╗██╔══██╗████╗ ████║ |
16 | 12 | ███████║██║ ███████║███████║██████╔╝██╔████╔██║ |
17 | 13 | ╚════██║██║ ██╔══██║██╔══██║██╔══██╗██║╚██╔╝██║ |
18 | | -██║╚██████╗██║ ██║██║ ██║██║ ██║██║ ╚═╝ ██║ |
19 | | -╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ |
| 14 | + ██║╚██████╗██║ ██║██║ ██║██║ ██║██║ ╚═╝ ██║ |
| 15 | + ╚═╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ |
20 | 16 | ``` |
21 | 17 |
|
22 | | -> **High-performance native macOS 4chan media downloader** |
23 | | -> Download entire threads, catalogs, or boards with intelligent organization, |
24 | | -fail-safe resume, and zero duplicates. |
| 18 | +> **High-performance native macOS 4chan media downloader.** |
| 19 | +> Download entire threads, catalogs, or boards with intelligent organization, fail-safe resume, and zero duplicates. |
25 | 20 |
|
26 | 21 | --- |
27 | 22 |
|
28 | | -## ✨ Features |
| 23 | +## Features |
29 | 24 |
|
30 | | -- 🚀 **Performance** – Native macOS app built with PySide6 (Qt6) |
31 | | -- 🧵 **Bulk Downloading** – Queue up to 20 threads/catalogs simultaneously |
32 | | -- 📂 **Smart Organization** – Automatic folder structure with WEBM separation |
33 | | -- 🔄 **Fail-Safe Resume** – Automatically resumes interrupted downloads |
34 | | -- 🔍 **Duplicate Prevention** – SHA-256 hashing prevents redownloading files |
35 | | -- 🛡️ **Rate Limiting** – Adaptive throttling with exponential backoff prevents IP bans |
36 | | -- ✅ **Download Verification** – MD5 checksum validation ensures file integrity |
37 | | -- ⚡ **Optimized Performance** – 4x connection pooling for faster concurrent downloads |
38 | | -- 📊 **Real-Time Progress** – Live bandwidth monitoring with ETA display |
39 | | -- 💬 **Better Error Messages** – Clear, actionable error messages with suggested fixes |
40 | | -- 🖥️ **Apple Silicon Native** – Optimized for M1/M2/M3 chips |
| 25 | +- **Bulk Downloading** — queue up to 20 threads or catalogs simultaneously |
| 26 | +- **Smart Organization** — automatic folder structure with WEBM separation |
| 27 | +- **Fail-Safe Resume** — automatically resumes interrupted downloads |
| 28 | +- **Duplicate Prevention** — SHA-256 hashing prevents re-downloading files |
| 29 | +- **Rate Limiting** — adaptive throttling with exponential backoff prevents IP bans |
| 30 | +- **Download Verification** — MD5 checksum validation ensures file integrity |
| 31 | +- **Connection Pooling** — 4× connection pooling for faster concurrent downloads |
| 32 | +- **Real-Time Progress** — live bandwidth monitoring with ETA display |
| 33 | +- **Apple Silicon Native** — arm64 build optimized for M1/M2/M3/M4 chips |
41 | 34 |
|
42 | 35 | --- |
43 | 36 |
|
44 | | -## 🚀 Quick Start |
45 | | - |
46 | | -### Installation |
47 | | - |
48 | | -1. Download the latest `4Charm.dmg` from |
| 37 | +## Installation |
49 | 38 |
|
50 | | - [Releases](https://github.com/RazorBackRoar/4Charm/releases) |
| 39 | +1. Download the latest `4Charm.dmg` from [Releases](https://github.com/RazorBackRoar/4Charm/releases) |
| 40 | +2. Open the DMG and drag `4Charm.app` to `/Applications` |
| 41 | +3. First launch — right-click the app → **Open** to bypass Gatekeeper on the ad-hoc signed build |
51 | 42 |
|
52 | | -2. Drag `4Charm.app` to `/Applications` |
53 | | -3. **First Launch**: |
54 | | - |
55 | | -```bash |
56 | | - # If prompted with "App is damaged": |
57 | | - sudo xattr -cr /Applications/4Charm.app |
58 | | -``` |
| 43 | +--- |
59 | 44 |
|
60 | | -### Usage |
| 45 | +## Usage |
61 | 46 |
|
62 | | -1. **Launch App**: Open 4Charm from Applications |
63 | | -2. **Add URLs**: Paste 4chan thread or catalog URLs |
64 | | -3. **Download**: Click "Start Download" and watch the live log |
65 | | -4. **Enjoy**: Files are saved to your chosen download location |
| 47 | +1. **Add URLs** — paste any 4chan thread, catalog, or board URL |
| 48 | +2. **Start** — click Download and watch the live progress log |
| 49 | +3. **Enjoy** — files are saved to your chosen download folder with automatic organization |
66 | 50 |
|
67 | 51 | --- |
68 | 52 |
|
69 | | -## 🛠️ Development |
70 | | - |
71 | | -This project uses `.razorcore` for build tooling. |
| 53 | +## Development |
72 | 54 |
|
73 | | -### Prerequisites |
| 55 | +### Requirements |
74 | 56 |
|
75 | 57 | - Python 3.14 |
76 | | -- macOS 10.13+ |
| 58 | +- macOS 12.0+ |
| 59 | +- [uv](https://github.com/astral-sh/uv) |
77 | 60 |
|
78 | 61 | ### Setup |
79 | 62 |
|
80 | 63 | ```bash |
81 | 64 | git clone https://github.com/RazorBackRoar/4Charm.git |
82 | 65 | cd 4Charm |
83 | | -uv venv --python 3.14 |
84 | 66 | uv sync |
85 | | -uv add --editable ../.razorcore |
| 67 | +uv run python -m four_charm.main |
86 | 68 | ``` |
87 | 69 |
|
88 | | -### Build & Release |
| 70 | +### Build |
89 | 71 |
|
90 | 72 | ```bash |
91 | | -## Build app and create DMG without touching Git |
92 | 73 | razorbuild 4Charm |
| 74 | +# Output: dist/4Charm.dmg |
| 75 | +``` |
93 | 76 |
|
94 | | -## Save/release only after explicit Git approval |
95 | | -RAZORCORE_ALLOW_GIT_MUTATION=1 razorcore save 4Charm |
| 77 | +### Lint & Test |
| 78 | + |
| 79 | +```bash |
| 80 | +uv run ruff check . |
| 81 | +uv run ty check src --python-version 3.14 |
| 82 | +uv run pytest tests/ -q |
96 | 83 | ``` |
97 | 84 |
|
98 | 85 | --- |
99 | 86 |
|
100 | | -## 📜 License |
| 87 | +## License |
101 | 88 |
|
102 | | -MIT License - see [LICENSE](LICENSE) for details. |
| 89 | +MIT License — see [LICENSE](LICENSE) for details. |
103 | 90 | Copyright © 2026 RazorBackRoar |
0 commit comments