A calm, preview-first desktop workstation for sorting large piles of media — fast.
Preview the file. Press a key. It moves. Ctrl+U walks it back. That's the whole loop.
comfysort-demo-attach.mp4
If you triage thousands of images and videos at a time — photo dumps, screenshot graveyards, render output — file managers slow you down because they want you to navigate. comfysort wants you to decide. The preview is the hero, every destination is a single keystroke, and every action is journaled and reversible.
Pick an inbox and a destination root, preview the current file, press 1–9 to move it (0 trashes, ⇧+digit copies), and it's gone — next file. It is not an auto-sorter: nothing on disk changes without an explicit action.
- Triage fast — native full-quality image & video previews; hotkey move/copy/trash; multiselect for batch ops; merge multiple inbox folders into one queue; virtualized for 25k+ files.
- Organize — folder Navigator with type-to-fuzzy-search, recursive media counts, and create/rename/delete; a sort-target editor that binds any folder (even outside the root) to any key.
- Safe & reversible — journaled operations, multi-step Ctrl+U undo, per-file revert from the action history, soft-delete trash, collision-safe renames, verified cross-drive moves.
- Comfortable — calm dark UI with 4 theme presets, settings persisted to
config.toml, one-click in-app updater, portable no-install build.
The three-column workstation — inbox queue · native preview · file info, hotkey sort targets & navigator
Latest release → (Windows x64)
| File | Notes |
|---|---|
comfysort_<version>_x64-setup.exe |
Recommended — installer with Start-menu entry, uninstaller, and seamless one-click in-app updates |
comfysort_<version>_x64-portable.zip |
No install — unzip and run comfysort.exe; updates are manual (the app links each new zip) |
comfysort_<version>_x64_en-US.msi |
MSI — managed / silent installs |
Needs the WebView2 Runtime, the Edge-based system component that ships with Windows 11 (and current Windows 10) — the installers download it automatically in the rare case it's missing. Everything else the app needs, including WebView2Loader.dll, is bundled inside every package. Builds are currently unsigned, so SmartScreen may warn on first launch — More info → Run anyway. Release notes mirror the changelog.
Prereqs: Rust (stable), Node.js + npm, and the Tauri v2 system prerequisites.
npm install
npm run tauri dev # hot reload
npm run tauri build # → target/release/comfysort.exe + installers
cargo test -p comfysort-engine # engine tests (pure Rust, no webview)Tab toggles focus between the Inbox and the Navigator (purple border + *). Hotkeys and undo are global; navigation routes by focus.
| Key | Action |
|---|---|
| 1–9 / 0 | Move current file (or selection) to that target / to trash |
| Shift+1–9 | Copy instead of move (in Navigator: bind highlighted folder to that slot) |
| Ctrl+U | Undo the last operation — multi-step |
| ↑/↓ · Shift+↑↓ | Select · extend multiselection |
| s / f / Ctrl+R | Cycle sort field / filter / sort order |
| / (or just type in Navigator) | Fuzzy-search every folder under the root |
| Enter / Shift+D | Move / copy into the highlighted Navigator folder |
| → ← | Drill into / ascend folders |
| Ctrl+N · F5 · Esc | New folder · rescan inbox · close / cancel |
Everything is also clickable — sort targets, navigator rows, and a right-click context menu on inbox items.
- No autonomous moves — every mutation requires an explicit action.
- Journal first — append-only JSONL at
<output>/.comfysort/journal.jsonl. - Soft delete only — trash renames into
.comfysort/.trash/, never anrm. - Collisions never clobber — Explorer-style
name (2).extrenames by default. - Cross-drive moves are verified — copy → verify size → delete source, behind a confirm.
- Undo is real — a session stack walks every operation back; the action history reverts single files.
Tauri v2 + SvelteKit (Svelte 5, SPA) + TypeScript over a pure-Rust engine. The engine (crates/engine) has no Tauri imports and is fully testable on its own; all filesystem mutation lives in its operations layer. The Tauri shell (src-tauri) is the only IPC bridge, and the frontend mirrors the engine DTOs through one typed wrapper — mutating commands return small deltas so a 25k-file inbox never re-serializes.
Settings persist atomically to config.toml (theme, collision policy, confirms, defaults — set default folders and comfysort opens straight into them).
Restart-safe undo via journal replay · worker queue for huge batches · breadcrumbs for the recursive inbox · self-updating portable build · richer media metadata (EXIF, codec) · backend thumbnail pipeline · macOS / Linux bundles.
MIT — © 2026 kpg-anon.



