base on A compression (jpg/png/webp/svg/gif/css/js/html/mp4/mov) App, it can convert different format pictures, support for macOS and Windows. English | [简体中文](./README-zh-CN.md) # <img alt="hummingbird-h1" src="https://github.com/leibnizli/hummingbird/assets/1193966/8a1a4c5b-e69b-4788-961b-60d9d323781c" width="240"> 1. **Hummingbird** uses intelligent compression technology to reduce file size. It supports: jpg, png, webp, svg, gif, css, js, html, mp4, mov. You can set the size of the picture or video to be scaled equally at the same time as compression. Folder compression can be dragged and dropped. 2. **Hummingbird** can convert pictures in different formats, supports: png, webp, jpeg, jpg, gif, tiff, avif, heic, and can export pictures in different formats, supports: png, webp, jpeg, jpg, gif , tiff, avif, ico, icns (Apple system only) format pictures. 3. **Hummingbird** can extract audio from videos, delete audio from videos, convert videos to gif, and convert video formats, supporting mp4, mov, and avi. 4. One or more segments of audio can be cut, and can be converted to mp3, wav format. <img src="https://github.com/leibnizli/hummingbird/assets/1193966/2a07f300-2d62-4624-9043-24d5daa6bd7a" width="424"> * jpg, png, webp, svg, gif, html will replace the current file after compression, Backup can be turned on in Settings, and hummingbird will back up the files to the `source` folder in the current directory. * A new file with .min will be generated after css, js, mp4 compression. ## Install ### Latest version #### Download from GitHub * <a href="https://github.com/leibnizli/hummingbird/releases">**macOS**</a>(Apple Silicon, arm64)After installation, you need to allow Hummingbird to launch in `System Settings` → `Security & Privacy`. * ~~**macOS**~~(Intel) * <a href="https://github.com/leibnizli/hummingbird/releases/download/v5.3.0/hummingbird-Setup-5.3.0.exe">**Windows**</a> (>=10) * <a href="https://apps.apple.com/us/app/id6755109910">****iPhone****</a> iPhone / iPad / Mac (Apple Silicon) ### Old version v3.0.0 Suitable for old versions of windows, win7, win8 * <a href="https://drive.google.com/file/d/1eMLdviqWVWRv8gXT_d1W1uUZoIwIumVS/view?usp=drive_link">**Windows**</a>(v3.0.0,Google Drive) * <a href="https://pan.baidu.com/s/1146zRGqLFlDR27a7rUgr5w">**Windows**</a>(v3.0.0,百度网盘) ## Help * [What is Apple Silicon?](https://arayofsunshine.dev/blog/apple-silicon) ## Usage ### Reduce the file size #### jpg <table> <tbody> <tr> <td><img src="./demo/jpg-before.jpg" alt="" width="280" height="392"></td> <td><img src="./demo/jpg-after.jpg" alt="" width="280" height="392"></td> </tr> <tr> <td>Before</td> <td>After</td> </tr> <tr> <td>41kB</td> <td>12kB</td> </tr> </tbody> </table> #### png <table> <tbody> <tr> <td><img src="./demo/png-before.png" alt="" width="128" height="128"></td> <td><img src="./demo/png-after.png" alt="" width="128" height="128"></td> </tr> <tr> <td>Before</td> <td>After</td> </tr> <tr> <td>28.9kB</td> <td>9.42kB</td> </tr> </tbody> </table> #### svg <table> <tbody> <tr> <td><img src="./demo/svg-before.svg" alt="" width="216" height="164"></td> <td><img src="./demo/svg-after.svg" alt="" width="216" height="164"></td> </tr> <tr> <td>Before</td> <td>After</td> </tr> <tr> <td>5.47kB</td> <td>3.55kB</td> </tr> </tbody> </table> #### mov <table> <tbody> <tr> <td>Before</td> <td>After</td> </tr> <tr> <td>1382.44MB</td> <td>37.95MB</td> </tr> </tbody> </table> ### Crop audio <img alt="audio" src="https://github.com/leibnizli/hummingbird/assets/1193966/9c8a9f07-fd62-416e-b536-57483730834f" width="300"> ## Hidden functions Access hidden functions through the menu bar entrance. * **Hummingbird** can quickly obtain the Base64 encoding of files, supporting: png, webp, jpeg, jpg, gif, tiff, avi, svg, ttf, woff, woff2. * **Hummingbird** can view the history of compressed files.", Assign "at most 3 tags" to the expected json: {"id":"9274","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"