Recollect scans images with Tesseract OCR, indexes extracted text in a local SQLite database (via Gom), and provides a fast search UI built with GTK4 and libadwaita.
- OCR-powered image text search: direct Tesseract C API, no CLI dependency
- Fast local search: SQLite database via Gom ORM
- List and grid view modes: toggle between compact results and thumbnail tiles
- Image preview sidebar: extracted OCR text and file properties at a glance
- Flexible search filters: fuzzy, case-sensitive, whole-word, and diacritics matching
- Sort by name or date: ascending or descending
- Date range filtering: narrow results by scan date
- Incremental file monitoring: folders are watched for changes and re-indexed automatically
- Downloadable language models: fast, balanced, and best Tesseract variants
- Onboarding wizard: guides first-time setup of folders and models
- Keyboard shortcuts: full shortcut reference available in-app (Ctrl+?)
- Background scanning: continues indexing even when the window is closed
- Internationalization: gettext-based translations
- 13 image formats supported: PNG, JPEG, TIFF, BMP, WebP, GIF, AVIF, HEIC/HEIF, JPEG XL, SVG
Recollect watches your chosen folders and runs each image through Tesseract OCR to extract its text. That text is stored in a local SQLite database, so searching is instant, with no re-scanning needed. When you type a query, Recollect matches against the indexed text and shows the matching images with a snippet of the recognized content.
Precompiled flatpak bundles are attached to each GitHub release. Download recollect.flatpak and install it — the same command updates an already-installed copy:
flatpak install --user --or-update recollect.flatpaksudo pacman -S vala meson ninja gtk4 libadwaita sqlite tesseract \
glycin glycin-gtk4 json-glib libsoup3Other distributions: install the equivalent packages for each dependency.
A Gom-Vala fork is auto-fetched via meson wrap, so no manual setup is needed.
meson setup build --prefix="$HOME/.local"
meson compile -C build
meson install -C buildThe binary is installed to ~/.local/bin/recollect.
The manifests live in build-aux/flatpak/. The development one builds the same
modules with -Dprofile=development, so it installs as org.laine.Recollect.Devel
and runs alongside the release without touching it. Both the build directory and
the state directory live under ~/.cache/, outside the repository: a dir source
copies the whole repo into the build, so anything you leave in it (including the
previous flatpak output) would be shipped along.
# Release build (org.laine.Recollect)
flatpak-builder --user --install-deps-from=flathub --force-clean --state-dir=~/.cache/recollect-flatpak/state --install ~/.cache/recollect-flatpak/release build-aux/flatpak/org.laine.Recollect.json
# Development build (org.laine.Recollect.Devel)
flatpak-builder --user --install-deps-from=flathub --force-clean --state-dir=~/.cache/recollect-flatpak/state --install ~/.cache/recollect-flatpak/devel build-aux/flatpak/org.laine.Recollect.Devel.json
flatpak run org.laine.Recollect.DevelRemove a development build and its data with:
flatpak uninstall --user --delete-data org.laine.Recollect.DevelIf you see this error at runtime, the dynamic linker can't find the Gom library. Rebuild with the rpath fix applied (already included if you're using the latest build files):
meson setup build --prefix="$HOME/.local" --reconfigure
meson compile -C build
meson install -C buildAlternatively, set LD_LIBRARY_PATH:
export LD_LIBRARY_PATH="$HOME/.local/lib:$LD_LIBRARY_PATH"
~/.local/bin/recollectIf meson setup fails with this error, it means the subprojects/gom-vala/
directory is missing its top-level meson.build. Ensure the repository includes
subprojects/gom-vala/meson.build and subprojects/gom-vala/gom/meson.build
with the correct include directory (pointing to '.', not '..').
Use a separate application ID (org.laine.Recollect.Devel) so development builds
don't interfere with the installed release:
meson configure build -Dprofile=development
meson compile -C buildSwitch back to the release profile with:
meson configure build -Dprofile=default
meson compile -C build| Flag | Description |
|---|---|
--reset |
Reset all settings to defaults |
--no-system-models |
Skip system Tesseract models; only use downloaded ones |
This program was written with the assistance of large language models (LLMs). The UI/UX design, visual layout, and application icon were created entirely by human effort (aka me, laine). OpenCode made working on this project a breeze, shoutout <3
Recollect is licensed under the GNU General Public License v3.0.