Search every screenshot you have ever taken by the text inside it.
Native on Linux and Windows, fully offline, and fast on any hardware, with or without a GPU.
gyotaku reads the text in every screenshot you take and makes it searchable. Press a shortcut, type a few letters of anything you remember seeing, and every matching screenshot appears with the matched words highlighted in place. Open one to copy its text, a selection of lines, or the image itself.
All processing happens locally. gyotaku does not take screenshots itself; it indexes the folders your existing screenshot tool saves to.
| Metric | Result |
|---|---|
| Search latency, 5,000+ screenshots | 1 to 10 ms per keystroke |
| Screenshot saved to searchable | 0.77 s |
| Window summon time | ~120 ms |
| Frame rate with a GPU | 144 fps (display refresh rate) |
| Memory while idle in the background | 37 MB |
| Disk usage | ~30 MB per 1,000 screenshots |
It also runs without a GPU, using software rendering. All figures were measured on real hardware; see Performance for the full results and methodology.
curl -fsSL https://raw.githubusercontent.com/xevrion/gyotaku/main/install.sh | shThe script downloads the latest release for your machine, verifies its SHA-256 checksum and installs gyotaku and gyotaku-app to ~/.local/bin, with an entry in your app launcher. It needs no root access and changes nothing outside your home directory. On a first install it opens gyotaku so you can choose your screenshot folders, then shows how to add a keyboard shortcut for your desktop.
Each release also has a .deb for Debian and Ubuntu and an .rpm for Fedora and openSUSE, which install to /usr/bin through your package manager:
# Debian, Ubuntu (replace x86_64 with aarch64 on ARM)
curl -fsSLO https://github.com/xevrion/gyotaku/releases/latest/download/gyotaku-x86_64-linux.deb
sudo apt install ./gyotaku-x86_64-linux.deb
# Fedora
sudo dnf install https://github.com/xevrion/gyotaku/releases/latest/download/gyotaku-x86_64-linux.rpmThese don't update on their own yet; install the newer one the same way. More packages are on the way, see packaging.
Release builds run on x86_64 and ARM64 with glibc 2.35 or newer: Ubuntu 22.04, Debian 12, Fedora 36, Linux Mint 21, Pop!_OS 22.04 and later, as well as Kali, Arch Linux and openSUSE Tumbleweed. Anything else can build from source.
Windows support is a preview. In PowerShell:
irm https://raw.githubusercontent.com/xevrion/gyotaku/main/install.ps1 | iexThis installs to %LOCALAPPDATA%\Programs\gyotaku, adds gyotaku to the Start menu and opens it. Press Alt+Shift+S anywhere to open or close the search window. No administrator rights are needed. Windows 10 and 11 on x64 are supported; ARM64 runs the x64 build through emulation.
If you prefer a regular installer, download gyotaku-setup-x86_64.exe from the latest release and run it. It installs the same files to the same folder, also without administrator rights, and lists gyotaku in Settings > Apps so it can be uninstalled from there. The setup is not code-signed yet, so SmartScreen may warn about an unknown publisher; choose More info and then Run anyway. The setup and the PowerShell command update each other's installs.
Not supported yet. It is on the roadmap.
gyotaku-app opens the search window, and pressing the same shortcut again closes it. Bind it in your desktop's keyboard settings, using the full path ~/.local/bin/gyotaku-app, since some desktops do not use your shell's PATH:
| Environment | Configuration |
|---|---|
| GNOME | Settings > Keyboard > View and Customize Shortcuts > Custom Shortcuts > Add |
| KDE Plasma | System Settings > Keyboard > Shortcuts > Add New > Command or Script |
| Xfce | Settings > Keyboard > Application Shortcuts > Add |
| Cinnamon | System Settings > Keyboard > Shortcuts > Custom Shortcuts > Add custom shortcut |
| sway, i3 | bindsym $mod+s exec ~/.local/bin/gyotaku-app |
| Hyprland | bind = SUPER, S, exec, ~/.local/bin/gyotaku-app |
| niri | Mod+S { spawn "~/.local/bin/gyotaku-app"; } in the binds block |
| Other | Any "run a command" shortcut. gyotaku-app can also be run from a terminal. |
On first launch, gyotaku asks:
- Which folders contain your screenshots. It suggests the save locations of common screenshot tools (Flameshot, Spectacle, ksnip, grim, Hyprshot, niri) along with
~/Pictures/Screenshots,~/Picturesand~/Desktop, with the number of images in each. On Windows it suggestsPictures\Screenshots, where Win+PrtScn and the Snipping Tool save. - Whether to index new screenshots in the background. On Linux this installs a systemd user service, or an XDG autostart entry on systems without systemd. On Windows it starts gyotaku when you sign in.
Indexing starts immediately, newest screenshots first, at idle CPU and I/O priority. Search is available while it runs.
Before the first screenshot is read, gyotaku downloads the OCR models once (22 MB), and on Linux ONNX Runtime as well (24 MB). No network access is needed after that.
Run the install command again, or on Windows the newest setup. It replaces the programs and restarts the background indexer; the index, settings and thumbnails are kept.
Linux:
curl -fsSL https://raw.githubusercontent.com/xevrion/gyotaku/main/install.sh | sh -s -- --uninstallWindows, in PowerShell:
$env:GYOTAKU_UNINSTALL = 1; irm https://raw.githubusercontent.com/xevrion/gyotaku/main/install.ps1 | iexInstalled with the setup, gyotaku can also be uninstalled from Settings > Apps, which asks whether to delete the index and settings too.
Both commands stop the background indexer and remove the programs, and print how to also remove the index and settings. Remove the keyboard shortcut yourself. gyotaku never modifies or deletes your screenshots unless you move them to the trash yourself.
Building needs Rust and a C compiler. The steps below are verified in CI from a clean image of Ubuntu 22.04, Debian 12, Kali, Arch Linux, Fedora and openSUSE Tumbleweed.
Ubuntu, Debian, Kali, Linux Mint, Pop!_OS
sudo apt install git curl build-essential pkg-config libfontconfig-dev libxkbcommon-x11-dev libwayland-dev libx11-xcb-devArch Linux, Manjaro, EndeavourOS
sudo pacman -S --needed git curl base-devel fontconfig libxkbcommon-x11 wayland libxcbFedora
sudo dnf install git curl gcc gcc-c++ make pkgconf-pkg-config fontconfig-devel libxkbcommon-x11-devel wayland-devel libxcb-developenSUSE
sudo zypper install git curl gcc gcc-c++ make pkg-config fontconfig-devel libxkbcommon-x11-devel wayland-devel libxcb-develOptional: install wl-clipboard (Wayland) or xclip (X11) to enable copying images, and saving copied images (off by default). Copying text works without them.
gyotaku requires Rust 1.95 or newer. Install it with rustup rather than your distribution's package manager, whose version is usually older:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shOpen a new terminal afterwards so that cargo is on your PATH. The repository's rust-toolchain.toml selects the correct version automatically.
git clone https://github.com/xevrion/gyotaku && cd gyotaku
cargo install --locked --path crates/cli # gyotaku: the indexer and command-line interface
cargo install --locked --path crates/app # gyotaku-app: the search windowBoth binaries are installed to ~/.cargo/bin; use ~/.cargo/bin/gyotaku-app for the keyboard shortcut. The first build compiles the UI toolkit from source and takes several minutes. It requires about 3 GB of free disk space while running; the build directory is removed afterwards.
To update a source build, git pull and run both cargo install commands again, then systemctl --user restart gyotaku-watch and pkill -x gyotaku-app so the new version is used. To remove it, run the uninstall command above, then cargo uninstall gyotaku gyotaku-app.
If anything does not work as described, see Troubleshooting.
| Key | Action |
|---|---|
| Type | Search. Partial words match: nutsmp finds donutsmp.net. |
| Arrow keys | Move between results |
| Enter | Open the selected screenshot |
| Ctrl+C | Copy the screenshot's text, or the selected lines |
| Ctrl+Shift+C | Copy the image |
| Ctrl+, | Open settings |
| Ctrl+E | Show the similar screenshots folded behind the selected one |
| Ctrl+Shift+A, Ctrl+Delete | Mark every result, then move them to the trash. Ctrl+Z puts them back. |
| Escape | Clear the search, then close |
Every word in a query must appear somewhere in the screenshot, not necessarily on the same line. Filters narrow it down by folder and date: otp in:discord date:week. On an open screenshot, drag a box to copy only the lines inside it.
A command-line interface is also available:
gyotaku search invoice marchSee the usage guide for all keys, settings and commands.
gyotaku runs entirely on your machine. It has no telemetry, accounts or update checks. Its only network access is the one-time download of the OCR models (from this repository's releases, with ModelScope as a fallback) and ONNX Runtime (Microsoft's official build, from GitHub), each verified against a pinned SHA-256 checksum before use.
- Move screenshots to the trash in bulk: search, mark the results, move them to the system trash, with undo
- Simple installation on every supported OS: prebuilt releases and a one-command install, no Rust toolchain needed
- A Windows setup
.exe: Start menu entry, uninstall from Apps and features - A macOS
.dmgwith a signed, notarized app - Linux packages for every family, each a separate piece of the release pipeline: Flatpak on Flathub, the AUR, a Fedora COPR, an apt repository for Debian and Ubuntu, and openSUSE's OBS
- A landing page with a demo, the measured numbers and the install commands
- Windows support
- macOS support
- Optional classification of screenshots (one-time codes, receipts, chats) with Jev, to find and clear out the throwaway ones. Opt-in and off by default; only the recognized text is sent, never the image
- Typo-tolerant search for OCR misreads: look-alike characters (
0andO,rnandm,land1). Exact matches always rank first, and near matches are labelled as such, with the text exactly as it was read, so an error code is never silently "corrected" - Words the OCR split apart (
ord erfororder), without matching words that really are apart: joining them naively found "HOURS IN VOICE" forinvoice - Search by what a screenshot shows, not only the text in it ("the one with a cat"), using a small local image embedding model such as CLIP. Optional, offline, and fast enough without a GPU
- A keyboard shortcuts page in settings that lists every shortcut and lets each one be rebound by pressing the new keys
- Screenshots that only ever go to the clipboard: an opt-in setting that saves images copied to the clipboard into a folder of their own, so they become searchable like any other screenshot. Works on Linux (Wayland and X11); the Windows side is written but not yet tried on a real machine
- Group bursts of near-identical screenshots into one tile, with the rest a key away
- Search filters for the folder (
in:discord) and the date (date:yesterday,before:aug,after:2026-08-01) - An
app:filter, which first needs a way to know which app a screenshot was taken in: the file itself doesn't say - Devanagari (Hindi, Marathi, Nepali), opt-in in settings, and vertical text
- More scripts: Cyrillic, Hangul, Arabic, Thai and the rest
- Handwriting: measure how well neat and messy handwritten notes read, and add an optional handwriting pass if it's worth it
Suggestions are welcome as feature requests.
| Document | Contents |
|---|---|
| Usage | Keys, mouse controls, settings, the command-line interface, file locations |
| Troubleshooting | Build, launch, search, indexing and clipboard problems |
| Compatibility | Supported desktops, GPUs, distributions and CPUs, and known limitations |
| Performance | Measured CPU, memory, frame time and disk usage |
| Architecture | How OCR, indexing and the search window work, and why |
| Development log | Measurements, rejected approaches and notable bugs from development |
Contributions are welcome. See CONTRIBUTING.md for the development setup and pull request guidelines. Questions belong in Discussions. Report security issues as described in SECURITY.md, not in public issues.
Testing on untested configurations is particularly valuable. GNOME, KDE Plasma, integrated GPUs, ARM and non-systemd distributions have not been verified yet. Please submit a compatibility report whether it works or not.
- PaddleOCR PP-OCRv6 models, run on ONNX Runtime via
ort - SQLite FTS5 with the trigram tokenizer, via
rusqlite - GPUI, the UI framework behind the Zed editor
Text detection post-processing, line extraction, batching and decoding are implemented in this repository.
Gyotaku (魚拓) is a traditional Japanese method of recording a catch: the fish is inked and pressed onto paper to make a lasting print. The search window borrows the idea. While you search, every screenshot is inked dark and only the matching words remain lit.
gyotaku is licensed under the GNU General Public License v3.0 or later.
IBM Plex Sans is bundled under the SIL Open Font License 1.1 (crates/app/fonts/OFL.txt). The PaddleOCR models are licensed under Apache-2.0; they are downloaded at runtime and not distributed with this repository.
