Skip to content

Akxan/picvert

Repository files navigation

🖼️ Picvert

Batch image · PDF · Office document converter

macOS (Apple Silicon) · Windows · Tauri shell + Python engine · Signed · Notarized · Auto-update

Latest release License Tauri Python Rust

CI Tests Platforms Formats in Formats out Code signed Notarized Auto-update

Stars Forks Issues Last commit Repo size Maintained

🇨🇳 中文 · 🇬🇧 English

📖 发布手册 · 🐛 报 Bug · 💡 提建议 · 📦 下载 · 📝 更新日志


🇨🇳 中文

把文件(或整个文件夹)拖进来,选输出格式,点转换。 桌面上的悬浮胶囊显示时间和天气,Picvert 安静呆在角落直到你需要。

主面板    悬浮胶囊

✨ 功能亮点

🖼️ 图像格式 PNG · JPEG · JFIF · BMP · GIF · TIFF · WEBP · ICO · PPM · TGA · JPEG2000 · SVG · HEIC (读 + 写)
📄 PDF → 图像 每页 3× 缩放渲染(可调)
📊 文档互转 DOCX ↔ XLSX ↔ CSV 六向真实转换(多 sheet XLSX → 一个 CSV 一张表)
🎚️ 质量滑块 JPEG / WEBP / HEIC / JPEG2000 — 60-100,默认 90
📐 最大宽度 批量按比例缩小大图
📁 文件夹拖入 递归展开所有支持格式(每次封顶 5000 文件)
并行转换 sidecar 线程池 — 批量比 1.2.x 快 3-4×
🪟 紧凑模式 桌面悬浮天气小部件,点击展开主面板
🌐 多语言 4 种语言(EN · ES · RU · ZH),托盘菜单同步翻译
🔄 自动升级 启动后台检查 → 弹原生对话框 → 签名验证后替换重启
⌨️ 快捷键 ⌘O 打开 · ⌘↵ 转换 · ⌘L 清空 · ⌘. 取消
🔍 点击缩略图 用系统默认 app 打开源文件(预览 / Adobe 等)

🪟 胶囊模式 · Compact Mode

主面板关掉之后 Picvert 不退出,会缩成桌面悬浮胶囊——一个 280 × 140 的小卡片,停在屏幕右上角:

胶囊模式

🕐 时间 / 日期 实时本地时间 + 时区缩写 + UTC offset,自动检测夏令时(DST)
☀️ 天气 / 城市 IP 地理定位 → 当前城市 + 气温 + 天气图标(晴 / 多云 / 雨 / 雪 / 雷暴等)
🖱️ 拖动 在胶囊上任意位置按住就能拖到屏幕任何角落
👆 单击 平滑展开回主面板
📎 拖文件进胶囊 直接进入主面板转换队列 — 不需要先展开
🌐 多语言同步 日期 / 时区 / 城市国家名跟随主面板的语言切换
🎬 微动画 入场缩放 + 出场淡出 + hover 时天气图标旋转

胶囊完全透明背景(仅 macOS,Windows 上是不透明小卡片),不会遮挡桌面壁纸;always-on-top 浮在所有窗口之上但不抢焦点。

🚀 下载安装

Releases 页面

  • macOS (Apple Silicon)Picvert_*_aarch64.dmg
  • Windows (x86_64)Picvert_*_x64-setup.exe

装上之后自动升级 — 下次发新版时启动会弹原生对话框,确认后自动下载替换。

🛠️ 本地开发

git clone https://github.com/Akxan/picvert.git
cd picvert
python3 -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pytest -q                                            # 28 tests

# 编译 Python sidecar
python -m PyInstaller engine.spec --clean --noconfirm

# Tauri dev shell(热重载)
cargo install tauri-cli --version "^2.0.0" --locked
cd src-tauri && cargo tauri dev

需要:Python 3.10+ · Rust(rustup)· macOS Xcode CLT / Windows MSVC Build Tools。


🇬🇧 English

Drag files (or whole folders) in, choose a format, click Convert. A floating capsule on your desktop shows time + weather while Picvert sits out of the way until you need it.

✨ Highlights

