TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
Region screenshots with annotations and OCR — in Rust, native all the way down.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Quickshort
Region screenshots with annotations and OCR — in Rust, native all the way down.
Press the global hotkey, drag a region — even across monitors — then save a
pixel-perfect PNG, copy it, or pull its text out with the OS-native OCR
engine. Draw on it first if you like. No Electron, no runtime, no model
downloads.README 전문 보기 ↗Press the global hotkey, drag a region — even across monitors — then save a pixel-perfect PNG, copy it, or pull its text out with the OS-native OCR engine. Draw on it first if you like. No Electron, no runtime, no model downloads.
relay/share/) and copies
an unguessable URL that expires in 3 days. No account, no local
server, and the process does not need to stay aliveVNRecognizeTextRequest on macOS,
Windows.Media.Ocr on Windows, Tesseract on Linux with script
auto-detection (ocr_lang = "auto", OSD pass picks eng/jpn/vie/…);
nothing ships in the binary⌘R records the selected region to mp4 at 15fps:
PipeWire push on Wayland, re-capture polling on macOS (ScreenCaptureKit)
and Windows (GDI). Encoding runs on a worker through ffmpeg — slow
encodes drop frames instead of shortening the clip (needs ffmpeg on
PATH; installers surface it)⌘G re-grabs the region while you scroll and
stitches the frames into one tall image — docs, threads, chat logsquickshort --capture fits into scripts and window
manager keybindsDMG — grab Quickshort-v*-macos.dmg from
Releases, open it, drag
Quickshort into Applications.
Homebrew (custom tap):
brew tap truongnat/tap
brew install --cask quickshort
Unsigned build — no Developer ID signature or notarization. On first launch, right-click the app → Open → Open once. The cask strips quarantine automatically. The app is signed with a stable self-signed identity purely so macOS keeps your permission grants across updates.
Required permissions (System Settings → Privacy & Security):
Updates — the app checks GitHub Releases once a day in the background;
the tray item becomes Update to vX — Restart to Install. Or: tray menu →
Check for Updates…, or brew upgrade --cask quickshort.
Optional: brew install ffmpeg enables screen recording (⌘R); without
it everything else still works — Record fails with a visible toast.
AppImage — grab Quickshort-Linux.AppImage from
Releases, chmod +x,
run. Bundles the tray dependencies (gtk plugin).
Debian / Ubuntu — quickshort_amd64.deb installs to /usr/bin with a
.desktop entry and icon:
sudo dpkg -i quickshort_amd64.deb
The deb pulls ffmpeg via Recommends (screen recording); AppImage users
need it on PATH themselves — sudo apt install ffmpeg.
Or from source — ./install.sh installs missing system deps on
Debian/Ubuntu (pipewire/spa/clang dev packages for the build, plus
tesseract-ocr + language packs, wl-clipboard, libnotify-bin at
runtime; extra OCR languages via QS_OCR_LANGS), builds release →
~/.local/bin and registers a GNOME custom shortcut via gsettings
(default Ctrl+Alt+Q). On non-GNOME desktops it installs the binary
only — bind it yourself.
Quickshort-Windows-Setup.exe under
Releases — NSIS
installer: Program Files install, Start Menu shortcut, uninstaller entry.
Unsigned, so SmartScreen warns once (More info → Run anyway). Runs as a
tray app, no console window. Or build from source
(cargo build --release -p qs-app). The installer warns if ffmpeg.exe
isn't on PATH (winget install ffmpeg) — it's only needed for ⌘R
screen recording.
quickshort # resident tray app (default)
quickshort --capture # one-shot: select -> action -> exit
quickshort --capture --delay 2 # wait first (menus, tooltips)
quickshort --capture --out ~/shots/a.png
quickshort --capture-full # save the whole screen, no selection
| Context | Shortcut | Action |
|---|---|---|
| Anywhere | ⌘⇧S macOS/Linux, PrintScreen Windows (configurable) | Start a selection |
| Anywhere | ⌘⇧F (configurable, hotkey_full) | Save the whole screen — no overlay |
| Selection made | ⌘S / ⌘C / ⌘T / ⌘L (rebindable) | Save / copy / OCR / share link → clipboard |
| Selection made | ⌘G / ⌘R (rebindable) | Scrolling capture / record region to mp4 |
| Selection made | ⌘Z / ⌘⇧Z (rebindable key) | Undo / redo an edit |
| Block selected | Delete / ⌫ / Esc | Remove block / deselect |
| Text draft | Enter / Esc | Commit / discard |
| Text draft | ⌘A, ⇧+arrows, ←→, ⌫/⌦ | Select, move caret, delete |
| Selection made | Esc | Cancel |
The tray menu offers Capture Region, Capture Full Screen, Recent Captures,
Open Screenshots Folder, Check for Updates, Launch at Login, Settings and
Quit. Settings also live in ~/.config/quickshort/config.toml:
hotkey = "CmdOrCtrl+Shift+S" # global-hotkey syntax; "PrintScreen" is
# the Windows default — falls back to
# Ctrl+Shift+S if the shell owns it
hotkey_full = "CmdOrCtrl+Shift+F" # second chord: saves the whole screen;
# empty string disables it
# save_dir = "~/Pictures/quickshort"
launch_at_login = false
auto_update = true
recent_max = 8 # entries in the tray menu
accent = "blue" # blue/purple/pink/orange/green/gray
copy_after_save = false # also put the PNG on the clipboard
ocr_lang = "auto" # Linux tesseract: "auto" detects the
# script, or pin e.g. "eng+jpn"
keep_days = 0 # auto-delete captures older than N days
key_save = "s" # overlay ⌘+key actions
key_copy = "c"
key_ocr = "t"
key_share = "l"
key_scroll = "g" # scrolling capture
key_record = "r" # screen recording (needs ffmpeg on PATH)
key_undo = "z" # ⌘z undo, ⌘⇧z redo
popup_pos = "top-right" # toast/card/REC dock corner: top-left,
# top-center, top-right, bottom-* too
The selection toolbar docks to whichever edge of the region has room.
Clicking away starts a new selection; Esc or a click without dragging
cancels. Saved files go to ~/Pictures/quickshort/quickshort-<ts>.png.
capture every monitor into RAM
→ dimmed overlay windows (one per monitor)
→ selection in global virtual coordinates
→ map through each monitor's origin + DPI scale
→ stitch per-monitor crops on a worker thread
| Crate | Role |
|---|---|
qs-core | geometry + stitching, pure |
qs-capture | per-OS backends behind ScreenCapture |
qs-overlay | winit + softbuffer, SDF-drawn toolbar, annotation layers, text via embedded Inter (ab_glyph) |
qs-ocr | native text extraction |
qs-app | CLI + resident tray app (tray-icon/muda/global-hotkey), updates |
Capture backends:
| Platform | Backend |
|---|---|
| macOS 14+ | SCScreenshotManager per-display one-shot at framebuffer pixels |
| Windows | GDI BitBlt per monitor, PER_MONITOR_AWARE_V2 |
| GNOME Wayland | org.gnome.Mutter.ScreenCast → PipeWire shm frames, in-process |
| Other Wayland (KDE, wlroots) | org.freedesktop.portal.ScreenCast → PipeWire |
| X11 | RandR layout + GetImage |
On GNOME Wayland there is no portal dialog and no subprocess — the backend
talks to mutter's private ScreenCast API (the same one the GNOME portal
uses internally), then reads shared-memory buffers from PipeWire, one
connection multiplexing all monitor streams. Other compositors go through
xdg-desktop-portal: the compositor shows a consent dialog once, and on
portals supporting persist_mode (KDE 5.24+) a stored restore token makes
later captures dialog-free. QS_CAPTURE=portal|mutter|x11 forces a backend.
OCR on Linux runs the system tesseract binary: in auto mode an OSD
pass detects the script and maps it to the installed language packs
(missing packs fail loud with the exact apt package to install), and
CJK output gets its artificial word spacing collapsed. Wayland capture
pokes a 1x1 XWayland window mid-screen because mutter only produces
frames on damage, and MemFd/DmaBuf buffers are mmap'ed directly.
cargo test # unit tests
cargo test -p qs-capture -- --ignored # real capture (needs Wayland/macOS)
cargo run -p qs-app # resident app
cargo run -p qs-app -- --capture # one-shot
Release packaging: packaging/macos/release.sh runs the full pipeline —
release build (universal when both rustup targets exist), Quickshort.app
bundle, self-signed identity (packaging/macos/gen_signing_cert.sh), zip +
dmg + sha256 into dist/. Tagging v* triggers the GitHub workflow, which
does the same and publishes a GitHub Release.
Everything runs locally — captures, OCR, settings never leave your machine. The only outbound traffic is a share upload you trigger (image lives 3 days on a Cloudflare Worker), an opt-in bug report (posted as a public GitHub issue), and a daily GitHub release check. No analytics, no accounts. Full policy: docs/privacy.html · quickshort site.
Free and open source, built in spare time. If Quickshort saves you time:
0969069035 · ĐÀO QUANG TRƯỞNG (scan with any VN banking app)quickshort --capture as a custom shortcut. The tray needs an
AppIndicator extension on GNOME