socdl 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
socdl-0.1.1/.gitignore ADDED
@@ -0,0 +1,53 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+ MANIFEST
23
+
24
+ # Virtual envs
25
+ .env
26
+ .venv
27
+ env/
28
+ venv/
29
+ ENV/
30
+
31
+ # IDE
32
+ .vscode/
33
+ .idea/
34
+ *.swp
35
+ *.swo
36
+ .DS_Store
37
+
38
+ # Testing
39
+ .pytest_cache/
40
+ .coverage
41
+ htmlcov/
42
+ .tox/
43
+ .mypy_cache/
44
+ .ruff_cache/
45
+
46
+ # socdl runtime data
47
+ *.session
48
+ *.session-*
49
+ history.db
50
+ config.local.toml
51
+
52
+ # OS
53
+ Thumbs.db
@@ -0,0 +1,31 @@
1
+ # Changelog
2
+
3
+ All notable changes to **socdl** will be documented here.
4
+ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
+
6
+ ## [0.1.1] — 2026-01-XX
7
+
8
+ ### Changed
9
+ - Enabled PyPI Trusted Publishing so tagged releases are automatically
10
+ uploaded to <https://pypi.org/project/socdl/>.
11
+
12
+ ## [0.1.0] — 2026-01-XX
13
+
14
+ ### Added
15
+ - First public release.
16
+ - **Standalone binaries** for Windows (x64) and Linux (x64) built with PyInstaller — no Python required.
17
+ - **One-liner installers**: `install.ps1` (Windows) and `install.sh` (Linux/macOS), with automatic fallback to `pip`.
18
+ - Engines can now run **in-process** (calling the yt-dlp / gallery-dl / instaloader APIs directly) when no external executable is available, so frozen binaries are fully self-contained.
19
+ - Automatic ffmpeg discovery, including well-known install locations (winget, scoop, choco, homebrew).
20
+ - Interactive Rich TUI with slash commands (`/help`, `/history`, `/watch`, `/paste`, `/open`, `/config`, `/lang`).
21
+ - Multi-engine router: **instaloader** for Instagram, **yt-dlp** for YouTube / TikTok video / Facebook, **gallery-dl** for Instagram carousel photos, TikTok photo slides, Twitter/X, Reddit.
22
+ - Platform detection with content-kind awareness (post, reel, story, profile, video, photo, playlist).
23
+ - Config file at platform-appropriate user config dir (`~/.config/socdl/config.toml` etc.).
24
+ - SQLite download history + `socdl history` subcommand.
25
+ - Clipboard watcher (`socdl watch`).
26
+ - Batch download from text file (`socdl -f links.txt`).
27
+ - Auto-update notifier (checks PyPI once per run).
28
+ - Bilingual UI: English + Bahasa Indonesia (`--lang en|id`).
29
+ - Quality presets: `best | 1080p | 720p | 480p | 360p | audio` (MP3 extract).
30
+ - `socdl detect <url>` for debugging.
31
+ - `socdl update` to upgrade underlying downloaders.
socdl-0.1.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Erzam Bayu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
socdl-0.1.1/PKG-INFO ADDED
@@ -0,0 +1,404 @@
1
+ Metadata-Version: 2.5
2
+ Name: socdl
3
+ Version: 0.1.1
4
+ Summary: A fast, friendly CLI to download photos & videos from Instagram, TikTok, YouTube, Twitter/X, Reddit, Facebook and more.
5
+ Project-URL: Homepage, https://github.com/Erzambayu/socdl
6
+ Project-URL: Repository, https://github.com/Erzambayu/socdl
7
+ Project-URL: Issues, https://github.com/Erzambayu/socdl/issues
8
+ Project-URL: Documentation, https://github.com/Erzambayu/socdl#readme
9
+ Project-URL: Changelog, https://github.com/Erzambayu/socdl/blob/main/CHANGELOG.md
10
+ Author-email: Erzam Bayu <erzambayu@users.noreply.github.com>
11
+ License: MIT
12
+ License-File: LICENSE
13
+ Keywords: cli,downloader,facebook,gallery-dl,instagram,instaloader,reddit,tiktok,tui,twitter,youtube,yt-dlp
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: End Users/Desktop
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.9
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Topic :: Internet :: WWW/HTTP
26
+ Classifier: Topic :: Multimedia :: Video
27
+ Requires-Python: >=3.9
28
+ Requires-Dist: click>=8.1
29
+ Requires-Dist: gallery-dl>=1.26
30
+ Requires-Dist: instaloader>=4.11
31
+ Requires-Dist: platformdirs>=4.0
32
+ Requires-Dist: pyperclip>=1.8
33
+ Requires-Dist: requests>=2.31
34
+ Requires-Dist: rich>=13.7
35
+ Requires-Dist: tomli-w>=1.0
36
+ Requires-Dist: tomli>=2.0; python_version < '3.11'
37
+ Requires-Dist: yt-dlp>=2024.1.0
38
+ Provides-Extra: build
39
+ Requires-Dist: pyinstaller>=6.6; extra == 'build'
40
+ Provides-Extra: dev
41
+ Requires-Dist: mypy>=1.8; extra == 'dev'
42
+ Requires-Dist: pytest-cov>=4.0; extra == 'dev'
43
+ Requires-Dist: pytest>=7.0; extra == 'dev'
44
+ Requires-Dist: ruff>=0.5; extra == 'dev'
45
+ Description-Content-Type: text/markdown
46
+
47
+ <div align="center">
48
+
49
+ # socdl
50
+
51
+ **Social media downloader for humans.**
52
+ _Instagram · TikTok · YouTube · Twitter/X · Reddit · Facebook_
53
+
54
+ [![PyPI](https://img.shields.io/pypi/v/socdl.svg?color=blue)](https://pypi.org/project/socdl/)
55
+ [![Python](https://img.shields.io/pypi/pyversions/socdl.svg)](https://pypi.org/project/socdl/)
56
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
57
+ [![CI](https://github.com/Erzambayu/socdl/actions/workflows/ci.yml/badge.svg)](https://github.com/Erzambayu/socdl/actions)
58
+
59
+ _Read this in another language: [🇮🇩 Bahasa Indonesia](#-bahasa-indonesia)_
60
+
61
+ </div>
62
+
63
+ ---
64
+
65
+ ## ✨ Highlights
66
+
67
+ - **One command for every platform.** Paste any link — socdl picks the best engine automatically.
68
+ - **Handles carousels properly.** Instagram photo + video posts? All items downloaded, not just the video.
69
+ - **Clean folders.** Organized by platform → uploader → dated filename. No mess.
70
+ - **Beautiful TUI.** Rich progress bars, colored tables, banners. Feels good to use.
71
+ - **Interactive or one-shot.** Run `socdl` for a REPL, or `socdl <url>` and go.
72
+ - **Clipboard watcher.** `socdl watch` — copy a link, it downloads. That's it.
73
+ - **Batch mode.** `socdl -f links.txt` — download hundreds of links at once.
74
+ - **History log.** `socdl history` — see everything you've grabbed.
75
+ - **Bilingual.** English + Bahasa Indonesia (`--lang en|id`).
76
+
77
+ ## 📦 Install
78
+
79
+ ### ⚡ One-liner (no Python required)
80
+
81
+ **Windows** (PowerShell):
82
+
83
+ ```powershell
84
+ irm https://raw.githubusercontent.com/Erzambayu/socdl/main/install.ps1 | iex
85
+ ```
86
+
87
+ **Linux / macOS** (bash):
88
+
89
+ ```bash
90
+ curl -fsSL https://raw.githubusercontent.com/Erzambayu/socdl/main/install.sh | bash
91
+ ```
92
+
93
+ The installers download the standalone binary from the latest
94
+ [release](https://github.com/Erzambayu/socdl/releases), put it on your `PATH`,
95
+ and fall back to `pip` automatically if a binary isn't available.
96
+
97
+ ### 🐍 Via Python package managers
98
+
99
+ ```bash
100
+ pip install socdl
101
+ ```
102
+
103
+ Or with [pipx](https://pipx.pypa.io/) (recommended, isolated env):
104
+
105
+ ```bash
106
+ pipx install socdl
107
+ ```
108
+
109
+ ### 📥 Manual download (standalone binary)
110
+
111
+ Grab the binary for your platform from the
112
+ [latest release](https://github.com/Erzambayu/socdl/releases/latest):
113
+
114
+ | Platform | Asset |
115
+ |---------------|--------------------------|
116
+ | Windows x64 | `socdl-windows-x64.exe` |
117
+ | Linux x64 | `socdl-linux-x64` |
118
+
119
+ ```bash
120
+ # Linux — make it executable and run
121
+ chmod +x socdl-linux-x64
122
+ ./socdl-linux-x64 --help
123
+ ```
124
+
125
+ **Requirements:** _none_ for the standalone binary. For `pip` install you need
126
+ Python 3.9+. Either way, [ffmpeg](https://ffmpeg.org/) is **optional but
127
+ recommended** for best YouTube quality.
128
+
129
+ <details>
130
+ <summary><b>Installing ffmpeg</b></summary>
131
+
132
+ | OS | Command |
133
+ |---------|--------------------------------------------|
134
+ | Windows | `winget install Gyan.FFmpeg` |
135
+ | macOS | `brew install ffmpeg` |
136
+ | Linux | `sudo apt install ffmpeg` / your distro |
137
+
138
+ </details>
139
+
140
+ ## 🚀 Quick start
141
+
142
+ **Interactive mode** — just run:
143
+
144
+ ```bash
145
+ socdl
146
+ ```
147
+
148
+ Paste any link, press Enter — done.
149
+
150
+ **One-shot mode:**
151
+
152
+ ```bash
153
+ socdl https://www.instagram.com/p/XXXX/
154
+ socdl https://youtu.be/XXXX https://vt.tiktok.com/XXXX
155
+ ```
156
+
157
+ **Batch from file:**
158
+
159
+ ```bash
160
+ socdl -f my-links.txt
161
+ ```
162
+
163
+ **Clipboard watcher** (auto-download on copy):
164
+
165
+ ```bash
166
+ socdl watch
167
+ ```
168
+
169
+ ## 🎛️ Commands
170
+
171
+ | Command | Description |
172
+ |-------------------------|------------------------------------------------------------|
173
+ | `socdl` | Launch interactive TUI |
174
+ | `socdl <url> [<url>…]` | Download URLs directly |
175
+ | `socdl -f links.txt` | Batch download from file |
176
+ | `socdl watch` | Clipboard watcher |
177
+ | `socdl history` | Show recent downloads |
178
+ | `socdl config` | Show config; use `--set key=value` to edit |
179
+ | `socdl update` | Upgrade yt-dlp / instaloader / gallery-dl |
180
+ | `socdl detect <url>` | Debug: print detected platform / kind |
181
+
182
+ **Options** (available on the main command):
183
+
184
+ ```
185
+ -o, --output PATH Override output directory
186
+ -q, --quality LEVEL best | 1080p | 720p | 480p | 360p | audio
187
+ --lang {en,id} Force UI language
188
+ -f, --file PATH Batch mode from text file
189
+ -V, --version Show version
190
+ ```
191
+
192
+ **Interactive slash commands** (inside `socdl`):
193
+
194
+ ```
195
+ /help Show help
196
+ /config Open config file
197
+ /history Show recent downloads
198
+ /watch Start clipboard watcher
199
+ /paste Download URL from clipboard
200
+ /open Open downloads folder
201
+ /lang en|id Switch UI language
202
+ /quit Exit
203
+ ```
204
+
205
+ ## ⚙️ Configuration
206
+
207
+ Config lives at:
208
+
209
+ - **Linux/macOS:** `~/.config/socdl/config.toml`
210
+ - **Windows:** `%APPDATA%\socdl\config.toml`
211
+
212
+ Sample:
213
+
214
+ ```toml
215
+ output_dir = "" # empty = ~/Downloads/socdl-downloads
216
+ subfolder_per_platform = true
217
+ subfolder_per_uploader = true
218
+
219
+ language = "en" # "en" | "id"
220
+ quality = "best" # best|1080p|720p|480p|360p|audio
221
+ embed_metadata = true
222
+ embed_thumbnail = true
223
+ concurrent_fragments = 4
224
+ restrict_filenames = true
225
+
226
+ check_updates = true
227
+ log_history = true
228
+
229
+ instagram_login = "" # your IG username (for private/story)
230
+ cookies_from_browser = "" # "" | chrome | firefox | edge | brave
231
+ ```
232
+
233
+ Edit inline:
234
+
235
+ ```bash
236
+ socdl config --set quality=1080p
237
+ socdl config --set language=id
238
+ socdl config --set output_dir=D:/media
239
+ socdl config --show
240
+ ```
241
+
242
+ ## 🔐 Private / login-required content
243
+
244
+ For Instagram stories, private accounts, age-restricted YouTube, etc.:
245
+
246
+ **Instagram** — one-time login via instaloader:
247
+
248
+ ```bash
249
+ socdl config --set instagram_login=your_username
250
+ instaloader -l your_username # asks password, saves session
251
+ ```
252
+
253
+ **YouTube / X / Reddit** — reuse your browser cookies:
254
+
255
+ ```bash
256
+ socdl config --set cookies_from_browser=chrome
257
+ ```
258
+
259
+ Supported browsers: `chrome`, `firefox`, `edge`, `brave`, `opera`, `vivaldi`.
260
+
261
+ ## 🗂️ Folder structure
262
+
263
+ ```
264
+ ~/Downloads/socdl-downloads/
265
+ ├── Instagram/<username>/2024-01-15_ABCDEF_1.jpg
266
+ ├── TikTok/<username>/2024-01-15_video-title.mp4
267
+ ├── YouTube/<uploader>/Video Title [XXXX].mp4
268
+ ├── Twitter/<username>/2024-01-15_tweetid_1.jpg
269
+ └── Reddit/<subreddit>/postid_01.jpg
270
+ ```
271
+
272
+ ## 🌍 Supported sites
273
+
274
+ Core:
275
+
276
+ - **Instagram** — posts, reels, carousels (photo+video), profile scrape, stories\*
277
+ - **TikTok** — videos, photo slides, profiles
278
+ - **YouTube** — videos, shorts, playlists
279
+ - **Twitter/X** — tweets with images/video, threads
280
+ - **Reddit** — posts (image, video, galleries)
281
+ - **Facebook** — public videos and posts\*
282
+
283
+ \* May require login/cookies. See [Private content](#-private--login-required-content).
284
+
285
+ Plus **1000+ other sites** via yt-dlp fallback (Twitch clips, Vimeo, SoundCloud, …).
286
+
287
+ ## 🧑‍💻 Development
288
+
289
+ ```bash
290
+ git clone https://github.com/Erzambayu/socdl.git
291
+ cd socdl
292
+ python -m venv .venv
293
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
294
+ pip install -e ".[dev]"
295
+ socdl --help
296
+ ```
297
+
298
+ Run tests / lint:
299
+
300
+ ```bash
301
+ pytest
302
+ ruff check .
303
+ ```
304
+
305
+ ## 🤝 Contributing
306
+
307
+ PRs welcome! See [CONTRIBUTING.md](CONTRIBUTING.md).
308
+
309
+ ## 📄 License
310
+
311
+ MIT © [Erzam Bayu](https://github.com/Erzambayu)
312
+
313
+ ---
314
+
315
+ ## 🇮🇩 Bahasa Indonesia
316
+
317
+ **socdl** — downloader sosmed yang ramah manusia. Instagram, TikTok, YouTube, Twitter/X, Reddit, Facebook — semua dari satu command.
318
+
319
+ ### Kenapa socdl?
320
+
321
+ - Paste link apa aja, socdl otomatis pilih engine yang paling cocok.
322
+ - **Instagram carousel foto+video?** Semua item ke-download, bukan cuma video-nya.
323
+ - Folder rapi otomatis: platform → uploader → tanggal.
324
+ - TUI cakep pake Rich (progress bar, tabel warna).
325
+ - Bisa interactive (`socdl`) atau one-shot (`socdl <link>`).
326
+ - **Clipboard watcher** — copy link, langsung download. Ga usah bolak-balik terminal.
327
+ - Batch dari file `.txt`, history log SQLite, auto-update checker.
328
+ - **Bilingual** — bisa English atau Indonesia (`--lang id`).
329
+
330
+ ### Install
331
+
332
+ **One-liner (tanpa Python):**
333
+
334
+ ```powershell
335
+ # Windows (PowerShell):
336
+ irm https://raw.githubusercontent.com/Erzambayu/socdl/main/install.ps1 | iex
337
+ ```
338
+
339
+ ```bash
340
+ # Linux / macOS:
341
+ curl -fsSL https://raw.githubusercontent.com/Erzambayu/socdl/main/install.sh | bash
342
+ ```
343
+
344
+ Atau download manual binary dari [Releases](https://github.com/Erzambayu/socdl/releases/latest).
345
+
346
+ **Via pip:**
347
+
348
+ ```bash
349
+ pip install socdl
350
+ # atau (lebih rapi):
351
+ pipx install socdl
352
+ ```
353
+
354
+ Butuh ffmpeg (opsional tapi disaranin). Binary standalone ga butuh Python.
355
+
356
+ ### Pake
357
+
358
+ ```bash
359
+ # Mode interactive (paling enak):
360
+ socdl --lang id
361
+
362
+ # One-shot:
363
+ socdl https://www.instagram.com/p/XXXX/
364
+
365
+ # Batch dari file:
366
+ socdl -f links.txt
367
+
368
+ # Auto-download apapun yang lo copy:
369
+ socdl watch
370
+ ```
371
+
372
+ ### Config
373
+
374
+ Edit gampang:
375
+
376
+ ```bash
377
+ socdl config --set language=id
378
+ socdl config --set quality=1080p
379
+ socdl config --set output_dir=D:/downloads
380
+ socdl config --show
381
+ ```
382
+
383
+ ### Konten private (story IG, dll)
384
+
385
+ ```bash
386
+ # Instagram
387
+ socdl config --set instagram_login=username_lo
388
+ instaloader -l username_lo # login sekali, sesi tersimpan
389
+
390
+ # YouTube/X/Reddit — pake cookies browser:
391
+ socdl config --set cookies_from_browser=chrome
392
+ ```
393
+
394
+ ### Support
395
+
396
+ Ada bug atau request? Buka [issue di GitHub](https://github.com/Erzambayu/socdl/issues).
397
+
398
+ ---
399
+
400
+ <div align="center">
401
+
402
+ Made with ❤️ by [Erzam Bayu](https://github.com/Erzambayu)
403
+
404
+ </div>