lumenfetch 2.1.2__tar.gz → 2.2.0__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.
Files changed (45) hide show
  1. lumenfetch-2.2.0/.github/dependabot.yml +14 -0
  2. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/.github/workflows/publish.yml +7 -7
  3. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/.github/workflows/tests.yml +5 -5
  4. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/.gitignore +7 -0
  5. lumenfetch-2.2.0/CHANGELOG.id.md +98 -0
  6. lumenfetch-2.2.0/CHANGELOG.md +98 -0
  7. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/CONTRIBUTING.id.md +25 -24
  8. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/CONTRIBUTING.md +21 -22
  9. lumenfetch-2.2.0/PKG-INFO +686 -0
  10. lumenfetch-2.2.0/README.id.md +653 -0
  11. lumenfetch-2.2.0/README.md +653 -0
  12. lumenfetch-2.2.0/SECURITY.md +23 -0
  13. lumenfetch-2.2.0/assets/logo.png +0 -0
  14. lumenfetch-2.2.0/assets/lumenfetch.ico +0 -0
  15. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/cli.py +7 -1
  16. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/constants.py +1 -1
  17. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/detector.py +13 -2
  18. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/downloader.py +106 -54
  19. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/i18n.py +10 -2
  20. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/options.py +15 -5
  21. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/update_checker.py +2 -2
  22. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/lumenfetch.spec +40 -38
  23. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/main.py +175 -112
  24. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/pyproject.toml +2 -2
  25. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/tests/test_features.py +162 -1
  26. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/tests/test_main.py +212 -212
  27. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/tests/test_utils.py +634 -634
  28. lumenfetch-2.1.2/PKG-INFO +0 -516
  29. lumenfetch-2.1.2/README.id.md +0 -487
  30. lumenfetch-2.1.2/README.md +0 -483
  31. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/LICENSE +0 -0
  32. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/__init__.py +0 -0
  33. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/doctor.py +0 -0
  34. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/errors.py +0 -0
  35. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/ffmpeg.py +0 -0
  36. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/log.py +0 -0
  37. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/core/utils.py +0 -0
  38. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/downloads/.gitkeep +0 -0
  39. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/requirements-dev.txt +0 -0
  40. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/requirements.txt +0 -0
  41. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/tests/__init__.py +0 -0
  42. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/tests/conftest.py +0 -0
  43. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/tests/test_detector.py +0 -0
  44. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/tests/test_downloader.py +0 -0
  45. {lumenfetch-2.1.2 → lumenfetch-2.2.0}/tests/test_options.py +0 -0
@@ -0,0 +1,14 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: "/"
5
+ schedule:
6
+ interval: weekly
7
+ open-pull-requests-limit: 5
8
+ groups:
9
+ minor-and-patch:
10
+ update-types: ["minor", "patch"]
11
+ - package-ecosystem: github-actions
12
+ directory: "/"
13
+ schedule:
14
+ interval: weekly
@@ -1,4 +1,4 @@
1
- name: Publish
1
+ name: Publish
2
2
 
3
3
  on:
4
4
  release:
@@ -13,10 +13,10 @@ jobs:
13
13
  runs-on: windows-latest
14
14
  steps:
15
15
  - name: Checkout repo
16
- uses: actions/checkout@v4
16
+ uses: actions/checkout@v7
17
17
 
18
18
  - name: Setup Python
19
- uses: actions/setup-python@v5
19
+ uses: actions/setup-python@v7
20
20
  with:
21
21
  python-version: "3.12"
22
22
 
@@ -26,13 +26,13 @@ jobs:
26
26
  pip install pyinstaller
27
27
 
28
28
  - name: Build Windows exe
29
- run: pyinstaller --onefile --console --name lumenfetch main.py
29
+ run: pyinstaller lumenfetch.spec --noconfirm
30
30
 
31
31
  - name: Smoke test exe
32
32
  run: ./dist/lumenfetch.exe --version
33
33
 
34
34
  - name: Attach exe to release