🖼️ Images PNG · JPEG · JFIF · BMP · GIF · TIFF · WEBP · ICO · PPM · TGA · JPEG2000 · SVG · HEIC (read & write)
📄 PDF → image Every page at 3× zoom (configurable)
📊 Documents Real conversion across DOCX ↔ XLSX ↔ CSV (six directions)
🎚️ Quality slider JPEG / WEBP / HEIC / JPEG2000 — 60-100, default 90
📐 Max-width Batch-downscale large images proportionally
📁 Folder drop Recursively expands to all supported files (caps 5000)
Parallel Sidecar thread pool — ≈3-4× faster batch conversion
🪟 Compact mode Draggable always-on-top weather widget; click to expand
🌐 i18n 4 languages (EN · ES · RU · ZH) — tray menu translates too
🔄 Auto-update Background check + native confirm + signed payload verification
⌨️ Shortcuts ⌘O open · ⌘↵ convert · ⌘L clear · ⌘. cancel
🔍 Click thumbnail Opens source in your default app (Preview / Adobe / etc.)

📦 Download

Grab the latest installer from Releases:

  • macOS (Apple Silicon)Picvert_*_aarch64.dmg
  • Windows (x86_64)Picvert_*_x64-setup.exe

Installed apps auto-update on next launch (signature verified).


🧬 Architecture · 架构

┌─────────────────────────────────────────────────┐
│  Tauri shell  (Rust + WebView)                  │  src-tauri/  +  ui/
│  ─────────────────────────────────────────      │
│  • Main panel · Compact capsule                 │
│  • Menu-bar tray · Native dialogs               │
│  • Auto-updater (minisign verified)             │
│  • Code-signed (Developer ID), notarized        │
└──────────────────┬──────────────────────────────┘
                   │ persistent JSON-RPC over stdio
                   │ (4-thread worker pool)
┌──────────────────▼──────────────────────────────┐
│  picvert-engine  sidecar  (Python --onedir)     │  picvert/
│  ─────────────────────────────────────────      │
│  • Pillow · PyMuPDF · pillow-heif               │
│  • python-docx · openpyxl                       │
│  • Cold start ≈ 0.17 s                          │
└─────────────────────────────────────────────────┘

🧰 Tech stack · 技术栈

Layer · 层 Stack · 选型
Desktop shell Tauri 2 — Rust + native WebView (WKWebView · WebView2)
Frontend Vanilla HTML / CSS / JS — no bundler, no framework
Conversion engine Python 3.12 — Pillow · PyMuPDF · pillow-heif · python-docx · openpyxl
Packaging PyInstaller --onedir (sidecar) + Tauri bundler (shell)
Code signing Apple Developer ID Application (notarized + stapled) on macOS; minisign-signed updater payloads on both platforms
CI / Release GitHub Actions — build · sign · notarize · publish · manifest
Testing pytest — 28 tests across all converter paths

📐 Document conversion matrix · 文档转换矩阵

target →     DOCX   XLSX   CSV
DOCX           ✓¹     ✓     ✓
XLSX           ✓      ✓¹    ✓²
CSV            ✓      ✓     ✓¹

¹ same-format → file copy
² multi-sheet XLSX → one CSV per sheet (no data loss)

🚢 Release pipeline · 发布流程

See docs/RELEASING.md for the full runbook (secrets, signing, notarization, the PyInstaller framework workarounds, and disaster recovery).

# Bump pyproject.toml + src-tauri/tauri.conf.json to vX.Y.Z, update CHANGELOG.
git tag -a vX.Y.Z -m "Picvert vX.Y.Z"
git push origin main vX.Y.Z

GitHub Actions then runs tests, builds the Python sidecar, repairs PyInstaller framework artifacts, three-pass codesigns the sidecar, builds + signs the Tauri bundle, submits to Apple notarytool, generates latest.json, and publishes the GitHub Release.

📝 Changelog · 更新日志

See CHANGELOG.md.

⭐ Star History

Star History Chart

仓库 0 ⭐ 时显示为平线;点 ⭐ 后图表会画出增长曲线。

📜 License · 许可证

Apache-2.0.


Built with Tauri · PyInstaller · Pillow · PyMuPDF · Rust · Python

Made by Akxan · 2026

About

Batch image · PDF · Office document converter for macOS (Apple Silicon) and Windows. Tauri shell + Python sidecar. Signed, notarized, auto-updating.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors