用 Rust 写了个 Komari 终端 TUI 工具 ktui,Vibe-Coding 体验分享
最近在折腾 Rust,顺手 Vibe-Coding 了一个 Komari 终端 TUI 工具 ktui。Komari 大家应该不陌生,那个小巧快速的图片压缩工具,用起来很方便,但命令行参数记起来有点费劲。所以我就想,要是有个界面的终端工具会不会更直观?于是 ktui 就诞生了。
为什么做 ktui?
Komari 本身很强,但每次都要翻文档查参数,或者写个 Shell 脚本来批量处理,有点麻烦。我平时习惯在终端里干活,切到图形界面总觉得打断节奏。不如直接在终端里做一个 TUI(文本用户界面),用键盘操作,既能保持终端的高效,又能有界面的直观。
ktui 的终端操作主界面,展示了文件列表和参数配置区域。
功能特性
ktui 目前支持的功能包括:
- 文件/目录选择:可以在终端里浏览文件系统,选择要压缩的图片或文件夹。
- 参数配置:通过界面调整 Komari 的压缩级别、输出质量等参数,实时反馈。
- 批量处理:支持多文件选中,一键批量压缩,节省时间。
- 实时预览:压缩前后的大小对比,以及估计的压缩率,方便决策。
技术实现
项目用纯 Rust 写的,TUI 部分用了 Ratatui(之前叫 tui-rs),这个库生态挺成熟,跨平台支持也好。事件处理用了 Crossterm,兼容性更强。整体架构上,我拆成了几个模块:UI 渲染、文件操作、Komari 命令调用、事件循环。这样维护起来清晰,后续加功能也方便。
如何使用
安装很简单,Cargo 直接装就行:
cargo install ktui
然后运行 ktui,就能看到主界面了。操作逻辑跟常见的 TUI 工具差不多,上下箭头选择,回车确认,Tab 切换功能区,底部有快捷键提示。
遇到的问题和解决
开发过程中踩了几个坑,分享出来给想自己写的同学避避雷:
- 终端大小适配:一开始没处理终端窗口大小变化,结果调整窗口布局就乱了。Ratatui 提供了事件监听,注册一个 resize 事件重新计算布局就行。
- 并发处理:压缩大图时界面卡住,体验很差。后来用了 Rust 的 async/await 和 Tokio,压缩任务放到后台线程,主线程更新 UI,顺滑多了。
- 跨平台路径:Windows 和 Linux 的路径分隔符不一样,写死绝对路径容易出幺蛾子。用
std::path::Path处理,自动适配系统。
后续计划
当前版本算是 MVP(最小可用产品),核心功能都跑通了。接下来打算加点东西:
- 支持更多 Komari 参数,比如元数据处理。
- 配置文件持久化,下次打开保留上次设置。
- 主题切换,现在只有默认的暗色风格,加点亮色或彩色主题。
代码已经开源了,欢迎围观吐槽。Rust 确实好用,写起来顺手,性能也没得说。如果你也在折腾终端工具,或者对 ktui 有什么想法,欢迎交流。
Happy Coding!

评论已关闭