35
- uses: softprops/action-gh-release@v2
35
+ uses: softprops/action-gh-release@v3
36
36
  with:
37
37
  files: dist/lumenfetch.exe
38
38
 
@@ -44,10 +44,10 @@ jobs:
44
44
  id-token: write
45
45
  steps:
46
46
  - name: Checkout repo
47
- uses: actions/checkout@v4
47
+ uses: actions/checkout@v7
48
48
 
49
49
  - name: Setup Python
50
- uses: actions/setup-python@v5
50
+ uses: actions/setup-python@v7
51
51
  with:
52
52
  python-version: "3.12"
53
53
 
@@ -1,4 +1,4 @@
1
- name: Tests
1
+ name: Tests
2
2
 
3
3
  on:
4
4
  push:
@@ -8,17 +8,17 @@ on:
8
8
 
9
9
  jobs:
10
10
  test:
11
- runs-on: ubuntu-latest
11
+ runs-on: ubuntu-24.04
12
12
  strategy:
13
13
  matrix:
14
- python-version: ["3.9", "3.10", "3.11", "3.12"]
14
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
15
15
 
16
16
  steps:
17
17
  - name: Checkout repo
18
- uses: actions/checkout@v4
18
+ uses: actions/checkout@v7
19
19
 
20
20
  - name: Setup Python ${{ matrix.python-version }}
21
- uses: actions/setup-python@v5
21
+ uses: actions/setup-python@v7
22
22
  with:
23
23
  python-version: ${{ matrix.python-version }}
24
24
 
@@ -12,3 +12,10 @@ config.json
12
12
  dist/
13
13
  build/
14
14
  *.egg-info/
15
+
16
+ # local-only dev notes
17
+ .dev/
18
+ SECURITY_MAP.md
19
+ SECURITY_REVIEW.md
20
+ SECURITY_REPORT.md
21
+ rancangan.md
@@ -0,0 +1,98 @@
1
+ # Changelog
2
+
3
+ ## v2.2.0
4
+
5
+ Startup lebih cepat dan pipeline rilis lebih ramping.
6
+
7
+ ### Peningkatan
8
+
9
+ - **Startup lebih cepat.** Dependency berat (yt-dlp, sebagian rich) di-import secara lazy, jadi command seperti `--version` merespons jauh lebih cepat.
10
+ - **Build exe Windows yang lebih kecil dan konsisten.** Build rilis sekarang memakai file spec, menyertakan icon logo, dan mengecualikan toolkit GUI yang tidak dipakai.
11
+ - **CI mencakup Python 3.13 dan 3.14**, dan GitHub Actions diperbarui ke versi major terbaru.
12
+ - **Dependabot menjaga dependency tetap terkini** untuk ekosistem pip dan github-actions.
13
+ - **Bersih-bersih internal.** Logika setup ffmpeg yang duplikat digabungkan, dan update checker tidak lagi memuat yt-dlp saat import.
14
+
15
+ ## v2.1.2
16
+
17
+ Rilis ini memperbaiki kegagalan download berulang (0 bytes, lalu error) yang terjadi bahkan untuk video publik.
18
+
19
+ ### Fitur baru
20
+
21
+ - **Cek JavaScript di Doctor.** `lumenfetch --doctor` sekarang juga mengecek JavaScript runtime (Deno/Node), yang dibutuhkan untuk signature challenge YouTube.
22
+
23
+ ### Peningkatan
24
+
25
+ - **Override `player_client` yang dipaksakan dihapus.** Itu memicu eksperimen SABR-only YouTube (cuma 5 format, bukan sekitar 46). Sekarang pakai default yt-dlp yang dirawat maintainer.
26
+ - **Error format yang transien ikut di-retry.** Error format sekarang mendapat backoff seperti error koneksi.
27
+ - **Crash post-processing tidak lagi menggagalkan video yang sebenarnya utuh.** Crash (mis. embed thumbnail) videonya tetap disimpan dengan warning.
28
+ - **Download paralel judul duplikat dapat nama file unik**, tidak saling merusak.
29
+
30
+ ### Perbaikan bug
31
+
32
+ - **Hasil 0-byte sekarang gagal dengan jujur + bersih-bersih.** Hasil kosong tidak lagi dilaporkan sebagai sukses atau nyampah di folder.
33
+ - **File batch ber-prefix BOM tidak lagi dilewati diam-diam**, dan kegagalan per-URL di batch sekarang ditampilkan.
34
+
35
+ ## v2.1.1
36
+
37
+ Rilis ini membuat English menjadi bahasa tampilan default dan me-refresh halaman PyPI.
38
+
39
+ ### Fitur baru
40
+
41
+ - **`lumenfetch doctor`.** Mendiagnosa setup dalam hitungan detik, tiap cek dengan saran fix spesifik.
42
+ - **Notice self-update.** Memberi tahu kalau ada lumenfetch lebih baru di PyPI.
43
+ - **`--ui-lang en|id`.** Bahasa tampilan via flag, `LUMENFETCH_LANG`, atau setting `ui_lang` yang diingat.
44
+
45
+ ### Breaking changes
46
+
47
+ - **Bahasa tampilan default sekarang English.** Jalankan `lumenfetch --ui-lang id` sekali untuk kembali ke Indonesia; pilihannya diingat.
48
+
49
+ ## v2.1.0
50
+
51
+ Rilis ini menambahkan doctor setup, notice self-update, dan dukungan SponsorBlock.
52
+
53
+ ### Fitur baru
54
+
55
+ - **`lumenfetch doctor`.** Mendiagnosa setup dalam hitungan detik: Python, ffmpeg, `curl_cffi`, versi yt-dlp, versi lumenfetch, keterjangkauan YouTube, keterbacaan cookies browser, dan keterulisan config, masing-masing dengan saran fix spesifik.
56
+ - **Notice self-update.** Memberi tahu kalau ada lumenfetch lebih baru di PyPI (`pip install --upgrade lumenfetch`), di samping notice yt-dlp yang sudah ada.
57
+ - **`--sponsorblock`.** Lewati segmen SponsorBlock, mis. `--sponsorblock sponsor intro outro`.
58
+ - **`--write-info-json`.** Simpan metadata video sebagai `.info.json` di sebelah file.
59
+ - **`.m3u` otomatis.** Playlist audio (`--playlist all`) sekarang juga nulis file `.m3u`.
60
+
61
+ ### Peningkatan
62
+
63
+ - **Download paralel yang aman.** Dua worker batch untuk judul yang sama tidak lagi saling menimpa file (reservasi nama atomik, terverifikasi live 2/2).
64
+ - **Batch gagal yang bersuara.** Mode batch sekarang menampilkan URL mana yang gagal dan kenapa, bukan gagal diam-diam (termasuk file ber-prefix BOM dari PowerShell).
65
+ - **Terminal yang tenang.** Noise mentah `ERROR:` dari yt-dlp dialihkan ke `lumenfetch.log`; terminal cuma menampilkan pesan ramah.
66
+ - **Modul baru `core/cli.py` dan `core/doctor.py`.** Parsing argumen dan diagnostik dipisah dari `main.py`; `main.py` dirampingkan.
67
+ - **Coverage gate dan trusted publishing.** CI menegakkan coverage gate 80% dan publish ke PyPI tanpa token.
68
+ - **Exe Windows.** `lumenfetch.exe` terlampir di release, tanpa perlu Python.
69
+
70
+ ### Perbaikan bug
71
+
72
+ - **URL batch ber-prefix BOM tidak lagi dilewati diam-diam.**
73
+ - **Mode batch tidak lagi menelan error per-URL** (ditampilkan bersama URL yang gagal).
74
+ - **Download paralel judul duplikat tidak lagi merusak output satu sama lain.**
75
+
76
+ ## v2.0.0
77
+
78
+ Lumenfetch sekarang downloader YouTube yang fokus: video MP4 dan audio MP3, tidak yang lain.
79
+
80
+ ### Fitur baru
81
+
82
+ - **Video MP4.** Quality Best/1080p/720p/480p/360p/Worst dengan thumbnail ter-embed otomatis.
83
+ - **Audio MP3.** Bitrate Best/320kbps/192kbps/128kbps.
84
+ - **CLI English dan Indonesia.** `--ui-lang en|id`; menu, prompt, tabel, pesan error, dan `--help` sepenuhnya bisa diterjemahkan. English menjadi default baru, diingat setelahnya. Juga via `LUMENFETCH_LANG` atau nilai `ui_lang` di config.
85
+ - **Dokumentasi dua bahasa.** `README.md` dan `CONTRIBUTING.md` berbahasa Inggris, dengan versi Indonesia di `README.id.md` dan `CONTRIBUTING.id.md`.
86
+
87
+ ### Breaking changes
88
+
89
+ - **YouTube-only.** Cuma link `youtube.com`, `youtu.be`, dan `music.youtube.com` yang diterima. Platform lain ditolak dengan pesan yang jelas, bukan error menyesatkan.
90
+ - **Dependency yang dihapus.** `instaloader` dan `browser-cookie3` hilang; install jadi lebih ringan. Cookies browser/file untuk YouTube tetap jalan.
91
+ - **Template nama file output.** Nama file mengikuti `%(platform)s_%(title)s_%(year)s`, mis. `YouTube_Lofi-Hip-Hop-Radio_2026.mp4`.
92
+
93
+ ### Peningkatan
94
+
95
+ - **Modul baru `core/i18n.py`.** Kamus teks tampilan (en/id); semua teks user lewat `t("key")`.
96
+ - **Taxonomy baru `core/errors.py`.** Setiap kegagalan yt-dlp dipetakan ke kind spesifik (bot-check, cookies, rate-limit, removed, dll) dengan pesan yang actionable, termasuk retry otomatis tanpa cookies kalau database cookies terkunci.
97
+ - **`curl_cffi` sekarang dependency wajib** biar lolos bot-check YouTube.
98
+ - **Config user pindah** ke folder config OS (`%APPDATA%` di Windows, `~/.config` di Linux, `~/Library/Application Support` di macOS), dengan migrasi sekali dari lokasi lama.
@@ -0,0 +1,98 @@
1
+ # Changelog
2
+
3
+ ## v2.2.0
4
+
5
+ Startup is faster and the release pipeline is leaner.
6
+
7
+ ### Improvements
8
+
9
+ - **Faster startup.** Heavy dependencies (yt-dlp, parts of rich) are imported lazily, so commands like `--version` respond noticeably faster.
10
+ - **Smaller, consistent Windows exe build.** The release build now uses the spec file, ships the logo icon, and excludes unused GUI toolkits.
11
+ - **CI covers Python 3.13 and 3.14**, and GitHub Actions were updated to their latest major versions.
12
+ - **Dependabot keeps dependencies current** in the pip and github-actions ecosystems.
13
+ - **Internal cleanup.** Duplicated ffmpeg setup logic was unified, and the update checker no longer loads yt-dlp at import time.
14
+
15
+ ## v2.1.2
16
+
17
+ This release fixes repeated download failures (0 bytes, then an error) that happened even for public videos.
18
+
19
+ ### New features
20
+
21
+ - **Doctor JavaScript check.** `lumenfetch --doctor` now also checks for a JavaScript runtime (Deno/Node), required for YouTube signature challenges.
22
+
23
+ ### Improvements
24
+
25
+ - **Removed the forced `player_client` override.** It triggered YouTube's SABR-only experiment (5 formats served instead of about 46). yt-dlp's maintained defaults are used now.
26
+ - **Transient format errors retried.** Format errors now get backoff like connection errors.
27
+ - **Post-processing crashes no longer fail an otherwise good download.** A crash (for example thumbnail embed) keeps the video with a warning.
28
+ - **Parallel batch downloads of duplicate titles get unique filenames** instead of corrupting each other.
29
+
30
+ ### Bug fixes
31
+
32
+ - **0-byte results now fail loudly with cleanup.** Empty results are no longer reported as success or left in the folder.
33
+ - **Batch files with a BOM prefix are no longer skipped silently**, and per-URL batch failures are now reported.
34
+
35
+ ## v2.1.1
36
+
37
+ This release makes English the default display language and refreshes the PyPI page.
38
+
39
+ ### New features
40
+
41
+ - **`lumenfetch doctor`.** Diagnoses your setup in seconds, each check with a specific fix hint.
42
+ - **Self-update notice.** Tells you when a newer lumenfetch is on PyPI.
43
+ - **`--ui-lang en|id`.** Display language via flag, `LUMENFETCH_LANG`, or the remembered `ui_lang` setting.
44
+
45
+ ### Breaking changes
46
+
47
+ - **Default display language is now English.** Run `lumenfetch --ui-lang id` once to keep Bahasa Indonesia; the choice is remembered afterwards.
48
+
49
+ ## v2.1.0
50
+
51
+ This release adds a setup doctor, a self-update notice, and SponsorBlock support.
52
+
53
+ ### New features
54
+
55
+ - **`lumenfetch doctor`.** Diagnoses your setup in seconds: Python, ffmpeg, `curl_cffi`, yt-dlp version, lumenfetch version, YouTube reachability, browser-cookie readability, and config writability, each with a specific fix hint.
56
+ - **Self-update notice.** Tells you when a newer lumenfetch is on PyPI (`pip install --upgrade lumenfetch`), next to the existing yt-dlp notice.
57
+ - **`--sponsorblock`.** Skip SponsorBlock segments, e.g. `--sponsorblock sponsor intro outro`.
58
+ - **`--write-info-json`.** Save video metadata as `.info.json` next to the file.
59
+ - **Auto `.m3u`.** Audio playlists (`--playlist all`) now also write an `.m3u` file.
60
+
61
+ ### Improvements
62
+
63
+ - **Parallel-safe downloads.** Two batch workers for the same title no longer overwrite each other's file (atomic name reservation, verified live 2/2).
64
+ - **Loud batch failures.** Batch mode now prints which URL failed and why instead of failing silently (also handles BOM-prefixed files from PowerShell).
65
+ - **Quiet terminal.** Raw yt-dlp `ERROR:` noise is redirected to `lumenfetch.log`; the terminal only shows friendly messages.
66
+ - **New `core/cli.py` and `core/doctor.py` modules.** Argument parsing and diagnostics were split out of `main.py`; `main.py` is slimmed down.
67
+ - **Coverage gate and trusted publishing.** CI enforces an 80% coverage gate and publishes to PyPI without a token.
68
+ - **Windows exe.** `lumenfetch.exe` is attached to the release, no Python needed.
69
+
70
+ ### Bug fixes
71
+
72
+ - **Batch URLs with a BOM prefix are no longer silently skipped.**
73
+ - **Batch mode no longer swallows per-URL errors** (they are printed with the failing URL).
74
+ - **Parallel downloads of duplicate titles no longer corrupt each other's output.**
75
+
76
+ ## v2.0.0
77
+
78
+ Lumenfetch is now a focused YouTube downloader: MP4 video and MP3 audio, nothing else.
79
+
80
+ ### New features
81
+
82
+ - **MP4 video.** Quality Best/1080p/720p/480p/360p/Worst with auto-embedded thumbnail.
83
+ - **MP3 audio.** Bitrate Best/320kbps/192kbps/128kbps.
84
+ - **English and Indonesian CLI.** `--ui-lang en|id`; menus, prompts, tables, error messages, and `--help` are fully translatable. English is the default, remembered afterwards. Also via `LUMENFETCH_LANG` or the `ui_lang` config value.
85
+ - **Bilingual documentation.** `README.md` and `CONTRIBUTING.md` in English, with Indonesian versions in `README.id.md` and `CONTRIBUTING.id.md`.
86
+
87
+ ### Breaking changes
88
+
89
+ - **YouTube-only.** Only `youtube.com`, `youtu.be`, and `music.youtube.com` links are accepted. Other platforms are rejected with a clear message instead of a misleading error.
90
+ - **Removed dependencies.** `instaloader` and `browser-cookie3` are gone; install is lighter. Browser/file cookies for YouTube still work.
91
+ - **Output filename template.** Filenames follow `%(platform)s_%(title)s_%(year)s`, e.g. `YouTube_Lofi-Hip-Hop-Radio_2026.mp4`.
92
+
93
+ ### Improvements
94
+
95
+ - **New `core/i18n.py` module.** A pure dictionary of display text (en/id); all user-facing text goes through `t("key")`.
96
+ - **New `core/errors.py` taxonomy.** Every yt-dlp failure maps to a specific kind (bot-check, cookies, rate-limit, removed, etc.) with an actionable message, including automatic retry without cookies when the cookie database is locked.
97
+ - **`curl_cffi` is now a required dependency** so YouTube bot-checks pass.
98
+ - **User config moved** to the OS config dir (`%APPDATA%` on Windows, `~/.config` on Linux, `~/Library/Application Support` on macOS), with one-time migration from the old location.
@@ -1,40 +1,40 @@
1
1
  # Kontribusi ke Lumenfetch
2
2
 
3
- Makasih udah mau bantu kembangin Lumenfetch. Panduan ini biar kontribusi kamu gampang diproses.
3
+ Makasih sudah mau bantu kembangin Lumenfetch. Panduan ini biar kontribusi kamu gampang diproses.
4
4
 
5
5
  [English](CONTRIBUTING.md) | **Bahasa Indonesia**
6
6
 
7
- ## 🛠 Setup Development
7
+ ## Setup Development
8
8
 
9
- 1. Fork & clone repo ini
10
- 2. Install dependency (termasuk tools testing & lint):
9
+ 1. Fork dan clone repo ini
10
+ 2. Install dependency (termasuk tools testing dan lint):
11
11
  ```bash
12
12
  pip install -r requirements-dev.txt
13
13
  ```
14
14
  3. Pastikan `ffmpeg` sudah terinstall di sistem kamu (lihat bagian Requirements di README)
15
15
 
16
- ## 🗂 Struktur & Prinsip Modul
16
+ ## Struktur dan Prinsip Modul
17
17
 
18
- Lumenfetch sengaja dipisah per tanggung jawab, tolong dijaga konsistensinya kalau nambah/ubah kode:
18
+ Lumenfetch sengaja dipisah per tanggung jawab. Tolong jaga konsistensinya kalau menambah/mengubah kode:
19
19
 
20
20
  | File | Tanggung jawab | Tidak boleh |
21
- |------|-----------------|-------------|
21
+ |------|----------------|-------------|
22
22
  | `core/constants.py` | Nilai shared (versi, format, batas) | Logic bisnis |
23
- | `core/errors.py` | Klasifikasi error + pesan ramah terpusat | Logic download/deteksi |
23
+ | `core/errors.py` | Klasifikasi error dan pesan ramah terpusat | Logic download/deteksi |
24
24
  | `core/i18n.py` | Katalog string UI (EN default, ID opsional) | Logic bisnis |
25
- | `core/cli.py` | Parsing argumen + bangun pilihan non-interaktif | Logic bisnis |
25
+ | `core/cli.py` | Parsing argumen dan bangun pilihan non-interaktif | Logic bisnis |
26
26
  | `core/doctor.py` | Diagnosa setup (ffmpeg, dep, cookies, jaringan) | Download/deteksi |
27
27
  | `core/ffmpeg.py` | Deteksi ffmpeg sistem dulu, bundled fallback | Download/deteksi |
28
28
  | `core/log.py` | Logging file terpusat | Tampilan rich/menu |
29
29
  | `core/detector.py` | Deteksi info video YouTube via yt-dlp | Mendownload apa pun |
30
30
  | `core/downloader.py` | Proses download, progress hook, retry | Menampilkan menu/prompt |
31
- | `core/options.py` | Semua interaksi & tampilan menu (rich) | Logic download |
31
+ | `core/options.py` | Semua interaksi dan tampilan menu (rich) | Logic download |
32
32
  | `core/utils.py` | Helper murni: sanitasi, format, config user | Bergantung ke CLI atau jaringan |
33
- | `main.py` | Menyatukan semua modul lewat CLI + loop utama | Logic bisnis baru |
33
+ | `main.py` | Menyatukan semua modul lewat CLI dan loop utama | Logic bisnis baru |
34
34
 
35
- Kalau nambah fitur, coba taruh di modul yang paling sesuai dulu sebelum bikin file baru.
35
+ Kalau menambah fitur, taruh di modul yang paling sesuai dulu sebelum bikin file baru.
36
36
 
37
- ## ✅ Sebelum Bikin Pull Request
37
+ ## Sebelum Bikin Pull Request
38
38
 
39
39
  Jalankan ini dulu di root project:
40
40
 
@@ -43,30 +43,31 @@ pytest tests/ -v
43
43
  ruff check .
44
44
  ```
45
45
 
46
- Pastikan semua test lulus dan tidak ada warning lint baru. GitHub Actions juga bakal jalanin ini otomatis di setiap PR.
46
+ Pastikan semua test lulus dan tidak ada warning lint baru. GitHub Actions juga menjalankan ini otomatis di setiap PR.
47
47
 
48
- ## 📝 Commit Message
48
+ ## Commit Message
49
49
 
50
50
  Pakai prefix singkat biar history gampang dibaca:
51
51
 
52
- - `feat:` — fitur baru
53
- - `fix:` — perbaikan bug
54
- - `docs:` — perubahan dokumentasi (README, CONTRIBUTING, dll)
55
- - `refactor:` — perubahan struktur kode tanpa mengubah perilaku
56
- - `test:` — nambah/ubah test
52
+ - `feat:` fitur baru
53
+ - `fix:` perbaikan bug
54
+ - `docs:` perubahan dokumentasi (README, CONTRIBUTING, dll)
55
+ - `refactor:` perubahan struktur kode tanpa mengubah perilaku
56
+ - `test:` nambah/ubah test
57
57
 
58
58
  Contoh: `fix: handle playlist YouTube satu video`
59
59
 
60
- ## 🐛 Lapor Bug / Request Fitur
60
+ ## Lapor Bug / Request Fitur
61
61
 
62
62
  Buka [Issues](../../issues) baru, sertakan:
63
+
63
64
  - Link yang bermasalah (kalau ada, hapus info pribadi)
64
65
  - Pesan error yang muncul di terminal
65
66
  - Langkah buat reproduce masalahnya
66
67
 
67
- ## 🤝 Pull Request
68
+ ## Pull Request
68
69
 
69
70
  1. Buat branch baru dari `main`, kasih nama yang jelas (misal `fix/playlist-satu-video`)
70
71
  2. Pastikan `pytest` dan `ruff check .` lulus
71
- 3. Jelasin di deskripsi PR apa yang diubah dan kenapa
72
- 4. Tunggu review — mungkin ada request perubahan kecil sebelum di-merge
72
+ 3. Jelaskan di deskripsi PR apa yang diubah dan kenapa
73
+ 4. Tunggu review, mungkin ada request perubahan kecil sebelum di-merge
@@ -2,41 +2,39 @@
2
2
 
3
3
  Thanks for helping develop Lumenfetch. This guide keeps contributions easy to review.
4
4
 
5
- **Bahasa Indonesia** | [English](CONTRIBUTING.md)
5
+ **English** | [Bahasa Indonesia](CONTRIBUTING.id.md)
6
6
 
7
- > Indonesian version: [`CONTRIBUTING.id.md`](CONTRIBUTING.id.md)
7
+ ## Development Setup
8
8
 
9
- ## 🛠 Development Setup
10
-
11
- 1. Fork & clone this repo
12
- 2. Install dependencies (including testing & lint tools):
9
+ 1. Fork and clone this repo
10
+ 2. Install dependencies (including testing and lint tools):
13
11
  ```bash
