Skip to content

kpg-anon/comfysort

Repository files navigation

comfysort mascot

comfysort

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.

Version 0.4.7 Tauri v2 Svelte 5 Rust engine License: MIT

Download the latest release

comfysort-demo-attach.mp4

✨ Why

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 19 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.

🎛️ Features

  • 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.

🖥️ Screenshots

The three-column workstation: inbox queue, native preview, file info / sort targets / navigator
The three-column workstation — inbox queue · native preview · file info, hotkey sort targets & navigator
Navigator fuzzy search Action history with per-file revert
Navigator — type to fuzzy-find any folder, Enter moves into it Action history — every operation journaled, revert any single file
Settings with theme presets Sort-target editor
Settings — themes, collision policy, confirms, defaults (config.toml) Sort-target editor — bind any folder to keys 19, =,

⬇️ Download

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.

🛠️ Build from source

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)

⌨️ Keyboard essentials

Tab toggles focus between the Inbox and the Navigator (purple border + *). Hotkeys and undo are global; navigation routes by focus.

Key Action
19 / 0 Move current file (or selection) to that target / to trash
Shift+19 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.

🛟 How it stays safe

  • 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 an rm.
  • Collisions never clobber — Explorer-style name (2).ext renames 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.

🧱 Under the hood

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).

🗺️ Roadmap

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.

📜 License

MIT — © 2026 kpg-anon.


A calm place to sort your media. Preview the file. Press a key. Ctrl+U to undo.

About

A calm, keyboard-first desktop workstation for sorting large piles of media — fast. Tauri v2 + Svelte 5 over a pure-Rust engine.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors