Search every screenshot you have ever taken by the text inside it.
Native on Linux, macOS 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.
gyotaku is free and stays free. If it saves you time, sponsoring keeps it maintained.
Sponsor on GitHub · Get updates by email
| 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. While it waits, gyotaku sits in the notification area: click its icon to open the window, right-click it for settings or to quit. The window never takes a taskbar button, and Alt+F4 just puts it away.
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.
In a terminal:
curl -fsSL https://raw.githubusercontent.com/xevrion/gyotaku/main/install.sh | shThe same installer as on Linux: it downloads the release for Apple Silicon Macs, verifies its SHA-256 checksum and installs gyotaku and gyotaku-app to ~/.local/bin, with ONNX Runtime beside them. Apple Silicon (arm64) is supported. Microsoft publishes no ONNX Runtime build for Intel macs, so those need a build from source with ORT_DYLIB_PATH pointing at an onnxruntime library.
It also adds gyotaku.app to ~/Applications, so Spotlight and Launchpad can open it. Like Raycast, it runs without a Dock icon: while it waits it sits in the menu bar, whose menu opens the window or settings and is where it's quit. Cmd+W and Cmd+Q in the window just put it away.
Config, index and models live in ~/Library/Application Support/gyotaku, thumbnails in ~/Library/Caches/gyotaku.
On macOS the app registers the shortcut itself: Alt+Shift+S opens the search window, and pressing it again closes it. To use another key, set summon under [keys] in config.toml (for example summon = "cmd-shift-space") and restart gyotaku; it isn't in the settings yet.
On 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. |
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. On macOS the settings toggle "start at login" installs a launchd agent that reads new screenshots in the background.
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 and macOS ONNX Runtime as well (24 MB on Linux). 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 on Windows, gyotaku can also be uninstalled from Settings > Apps, which asks whether to delete the index and settings too.
macOS:
curl -fsSL https://raw.githubusercontent.com/xevrion/gyotaku/main/install.sh | sh -s -- --uninstallThese commands stop the background indexer and remove the programs, and print how to also remove the index and settings. On Linux, 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.
macOS: the indexer (gyotaku) builds with the Xcode Command Line Tools alone, which provide the C compiler that the bundled SQLite compiles with:
xcode-select --installThe search window (gyotaku-app) additionally needs full Xcode, free from the App Store, because the UI toolkit compiles Metal shaders at build time. With only the Command Line Tools installed that build fails with cannot execute tool 'metal'; if a fresh Xcode still lacks it, run xcodebuild -downloadComponent MetalToolchain once.
On an Intel mac, ONNX Runtime also has to be provided separately, since Microsoft publishes no macOS x86_64 build of it: install or build onnxruntime and set ORT_DYLIB_PATH to its library (see Compatibility). Apple Silicon needs nothing beyond Xcode; the runtime is downloaded on first use.
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 |
On macOS each Ctrl shortcut above is Cmd instead.
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 on Apple Silicon (thanks to @saurav-codes)
- macOS: shortcuts shown and bound with ⌘ instead of Ctrl, the way Mac apps do (thanks to @Chiroyce1)
- macOS: confirm the summon key works after a real reboot, with the launch agent starting the app hidden
- macOS on Intel Macs
- 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. The most requested feature so far
- 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; macOS needs a pasteboard watcher (saved screenshots already work there)
- 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 - A short title for every screenshot, generated from what it shows and says ("Order confirmation from Fern & Co"), shown on the tile and searchable, and optional auto-organizing into groups by those titles. Offline, like everything else
- 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.