14
12
  pip install -r requirements-dev.txt
15
13
  ```
16
14
  3. Make sure `ffmpeg` is installed on your system (see Requirements in the README)
17
15
 
18
- ## 🗂 Module Structure & Principles
16
+ ## Module Structure and Principles
19
17
 
20
- Lumenfetch is split by responsibility - please keep it consistent when adding/changing code:
18
+ Lumenfetch is split by responsibility. Keep it consistent when adding or changing code:
21
19
 
22
20
  | File | Responsibility | Must not |
23
21
  |------|----------------|----------|
24
22
  | `core/constants.py` | Shared values (version, formats, limits) | Business logic |
25
- | `core/errors.py` | Central error classification + friendly messages | Download/detect logic |
23
+ | `core/errors.py` | Central error classification and friendly messages | Download/detect logic |
26
24
  | `core/i18n.py` | UI string catalog (EN default, ID optional) | Business logic |
27
- | `core/cli.py` | Argument parsing + non-interactive choice building | Business logic |
25
+ | `core/cli.py` | Argument parsing and non-interactive choice building | Business logic |
28
26
  | `core/doctor.py` | Setup diagnosis (ffmpeg, deps, cookies, network) | Download/detect |
29
27
  | `core/ffmpeg.py` | System ffmpeg first, bundled fallback | Download/detect |
30
28
  | `core/log.py` | Central file logging | Rich display/menus |
31
29
  | `core/detector.py` | YouTube video info detection via yt-dlp | Download anything |
32
30
  | `core/downloader.py` | Download process, progress hook, retry | Show menus/prompts |
33
- | `core/options.py` | All interaction & menus (rich) | Download logic |
31
+ | `core/options.py` | All interaction and menus (rich) | Download logic |
34
32
  | `core/utils.py` | Pure helpers: sanitizing, formatting, user config | Depend on CLI or network |
35
- | `main.py` | Ties everything together via CLI + main loop | New business logic |
33
+ | `main.py` | Ties everything together via CLI and main loop | New business logic |
36
34
 
37
35
  When adding a feature, put it in the most fitting module first before creating a new file.
38
36
 
39
- ## ✅ Before Opening a Pull Request
37
+ ## Before Opening a Pull Request
40
38
 
41
39
  Run this in the project root:
42
40
 
@@ -47,28 +45,29 @@ ruff check .
47
45
 
48
46
  Make sure all tests pass and there are no new lint warnings. GitHub Actions also runs these automatically on every PR.
49
47
 
50
- ## 📝 Commit Messages
48
+ ## Commit Messages
51
49
 
52
50
  Use short prefixes so history stays readable:
53
51
 
54
- - `feat:` — new feature
55
- - `fix:` — bug fix
56
- - `docs:` — documentation changes (README, CONTRIBUTING, etc.)
57
- - `refactor:` — code structure changes without behavior change
58
- - `test:` — add/change tests
52
+ - `feat:` new feature
53
+ - `fix:` bug fix
54
+ - `docs:` documentation changes (README, CONTRIBUTING, etc.)
55
+ - `refactor:` code structure changes without behavior change
56
+ - `test:` add/change tests
59
57
 
60
58
  Example: `fix: handle single-video YouTube playlist`
61
59
 
62
- ## 🐛 Bug Reports / Feature Requests
60
+ ## Bug Reports / Feature Requests
63
61
 
64
62
  Open a new [Issue](../../issues) and include:
63
+
65
64
  - The problematic link (if any, remove personal info)
66
65
  - The error message shown in the terminal
67
66
  - Steps to reproduce the problem
68
67
 
69
- ## 🤝 Pull Requests
68
+ ## Pull Requests
70
69
 
71
70
  1. Create a new branch from `main` with a clear name (e.g. `fix/playlist-single-video`)
72
71
  2. Make sure `pytest` and `ruff check .` pass
73
72
  3. Explain in the PR description what changed and why
74
- 4. Wait for review - there may be small change requests before merging
73
+ 4. Wait for review, there may be small change requests before merging