Skip to content

gyotaku: search every screenshot by the text inside it

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.

CI GPL-3.0 licensed Linux and Windows PRs welcome

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.

Highlights

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.

Installation

Linux

curl -fsSL https://raw.githubusercontent.com/xevrion/gyotaku/main/install.sh | sh

The 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.rpm

These 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

Windows support is a preview. In PowerShell:

irm https://raw.githubusercontent.com/xevrion/gyotaku/main/install.ps1 | iex

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

macOS

Not supported yet. It is on the roadmap.

Keyboard shortcut (Linux)

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.

First run

On first launch, gyotaku asks:

  1. Which folders contain your screenshots. It suggests the save locations of common screenshot tools (Flameshot, Spectacle, ksnip, grim, Hyprshot, niri) along with ~/Pictures/Screenshots, ~/Pictures and ~/Desktop, with the number of images in each. On Windows it suggests Pictures\Screenshots, where Win+PrtScn and the Snipping Tool save.
  2. 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.

Updating

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.

Uninstalling

Linux:

curl -fsSL https://raw.githubusercontent.com/xevrion/gyotaku/main/install.sh | sh -s -- --uninstall

Windows, in PowerShell:

$env:GYOTAKU_UNINSTALL = 1; irm https://raw.githubusercontent.com/xevrion/gyotaku/main/install.ps1 | iex

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

Build from source

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.

1. Install build dependencies

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-dev

Arch Linux, Manjaro, EndeavourOS

sudo pacman -S --needed git curl base-devel fontconfig libxkbcommon-x11 wayland libxcb

Fedora

sudo dnf install git curl gcc gcc-c++ make pkgconf-pkg-config fontconfig-devel libxkbcommon-x11-devel wayland-devel libxcb-devel

openSUSE

sudo zypper install git curl gcc gcc-c++ make pkg-config fontconfig-devel libxkbcommon-x11-devel wayland-devel libxcb-devel

Optional: install wl-clipboard (Wayland) or xclip (X11) to enable copying images, and saving copied images (off by default). Copying text works without them.

2. Install Rust

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 | sh

Open a new terminal afterwards so that cargo is on your PATH. The repository's rust-toolchain.toml selects the correct version automatically.

3. Build and install

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 window

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

Usage

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 march

See the usage guide for all keys, settings and commands.

Privacy

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.

Roadmap

  • 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 .dmg with 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 (0 and O, rn and m, l and 1). 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 er for order), without matching words that really are apart: joining them naively found "HOURS IN VOICE" for invoice
  • 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.

Documentation

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

Contributing

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.

Built with

Text detection post-processing, line extraction, batching and decoding are implemented in this repository.

About the name

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.

Star history

Star history for xevrion/gyotaku

License

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.

About

search every screenshot you've ever taken by the text inside it. native linux, offline, PaddleOCR + sqlite + gpui

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

156 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages