AI prompts
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, 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, avi, 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.
> [!WARNING]
> Compression of large videos consumes a lot of CPU, so generally do not compress them.
<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
* [What is Apple Silicon?](https://arayofsunshine.dev/blog/apple-silicon)
* [macOS App cannot be opened](https://arayofsunshine.dev/blog/macos-app-cannot-be-opened)
### Latest version
#### Download from GitHub
* <a href="https://github.com/leibnizli/hummingbird/releases">**macOS**</a>(Apple Silicon, arm64)
* ~~**macOS**~~(Intel)
* <a href="https://github.com/leibnizli/hummingbird/releases">**Windows**</a> (>=10)
#### Download from Cloudflare
* <a href="https://static.arayofsunshine.dev/hummingbird-5.3.0-arm64.dmg">**macOS**</a>(Apple Silicon)
* ~~**macOS**~~(Intel)
* <a href="https://static.arayofsunshine.dev/hummingbird%20Setup%205.3.0.exe">**Windows**</a>(>=10)
### 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,百度网盘)
## 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>
### 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"