Capturing (desktop)
What taking a screenshot does, every path into it, and the one gotcha the UI does not admit yet.
Quoting convention, used across this KB: shipped strings are quoted verbatim except that em dashes in the original are shown as a plain hyphen, because this KB carries no em dashes. Where that substitution happens, the article says so.
What it does
Three capture kinds: whole screen, a dragged region, or a single window. Three ways to start one:
the board buttons, the tray menu, and six global hotkeys (see settings.md for the hotkey table).
Every path funnels through one Rust function, deliver_capture, which emits one sb-capture
event to the board (apps/desktop/src-tauri/src/capture.rs). Because there is a single delivery
point, behaviour cannot differ by entry point; the browser harness drives that same event
(joined-to-code: the harness suite).
After a capture
One of three modes, chosen in Settings (apps/desktop/src/settings.html):
- Open the annotation editor (the default).
- Save straight to the folder, no questions asked.
- Copy to the clipboard.
Whatever the mode, the picture also lands in the board's composer, so nothing is ever only on the clipboard.
Explicit save asks where (Save As) unless "Save straight to the folder" is on. Auto-save on a card always writes to the folder without asking (joined-to-code: harness check c10).
The environment line
Every saved .md and every copied prompt carries an environment line: OS, app version, displays, locale, timezone. It is generated locally and goes only into your files and your clipboard; nothing about it is sent anywhere (joined-to-code: env harness check and the ASCII guarantee check).
The capture delay
The delay selector (none, 3, 5, or 10 seconds) applies to the three board buttons only
(apps/desktop/src/board.js, capDelayMs). The tray and the global hotkeys always capture
instantly, by design: a hotkey that silently waits reads as a failed hotkey.
The board gets out of the way while it counts (2026-08-17). It minimises itself before the
first second, so the delay is time to arrange the shot rather than time to watch the app, and the
board is not in its own screenshot. The seconds are shown on the SnapBuddy buddy, which is
always-on-top; Rust puts the board back when the capture lands, is cancelled, or fails
(show_board / undo_aside in apps/desktop/src-tauri/src/capture.rs). With the buddy switched off
in Settings the countdown has nowhere to go, so the board stays on screen and counts in toasts as
it always did - silence with the window gone would read as a crash.
Delay + Window picks first, counts second (2026-08-17). The picker opens the moment the button
is pressed; the countdown starts after a window is chosen, with the picker already torn down so it
cannot land in the shot (pick_window in capture.rs, joined-to-code: harness check "c6: delay +
window opens the picker first").
Gotcha: a second press during the countdown does not cancel it; the toast says "Already counting
down..." (apps/desktop/src/board.js, countdown) and there is no cancel.
In-board keys
S captures, A opens the annotation editor when an image is staged. Both are suppressed while you are typing in an input and while a modal is open. Ctrl/Cmd+Enter saves from the note field.
The sentence a support agent can paste
"The delay only applies to the three capture buttons on the board; the tray and keyboard shortcuts always shoot immediately."