savehub-cli 1.0.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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Sadiq Musayev
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.
@@ -0,0 +1,126 @@
1
+ Metadata-Version: 2.4
2
+ Name: savehub-cli
3
+ Version: 1.0.0
4
+ Summary: Multilingual CLI tool to download videos, audio and images from social media platforms
5
+ Author: Sadiq Musayev
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Sadiq-Musayev/SaveHub-CLI
8
+ Project-URL: Repository, https://github.com/Sadiq-Musayev/SaveHub-CLI
9
+ Project-URL: Issues, https://github.com/Sadiq-Musayev/SaveHub-CLI/issues
10
+ Keywords: youtube,instagram,downloader,cli,mp3,mp4,social-media
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Multimedia :: Video
21
+ Classifier: Topic :: Utilities
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: yt-dlp>=2024.1.0
26
+ Requires-Dist: questionary>=2.0.0
27
+ Requires-Dist: colorama>=0.4.6
28
+ Requires-Dist: requests>=2.31.0
29
+ Requires-Dist: python-dotenv>=1.0.0
30
+ Dynamic: license-file
31
+
32
+ # SaveHub CLI
33
+
34
+ **Multilingual social media downloader — MP4 · MP3 · Silent Video**
35
+
36
+ > Supports: 🇦🇿 Azərbaycanca · 🇬🇧 English · 🇹🇷 Türkçe
37
+
38
+ ---
39
+
40
+ ## Install
41
+
42
+ ```bash
43
+ pip install savehub-cli
44
+ ```
45
+
46
+ > **Requires Python 3.10+** and [FFmpeg](https://ffmpeg.org/download.html) (for MP3 conversion).
47
+
48
+ ---
49
+
50
+ ## Usage
51
+
52
+ ```bash
53
+ savehub-cli
54
+ # or
55
+ savehub
56
+ ```
57
+
58
+ 1. Select your language
59
+ 2. Choose **Start Download Tool**
60
+ 3. Paste any supported URL
61
+ 4. Select format: **MP4 · MP3 · Silent Video**
62
+ 5. Files are saved to the `downloads/` folder
63
+
64
+ ---
65
+
66
+ ## Supported Platforms
67
+
68
+ | Platform | Video | Audio | Photo |
69
+ |-------------|:-----:|:-----:|:-----:|
70
+ | YouTube | ✅ | ✅ | — |
71
+ | Instagram | ✅ | ✅ | ✅ |
72
+ | Facebook | ✅ | — | — |
73
+ | X (Twitter) | ✅ | — | — |
74
+ | LinkedIn | ✅ | — | — |
75
+ | Snapchat | ✅ | — | — |
76
+
77
+ ---
78
+
79
+ ## Download Formats
80
+
81
+ | Format | Description |
82
+ |--------------|------------------------------|
83
+ | MP4 | Video + Audio (best quality) |
84
+ | MP3 | Audio only (192kbps) |
85
+ | Silent Video | Video only, no audio |
86
+
87
+ ---
88
+
89
+ ## Controls During Download
90
+
91
+ | Key | Action |
92
+ |-----|----------------|
93
+ | `S` | Pause / Resume |
94
+ | `C` | Cancel |
95
+
96
+ ---
97
+
98
+ ## Requirements
99
+
100
+ - Python ≥ 3.10
101
+ - FFmpeg (for MP3 export) — [Download here](https://ffmpeg.org/download.html)
102
+ - Dependencies: `yt-dlp`, `questionary`, `colorama`, `requests`, `python-dotenv`
103
+
104
+ ---
105
+
106
+ ## Logs
107
+
108
+ All download events are saved in `logs/YYYY-MM-DD.log`.
109
+
110
+ ---
111
+
112
+ ## Contributing
113
+
114
+ 1. Fork the repo
115
+ 2. Create your branch: `git checkout -b feature/my-feature`
116
+ 3. Commit: `git commit -m "Add my feature"`
117
+ 4. Push: `git push origin feature/my-feature`
118
+ 5. Open a Pull Request
119
+
120
+ Bug reports and feature requests → [GitHub Issues](https://github.com/Sadiq-Musayev/SaveHub-CLI/issues)
121
+
122
+ ---
123
+
124
+ ## License
125
+
126
+ [MIT](LICENSE) © 2025 Sadiq Musayev
@@ -0,0 +1,95 @@
1
+ # SaveHub CLI
2
+
3
+ **Multilingual social media downloader — MP4 · MP3 · Silent Video**
4
+
5
+ > Supports: 🇦🇿 Azərbaycanca · 🇬🇧 English · 🇹🇷 Türkçe
6
+
7
+ ---
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ pip install savehub-cli
13
+ ```
14
+
15
+ > **Requires Python 3.10+** and [FFmpeg](https://ffmpeg.org/download.html) (for MP3 conversion).
16
+
17
+ ---
18
+
19
+ ## Usage
20
+
21
+ ```bash
22
+ savehub-cli
23
+ # or
24
+ savehub
25
+ ```
26
+
27
+ 1. Select your language
28
+ 2. Choose **Start Download Tool**
29
+ 3. Paste any supported URL
30
+ 4. Select format: **MP4 · MP3 · Silent Video**
31
+ 5. Files are saved to the `downloads/` folder
32
+
33
+ ---
34
+
35
+ ## Supported Platforms
36
+
37
+ | Platform | Video | Audio | Photo |
38
+ |-------------|:-----:|:-----:|:-----:|
39
+ | YouTube | ✅ | ✅ | — |
40
+ | Instagram | ✅ | ✅ | ✅ |
41
+ | Facebook | ✅ | — | — |
42
+ | X (Twitter) | ✅ | — | — |
43
+ | LinkedIn | ✅ | — | — |
44
+ | Snapchat | ✅ | — | — |
45
+
46
+ ---
47
+
48
+ ## Download Formats
49
+
50
+ | Format | Description |
51
+ |--------------|------------------------------|
52
+ | MP4 | Video + Audio (best quality) |
53
+ | MP3 | Audio only (192kbps) |
54
+ | Silent Video | Video only, no audio |
55
+
56
+ ---
57
+
58
+ ## Controls During Download
59
+
60
+ | Key | Action |
61
+ |-----|----------------|
62
+ | `S` | Pause / Resume |
63
+ | `C` | Cancel |
64
+
65
+ ---
66
+
67
+ ## Requirements
68
+
69
+ - Python ≥ 3.10
70
+ - FFmpeg (for MP3 export) — [Download here](https://ffmpeg.org/download.html)
71
+ - Dependencies: `yt-dlp`, `questionary`, `colorama`, `requests`, `python-dotenv`
72
+
73
+ ---
74
+
75
+ ## Logs
76
+
77
+ All download events are saved in `logs/YYYY-MM-DD.log`.
78
+
79
+ ---
80
+
81
+ ## Contributing
82
+
83
+ 1. Fork the repo
84
+ 2. Create your branch: `git checkout -b feature/my-feature`
85
+ 3. Commit: `git commit -m "Add my feature"`
86
+ 4. Push: `git push origin feature/my-feature`
87
+ 5. Open a Pull Request
88
+
89
+ Bug reports and feature requests → [GitHub Issues](https://github.com/Sadiq-Musayev/SaveHub-CLI/issues)
90
+
91
+ ---
92
+
93
+ ## License
94
+
95
+ [MIT](LICENSE) © 2025 Sadiq Musayev
@@ -0,0 +1,50 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "savehub-cli"
7
+ version = "1.0.0"
8
+ description = "Multilingual CLI tool to download videos, audio and images from social media platforms"
9
+ readme = "README.md"
10
+ license = { text = "MIT" }
11
+ requires-python = ">=3.10"
12
+ authors = [
13
+ { name = "Sadiq Musayev" }
14
+ ]
15
+ keywords = ["youtube", "instagram", "downloader", "cli", "mp3", "mp4", "social-media"]
16
+ classifiers = [
17
+ "Development Status :: 5 - Production/Stable",
18
+ "Environment :: Console",
19
+ "Intended Audience :: End Users/Desktop",
20
+ "License :: OSI Approved :: MIT License",
21
+ "Operating System :: OS Independent",
22
+ "Programming Language :: Python :: 3",
23
+ "Programming Language :: Python :: 3.10",
24
+ "Programming Language :: Python :: 3.11",
25
+ "Programming Language :: Python :: 3.12",
26
+ "Topic :: Multimedia :: Video",
27
+ "Topic :: Utilities",
28
+ ]
29
+ dependencies = [
30
+ "yt-dlp>=2024.1.0",
31
+ "questionary>=2.0.0",
32
+ "colorama>=0.4.6",
33
+ "requests>=2.31.0",
34
+ "python-dotenv>=1.0.0",
35
+ ]
36
+
37
+ [project.scripts]
38
+ savehub-cli = "savehub_cli.main:main"
39
+ savehub = "savehub_cli.main:main"
40
+
41
+ [project.urls]
42
+ Homepage = "https://github.com/Sadiq-Musayev/SaveHub-CLI"
43
+ Repository = "https://github.com/Sadiq-Musayev/SaveHub-CLI"
44
+ Issues = "https://github.com/Sadiq-Musayev/SaveHub-CLI/issues"
45
+
46
+ [tool.setuptools.packages.find]
47
+ where = ["src"]
48
+
49
+ [tool.setuptools.package-data]
50
+ "savehub_cli" = ["py.typed"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,8 @@
1
+ """
2
+ SaveHub CLI - Multilingual Social Media Downloader
3
+ Supports: Azərbaycanca (AZ), English (EN), Türkçe (TR)
4
+ """
5
+
6
+ __version__ = "1.0.0"
7
+ __author__ = "Sadiq Musayev"
8
+ __license__ = "MIT"
@@ -0,0 +1,25 @@
1
+ # SaveHub CLI - Configuration
2
+
3
+ LANGUAGES = ['AZ', 'EN', 'TR']
4
+
5
+ PLATFORM_CONFIG = {
6
+ 'YouTube': {'patterns': ['youtube.com', 'youtu.be'], 'supports': ['video', 'playlist', 'audio']},
7
+ 'Instagram': {'patterns': ['instagram.com'], 'supports': ['video', 'photo']},
8
+ 'Facebook': {'patterns': ['facebook.com', 'fb.watch'], 'supports': ['video']},
9
+ 'Twitter/X': {'patterns': ['twitter.com', 'x.com'], 'supports': ['video', 'gif']},
10
+ 'LinkedIn': {'patterns': ['linkedin.com'], 'supports': ['video']},
11
+ 'Snapchat': {'patterns': ['snapchat.com'], 'supports': ['video']},
12
+ }
13
+
14
+ FORMAT_SETTINGS = {
15
+ 'date_format': '%Y-%m-%d',
16
+ 'time_format': '%H:%M:%S',
17
+ 'log_filename_format': '%Y-%m-%d',
18
+ }
19
+
20
+ DOWNLOAD_SETTINGS = {
21
+ 'output_dir': 'downloads',
22
+ 'log_dir': 'logs',
23
+ 'mp3_quality': '192',
24
+ 'default_format': 'mp4',
25
+ }
@@ -0,0 +1,73 @@
1
+ """
2
+ SaveHub CLI - Main Entry Point
3
+ Multilingual Multimedia Downloader
4
+ Supports: Azərbaycanca (AZ), English (EN), Türkçe (TR)
5
+ """
6
+
7
+ import sys
8
+ import os
9
+ from pathlib import Path
10
+
11
+
12
+ def main():
13
+ """Main application entry point — called by pip-installed console script."""
14
+
15
+ # Ensure working directories exist in user's CWD (not package dir)
16
+ Path('downloads').mkdir(exist_ok=True)
17
+ Path('logs').mkdir(exist_ok=True)
18
+
19
+ from savehub_cli.modules.menu import select_language, show_main_menu, display_header
20
+ from savehub_cli.modules.menu import show_documentation, show_terms, show_feedback
21
+ from savehub_cli.modules.downloader import start_download
22
+ from savehub_cli.translations import get_text
23
+
24
+ try:
25
+ language = select_language()
26
+
27
+ while True:
28
+ os.system('cls' if os.name == 'nt' else 'clear')
29
+ display_header(language)
30
+
31
+ choice = show_main_menu(language)
32
+
33
+ if choice == 'option_docs':
34
+ os.system('cls' if os.name == 'nt' else 'clear')
35
+ show_documentation(language)
36
+ input(f"\n{get_text('press_enter', language)}")
37
+
38
+ elif choice == 'option_terms':
39
+ os.system('cls' if os.name == 'nt' else 'clear')
40
+ show_terms(language)
41
+ input(f"\n{get_text('press_enter', language)}")
42
+
43
+ elif choice == 'option_feedback':
44
+ os.system('cls' if os.name == 'nt' else 'clear')
45
+ show_feedback(language)
46
+ input(f"\n{get_text('press_enter', language)}")
47
+
48
+ elif choice == 'option_start':
49
+ start_download(language)
50
+
51
+ elif choice == 'option_exit':
52
+ os.system('cls' if os.name == 'nt' else 'clear')
53
+ print(f"\n{get_text('goodbye', language)}")
54
+ print(f"{get_text('see_you', language)}\n")
55
+ break
56
+
57
+ except (KeyboardInterrupt, EOFError):
58
+ print("\n\n👋 Goodbye!")
59
+ sys.exit(0)
60
+ except Exception as e:
61
+ import traceback
62
+ log_msg = traceback.format_exc()
63
+ try:
64
+ from savehub_cli.modules.utils import log_event
65
+ log_event(f"Unhandled exception: {log_msg}", 'ERROR')
66
+ except Exception:
67
+ pass
68
+ print("\n❌ Unexpected error occurred. Check logs for details.")
69
+ sys.exit(1)
70
+
71
+
72
+ if __name__ == "__main__":
73
+ main()
@@ -0,0 +1,12 @@
1
+ """
2
+ SaveHub CLI - Modules Package
3
+ """
4
+
5
+ __version__ = '1.0.0'
6
+ __author__ = 'Sadiq Musayev'
7
+
8
+ from . import downloader
9
+ from . import menu
10
+ from . import utils
11
+
12
+ __all__ = ['downloader', 'menu', 'utils']