Mark up screens. Stitch tall captures. Move every annotation.
A Wayland screenshot annotation tool with the precision of a red pen.
Tensaku builds on satty (Matthias Gabriel's elegant Wayland screenshot annotator), keeping its fast, focused workflow while adding movable annotations, scroll capture for tall content, and a layer panel.
添削 (tensaku) is Japanese for "proofreading correction," the marks a teacher leaves on a student's paper.
The headline differences from upstream satty.
Capture content beyond the visible viewport. Tensaku auto-scrolls the underlying app via virtual-keyboard PgDn presses, captures each frame through a wlr-screencopy overlay, and stitches the results into a single tall screenshot using a multi-band SAD aligner.
Select, multi-select, drag, and resize annotations after they're drawn. No more "draw it perfectly the first time": every shape, line, and marker stays editable.
A full layer-stack UI: reorder, lock, hide, rename, drag-and-drop. Selection halos and panel rows mirror each other. Ctrl+L toggles the panel.
Ctrl+V drops a clipboard image into the canvas as a resizable, movable layer.
Zoom indicator dropdown, Ctrl+digit shortcuts, Super+scroll to zoom, all DPR-aware.
GTK4 tooltips replaced with rich popovers showing live state for arrow style, blur style, highlighter mode, and more.
A vetted default palette in a vertical 2-column picker, plus a system color dialog for everything else.
Selection chrome looks crisp at any display scale; corner / edge handles use display-pixel sizing.
Standard, Pointy, Curved, and Double arrow geometries for pointing more expressively.
Freeform highlighting or a Text-Locked mode that snaps to detected text rows.
Constrain crops to common ratios (16:9, 4:3, 1:1, …) with auto-snapping when you switch ratios.
Dim the screenshot around a spotlight region. Existing annotations stay bright on top, so callouts don't get washed out.
First-launch onboarding plus a GUI for the configuration that previously required editing config.toml.
Responsive wrap layout, Ctrl+T to toggle all UI chrome, popover-dismiss handling, and inline help.
Pixelate, Secure Blur, Gaussian, and Black Out. Choose the right redaction per region from an icon-menu, with irreversible variants for sensitive content.
Per-annotation smoothness with an RDP-then-Chaikin pipeline: clean curves from imprecise input, dialed in per stroke instead of one global setting.
Rotate 90°, flip horizontal, direct width/height entry with a ↔ swap, background matte picker, and Ctrl+wheel to resize proportionally from center.
The foundation Tensaku is built on: every original satty feature still works.
Arrow, rectangle, ellipse, line, brush, text, blur, highlight, crop, all with size, color, and style controls.
Write a PNG / JPEG / WebP to disk or copy directly to the Wayland clipboard. Pipe to - for stdout.
Every shortcut is rebindable via ~/.config/tensaku/config.toml, including chord-style bindings.
Window-decoration hints, no-decoration mode, and clean integration with tiling compositors.
Style the toolbar, popovers, and dialogs via a user CSS file. Minimum-size and chrome options exposed.
Full undo stack across drawing, moving, deleting, and cropping. Ctrl+Z / Ctrl+Shift+Z.
Map keys to specific actions (save-and-copy, save-and-exit, etc.). Configurable enter/escape behavior.
Tensaku runs on Wayland compositors that implement wlr-layer-shell and wlr-screencopy (Sway, Hyprland, river, Wayfire, etc.).
Requires Rust 1.75+ and GTK4 development headers.
git clone https://github.com/jondkinney/tensaku.git
cd tensaku
cargo install --path .
Tensaku reads its own config at ~/.config/tensaku/ and is safe to install alongside satty. Both binaries can coexist.
Pipe a screenshot into Tensaku from any Wayland screenshot tool.
grim + slurpgrim -g "$(slurp)" - | tensaku --filename -
grim - | tensaku --filename -
Press Ctrl+C to copy the result, or Ctrl+S to save.
Click the Auto-Scroll button inside the selection to start a scrolling capture. Tensaku drives the underlying app and stitches the frames automatically.
Annotation, scroll capture, and the layer panel in action.