snapforge 2.1.0__tar.gz → 3.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,206 @@
1
+ Metadata-Version: 2.4
2
+ Name: snapforge
3
+ Version: 3.0.0
4
+ Summary: Powerful and fast image editor! 😎
5
+ Author: Ali.Shm
6
+ Requires-Python: >=3.7
7
+ Description-Content-Type: text/markdown
8
+ Requires-Dist: Pillow>=9.0.0
9
+ Requires-Dist: requests>=2.25.0
10
+ Requires-Dist: packaging>=20.0
11
+
12
+ # 📸 SnapForge
13
+
14
+ [![PyPI](https://img.shields.io/pypi/v/snapforge)](...)
15
+ [![Python](https://img.shields.io/pypi/pyversions/snapforge)](...)
16
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](...)
17
+ [![Made with Pillow](https://img.shields.io/badge/Built%20With-Pillow-blue)](...)
18
+ [![Status](https://img.shields.io/badge/status-active-success)](...)
19
+
20
+ > **Forge your images with a single chain of commands.**
21
+
22
+ A lightweight, fast and intuitive Python library for image processing built on top of Pillow.
23
+
24
+ Perfect for resizing, filtering, enhancing and transforming images .
25
+
26
+ ## ✨ Features
27
+
28
+ - 🚀 **Fast & Lightweight**: Minimal overhead for quick image tasks.
29
+
30
+ - 🔄 **Format Conversion**: Easily switch between JPEG, PNG, BMP, TIFF and more.
31
+
32
+ - 📏 **Smart Resizing**: High-quality scaling and resizing capabilities.
33
+
34
+ - 🛠️ **Easy API**: Designed with developer experience in mind—simple commands for complex tasks.
35
+
36
+ - 🐍 **Pythonic**: Follows Python's best practices for a seamless integration.
37
+
38
+ - 📷 **Powered by Pillow**: Uses the trusted Pillow library for reliable image processing.
39
+
40
+ - ⚡ **Efficient Processing**: Designed for smooth and practical image manipulation workflows.
41
+
42
+ - 🧾 **MIT License**: Open-source and free to use in personal and commercial projects.
43
+
44
+ ## 🔄 Professional Format Converter 🔄
45
+ Our Storage.convert Supports **more** than **8 Formats** :
46
+ JPEG, JPG , PNG, WEBP, GIF, TIFF, BMP, ICO and etc.
47
+
48
+
49
+ ## 📦 Installation
50
+
51
+ You can install SnapForge directly from PyPI using `pip`:
52
+ ```bash
53
+ pip install snapforge
54
+ ```
55
+
56
+ ## 🚀 Quick Start
57
+
58
+ Here is a quick example to get you started with SnapForge:
59
+ ```bash
60
+ from snapforge import Storage , Geometry
61
+
62
+ img=Storage.load(r"C:\Users\almahdilaptop\Pictures\sharp.png")
63
+ img=Geometry.round_corners(img,40)
64
+ img=Storage.save(img,r"C:\Users\almahdilaptop\Pictures\light.png")
65
+
66
+ ```
67
+
68
+ # 📖 Available Modules
69
+
70
+ SnapForge is now **fully modular** 🔧 — each module has a single responsibility and can be imported independently:
71
+
72
+ ```python
73
+ from snapforge import Storage, Geometry, Effects, Overlays, Inspector, SnapForgeUpdater
74
+ ```
75
+
76
+ - 📐 **Geometry** — resizing, cropping, rotating and transforming
77
+ - 💾 **Storage** — loading, saving and format conversion
78
+ - 🔍 **Inspector** — metadata, histogram and color analysis
79
+ - 🎨 **Effects** — lighting and filters
80
+ - 🖼️ **Overlays** — text, watermark, borders and blending
81
+ - 🔄 **SnapForgeUpdater** — update checks and version comparison
82
+
83
+ # 📦 Available Methods
84
+
85
+ Here is the complete list of all available methods in each **snapforge** module:
86
+
87
+ ### 📐 Geometry
88
+
89
+ | Method | Description | Example |
90
+ | --- | --- | --- |
91
+ | `Geometry.resize(img, w, h)` | Change image dimensions | `Geometry.resize(img, 800, 600)` |
92
+ | `Geometry.thumbnail(img, w, h)` | Resize while keeping aspect ratio | `Geometry.thumbnail(img, 500, 500)` |
93
+ | `Geometry.fit(img, w, h)` | Resize and crop to exact dimensions | `Geometry.fit(img, 1080, 1080)` |
94
+ | `Geometry.crop(img, l, t, r, b)` | Crop image | `Geometry.crop(img, 0, 0, 100, 100)` |
95
+ | `Geometry.rotate(img, a)` | Rotate image | `Geometry.rotate(img, 90)` |
96
+ | `Geometry.flip(img, dir)` | Flip image | `Geometry.flip(img, "horizontal")` |
97
+ | `Geometry.round_corners(img, radius)` | Round image corners | `Geometry.round_corners(img, 40)` |
98
+
99
+ ---
100
+
101
+ ### 💾 Storage
102
+
103
+ | Method | Description | Example |
104
+ | --- | --- | --- |
105
+ | `Storage.load(path)` | Load image from file | `Storage.load("photo.jpg")` |
106
+ | `Storage.save(img, name)` | Save image | `Storage.save(img, "result.jpg")` |
107
+ | `Storage.convert(img, fmt)` | Change image format (PNG, JPG, WEBP…) | `Storage.convert(img, "PNG")` |
108
+ | `Storage.optimize(img, q)` | Set JPEG quality | `Storage.optimize(img, 85)` |
109
+
110
+ ---
111
+
112
+ ### 🔍 Inspector
113
+
114
+ | Method | Description | Example |
115
+ | --- | --- | --- |
116
+ | `Inspector.get_metadata(img)` | Extract detailed image metadata | `Inspector.get_metadata(img)` |
117
+ | `Inspector.histogram(img)` | Generate histogram data | `Inspector.histogram(img)` |
118
+ | `Inspector.compare(img)` | Display metadata and processing summary | `Inspector.compare(img)` |
119
+ | `Inspector.extract_color_palette(img)` | Get dominant colors as Hex codes | `Inspector.extract_color_palette(img)` |
120
+
121
+ ---
122
+
123
+ ### 🎨 Effects (Lighting & Filters)
124
+
125
+ | Method | Description | Example |
126
+ | --- | --- | --- |
127
+ | `Effects.apply_brightness(img, f)` | Adjust brightness | `Effects.apply_brightness(img, 1.2)` |
128
+ | `Effects.apply_contrast(img, f)` | Adjust contrast | `Effects.apply_contrast(img, 1.5)` |
129
+ | `Effects.adjust_gamma(img, g)` | Correct image gamma | `Effects.adjust_gamma(img, 1.3)` |
130
+ | `Effects.auto_enhance(img)` | Improve brightness, contrast and sharpness | `Effects.auto_enhance(img)` |
131
+ | `Effects.invert(img)` | Invert image colors | `Effects.invert(img)` |
132
+ | `Effects.apply_sepia(img)` | Classic sepia effect | `Effects.apply_sepia(img)` |
133
+ | `Effects.apply_grayscale(img, f)` | Convert to grayscale | `Effects.apply_grayscale(img, 1.0)` |
134
+ | `Effects.apply_blur(img, r)` | Gaussian blur | `Effects.apply_blur(img, 5.0)` |
135
+ | `Effects.apply_sharpen(img, f)` | Sharpen image | `Effects.apply_sharpen(img, 1.0)` |
136
+ | `Effects.apply_camscanner(img)` | Document scanner effect | `Effects.apply_camscanner(img)` |
137
+ | `Effects.apply_preset(img, name)` | Apply a professional preset | `Effects.apply_preset(img, "vintage")` |
138
+
139
+ ---
140
+
141
+ ### 🖼️ Overlays
142
+
143
+ | Method | Description | Example |
144
+ | --- | --- | --- |
145
+ | `Overlays.add_watermark(img, path)` | Add watermark | `Overlays.add_watermark(img, "logo.png")` |
146
+ | `Overlays.add_text(img, text, pos)` | Draw text | `Overlays.add_text(img, "Hello!", (50, 50))` |
147
+ | `Overlays.add_border(img, size, color)` | Add border | `Overlays.add_border(img, 10, (0, 0, 0))` |
148
+ | `Overlays.double_exposure(img, img2, mode)` | Blend with another image | `Overlays.double_exposure(img, "layer.png", "blend")` |
149
+
150
+ ---
151
+
152
+ ### 🔄 SnapForgeUpdater
153
+
154
+ | Method | Description | Example |
155
+ | --- | --- | --- |
156
+ | `SnapForgeUpdater.__init__(package_name, current_version)` | Initialize the updater with the package name and current version | `SnapForgeUpdater("snapforge", "3.0.0")` |
157
+ | `SnapForgeUpdater._check_logic()` | Check PyPI in the background for a newer release | `updater._check_logic()` |
158
+ | `SnapForgeUpdater._notify_user(latest_version, upload_time)` | Display a notification when a new version is available | `updater._notify_user("3.0.1", "2026-08-12 10:30:00")` |
159
+ | `SnapForgeUpdater.start_check()` | Start the update check in a background daemon thread | `updater.start_check()` |
160
+
161
+
162
+ ## 🛠️ Requirements
163
+
164
+ To use `SnapForge`, ensure you have the following installed:
165
+
166
+ * **Python:** 3.7 or higher
167
+ * **Dependencies:**
168
+ * `Pillow` (for image processing)
169
+ * `requests` (for automatic update checks)
170
+ * `packaging` (for version comparison logic)
171
+
172
+ ## 🤝 Contributing
173
+
174
+ Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
175
+
176
+ ## 🌟 More Projects
177
+
178
+ If you enjoy SnapForge, you might also like this project ,too:
179
+
180
+ ### PixSlim
181
+
182
+ A Python image and ... compression library focused on reducing file size while preserving quality.
183
+
184
+
185
+ ## 📜 License
186
+
187
+ Distributed under the MIT License.
188
+
189
+ ## ❤️ Support
190
+
191
+ If you find SnapForge useful, your support means a lot!
192
+
193
+ You can help by:
194
+
195
+ - 📦 Installing the package and trying it in your projects
196
+ - 📝 Sharing feedback and suggestions
197
+ - 🐛 Reporting bugs and improvements
198
+ - 🌟 Recommending SnapForge to other Python developers
199
+
200
+ 🧩 Every piece of feedback helps make SnapForge better. 🙏
201
+
202
+ ## 👤 Author
203
+
204
+ ### Ali.Shm
205
+
206
+ **Project Maintainer**
@@ -0,0 +1,195 @@
1
+ # 📸 SnapForge
2
+
3
+ [![PyPI](https://img.shields.io/pypi/v/snapforge)](...)
4
+ [![Python](https://img.shields.io/pypi/pyversions/snapforge)](...)
5
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](...)
6
+ [![Made with Pillow](https://img.shields.io/badge/Built%20With-Pillow-blue)](...)
7
+ [![Status](https://img.shields.io/badge/status-active-success)](...)
8
+
9
+ > **Forge your images with a single chain of commands.**
10
+
11
+ A lightweight, fast and intuitive Python library for image processing built on top of Pillow.
12
+
13
+ Perfect for resizing, filtering, enhancing and transforming images .
14
+
15
+ ## ✨ Features
16
+
17
+ - 🚀 **Fast & Lightweight**: Minimal overhead for quick image tasks.
18
+
19
+ - 🔄 **Format Conversion**: Easily switch between JPEG, PNG, BMP, TIFF and more.
20
+
21
+ - 📏 **Smart Resizing**: High-quality scaling and resizing capabilities.
22
+
23
+ - 🛠️ **Easy API**: Designed with developer experience in mind—simple commands for complex tasks.
24
+
25
+ - 🐍 **Pythonic**: Follows Python's best practices for a seamless integration.
26
+
27
+ - 📷 **Powered by Pillow**: Uses the trusted Pillow library for reliable image processing.
28
+
29
+ - ⚡ **Efficient Processing**: Designed for smooth and practical image manipulation workflows.
30
+
31
+ - 🧾 **MIT License**: Open-source and free to use in personal and commercial projects.
32
+
33
+ ## 🔄 Professional Format Converter 🔄
34
+ Our Storage.convert Supports **more** than **8 Formats** :
35
+ JPEG, JPG , PNG, WEBP, GIF, TIFF, BMP, ICO and etc.
36
+
37
+
38
+ ## 📦 Installation
39
+
40
+ You can install SnapForge directly from PyPI using `pip`:
41
+ ```bash
42
+ pip install snapforge
43
+ ```
44
+
45
+ ## 🚀 Quick Start
46
+
47
+ Here is a quick example to get you started with SnapForge:
48
+ ```bash
49
+ from snapforge import Storage , Geometry
50
+
51
+ img=Storage.load(r"C:\Users\almahdilaptop\Pictures\sharp.png")
52
+ img=Geometry.round_corners(img,40)
53
+ img=Storage.save(img,r"C:\Users\almahdilaptop\Pictures\light.png")
54
+
55
+ ```
56
+
57
+ # 📖 Available Modules
58
+
59
+ SnapForge is now **fully modular** 🔧 — each module has a single responsibility and can be imported independently:
60
+
61
+ ```python
62
+ from snapforge import Storage, Geometry, Effects, Overlays, Inspector, SnapForgeUpdater
63
+ ```
64
+
65
+ - 📐 **Geometry** — resizing, cropping, rotating and transforming
66
+ - 💾 **Storage** — loading, saving and format conversion
67
+ - 🔍 **Inspector** — metadata, histogram and color analysis
68
+ - 🎨 **Effects** — lighting and filters
69
+ - 🖼️ **Overlays** — text, watermark, borders and blending
70
+ - 🔄 **SnapForgeUpdater** — update checks and version comparison
71
+
72
+ # 📦 Available Methods
73
+
74
+ Here is the complete list of all available methods in each **snapforge** module:
75
+
76
+ ### 📐 Geometry
77
+
78
+ | Method | Description | Example |
79
+ | --- | --- | --- |
80
+ | `Geometry.resize(img, w, h)` | Change image dimensions | `Geometry.resize(img, 800, 600)` |
81
+ | `Geometry.thumbnail(img, w, h)` | Resize while keeping aspect ratio | `Geometry.thumbnail(img, 500, 500)` |
82
+ | `Geometry.fit(img, w, h)` | Resize and crop to exact dimensions | `Geometry.fit(img, 1080, 1080)` |
83
+ | `Geometry.crop(img, l, t, r, b)` | Crop image | `Geometry.crop(img, 0, 0, 100, 100)` |
84
+ | `Geometry.rotate(img, a)` | Rotate image | `Geometry.rotate(img, 90)` |
85
+ | `Geometry.flip(img, dir)` | Flip image | `Geometry.flip(img, "horizontal")` |
86
+ | `Geometry.round_corners(img, radius)` | Round image corners | `Geometry.round_corners(img, 40)` |
87
+
88
+ ---
89
+
90
+ ### 💾 Storage
91
+
92
+ | Method | Description | Example |
93
+ | --- | --- | --- |
94
+ | `Storage.load(path)` | Load image from file | `Storage.load("photo.jpg")` |
95
+ | `Storage.save(img, name)` | Save image | `Storage.save(img, "result.jpg")` |
96
+ | `Storage.convert(img, fmt)` | Change image format (PNG, JPG, WEBP…) | `Storage.convert(img, "PNG")` |
97
+ | `Storage.optimize(img, q)` | Set JPEG quality | `Storage.optimize(img, 85)` |
98
+
99
+ ---
100
+
101
+ ### 🔍 Inspector
102
+
103
+ | Method | Description | Example |
104
+ | --- | --- | --- |
105
+ | `Inspector.get_metadata(img)` | Extract detailed image metadata | `Inspector.get_metadata(img)` |
106
+ | `Inspector.histogram(img)` | Generate histogram data | `Inspector.histogram(img)` |
107
+ | `Inspector.compare(img)` | Display metadata and processing summary | `Inspector.compare(img)` |
108
+ | `Inspector.extract_color_palette(img)` | Get dominant colors as Hex codes | `Inspector.extract_color_palette(img)` |
109
+
110
+ ---
111
+
112
+ ### 🎨 Effects (Lighting & Filters)
113
+
114
+ | Method | Description | Example |
115
+ | --- | --- | --- |
116
+ | `Effects.apply_brightness(img, f)` | Adjust brightness | `Effects.apply_brightness(img, 1.2)` |
117
+ | `Effects.apply_contrast(img, f)` | Adjust contrast | `Effects.apply_contrast(img, 1.5)` |
118
+ | `Effects.adjust_gamma(img, g)` | Correct image gamma | `Effects.adjust_gamma(img, 1.3)` |
119
+ | `Effects.auto_enhance(img)` | Improve brightness, contrast and sharpness | `Effects.auto_enhance(img)` |
120
+ | `Effects.invert(img)` | Invert image colors | `Effects.invert(img)` |
121
+ | `Effects.apply_sepia(img)` | Classic sepia effect | `Effects.apply_sepia(img)` |
122
+ | `Effects.apply_grayscale(img, f)` | Convert to grayscale | `Effects.apply_grayscale(img, 1.0)` |
123
+ | `Effects.apply_blur(img, r)` | Gaussian blur | `Effects.apply_blur(img, 5.0)` |
124
+ | `Effects.apply_sharpen(img, f)` | Sharpen image | `Effects.apply_sharpen(img, 1.0)` |
125
+ | `Effects.apply_camscanner(img)` | Document scanner effect | `Effects.apply_camscanner(img)` |
126
+ | `Effects.apply_preset(img, name)` | Apply a professional preset | `Effects.apply_preset(img, "vintage")` |
127
+
128
+ ---
129
+
130
+ ### 🖼️ Overlays
131
+
132
+ | Method | Description | Example |
133
+ | --- | --- | --- |
134
+ | `Overlays.add_watermark(img, path)` | Add watermark | `Overlays.add_watermark(img, "logo.png")` |
135
+ | `Overlays.add_text(img, text, pos)` | Draw text | `Overlays.add_text(img, "Hello!", (50, 50))` |
136
+ | `Overlays.add_border(img, size, color)` | Add border | `Overlays.add_border(img, 10, (0, 0, 0))` |
137
+ | `Overlays.double_exposure(img, img2, mode)` | Blend with another image | `Overlays.double_exposure(img, "layer.png", "blend")` |
138
+
139
+ ---
140
+
141
+ ### 🔄 SnapForgeUpdater
142
+
143
+ | Method | Description | Example |
144
+ | --- | --- | --- |
145
+ | `SnapForgeUpdater.__init__(package_name, current_version)` | Initialize the updater with the package name and current version | `SnapForgeUpdater("snapforge", "3.0.0")` |
146
+ | `SnapForgeUpdater._check_logic()` | Check PyPI in the background for a newer release | `updater._check_logic()` |
147
+ | `SnapForgeUpdater._notify_user(latest_version, upload_time)` | Display a notification when a new version is available | `updater._notify_user("3.0.1", "2026-08-12 10:30:00")` |
148
+ | `SnapForgeUpdater.start_check()` | Start the update check in a background daemon thread | `updater.start_check()` |
149
+
150
+
151
+ ## 🛠️ Requirements
152
+
153
+ To use `SnapForge`, ensure you have the following installed:
154
+
155
+ * **Python:** 3.7 or higher
156
+ * **Dependencies:**
157
+ * `Pillow` (for image processing)
158
+ * `requests` (for automatic update checks)
159
+ * `packaging` (for version comparison logic)
160
+
161
+ ## 🤝 Contributing
162
+
163
+ Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
164
+
165
+ ## 🌟 More Projects
166
+
167
+ If you enjoy SnapForge, you might also like this project ,too:
168
+
169
+ ### PixSlim
170
+
171
+ A Python image and ... compression library focused on reducing file size while preserving quality.
172
+
173
+
174
+ ## 📜 License
175
+
176
+ Distributed under the MIT License.
177
+
178
+ ## ❤️ Support
179
+
180
+ If you find SnapForge useful, your support means a lot!
181
+
182
+ You can help by:
183
+
184
+ - 📦 Installing the package and trying it in your projects
185
+ - 📝 Sharing feedback and suggestions
186
+ - 🐛 Reporting bugs and improvements
187
+ - 🌟 Recommending SnapForge to other Python developers
188
+
189
+ 🧩 Every piece of feedback helps make SnapForge better. 🙏
190
+
191
+ ## 👤 Author
192
+
193
+ ### Ali.Shm
194
+
195
+ **Project Maintainer**
@@ -0,0 +1,13 @@
1
+ # snapforge/__init__.py
2
+
3
+ from .modules.geometry import Geometry
4
+ from .modules.effects import Effects
5
+ from .modules.overlays import Overlays
6
+ from .utils.storage import Storage
7
+ from .utils.inspector import Inspector
8
+ from .utils.updater import SnapForgeUpdater
9
+
10
+ __version__ = "3.0.0"
11
+
12
+ updater = SnapForgeUpdater("snapforge", __version__)
13
+ updater.start_check()
@@ -0,0 +1,3 @@
1
+ from .effects import Effects
2
+ from .geometry import Geometry
3
+ from .overlays import Overlays
@@ -0,0 +1,3 @@
1
+ from .inspector import Inspector
2
+ from .storage import Storage
3
+ from .updater import SnapForgeUpdater
@@ -0,0 +1,206 @@
1
+ Metadata-Version: 2.4
2
+ Name: snapforge
3
+ Version: 3.0.0
4
+ Summary: Powerful and fast image editor! 😎
5
+ Author: Ali.Shm
6
+ Requires-Python: >=3.7
7
+ Description-Content-Type: text/markdown
8
+ Requires-Dist: Pillow>=9.0.0
9
+ Requires-Dist: requests>=2.25.0
10
+ Requires-Dist: packaging>=20.0
11
+
12
+ # 📸 SnapForge
13
+
14
+ [![PyPI](https://img.shields.io/pypi/v/snapforge)](...)
15
+ [![Python](https://img.shields.io/pypi/pyversions/snapforge)](...)
16
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](...)
17
+ [![Made with Pillow](https://img.shields.io/badge/Built%20With-Pillow-blue)](...)
18
+ [![Status](https://img.shields.io/badge/status-active-success)](...)
19
+
20
+ > **Forge your images with a single chain of commands.**
21
+
22
+ A lightweight, fast and intuitive Python library for image processing built on top of Pillow.
23
+
24
+ Perfect for resizing, filtering, enhancing and transforming images .
25
+
26
+ ## ✨ Features
27
+
28
+ - 🚀 **Fast & Lightweight**: Minimal overhead for quick image tasks.
29
+
30
+ - 🔄 **Format Conversion**: Easily switch between JPEG, PNG, BMP, TIFF and more.
31
+
32
+ - 📏 **Smart Resizing**: High-quality scaling and resizing capabilities.
33
+
34
+ - 🛠️ **Easy API**: Designed with developer experience in mind—simple commands for complex tasks.
35
+
36
+ - 🐍 **Pythonic**: Follows Python's best practices for a seamless integration.
37
+
38
+ - 📷 **Powered by Pillow**: Uses the trusted Pillow library for reliable image processing.
39
+
40
+ - ⚡ **Efficient Processing**: Designed for smooth and practical image manipulation workflows.
41
+
42
+ - 🧾 **MIT License**: Open-source and free to use in personal and commercial projects.
43
+
44
+ ## 🔄 Professional Format Converter 🔄
45
+ Our Storage.convert Supports **more** than **8 Formats** :
46
+ JPEG, JPG , PNG, WEBP, GIF, TIFF, BMP, ICO and etc.
47
+
48
+
49
+ ## 📦 Installation
50
+
51
+ You can install SnapForge directly from PyPI using `pip`:
52
+ ```bash
53
+ pip install snapforge
54
+ ```
55
+
56
+ ## 🚀 Quick Start
57
+
58
+ Here is a quick example to get you started with SnapForge:
59
+ ```bash
60
+ from snapforge import Storage , Geometry
61
+
62
+ img=Storage.load(r"C:\Users\almahdilaptop\Pictures\sharp.png")
63
+ img=Geometry.round_corners(img,40)
64
+ img=Storage.save(img,r"C:\Users\almahdilaptop\Pictures\light.png")
65
+
66
+ ```
67
+
68
+ # 📖 Available Modules
69
+
70
+ SnapForge is now **fully modular** 🔧 — each module has a single responsibility and can be imported independently:
71
+
72
+ ```python
73
+ from snapforge import Storage, Geometry, Effects, Overlays, Inspector, SnapForgeUpdater
74
+ ```
75
+
76
+ - 📐 **Geometry** — resizing, cropping, rotating and transforming
77
+ - 💾 **Storage** — loading, saving and format conversion
78
+ - 🔍 **Inspector** — metadata, histogram and color analysis
79
+ - 🎨 **Effects** — lighting and filters
80
+ - 🖼️ **Overlays** — text, watermark, borders and blending
81
+ - 🔄 **SnapForgeUpdater** — update checks and version comparison
82
+
83
+ # 📦 Available Methods
84
+
85
+ Here is the complete list of all available methods in each **snapforge** module:
86
+
87
+ ### 📐 Geometry
88
+
89
+ | Method | Description | Example |
90
+ | --- | --- | --- |
91
+ | `Geometry.resize(img, w, h)` | Change image dimensions | `Geometry.resize(img, 800, 600)` |
92
+ | `Geometry.thumbnail(img, w, h)` | Resize while keeping aspect ratio | `Geometry.thumbnail(img, 500, 500)` |
93
+ | `Geometry.fit(img, w, h)` | Resize and crop to exact dimensions | `Geometry.fit(img, 1080, 1080)` |
94
+ | `Geometry.crop(img, l, t, r, b)` | Crop image | `Geometry.crop(img, 0, 0, 100, 100)` |
95
+ | `Geometry.rotate(img, a)` | Rotate image | `Geometry.rotate(img, 90)` |
96
+ | `Geometry.flip(img, dir)` | Flip image | `Geometry.flip(img, "horizontal")` |
97
+ | `Geometry.round_corners(img, radius)` | Round image corners | `Geometry.round_corners(img, 40)` |
98
+
99
+ ---
100
+
101
+ ### 💾 Storage
102
+
103
+ | Method | Description | Example |
104
+ | --- | --- | --- |
105
+ | `Storage.load(path)` | Load image from file | `Storage.load("photo.jpg")` |
106
+ | `Storage.save(img, name)` | Save image | `Storage.save(img, "result.jpg")` |
107
+ | `Storage.convert(img, fmt)` | Change image format (PNG, JPG, WEBP…) | `Storage.convert(img, "PNG")` |
108
+ | `Storage.optimize(img, q)` | Set JPEG quality | `Storage.optimize(img, 85)` |
109
+
110
+ ---
111
+
112
+ ### 🔍 Inspector
113
+
114
+ | Method | Description | Example |
115
+ | --- | --- | --- |
116
+ | `Inspector.get_metadata(img)` | Extract detailed image metadata | `Inspector.get_metadata(img)` |
117
+ | `Inspector.histogram(img)` | Generate histogram data | `Inspector.histogram(img)` |
118
+ | `Inspector.compare(img)` | Display metadata and processing summary | `Inspector.compare(img)` |
119
+ | `Inspector.extract_color_palette(img)` | Get dominant colors as Hex codes | `Inspector.extract_color_palette(img)` |
120
+
121
+ ---
122
+
123
+ ### 🎨 Effects (Lighting & Filters)
124
+
125
+ | Method | Description | Example |
126
+ | --- | --- | --- |
127
+ | `Effects.apply_brightness(img, f)` | Adjust brightness | `Effects.apply_brightness(img, 1.2)` |
128
+ | `Effects.apply_contrast(img, f)` | Adjust contrast | `Effects.apply_contrast(img, 1.5)` |
129
+ | `Effects.adjust_gamma(img, g)` | Correct image gamma | `Effects.adjust_gamma(img, 1.3)` |
130
+ | `Effects.auto_enhance(img)` | Improve brightness, contrast and sharpness | `Effects.auto_enhance(img)` |
131
+ | `Effects.invert(img)` | Invert image colors | `Effects.invert(img)` |
132
+ | `Effects.apply_sepia(img)` | Classic sepia effect | `Effects.apply_sepia(img)` |
133
+ | `Effects.apply_grayscale(img, f)` | Convert to grayscale | `Effects.apply_grayscale(img, 1.0)` |
134
+ | `Effects.apply_blur(img, r)` | Gaussian blur | `Effects.apply_blur(img, 5.0)` |
135
+ | `Effects.apply_sharpen(img, f)` | Sharpen image | `Effects.apply_sharpen(img, 1.0)` |
136
+ | `Effects.apply_camscanner(img)` | Document scanner effect | `Effects.apply_camscanner(img)` |
137
+ | `Effects.apply_preset(img, name)` | Apply a professional preset | `Effects.apply_preset(img, "vintage")` |
138
+
139
+ ---
140
+
141
+ ### 🖼️ Overlays
142
+
143
+ | Method | Description | Example |
144
+ | --- | --- | --- |
145
+ | `Overlays.add_watermark(img, path)` | Add watermark | `Overlays.add_watermark(img, "logo.png")` |
146
+ | `Overlays.add_text(img, text, pos)` | Draw text | `Overlays.add_text(img, "Hello!", (50, 50))` |
147
+ | `Overlays.add_border(img, size, color)` | Add border | `Overlays.add_border(img, 10, (0, 0, 0))` |
148
+ | `Overlays.double_exposure(img, img2, mode)` | Blend with another image | `Overlays.double_exposure(img, "layer.png", "blend")` |
149
+
150
+ ---
151
+
152
+ ### 🔄 SnapForgeUpdater
153
+
154
+ | Method | Description | Example |
155
+ | --- | --- | --- |
156
+ | `SnapForgeUpdater.__init__(package_name, current_version)` | Initialize the updater with the package name and current version | `SnapForgeUpdater("snapforge", "3.0.0")` |
157
+ | `SnapForgeUpdater._check_logic()` | Check PyPI in the background for a newer release | `updater._check_logic()` |
158
+ | `SnapForgeUpdater._notify_user(latest_version, upload_time)` | Display a notification when a new version is available | `updater._notify_user("3.0.1", "2026-08-12 10:30:00")` |
159
+ | `SnapForgeUpdater.start_check()` | Start the update check in a background daemon thread | `updater.start_check()` |
160
+
161
+
162
+ ## 🛠️ Requirements
163
+
164
+ To use `SnapForge`, ensure you have the following installed:
165
+
166
+ * **Python:** 3.7 or higher
167
+ * **Dependencies:**
168
+ * `Pillow` (for image processing)
169
+ * `requests` (for automatic update checks)
170
+ * `packaging` (for version comparison logic)
171
+
172
+ ## 🤝 Contributing
173
+
174
+ Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
175
+
176
+ ## 🌟 More Projects
177
+
178
+ If you enjoy SnapForge, you might also like this project ,too:
179
+
180
+ ### PixSlim
181
+
182
+ A Python image and ... compression library focused on reducing file size while preserving quality.
183
+
184
+
185
+ ## 📜 License
186
+
187
+ Distributed under the MIT License.
188
+
189
+ ## ❤️ Support
190
+
191
+ If you find SnapForge useful, your support means a lot!
192
+
193
+ You can help by:
194
+
195
+ - 📦 Installing the package and trying it in your projects
196
+ - 📝 Sharing feedback and suggestions
197
+ - 🐛 Reporting bugs and improvements
198
+ - 🌟 Recommending SnapForge to other Python developers
199
+
200
+ 🧩 Every piece of feedback helps make SnapForge better. 🙏
201
+
202
+ ## 👤 Author
203
+
204
+ ### Ali.Shm
205
+
206
+ **Project Maintainer**
@@ -0,0 +1,16 @@
1
+ README.md
2
+ pyproject.toml
3
+ dist_release/snapforge/__init__.py
4
+ dist_release/snapforge.egg-info/PKG-INFO
5
+ dist_release/snapforge.egg-info/SOURCES.txt
6
+ dist_release/snapforge.egg-info/dependency_links.txt
7
+ dist_release/snapforge.egg-info/requires.txt
8
+ dist_release/snapforge.egg-info/top_level.txt
9
+ dist_release/snapforge/modules/__init__.py
10
+ dist_release/snapforge/modules/effects.pyc
11
+ dist_release/snapforge/modules/geometry.pyc
12
+ dist_release/snapforge/modules/overlays.pyc
13
+ dist_release/snapforge/utils/__init__.py
14
+ dist_release/snapforge/utils/inspector.pyc
15
+ dist_release/snapforge/utils/storage.pyc
16
+ dist_release/snapforge/utils/updater.pyc
@@ -0,0 +1,27 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "snapforge"
7
+ version = "3.0.0"
8
+ description = "Powerful and fast image editor! 😎"
9
+ authors = [{name = "Ali.Shm"}]
10
+ readme = "README.md"
11
+ requires-python = ">=3.7"
12
+ dependencies = [
13
+ "Pillow>=9.0.0",
14
+ "requests>=2.25.0",
15
+ "packaging>=20.0"
16
+ ]
17
+
18
+ [tool.setuptools]
19
+ package-dir = {"" = "dist_release"}
20
+
21
+ [tool.setuptools.packages.find]
22
+ where = ["dist_release"]
23
+
24
+ [tool.setuptools.package-data]
25
+ snapforge = ["*.pyc"]
26
+ "snapforge.modules" = ["*.pyc"]
27
+ "snapforge.utils" = ["*.pyc"]