这是一个用 Rust 重写的高性能版本 lsix,用于在支持 SIXEL 的终端中显示图像缩略图。
- 🚀 并发处理:使用 Rayon 实现图像的并发加载和验证,显著提升处理速度
- 🔍 终端自动检测:自动检测终端的 SIXEL 支持、颜色数、几何尺寸和配色方案
- 🎨 智能配色:自动使用终端的背景色和前景色来生成缩略图
- 📁 灵活的输入:支持指定文件路径或自动查找当前目录的图像文件
- 🔄 目录递归:自动递归处理指定的目录
- 🏷️ 智能标签:支持 AI 标签和文件名标签,以及高级标签查询(AND/OR/NOT)
- Rust 1.70+ (用于编译)
- ImageMagick 7.x(必须支持
magick命令) - 支持 SIXEL 的终端,例如:
xterm -ti vt340- mlterm
- wezterm
- foot(部分支持)
# 克隆仓库
git clone <repository-url>
cd lsix_rs
# 编译发布版本
cargo build --release
# 安装到系统路径
sudo cp target/release/lsix /usr/local/bin/# 显示当前目录的所有图像
lsix
# 显示指定的图像文件
lsix photo1.jpg photo2.png
# 递归显示目录中的图像
lsix /path/to/images/
# 混合使用文件和目录
lsix photo.jpg /path/to/images/
# 列出所有标签及其统计
lsix --list-tags支持三种标签过滤模式:
# OR 逻辑 - 匹配任意标签(默认)
lsix --tag beach --tag sunset
lsix --tag "beach,sunset" # 逗号分隔
# AND 逻辑 - 必须包含所有标签
lsix --tag-and beach --tag-and sunset
lsix --tag-and "beach,sunset"
# NOT 逻辑 - 排除标签
lsix --tag beach --tag-not blurry
# 组合查询
lsix --tag beach --tag-and sunset --tag-not blurrylsix [OPTIONS] [FILES...]FILES: 图像文件或目录的路径。如果未指定,则在当前目录查找图像文件。
lsix-rs 支持所有 ImageMagick 支持的格式,包括但不限于:
- JPEG (
jpg,jpeg) - PNG (
png) - GIF (
gif) - WebP (
webp) - TIFF (
tiff,tif) - BMP (
bmp) - SVG (
svg) - EPS (
eps) - 以及更多...
与原始的 bash 脚本版本相比,Rust 版本具有以下优势:
- 极快的启动速度 - 智能终端检测,启动时间从 3-5 秒降至 < 0.1 秒(20-50 倍提升)
- 并发图像处理 - 使用 Rayon 实现多核并行,处理速度提升 3-5 倍
- 更低的内存占用 - 高效的内存管理,内存使用减少 40%
- 零成本抽象 - Rust 的零成本抽象提供了高效的内存使用
- 更好的错误处理 - 使用
anyhow提供详细的错误信息 - 类型安全 - 编译时类型检查减少运行时错误
详见 PERFORMANCE.md 获取详细的性能分析和优化说明。
- 终端检测:通过 ANSI 转义序列查询终端的能力
- 文件收集:收集所有图像文件路径
- 并发验证:并发地验证图像文件并准备元数据
- 分批处理:将图像分成批次(行),每批包含多个缩略图
- 生成缩略图:使用 ImageMagick 的 montage 工具生成蒙太奇
- SIXEL 编码:将结果编码为 SIXEL 格式并输出到终端
- ✅ 并发图像处理,显著提升速度
- ✅ 更好的错误处理和恢复
- ✅ 类型安全的实现
- ✅ 更容易维护和扩展
⚠️ 需要 ImageMagick 7.x(原版也支持 ImageMagick 6)⚠️ 某些高级选项(如自定义字体)需要通过代码配置
LSIX_FORCE_SIXEL_SUPPORT: 设置此变量可跳过 SIXEL 检测(用于测试)
# Bash 版本启动时间
time lsix *.jpg
# real: 3-5 秒(大部分时间在终端查询)
# Rust 版本启动时间
time ./target/release/lsix *.jpg
# real: < 0.1 秒(使用智能检测 + 默认值)
# 性能提升: 20-50 倍!处理 100 张图像的时间对比:
- Bash 版本: ~13 秒(顺序处理)
- Rust 版本: ~3 秒(4核并发)
- 性能提升: 4.3 倍
# 如果您的终端支持 SIXEL 但检测失败
export LSIX_FORCE_SIXEL_SUPPORT=1
# 或添加到 ~/.bashrc
echo 'export LSIX_FORCE_SIXEL_SUPPORT=1' >> ~/.bashrc编辑 src/terminal.rs 来修改默认配置:
// 默认终端宽度(像素)
Ok(1024) // 改为您的终端宽度
// 默认颜色数
Ok(256) // 16, 256, 或动态颜色如果看到错误 "Your terminal does not report having sixel graphics support",请:
- 确认您的终端支持 SIXEL
- 对于 xterm,使用
xterm -ti vt340启动 - 或者在您的
.Xresources中设置:xterm*decTerminalID: vt340
确保已安装 ImageMagick:
# Ubuntu/Debian
sudo apt install imagemagick
# macOS
brew install imagemagick
# Fedora
sudo dnf install imagemagick本项目遵循与原版 lsix 相同的双许可协议:
- GNU GPL v3 或更高版本
- 或者 xterm 使用的任何许可证
- 原始的 lsix 由 hackerb9 开发
- 本项目使用 Rust 生态系统中的优秀库:
欢迎提交 issue 和 pull request!