@fredlackey/devutils 0.0.1 → 0.0.3

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 (259) hide show
  1. package/README.md +5 -5
  2. package/package.json +1 -1
  3. package/src/commands/install.js +374 -36
  4. package/src/installs/adobe-creative-cloud.js +527 -25
  5. package/src/installs/adobe-creative-cloud.md +605 -0
  6. package/src/installs/appcleaner.js +303 -26
  7. package/src/installs/appcleaner.md +699 -0
  8. package/src/installs/apt-transport-https.js +390 -0
  9. package/src/installs/apt-transport-https.md +678 -0
  10. package/src/installs/atomicparsley.js +624 -26
  11. package/src/installs/atomicparsley.md +795 -0
  12. package/src/installs/aws-cli.js +779 -26
  13. package/src/installs/aws-cli.md +727 -0
  14. package/src/installs/balena-etcher.js +688 -26
  15. package/src/installs/balena-etcher.md +761 -0
  16. package/src/installs/bambu-studio.js +912 -26
  17. package/src/installs/bambu-studio.md +780 -0
  18. package/src/installs/bash-completion.js +554 -23
  19. package/src/installs/bash-completion.md +833 -0
  20. package/src/installs/bash.js +399 -26
  21. package/src/installs/bash.md +993 -0
  22. package/src/installs/beyond-compare.js +585 -26
  23. package/src/installs/beyond-compare.md +813 -0
  24. package/src/installs/build-essential.js +511 -26
  25. package/src/installs/build-essential.md +977 -0
  26. package/src/installs/ca-certificates.js +618 -0
  27. package/src/installs/ca-certificates.md +937 -0
  28. package/src/installs/caffeine.js +490 -26
  29. package/src/installs/caffeine.md +839 -0
  30. package/src/installs/camtasia.js +577 -25
  31. package/src/installs/camtasia.md +762 -0
  32. package/src/installs/chatgpt.js +458 -26
  33. package/src/installs/chatgpt.md +814 -0
  34. package/src/installs/chocolatey.js +447 -0
  35. package/src/installs/chocolatey.md +661 -0
  36. package/src/installs/chrome-canary.js +472 -26
  37. package/src/installs/chrome-canary.md +641 -0
  38. package/src/installs/chromium.js +645 -26
  39. package/src/installs/chromium.md +838 -0
  40. package/src/installs/claude-code.js +558 -26
  41. package/src/installs/claude-code.md +1173 -0
  42. package/src/installs/curl.js +361 -26
  43. package/src/installs/curl.md +714 -0
  44. package/src/installs/cursor.js +561 -26
  45. package/src/installs/cursor.md +970 -0
  46. package/src/installs/dbschema.js +674 -26
  47. package/src/installs/dbschema.md +925 -0
  48. package/src/installs/dependencies.md +435 -0
  49. package/src/installs/development-tools.js +600 -0
  50. package/src/installs/development-tools.md +977 -0
  51. package/src/installs/docker.js +1010 -25
  52. package/src/installs/docker.md +1109 -0
  53. package/src/installs/drawio.js +1001 -26
  54. package/src/installs/drawio.md +795 -0
  55. package/src/installs/elmedia-player.js +328 -25
  56. package/src/installs/elmedia-player.md +556 -0
  57. package/src/installs/ffmpeg.js +870 -25
  58. package/src/installs/ffmpeg.md +852 -0
  59. package/src/installs/file.js +464 -0
  60. package/src/installs/file.md +987 -0
  61. package/src/installs/gemini-cli.js +793 -26
  62. package/src/installs/gemini-cli.md +1153 -0
  63. package/src/installs/git.js +382 -26
  64. package/src/installs/git.md +907 -0
  65. package/src/installs/gitego.js +931 -26
  66. package/src/installs/gitego.md +1172 -0
  67. package/src/installs/go.js +913 -26
  68. package/src/installs/go.md +958 -0
  69. package/src/installs/google-chrome.js +801 -25
  70. package/src/installs/google-chrome.md +862 -0
  71. package/src/installs/gpg.js +412 -73
  72. package/src/installs/gpg.md +1056 -0
  73. package/src/installs/homebrew.js +1015 -26
  74. package/src/installs/homebrew.md +988 -0
  75. package/src/installs/imageoptim.js +950 -26
  76. package/src/installs/imageoptim.md +1119 -0
  77. package/src/installs/installers.json +2297 -0
  78. package/src/installs/jq.js +382 -26
  79. package/src/installs/jq.md +809 -0
  80. package/src/installs/keyboard-maestro.js +701 -26
  81. package/src/installs/keyboard-maestro.md +825 -0
  82. package/src/installs/latex.js +771 -26
  83. package/src/installs/latex.md +1095 -0
  84. package/src/installs/lftp.js +338 -26
  85. package/src/installs/lftp.md +907 -0
  86. package/src/installs/lsb-release.js +346 -0
  87. package/src/installs/lsb-release.md +814 -0
  88. package/src/installs/messenger.js +829 -26
  89. package/src/installs/messenger.md +900 -0
  90. package/src/installs/microsoft-office.js +550 -26
  91. package/src/installs/microsoft-office.md +760 -0
  92. package/src/installs/microsoft-teams.js +782 -25
  93. package/src/installs/microsoft-teams.md +886 -0
  94. package/src/installs/node.js +886 -26
  95. package/src/installs/node.md +1153 -0
  96. package/src/installs/nordpass.js +698 -26
  97. package/src/installs/nordpass.md +921 -0
  98. package/src/installs/nvm.js +977 -26
  99. package/src/installs/nvm.md +1057 -0
  100. package/src/installs/openssh.js +734 -64
  101. package/src/installs/openssh.md +1056 -0
  102. package/src/installs/pandoc.js +644 -26
  103. package/src/installs/pandoc.md +1036 -0
  104. package/src/installs/pinentry.js +492 -26
  105. package/src/installs/pinentry.md +1142 -0
  106. package/src/installs/pngyu.js +851 -26
  107. package/src/installs/pngyu.md +896 -0
  108. package/src/installs/postman.js +781 -26
  109. package/src/installs/postman.md +940 -0
  110. package/src/installs/procps.js +425 -0
  111. package/src/installs/procps.md +851 -0
  112. package/src/installs/safari-tech-preview.js +355 -25
  113. package/src/installs/safari-tech-preview.md +533 -0
  114. package/src/installs/sfnt2woff.js +640 -26
  115. package/src/installs/sfnt2woff.md +795 -0
  116. package/src/installs/shellcheck.js +463 -26
  117. package/src/installs/shellcheck.md +1005 -0
  118. package/src/installs/slack.js +722 -25
  119. package/src/installs/slack.md +865 -0
  120. package/src/installs/snagit.js +566 -25
  121. package/src/installs/snagit.md +844 -0
  122. package/src/installs/software-properties-common.js +372 -0
  123. package/src/installs/software-properties-common.md +805 -0
  124. package/src/installs/spotify.js +858 -25
  125. package/src/installs/spotify.md +901 -0
  126. package/src/installs/studio-3t.js +803 -26
  127. package/src/installs/studio-3t.md +918 -0
  128. package/src/installs/sublime-text.js +780 -25
  129. package/src/installs/sublime-text.md +914 -0
  130. package/src/installs/superwhisper.js +687 -25
  131. package/src/installs/superwhisper.md +630 -0
  132. package/src/installs/tailscale.js +727 -26
  133. package/src/installs/tailscale.md +1100 -0
  134. package/src/installs/tar.js +389 -0
  135. package/src/installs/tar.md +946 -0
  136. package/src/installs/termius.js +780 -26
  137. package/src/installs/termius.md +844 -0
  138. package/src/installs/terraform.js +761 -26
  139. package/src/installs/terraform.md +899 -0
  140. package/src/installs/tidal.js +752 -25
  141. package/src/installs/tidal.md +864 -0
  142. package/src/installs/tmux.js +328 -26
  143. package/src/installs/tmux.md +1030 -0
  144. package/src/installs/tree.js +393 -26
  145. package/src/installs/tree.md +833 -0
  146. package/src/installs/unzip.js +460 -0
  147. package/src/installs/unzip.md +879 -0
  148. package/src/installs/vim.js +403 -26
  149. package/src/installs/vim.md +1040 -0
  150. package/src/installs/vlc.js +803 -26
  151. package/src/installs/vlc.md +927 -0
  152. package/src/installs/vscode.js +825 -26
  153. package/src/installs/vscode.md +1002 -0
  154. package/src/installs/wget.js +415 -0
  155. package/src/installs/wget.md +791 -0
  156. package/src/installs/whatsapp.js +710 -25
  157. package/src/installs/whatsapp.md +854 -0
  158. package/src/installs/winpty.js +352 -0
  159. package/src/installs/winpty.md +620 -0
  160. package/src/installs/woff2.js +535 -26
  161. package/src/installs/woff2.md +977 -0
  162. package/src/installs/wsl.js +572 -0
  163. package/src/installs/wsl.md +699 -0
  164. package/src/installs/xcode-clt.js +520 -0
  165. package/src/installs/xcode-clt.md +351 -0
  166. package/src/installs/xcode.js +542 -26
  167. package/src/installs/xcode.md +573 -0
  168. package/src/installs/yarn.js +806 -26
  169. package/src/installs/yarn.md +1074 -0
  170. package/src/installs/yq.js +636 -26
  171. package/src/installs/yq.md +944 -0
  172. package/src/installs/yt-dlp.js +683 -26
  173. package/src/installs/yt-dlp.md +946 -0
  174. package/src/installs/yum-utils.js +297 -0
  175. package/src/installs/yum-utils.md +648 -0
  176. package/src/installs/zoom.js +740 -25
  177. package/src/installs/zoom.md +884 -0
  178. package/src/scripts/README.md +567 -45
  179. package/src/scripts/STATUS.md +208 -0
  180. package/src/scripts/afk.js +395 -7
  181. package/src/scripts/backup-all.js +731 -9
  182. package/src/scripts/backup-source.js +711 -8
  183. package/src/scripts/brewd.js +373 -7
  184. package/src/scripts/brewi.js +505 -9
  185. package/src/scripts/brewr.js +512 -9
  186. package/src/scripts/brews.js +462 -9
  187. package/src/scripts/brewu.js +488 -7
  188. package/src/scripts/c.js +185 -7
  189. package/src/scripts/ccurl.js +325 -8
  190. package/src/scripts/certbot-crontab-init.js +488 -8
  191. package/src/scripts/certbot-init.js +641 -9
  192. package/src/scripts/ch.js +339 -7
  193. package/src/scripts/claude-danger.js +253 -8
  194. package/src/scripts/clean-dev.js +419 -8
  195. package/src/scripts/clear-dns-cache.js +525 -7
  196. package/src/scripts/clone.js +417 -7
  197. package/src/scripts/code-all.js +420 -7
  198. package/src/scripts/count-files.js +195 -8
  199. package/src/scripts/count-folders.js +195 -8
  200. package/src/scripts/count.js +248 -8
  201. package/src/scripts/d.js +203 -7
  202. package/src/scripts/datauri.js +373 -8
  203. package/src/scripts/delete-files.js +363 -7
  204. package/src/scripts/docker-clean.js +410 -8
  205. package/src/scripts/dp.js +426 -7
  206. package/src/scripts/e.js +375 -9
  207. package/src/scripts/empty-trash.js +497 -7
  208. package/src/scripts/evm.js +428 -9
  209. package/src/scripts/fetch-github-repos.js +441 -10
  210. package/src/scripts/get-channel.js +329 -8
  211. package/src/scripts/get-course.js +384 -11
  212. package/src/scripts/get-dependencies.js +290 -9
  213. package/src/scripts/get-folder.js +783 -10
  214. package/src/scripts/get-tunes.js +411 -10
  215. package/src/scripts/get-video.js +352 -9
  216. package/src/scripts/git-backup.js +561 -9
  217. package/src/scripts/git-clone.js +477 -9
  218. package/src/scripts/git-pup.js +303 -7
  219. package/src/scripts/git-push.js +380 -8
  220. package/src/scripts/h.js +607 -9
  221. package/src/scripts/hide-desktop-icons.js +483 -7
  222. package/src/scripts/hide-hidden-files.js +522 -7
  223. package/src/scripts/install-dependencies-from.js +440 -9
  224. package/src/scripts/ips.js +647 -10
  225. package/src/scripts/iso.js +354 -8
  226. package/src/scripts/killni.js +561 -7
  227. package/src/scripts/ll.js +451 -8
  228. package/src/scripts/local-ip.js +310 -8
  229. package/src/scripts/m.js +508 -8
  230. package/src/scripts/map.js +293 -8
  231. package/src/scripts/mkd.js +287 -7
  232. package/src/scripts/ncu-update-all.js +441 -8
  233. package/src/scripts/nginx-init.js +702 -12
  234. package/src/scripts/npmi.js +366 -7
  235. package/src/scripts/o.js +495 -8
  236. package/src/scripts/org-by-date.js +321 -7
  237. package/src/scripts/p.js +208 -7
  238. package/src/scripts/packages.js +313 -8
  239. package/src/scripts/path.js +209 -7
  240. package/src/scripts/ports.js +582 -8
  241. package/src/scripts/q.js +290 -8
  242. package/src/scripts/refresh-files.js +378 -10
  243. package/src/scripts/remove-smaller-files.js +500 -8
  244. package/src/scripts/rename-files-with-date.js +517 -9
  245. package/src/scripts/resize-image.js +523 -9
  246. package/src/scripts/rm-safe.js +653 -8
  247. package/src/scripts/s.js +525 -9
  248. package/src/scripts/set-git-public.js +349 -7
  249. package/src/scripts/show-desktop-icons.js +459 -7
  250. package/src/scripts/show-hidden-files.js +456 -7
  251. package/src/scripts/tpa.js +265 -8
  252. package/src/scripts/tpo.js +264 -7
  253. package/src/scripts/u.js +489 -7
  254. package/src/scripts/vpush.js +422 -8
  255. package/src/scripts/y.js +267 -7
  256. package/src/utils/common/os.js +94 -2
  257. package/src/utils/ubuntu/apt.js +13 -7
  258. package/src/utils/windows/choco.js +82 -26
  259. package/src/utils/windows/winget.js +89 -27
@@ -0,0 +1,1119 @@
1
+ # Installing ImageOptim
2
+
3
+ ## Overview
4
+
5
+ ImageOptim is a powerful image optimization tool that reduces file sizes of PNG, JPEG, GIF, and SVG images through lossless compression. It integrates multiple optimization engines including OptiPNG, PNGCrush, Zopfli, JPEGOptim, Jpegtran, Guetzli, Gifsicle, SVGO, and MozJPEG to achieve maximum compression without quality loss. EXIF metadata and other unnecessary data are removed to further reduce file sizes.
6
+
7
+ Key capabilities include:
8
+
9
+ - **Lossless Compression**: Reduces file sizes without visible quality loss
10
+ - **Multiple Format Support**: Optimizes PNG, JPEG, GIF, and SVG files
11
+ - **Batch Processing**: Process multiple images simultaneously
12
+ - **Metadata Removal**: Strips EXIF data, color profiles, and comments
13
+ - **Automation Ready**: Command-line interface available for scripting
14
+
15
+ **Important Platform Note**: ImageOptim is a macOS-only GUI application. For Linux, Windows, WSL, and Git Bash environments, this guide documents equivalent command-line tools (optipng, jpegoptim) and alternative applications (Trimage, FileOptimizer) that provide similar functionality using many of the same underlying optimization engines.
16
+
17
+ ## Dependencies
18
+
19
+ ### macOS (Homebrew)
20
+ - **Required:**
21
+ - `brew` - Install via `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`
22
+ - Xcode Command Line Tools - Install via `xcode-select --install` (required for Homebrew to function)
23
+ - **Optional:** None
24
+ - **Auto-installed:** None (ImageOptim.app is self-contained once installed via Homebrew)
25
+
26
+ ### Ubuntu (APT/Snap)
27
+ - **Required:**
28
+ - `sudo` privileges - Built-in for non-root users
29
+ - APT package manager - Pre-installed on Ubuntu/Debian systems
30
+ - **Optional:**
31
+ - `trimage` - Install via `sudo apt-get install -y trimage` (GUI alternative to command-line tools)
32
+ - `pngquant` - Install via `sudo apt-get install -y pngquant` (lossy PNG compression for additional file size reduction)
33
+ - **Auto-installed:**
34
+ - `zlib` - PNG compression library (installed automatically as dependency of optipng)
35
+ - `libjpeg` - JPEG library (installed automatically as dependency of jpegoptim)
36
+ - `libgif` - GIF library (installed automatically as dependency of gifsicle)
37
+
38
+ ### Raspberry Pi OS (APT/Snap)
39
+ - **Required:**
40
+ - `sudo` privileges - Built-in for non-root users
41
+ - APT package manager - Pre-installed on Raspberry Pi OS
42
+ - **Optional:**
43
+ - `trimage` - Install via `sudo apt-get install -y trimage` (GUI alternative, requires desktop environment - not available on Raspberry Pi OS Lite)
44
+ - `pngquant` - Install via `sudo apt-get install -y pngquant` (lossy PNG compression)
45
+ - **Auto-installed:**
46
+ - `zlib` - PNG compression library (installed automatically as dependency of optipng)
47
+ - `libjpeg` - JPEG library (installed automatically as dependency of jpegoptim)
48
+ - `libgif` - GIF library (installed automatically as dependency of gifsicle)
49
+
50
+ ### Amazon Linux (DNF/YUM)
51
+ - **Required (Amazon Linux 2):**
52
+ - `sudo` privileges - Required for system package installation
53
+ - `amazon-linux-extras` - Pre-installed, used to enable EPEL repository via `sudo amazon-linux-extras install epel -y`
54
+ - EPEL repository - Enabled via amazon-linux-extras command above
55
+ - **Required (Amazon Linux 2023):**
56
+ - `sudo` privileges - Required for system package installation
57
+ - Development Tools group - Install via `sudo dnf groupinstall -y "Development Tools"` (includes gcc, make, autoconf, automake)
58
+ - `zlib-devel` - Install via `sudo dnf install -y zlib-devel` (required to compile optipng)
59
+ - `libjpeg-turbo-devel` - Install via `sudo dnf install -y libjpeg-turbo-devel` (required to compile jpegoptim)
60
+ - `curl` - Install via `sudo dnf install -y curl` (usually pre-installed, required to download source archives)
61
+ - `tar` - Install via `sudo dnf install -y tar` (usually pre-installed, required to extract source archives)
62
+ - **Optional:** None
63
+ - **Auto-installed (Amazon Linux 2 with EPEL):**
64
+ - Dependencies handled automatically by YUM when installing from EPEL repository
65
+
66
+ ### Windows (Chocolatey/winget)
67
+ - **Required:**
68
+ - `choco` (Chocolatey) - Install via PowerShell (Administrator): `Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))`
69
+ - Administrator privileges - Required to run Chocolatey package installations
70
+ - **Optional:**
71
+ - `fileoptimizer` - Install via `choco install fileoptimizer -y` (comprehensive GUI alternative supporting images, PDFs, and other formats)
72
+ - **Auto-installed:**
73
+ - Runtime dependencies for optipng and jpegoptim (handled automatically by Chocolatey packages)
74
+
75
+ ### Git Bash (Manual/Portable)
76
+ - **Required:**
77
+ - Git Bash (MinGW environment) - Install via Git for Windows: https://git-scm.com/download/win
78
+ - `curl` - Pre-included with Git Bash (used to download portable binaries)
79
+ - `unzip` - Pre-included with Git Bash (used to extract downloaded archives)
80
+ - Internet access - Required to download portable binaries from SourceForge and GitHub
81
+ - **Optional:** None
82
+ - **Auto-installed:** None (portable .exe binaries are self-contained and run directly in Git Bash)
83
+
84
+ ## Prerequisites
85
+
86
+ Before installing image optimization tools on any platform, ensure:
87
+
88
+ 1. **Internet connectivity** - Required to download packages
89
+ 2. **Administrative privileges** - Required for system-wide installation
90
+ 3. **Sufficient disk space** - At least 100 MB for installation with dependencies
91
+
92
+ ## Platform-Specific Installation
93
+
94
+ ### macOS (Homebrew)
95
+
96
+ #### Prerequisites
97
+
98
+ - macOS 11 (Big Sur) or later
99
+ - Homebrew package manager installed
100
+ - Xcode Command Line Tools installed
101
+
102
+ If Homebrew is not installed, install it first:
103
+
104
+ ```bash
105
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
106
+ ```
107
+
108
+ If Xcode Command Line Tools are not installed:
109
+
110
+ ```bash
111
+ xcode-select --install
112
+ ```
113
+
114
+ #### Installation Steps
115
+
116
+ Run the following command to install ImageOptim:
117
+
118
+ ```bash
119
+ brew install --cask --quiet imageoptim
120
+ ```
121
+
122
+ The `--quiet` flag suppresses non-essential output for cleaner automation. This installs the native macOS GUI application ImageOptim, which is Apple Silicon and Intel compatible.
123
+
124
+ **Optional**: Install the ImageOptim-CLI for command-line integration and automation:
125
+
126
+ ```bash
127
+ brew install --quiet imageoptim-cli
128
+ ```
129
+
130
+ ImageOptim-CLI enables batch processing from the terminal and integrates with build systems.
131
+
132
+ #### Verification
133
+
134
+ Confirm the GUI application installed successfully:
135
+
136
+ ```bash
137
+ ls /Applications/ImageOptim.app && echo "ImageOptim installed successfully"
138
+ ```
139
+
140
+ Expected output:
141
+
142
+ ```
143
+ /Applications/ImageOptim.app
144
+ ImageOptim installed successfully
145
+ ```
146
+
147
+ If you installed imageoptim-cli, verify it:
148
+
149
+ ```bash
150
+ imageoptim --version
151
+ ```
152
+
153
+ Expected output (version numbers may vary):
154
+
155
+ ```
156
+ 3.1.9
157
+ ```
158
+
159
+ #### Troubleshooting
160
+
161
+ **Problem**: `brew install --cask` fails with "Cask 'imageoptim' is unavailable"
162
+
163
+ **Solution**: Update Homebrew to refresh the cask list:
164
+
165
+ ```bash
166
+ brew update
167
+ brew install --cask --quiet imageoptim
168
+ ```
169
+
170
+ **Problem**: ImageOptim does not appear in Applications folder
171
+
172
+ **Solution**: Homebrew casks install to `/Applications` by default. Check if the installation path differs:
173
+
174
+ ```bash
175
+ brew info --cask imageoptim | grep "Installed"
176
+ ```
177
+
178
+ **Problem**: ImageOptim fails to launch on Apple Silicon Mac
179
+
180
+ **Solution**: ImageOptim is native Apple Silicon. If issues persist, try reinstalling:
181
+
182
+ ```bash
183
+ brew uninstall --cask imageoptim
184
+ brew install --cask --quiet imageoptim
185
+ ```
186
+
187
+ **Problem**: `imageoptim` command not found after installing CLI
188
+
189
+ **Solution**: Homebrew may not be in your PATH. Add it to your shell profile:
190
+
191
+ For Apple Silicon Macs (M1/M2/M3/M4):
192
+
193
+ ```bash
194
+ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc
195
+ source ~/.zshrc
196
+ ```
197
+
198
+ For Intel Macs:
199
+
200
+ ```bash
201
+ echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zshrc
202
+ source ~/.zshrc
203
+ ```
204
+
205
+ ---
206
+
207
+ ### Ubuntu/Debian (APT)
208
+
209
+ #### Prerequisites
210
+
211
+ - Ubuntu 20.04 LTS or later, or Debian 11 (Bullseye) or later
212
+ - sudo privileges
213
+ - At least 100 MB free disk space
214
+
215
+ **Note**: ImageOptim is macOS-only. On Ubuntu/Debian, use the command-line tools `optipng` and `jpegoptim`, which are the same engines ImageOptim uses internally. For a GUI alternative, Trimage provides a similar interface.
216
+
217
+ #### Installation Steps
218
+
219
+ Run the following commands to install the image optimization tools:
220
+
221
+ ```bash
222
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
223
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y optipng jpegoptim gifsicle
224
+ ```
225
+
226
+ The `DEBIAN_FRONTEND=noninteractive` environment variable and `-y` flag ensure fully unattended installation without prompts.
227
+
228
+ **Optional**: Install Trimage for a GUI interface similar to ImageOptim:
229
+
230
+ ```bash
231
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y trimage
232
+ ```
233
+
234
+ Trimage uses optipng, pngcrush, advpng, and jpegoptim under the hood and provides drag-and-drop functionality.
235
+
236
+ #### Verification
237
+
238
+ Confirm the command-line tools installed successfully:
239
+
240
+ ```bash
241
+ optipng --version
242
+ ```
243
+
244
+ Expected output (version numbers may vary):
245
+
246
+ ```
247
+ OptiPNG version 0.7.7
248
+ ```
249
+
250
+ ```bash
251
+ jpegoptim --version
252
+ ```
253
+
254
+ Expected output:
255
+
256
+ ```
257
+ jpegoptim v1.5.0
258
+ ```
259
+
260
+ ```bash
261
+ gifsicle --version
262
+ ```
263
+
264
+ Expected output:
265
+
266
+ ```
267
+ LCDF Gifsicle 1.93
268
+ ```
269
+
270
+ If you installed Trimage, launch it from the terminal:
271
+
272
+ ```bash
273
+ trimage --help
274
+ ```
275
+
276
+ #### Troubleshooting
277
+
278
+ **Problem**: `E: Unable to locate package optipng`
279
+
280
+ **Solution**: Update the package index:
281
+
282
+ ```bash
283
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
284
+ ```
285
+
286
+ **Problem**: Trimage crashes on launch or shows blank window
287
+
288
+ **Solution**: Reinstall Trimage and its dependencies:
289
+
290
+ ```bash
291
+ sudo DEBIAN_FRONTEND=noninteractive apt-get remove -y trimage
292
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y trimage
293
+ ```
294
+
295
+ **Problem**: Need additional PNG optimization tools
296
+
297
+ **Solution**: Install pngquant for lossy PNG compression (reduces file size further with minimal quality loss):
298
+
299
+ ```bash
300
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y pngquant
301
+ ```
302
+
303
+ ---
304
+
305
+ ### Raspberry Pi OS (APT)
306
+
307
+ #### Prerequisites
308
+
309
+ - Raspberry Pi OS (Bookworm or Bullseye), 32-bit or 64-bit
310
+ - Raspberry Pi 3 or later (earlier models have limited performance)
311
+ - sudo privileges
312
+ - At least 100 MB free disk space
313
+
314
+ **Note on ARM Architecture**: Raspberry Pi OS is Debian-based, and all optimization tools are available pre-compiled for ARM architecture. No special configuration is required.
315
+
316
+ #### Installation Steps
317
+
318
+ Run the following commands to update the package index and install image optimization tools:
319
+
320
+ ```bash
321
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
322
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y optipng jpegoptim gifsicle
323
+ ```
324
+
325
+ **Optional**: Install Trimage for a GUI interface:
326
+
327
+ ```bash
328
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y trimage
329
+ ```
330
+
331
+ **Note**: Trimage requires a desktop environment. If running Raspberry Pi OS Lite (headless), skip Trimage and use the command-line tools only.
332
+
333
+ #### Verification
334
+
335
+ Confirm the installation succeeded:
336
+
337
+ ```bash
338
+ optipng --version
339
+ ```
340
+
341
+ Expected output (version numbers may vary):
342
+
343
+ ```
344
+ OptiPNG version 0.7.7
345
+ ```
346
+
347
+ ```bash
348
+ jpegoptim --version
349
+ ```
350
+
351
+ Expected output:
352
+
353
+ ```
354
+ jpegoptim v1.5.0
355
+ ```
356
+
357
+ Test optimization on a sample image:
358
+
359
+ ```bash
360
+ # Create a test PNG
361
+ convert -size 100x100 xc:red test.png 2>/dev/null || echo "ImageMagick not installed - skip test file creation"
362
+
363
+ # If you have a PNG file, optimize it
364
+ optipng -o2 -strip all test.png 2>/dev/null && echo "optipng working correctly"
365
+ ```
366
+
367
+ #### Troubleshooting
368
+
369
+ **Problem**: Optimization is very slow on Raspberry Pi
370
+
371
+ **Solution**: Use lower optimization levels for faster processing:
372
+
373
+ ```bash
374
+ # Use -o2 instead of -o7 for faster PNG optimization
375
+ optipng -o2 image.png
376
+
377
+ # Skip progressive encoding for faster JPEG processing
378
+ jpegoptim --strip-all image.jpg
379
+ ```
380
+
381
+ **Problem**: Out of memory during batch optimization
382
+
383
+ **Solution**: Process images one at a time or add swap space:
384
+
385
+ ```bash
386
+ sudo fallocate -l 1G /swapfile
387
+ sudo chmod 600 /swapfile
388
+ sudo mkswap /swapfile
389
+ sudo swapon /swapfile
390
+ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
391
+ ```
392
+
393
+ **Problem**: `trimage` command not found after installation
394
+
395
+ **Solution**: On Raspberry Pi OS Lite without a desktop, Trimage may not install correctly. Use the command-line tools instead:
396
+
397
+ ```bash
398
+ # Optimize all PNGs in current directory
399
+ find . -name "*.png" -exec optipng -o2 {} \;
400
+
401
+ # Optimize all JPEGs in current directory
402
+ find . -name "*.jpg" -exec jpegoptim --strip-all {} \;
403
+ ```
404
+
405
+ ---
406
+
407
+ ### Amazon Linux (DNF/YUM)
408
+
409
+ #### Prerequisites
410
+
411
+ - Amazon Linux 2023 (AL2023) or Amazon Linux 2 (AL2)
412
+ - sudo privileges
413
+ - At least 200 MB free disk space (includes build dependencies for compilation)
414
+
415
+ **Important**: optipng and jpegoptim are not available in standard Amazon Linux repositories. On Amazon Linux 2, you can enable EPEL. On Amazon Linux 2023, EPEL is not supported, so you must compile from source or use the Supplementary Packages for Amazon Linux (SPAL).
416
+
417
+ #### Installation Steps
418
+
419
+ **For Amazon Linux 2 (using EPEL):**
420
+
421
+ ```bash
422
+ sudo amazon-linux-extras install epel -y
423
+ sudo yum install -y optipng jpegoptim gifsicle
424
+ ```
425
+
426
+ **For Amazon Linux 2023 (compile from source):**
427
+
428
+ Since EPEL is not supported on AL2023, install development tools and compile from source:
429
+
430
+ **Step 1: Install build dependencies**
431
+
432
+ ```bash
433
+ sudo dnf groupinstall -y "Development Tools"
434
+ sudo dnf install -y zlib-devel libjpeg-turbo-devel
435
+ ```
436
+
437
+ **Step 2: Install optipng from source**
438
+
439
+ ```bash
440
+ cd /tmp
441
+ curl -L -o optipng.tar.gz https://sourceforge.net/projects/optipng/files/OptiPNG/optipng-0.7.8/optipng-0.7.8.tar.gz/download
442
+ tar -xzf optipng.tar.gz
443
+ cd optipng-0.7.8
444
+ ./configure
445
+ make
446
+ sudo make install
447
+ cd /tmp && rm -rf optipng-0.7.8 optipng.tar.gz
448
+ ```
449
+
450
+ **Step 3: Install jpegoptim from source**
451
+
452
+ ```bash
453
+ cd /tmp
454
+ curl -L -o jpegoptim.tar.gz https://github.com/tjko/jpegoptim/archive/refs/tags/v1.5.5.tar.gz
455
+ tar -xzf jpegoptim.tar.gz
456
+ cd jpegoptim-1.5.5
457
+ ./configure
458
+ make
459
+ sudo make install
460
+ cd /tmp && rm -rf jpegoptim-1.5.5 jpegoptim.tar.gz
461
+ ```
462
+
463
+ **Step 4: Install gifsicle (optional, for GIF optimization)**
464
+
465
+ ```bash
466
+ cd /tmp
467
+ curl -L -o gifsicle.tar.gz https://www.lcdf.org/gifsicle/gifsicle-1.94.tar.gz
468
+ tar -xzf gifsicle.tar.gz
469
+ cd gifsicle-1.94
470
+ ./configure
471
+ make
472
+ sudo make install
473
+ cd /tmp && rm -rf gifsicle-1.94 gifsicle.tar.gz
474
+ ```
475
+
476
+ #### Verification
477
+
478
+ Confirm the installation succeeded:
479
+
480
+ ```bash
481
+ optipng --version
482
+ ```
483
+
484
+ Expected output:
485
+
486
+ ```
487
+ OptiPNG version 0.7.8
488
+ ```
489
+
490
+ ```bash
491
+ jpegoptim --version
492
+ ```
493
+
494
+ Expected output:
495
+
496
+ ```
497
+ jpegoptim v1.5.5
498
+ ```
499
+
500
+ ```bash
501
+ gifsicle --version
502
+ ```
503
+
504
+ Expected output:
505
+
506
+ ```
507
+ LCDF Gifsicle 1.94
508
+ ```
509
+
510
+ #### Troubleshooting
511
+
512
+ **Problem**: `optipng: command not found` after compilation
513
+
514
+ **Solution**: The default installation path is `/usr/local/bin`. Ensure this directory is in your PATH:
515
+
516
+ ```bash
517
+ echo $PATH | grep -q '/usr/local/bin' && echo "PATH OK" || echo "PATH missing /usr/local/bin"
518
+ ```
519
+
520
+ If missing, add it:
521
+
522
+ ```bash
523
+ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc
524
+ source ~/.bashrc
525
+ ```
526
+
527
+ **Problem**: Compilation fails with missing zlib.h
528
+
529
+ **Solution**: Install the zlib development package:
530
+
531
+ ```bash
532
+ sudo dnf install -y zlib-devel
533
+ ```
534
+
535
+ **Problem**: jpegoptim compilation fails with missing jpeglib.h
536
+
537
+ **Solution**: Install the libjpeg development package:
538
+
539
+ ```bash
540
+ sudo dnf install -y libjpeg-turbo-devel
541
+ ```
542
+
543
+ **Problem**: Need to uninstall compiled tools
544
+
545
+ **Solution**: Navigate to each source directory and run:
546
+
547
+ ```bash
548
+ sudo make uninstall
549
+ ```
550
+
551
+ Or manually remove the binaries:
552
+
553
+ ```bash
554
+ sudo rm /usr/local/bin/optipng /usr/local/bin/jpegoptim /usr/local/bin/gifsicle
555
+ ```
556
+
557
+ ---
558
+
559
+ ### Windows (Chocolatey)
560
+
561
+ #### Prerequisites
562
+
563
+ - Windows 10 or later (64-bit)
564
+ - Administrator PowerShell or Command Prompt
565
+ - Chocolatey package manager installed
566
+
567
+ If Chocolatey is not installed, install it first by running this command in an Administrator PowerShell:
568
+
569
+ ```powershell
570
+ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
571
+ ```
572
+
573
+ **Note**: ImageOptim is macOS-only. On Windows, use FileOptimizer for a GUI alternative, or install optipng and jpegoptim command-line tools.
574
+
575
+ #### Installation Steps
576
+
577
+ Run the following commands in an Administrator PowerShell or Command Prompt to install FileOptimizer (GUI) and command-line tools:
578
+
579
+ **Option A: Install FileOptimizer (GUI - recommended for desktop use)**
580
+
581
+ ```powershell
582
+ choco install fileoptimizer -y
583
+ ```
584
+
585
+ FileOptimizer is a comprehensive file optimization tool that supports images (PNG, JPEG, GIF, BMP, TIFF), PDFs, and many other formats. It uses many of the same optimization engines as ImageOptim.
586
+
587
+ **Option B: Install command-line tools (for scripting and automation)**
588
+
589
+ ```powershell
590
+ choco install optipng jpegoptim -y
591
+ ```
592
+
593
+ The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation.
594
+
595
+ #### Verification
596
+
597
+ Open a new PowerShell or Command Prompt window (to refresh PATH), then verify the installations:
598
+
599
+ For FileOptimizer:
600
+
601
+ ```powershell
602
+ where FileOptimizer64.exe
603
+ ```
604
+
605
+ Expected output:
606
+
607
+ ```
608
+ C:\Program Files\FileOptimizer\FileOptimizer64.exe
609
+ ```
610
+
611
+ For command-line tools:
612
+
613
+ ```powershell
614
+ optipng --version
615
+ ```
616
+
617
+ Expected output:
618
+
619
+ ```
620
+ OptiPNG version 7.9.1
621
+ ```
622
+
623
+ ```powershell
624
+ jpegoptim --version
625
+ ```
626
+
627
+ Expected output:
628
+
629
+ ```
630
+ jpegoptim v1.5.5
631
+ ```
632
+
633
+ #### Troubleshooting
634
+
635
+ **Problem**: `optipng: The term 'optipng' is not recognized`
636
+
637
+ **Solution**: Open a new terminal window. Chocolatey updates PATH during installation, but existing terminals do not pick up the change. Alternatively, refresh the environment:
638
+
639
+ ```powershell
640
+ refreshenv
641
+ ```
642
+
643
+ **Problem**: FileOptimizer does not appear in Start menu
644
+
645
+ **Solution**: Chocolatey installs FileOptimizer to `C:\Program Files\FileOptimizer\`. Launch it directly:
646
+
647
+ ```powershell
648
+ & "C:\Program Files\FileOptimizer\FileOptimizer64.exe"
649
+ ```
650
+
651
+ **Problem**: Need to run FileOptimizer from command line for automation
652
+
653
+ **Solution**: FileOptimizer supports command-line operation:
654
+
655
+ ```powershell
656
+ & "C:\Program Files\FileOptimizer\FileOptimizer64.exe" "C:\path\to\image.png"
657
+ ```
658
+
659
+ For batch processing:
660
+
661
+ ```powershell
662
+ Get-ChildItem -Path "C:\images" -Filter "*.png" | ForEach-Object { & "C:\Program Files\FileOptimizer\FileOptimizer64.exe" $_.FullName }
663
+ ```
664
+
665
+ **Problem**: Antivirus blocks installation
666
+
667
+ **Solution**: Chocolatey downloads from trusted sources. Temporarily disable antivirus or add an exception for the Chocolatey directory (`C:\ProgramData\chocolatey`).
668
+
669
+ ---
670
+
671
+ ### WSL (Ubuntu)
672
+
673
+ #### Prerequisites
674
+
675
+ - Windows 10 version 2004 or higher, or Windows 11
676
+ - WSL 2 enabled with Ubuntu distribution installed
677
+ - sudo privileges within WSL
678
+
679
+ **Note**: Image optimization tools installed in Windows are not accessible from WSL. You must install them separately within your WSL Ubuntu environment. The installation process is identical to native Ubuntu.
680
+
681
+ #### Installation Steps
682
+
683
+ Open your WSL Ubuntu terminal and run:
684
+
685
+ ```bash
686
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
687
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y optipng jpegoptim gifsicle
688
+ ```
689
+
690
+ The installation is identical to native Ubuntu since WSL Ubuntu uses the same package repositories.
691
+
692
+ **Optional**: Install Trimage if you have WSLg (Windows 11) or an X server configured:
693
+
694
+ ```bash
695
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y trimage
696
+ ```
697
+
698
+ #### Verification
699
+
700
+ Confirm the installation succeeded:
701
+
702
+ ```bash
703
+ optipng --version
704
+ ```
705
+
706
+ Expected output:
707
+
708
+ ```
709
+ OptiPNG version 0.7.7
710
+ ```
711
+
712
+ ```bash
713
+ jpegoptim --version
714
+ ```
715
+
716
+ Expected output:
717
+
718
+ ```
719
+ jpegoptim v1.5.0
720
+ ```
721
+
722
+ Test optimization on a sample image:
723
+
724
+ ```bash
725
+ # Create a test image and optimize it
726
+ echo "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==" | base64 -d > test.png
727
+ optipng -o2 test.png
728
+ rm test.png
729
+ ```
730
+
731
+ #### Troubleshooting
732
+
733
+ **Problem**: Package installation fails with network errors
734
+
735
+ **Solution**: WSL may have DNS issues. Update the resolv.conf:
736
+
737
+ ```bash
738
+ echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
739
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
740
+ ```
741
+
742
+ **Problem**: Trimage fails to launch with display errors
743
+
744
+ **Solution**: Trimage requires a graphical environment. On Windows 11 with WSLg, it should work automatically. On Windows 10, you need an X server:
745
+
746
+ 1. Install VcXsrv or Xming on Windows
747
+ 2. Export the display in WSL:
748
+
749
+ ```bash
750
+ export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
751
+ ```
752
+
753
+ **Problem**: Need to process files on Windows filesystem
754
+
755
+ **Solution**: Access Windows files through `/mnt/c/`:
756
+
757
+ ```bash
758
+ # Optimize all PNGs in Windows Downloads folder
759
+ find /mnt/c/Users/YourUsername/Downloads -name "*.png" -exec optipng -o2 {} \;
760
+
761
+ # Optimize all JPEGs in Windows Documents folder
762
+ find /mnt/c/Users/YourUsername/Documents -name "*.jpg" -exec jpegoptim --strip-all {} \;
763
+ ```
764
+
765
+ **Problem**: Optimization is slow on files stored in Windows filesystem
766
+
767
+ **Solution**: Files accessed through `/mnt/c/` have slower I/O due to filesystem translation. For best performance, copy files to the Linux filesystem, optimize, then copy back:
768
+
769
+ ```bash
770
+ cp /mnt/c/Users/YourUsername/image.png ~/
771
+ optipng -o7 ~/image.png
772
+ cp ~/image.png /mnt/c/Users/YourUsername/
773
+ ```
774
+
775
+ ---
776
+
777
+ ### Git Bash (Manual/Portable)
778
+
779
+ #### Prerequisites
780
+
781
+ - Windows 10 or later (64-bit)
782
+ - Git Bash installed (comes with Git for Windows)
783
+ - Internet access to download binaries
784
+
785
+ **Note**: Git Bash runs in a MinGW environment on Windows. This guide uses portable Windows binaries that can be run directly from Git Bash without installation.
786
+
787
+ #### Installation Steps
788
+
789
+ **Step 1: Create a directory for the tools**
790
+
791
+ Open Git Bash and run:
792
+
793
+ ```bash
794
+ mkdir -p ~/bin
795
+ ```
796
+
797
+ **Step 2: Download optipng Windows binary**
798
+
799
+ ```bash
800
+ cd /tmp
801
+ curl -L -o optipng.zip "https://sourceforge.net/projects/optipng/files/OptiPNG/optipng-0.7.8/optipng-0.7.8-win64.zip/download"
802
+ unzip -q optipng.zip -d /tmp/optipng-extract
803
+ mv /tmp/optipng-extract/optipng-0.7.8-win64/optipng.exe ~/bin/
804
+ rm -rf /tmp/optipng.zip /tmp/optipng-extract
805
+ ```
806
+
807
+ **Step 3: Download jpegoptim Windows binary**
808
+
809
+ ```bash
810
+ cd /tmp
811
+ curl -L -o jpegoptim.zip "https://github.com/XhmikosR/jpegoptim-windows/releases/download/1.5.5-rel1/jpegoptim-1.5.5-rel1-win64-msvc-2022-mozjpeg331-static-ltcg.zip"
812
+ unzip -q jpegoptim.zip -d /tmp/jpegoptim-extract
813
+ mv /tmp/jpegoptim-extract/jpegoptim.exe ~/bin/
814
+ rm -rf /tmp/jpegoptim.zip /tmp/jpegoptim-extract
815
+ ```
816
+
817
+ **Step 4: Add to PATH**
818
+
819
+ ```bash
820
+ echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
821
+ source ~/.bashrc
822
+ ```
823
+
824
+ #### Verification
825
+
826
+ Confirm the installation succeeded:
827
+
828
+ ```bash
829
+ optipng --version
830
+ ```
831
+
832
+ Expected output:
833
+
834
+ ```
835
+ OptiPNG version 0.7.8
836
+ ```
837
+
838
+ ```bash
839
+ jpegoptim --version
840
+ ```
841
+
842
+ Expected output:
843
+
844
+ ```
845
+ jpegoptim v1.5.5 (build 20230627)
846
+ ```
847
+
848
+ Test with a sample optimization:
849
+
850
+ ```bash
851
+ # If you have a PNG file
852
+ optipng -o2 ~/test.png 2>/dev/null && echo "optipng working"
853
+
854
+ # If you have a JPEG file
855
+ jpegoptim --strip-all ~/test.jpg 2>/dev/null && echo "jpegoptim working"
856
+ ```
857
+
858
+ #### Troubleshooting
859
+
860
+ **Problem**: `optipng: command not found`
861
+
862
+ **Solution**: Verify PATH includes `~/bin`:
863
+
864
+ ```bash
865
+ echo $PATH | grep -q "$HOME/bin" && echo "PATH OK" || echo "Missing from PATH"
866
+ ```
867
+
868
+ If missing, add it manually:
869
+
870
+ ```bash
871
+ echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
872
+ source ~/.bashrc
873
+ ```
874
+
875
+ **Problem**: Download fails with certificate errors
876
+
877
+ **Solution**: Update ca-certificates or use the `-k` flag (less secure):
878
+
879
+ ```bash
880
+ curl -L -k -o optipng.zip "https://sourceforge.net/projects/optipng/files/OptiPNG/optipng-0.7.8/optipng-0.7.8-win64.zip/download"
881
+ ```
882
+
883
+ **Problem**: `unzip` command not found
884
+
885
+ **Solution**: Git Bash may not include unzip. Install it via Chocolatey in Windows, or extract manually:
886
+
887
+ ```bash
888
+ # Use PowerShell to extract
889
+ powershell -command "Expand-Archive -Path '/tmp/optipng.zip' -DestinationPath '/tmp/optipng-extract'"
890
+ ```
891
+
892
+ **Problem**: Path conversion issues with Windows-style paths
893
+
894
+ **Solution**: Use forward slashes and the MSYS_NO_PATHCONV environment variable:
895
+
896
+ ```bash
897
+ MSYS_NO_PATHCONV=1 optipng "C:/Users/Me/My Images/photo.png"
898
+ ```
899
+
900
+ Or use Unix-style paths:
901
+
902
+ ```bash
903
+ optipng "/c/Users/Me/My Images/photo.png"
904
+ ```
905
+
906
+ **Problem**: Permission denied when moving files
907
+
908
+ **Solution**: Ensure you have write access to `~/bin`:
909
+
910
+ ```bash
911
+ chmod 755 ~/bin
912
+ chmod +x ~/bin/optipng.exe ~/bin/jpegoptim.exe
913
+ ```
914
+
915
+ ---
916
+
917
+ ## Post-Installation Configuration
918
+
919
+ After installing image optimization tools on any platform, consider these optional but useful configurations.
920
+
921
+ ### Basic Usage Examples
922
+
923
+ **Optimize a single PNG file:**
924
+
925
+ ```bash
926
+ optipng -o2 image.png
927
+ ```
928
+
929
+ Optimization levels range from -o0 (fastest, least compression) to -o7 (slowest, best compression). Level -o2 provides a good balance.
930
+
931
+ **Optimize a single JPEG file:**
932
+
933
+ ```bash
934
+ jpegoptim --strip-all image.jpg
935
+ ```
936
+
937
+ The `--strip-all` flag removes all metadata including EXIF data, comments, and color profiles.
938
+
939
+ **Optimize a GIF file:**
940
+
941
+ ```bash
942
+ gifsicle -O3 --colors 256 input.gif -o output.gif
943
+ ```
944
+
945
+ ### Batch Processing
946
+
947
+ **Optimize all PNGs in a directory (Linux/macOS/WSL/Git Bash):**
948
+
949
+ ```bash
950
+ find . -name "*.png" -exec optipng -o2 {} \;
951
+ ```
952
+
953
+ **Optimize all JPEGs in a directory:**
954
+
955
+ ```bash
956
+ find . -name "*.jpg" -exec jpegoptim --strip-all {} \;
957
+ find . -name "*.jpeg" -exec jpegoptim --strip-all {} \;
958
+ ```
959
+
960
+ **Optimize all images recursively:**
961
+
962
+ ```bash
963
+ find . \( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" \) -exec sh -c '
964
+ case "$1" in
965
+ *.png) optipng -o2 "$1" ;;
966
+ *.jpg|*.jpeg) jpegoptim --strip-all "$1" ;;
967
+ esac
968
+ ' _ {} \;
969
+ ```
970
+
971
+ ### Creating Shell Aliases
972
+
973
+ Add these to your `~/.bashrc` or `~/.zshrc` for convenience:
974
+
975
+ ```bash
976
+ # Optimize all images in current directory
977
+ alias imgopt='find . -name "*.png" -exec optipng -o2 {} \; && find . -name "*.jpg" -exec jpegoptim --strip-all {} \;'
978
+
979
+ # Quick PNG optimization
980
+ alias pngopt='optipng -o2'
981
+
982
+ # Quick JPEG optimization
983
+ alias jpgopt='jpegoptim --strip-all'
984
+ ```
985
+
986
+ ### macOS ImageOptim CLI Integration
987
+
988
+ If using ImageOptim-CLI on macOS, you can integrate it with your workflow:
989
+
990
+ ```bash
991
+ # Optimize images using ImageOptim app
992
+ imageoptim ~/Pictures/*.png
993
+
994
+ # Optimize with ImageAlpha for better PNG compression
995
+ imageoptim --imagealpha ~/Pictures/*.png
996
+
997
+ # Optimize entire directory
998
+ imageoptim ~/Pictures/
999
+ ```
1000
+
1001
+ ---
1002
+
1003
+ ## Common Issues
1004
+
1005
+ ### Issue: "File not changed" or No Size Reduction
1006
+
1007
+ **Symptoms**: optipng or jpegoptim reports the file was not modified
1008
+
1009
+ **Solutions**:
1010
+
1011
+ - The file is already optimally compressed
1012
+ - Try higher optimization levels:
1013
+
1014
+ ```bash
1015
+ optipng -o7 image.png
1016
+ jpegoptim -m85 --strip-all image.jpg # Lossy compression for more savings
1017
+ ```
1018
+
1019
+ - For PNGs, try pngquant for lossy compression:
1020
+
1021
+ ```bash
1022
+ pngquant --quality=80-90 --skip-if-larger image.png
1023
+ ```
1024
+
1025
+ ### Issue: Optimization Corrupts Image
1026
+
1027
+ **Symptoms**: Image appears damaged or fails to open after optimization
1028
+
1029
+ **Solutions**:
1030
+
1031
+ - Always keep backups before batch optimization
1032
+ - Verify tool versions are up to date
1033
+ - Test with a single file before batch processing:
1034
+
1035
+ ```bash
1036
+ cp original.png backup.png
1037
+ optipng -o2 original.png
1038
+ # Verify original.png opens correctly before continuing
1039
+ ```
1040
+
1041
+ ### Issue: Very Slow Optimization
1042
+
1043
+ **Symptoms**: Optimization takes a long time
1044
+
1045
+ **Solutions**:
1046
+
1047
+ - Use lower optimization levels for faster processing:
1048
+
1049
+ ```bash
1050
+ optipng -o1 image.png # Fast
1051
+ jpegoptim --strip-all image.jpg # Already fast
1052
+ ```
1053
+
1054
+ - Process files in parallel (Linux/macOS):
1055
+
1056
+ ```bash
1057
+ find . -name "*.png" -print0 | xargs -0 -P 4 -I {} optipng -o2 {}
1058
+ ```
1059
+
1060
+ ### Issue: Command Not Found After Installation
1061
+
1062
+ **Symptoms**: Terminal cannot find optipng, jpegoptim, or imageoptim commands
1063
+
1064
+ **Solutions**:
1065
+
1066
+ - Open a new terminal window to refresh PATH
1067
+ - Verify installation location:
1068
+
1069
+ ```bash
1070
+ which optipng
1071
+ which jpegoptim
1072
+ ```
1073
+
1074
+ - On macOS, ensure Homebrew is in PATH:
1075
+
1076
+ ```bash
1077
+ eval "$(/opt/homebrew/bin/brew shellenv)" # Apple Silicon
1078
+ eval "$(/usr/local/bin/brew shellenv)" # Intel
1079
+ ```
1080
+
1081
+ ### Issue: Permission Denied Errors
1082
+
1083
+ **Symptoms**: Cannot write optimized file or access source file
1084
+
1085
+ **Solutions**:
1086
+
1087
+ - Check file permissions:
1088
+
1089
+ ```bash
1090
+ ls -la image.png
1091
+ ```
1092
+
1093
+ - Ensure you own the file or have write access:
1094
+
1095
+ ```bash
1096
+ chmod 644 image.png
1097
+ ```
1098
+
1099
+ - On Windows, ensure the file is not open in another application
1100
+
1101
+ ---
1102
+
1103
+ ## References
1104
+
1105
+ - [ImageOptim Official Website](https://imageoptim.com/mac)
1106
+ - [ImageOptim Homebrew Cask](https://formulae.brew.sh/cask/imageoptim)
1107
+ - [ImageOptim-CLI GitHub](https://github.com/JamieMason/ImageOptim-CLI)
1108
+ - [ImageOptim-CLI Homebrew Formula](https://formulae.brew.sh/formula/imageoptim-cli)
1109
+ - [ImageOptim Alternatives for Windows and Linux](https://imageoptim.com/versions.html)
1110
+ - [OptiPNG Official Website](https://optipng.sourceforge.net/)
1111
+ - [OptiPNG SourceForge Downloads](https://sourceforge.net/projects/optipng/)
1112
+ - [OptiPNG Chocolatey Package](https://community.chocolatey.org/packages/OptiPNG)
1113
+ - [jpegoptim GitHub Repository](https://github.com/tjko/jpegoptim)
1114
+ - [jpegoptim Windows Builds](https://github.com/XhmikosR/jpegoptim-windows)
1115
+ - [jpegoptim Chocolatey Package](https://community.chocolatey.org/packages/jpegoptim)
1116
+ - [Trimage Official Website](https://trimage.org/)
1117
+ - [FileOptimizer Official Website](https://nikkhokkho.sourceforge.io/?page=FileOptimizer)
1118
+ - [FileOptimizer Chocolatey Package](https://community.chocolatey.org/packages/FileOptimizer)
1119
+ - [Gifsicle Official Website](https://www.lcdf.org/gifsicle/)