Skip to content

Repository files navigation

Lumina Icon

Lumina

Illuminate your files
🔍 OCR · 📄 全文搜索 · 🏷️ EXIF · ⚡ Tauri · 🍎 macOS

A fast, native file search and management tool built with Tauri 2 + React

English · 中文 · 日本語 · 한국어

Platform Tauri 2 React 19 Rust GitHub Release


Features

  • Multi-mode search — Search by file name, text content, EXIF metadata, or OCR (macOS)
  • File type presets — Quick filter by Document, Code, Image, or Config categories
  • Tree view — Hierarchical folder tree with expand/collapse navigation
  • File preview — In-app preview for text, code, and image files with context highlighting
  • OCR highlight — Visual bounding box overlay on OCR-matched images
  • Batch management — Select and move multiple files to trash with one click
  • Native performance — BFS + Rayon thread pool for concurrent scanning, real-time result streaming
  • Large directory handling — Confirmation dialog for directories exceeding threshold, with "remember" rules
  • Skipped directories log — Review which directories were skipped and why
  • Persistent settings — Large dir threshold, scan/skip rules, display preferences, saved across sessions
  • Theme support — Light, Dark, and System theme modes
  • Keyboard shortcutsCmd/Ctrl+B toggle sidebar, Cmd/Ctrl+Enter start scan
  • Sidebar layout — Collapsible sidebar with file type presets, scan path, and OCR toggle
  • Settings panel — Configure scan threshold, display options, and file type extension rules
  • Reveal in Finder — Open file location directly in system file manager
  • Cross-platform — Runs on macOS, Windows, and Linux

Search Modes

Mode Description
File Name Match keywords against file and folder names
Text Content Search inside text-based files (code, documents, configs)
EXIF Data Search image EXIF metadata (camera, lens, GPS, etc.)
OCR Text Extract and search text from images using Vision framework (macOS only)

Getting Started

Prerequisites

  • Node.js >= 20
  • pnpm >= 9
  • Rust >= 1.77
  • macOS: Xcode Command Line Tools
  • Windows: Microsoft Visual Studio C++ Build Tools
  • Linux: libgtk-3-dev, libwebkit2gtk-4.1-dev, libappindicator3-dev, librsvg2-dev

Development

# Install dependencies
pnpm install

# Start development server
pnpm tauri dev

# Build for production
pnpm tauri build

Install from Releases

Download the latest installer for your platform from GitHub Releases:

Platform Formats
macOS (Apple Silicon) .dmg, .app
macOS (Intel) .dmg, .app
Windows .msi, .nsis
Linux .deb, .AppImage

Tech Stack

Layer Technology
Frontend React 19, TypeScript, Vite 7, Zustand 5, Lucide Icons
Backend Rust, Tauri 2, Walkdir, Rayon, Kamadak-exif, Trash
Build pnpm, tauri-cli
CI/CD GitHub Actions

Search Engine Architecture

The scan engine uses a concurrent BFS + Rayon thread pool design:

  1. BFS thread traverses the directory tree, classifying directories by size
  2. Dispatcher thread feeds work items from a channel into the Rayon thread pool
  3. Rayon thread pool (CPU-bound) performs file matching in parallel — filename, text content, EXIF, and OCR
  4. Result/Progress handler thread streams results back to the frontend in real-time

Large directories (>1000 entries by default) trigger a confirmation dialog before scanning, with an optional "remember" rule system.

Keyboard Shortcuts

Shortcut Action
Cmd/Ctrl + B Toggle sidebar
Cmd/Ctrl + Enter Start scan
Enter Submit search input

Project Structure

search/
├── src/                          # React frontend
│   ├── App.tsx                   # Main application component
│   ├── App.css                   # Application styles
│   ├── index.css                 # Theme variables and base styles
│   ├── main.tsx                  # React entry point
│   ├── components/
│   │   ├── Sidebar/              # Collapsible sidebar with presets
│   │   ├── SearchBar/            # Search input and scan controls
│   │   ├── ResultsView/          # Tree view with file results
│   │   ├── ScanProgress/         # Scan progress indicator
│   │   ├── PresetSelector/       # File type preset configuration
│   │   ├── EmptyState/           # Empty state placeholder
│   │   └── modals/
│   │       ├── ConfirmPanel.tsx   # Large directory confirmation dialog
│   │       ├── SkippedDirsPanel.tsx # Skipped directories review
│   │       ├── SettingsPanel.tsx  # Application settings
│   │       ├── FilePreviewModal.tsx # Text/code file preview
│   │       └── ImagePreviewModal.tsx # Image preview with OCR highlights
│   ├── store/
│   │   └── index.ts              # Zustand state management
│   ├── types/
│   │   └── index.ts              # TypeScript type definitions
│   ├── constants/
│   │   └── presets.ts            # File type presets configuration
│   ├── utils/
│   │   ├── storage.ts            # Settings persistence
│   │   └── file.ts               # File utility functions
│   └── assets/                   # Static assets
├── src-tauri/                    # Rust backend
│   ├── src/
│   │   ├── lib.rs                # Tauri builder, plugin setup, command registration
│   │   ├── main.rs               # Application entry point
│   │   ├── types.rs              # Shared data structures
│   │   ├── config.rs             # Persistent configuration management
│   │   ├── scanner.rs            # File scanning engine (BFS + Rayon)
│   │   └── commands/
│   │       ├── mod.rs            # Command module declarations
│   │       ├── scan.rs           # Scan lifecycle commands
│   │       ├── file_ops.rs       # File operations (preview, trash, reveal)
│   │       └── system.rs         # System commands (sound, config file)
│   ├── resources/                # OCR scripts, sounds, etc.
│   ├── Cargo.toml                # Rust dependencies
│   └── tauri.conf.json           # Tauri configuration
├── docs/                         # Architecture and product documentation
├── .github/workflows/            # CI/CD release pipeline
├── DESIGN.md                     # Apple-style design system documentation
├── ARCHITECTURE.md               # System architecture overview
├── package.json
└── vite.config.ts

License

MIT

About

Lumina - Local file search powered by OCR and text content matching | 基于 OCR 和文本内容的本地文件搜索工具

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages