Initial commit — Tauri image gallery with sqlite-vec
Sets up Tauri v2 + React frontend with SQLite metadata store, sqlite-vec for CLIP embedding infrastructure, and r2d2 connection pool replacing the single Arc<Mutex<Connection>>. Indexer now uses rayon for parallel file metadata collection.
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
# Phokus
|
||||
|
||||
`Phokus` is the chosen name for this project. It keeps the visual/photo association obvious while feeling sharper and more distinctive than `image-gallery`.
|
||||
|
||||
## Overview
|
||||
|
||||
Phokus is a Tauri desktop app for building a fast, local media library from folders on disk. It indexes images and videos, stores metadata in SQLite, and gives you a dense browsing workflow with filtering, favorites, ratings, and a lightbox preview.
|
||||
|
||||
The current app is optimized for:
|
||||
|
||||
- local folders instead of cloud import flows
|
||||
- large visual libraries
|
||||
- quick review and curation
|
||||
- mixed image and video browsing
|
||||
|
||||
## Current features
|
||||
|
||||
- Add and remove media folders
|
||||
- Background indexing with progress updates
|
||||
- Browse all media or filter by folder
|
||||
- Search by filename
|
||||
- Filter by images, videos, or favorites
|
||||
- Sort by modified date, name, or file size
|
||||
- Grid density controls
|
||||
- Lightbox preview with keyboard navigation
|
||||
- Favorite and star-rating metadata saved in SQLite
|
||||
- Virtualized/local-first architecture built on Tauri + React
|
||||
|
||||
## Supported formats
|
||||
|
||||
Images:
|
||||
|
||||
- `jpg`
|
||||
- `jpeg`
|
||||
- `png`
|
||||
- `gif`
|
||||
- `bmp`
|
||||
- `tiff`
|
||||
- `tif`
|
||||
- `webp`
|
||||
- `avif`
|
||||
- `heic`
|
||||
- `heif`
|
||||
|
||||
Videos:
|
||||
|
||||
- `mp4`
|
||||
- `mov`
|
||||
- `m4v`
|
||||
- `webm`
|
||||
|
||||
## Stack
|
||||
|
||||
- Tauri 2
|
||||
- React 19
|
||||
- TypeScript
|
||||
- Zustand
|
||||
- Rust
|
||||
- SQLite + `sqlite-vec`
|
||||
- Vite
|
||||
|
||||
## Project structure
|
||||
|
||||
- `src/`: React UI, state, and components
|
||||
- `src-tauri/src/commands.rs`: Tauri command surface
|
||||
- `src-tauri/src/db.rs`: SQLite schema and queries
|
||||
- `src-tauri/src/indexer.rs`: folder crawling and batch indexing
|
||||
- `src-tauri/src/vector.rs`: vector table setup for future semantic workflows
|
||||
|
||||
## Development
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Node.js 20+
|
||||
- `pnpm`
|
||||
- Rust toolchain
|
||||
- Tauri system prerequisites for Windows
|
||||
|
||||
### Install
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### Run in development
|
||||
|
||||
```bash
|
||||
pnpm tauri dev
|
||||
```
|
||||
|
||||
### Build
|
||||
|
||||
```bash
|
||||
pnpm tauri build
|
||||
```
|
||||
|
||||
## How it works
|
||||
|
||||
1. Add a folder from the sidebar or Library menu.
|
||||
2. The Rust indexer walks the directory recursively.
|
||||
3. Supported files are written into SQLite with metadata such as path, size, dimensions, media type, rating, and favorite state.
|
||||
4. Progress events stream back to the UI while the gallery updates incrementally.
|
||||
5. The gallery view loads media in pages and opens items in a lightbox for review.
|
||||
|
||||
## Notes
|
||||
|
||||
- This is currently a local desktop library, not a sync product.
|
||||
- Search is filename-based right now.
|
||||
- The vector table and embedding fields exist, but semantic search is not wired into the UI yet.
|
||||
- Some visible UI copy may still use the old working name until the frontend text is updated.
|
||||
|
||||
## Positioning
|
||||
|
||||
The clearest product description today is:
|
||||
|
||||
> A local-first desktop media library for browsing, filtering, and curating image and video folders.
|
||||
|
||||
That description is more accurate than "gallery" alone and gives you a better base for future branding, onboarding copy, and a landing page.
|
||||
Reference in New Issue
Block a user