Add project roadmap
This commit is contained in:
+152
@@ -0,0 +1,152 @@
|
|||||||
|
# Phokus Roadmap
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
This file tracks the agreed implementation phases for Phokus so work can continue cleanly across sessions and machines.
|
||||||
|
|
||||||
|
## Product Direction
|
||||||
|
|
||||||
|
Phokus is a local-first desktop media library for images and videos with:
|
||||||
|
|
||||||
|
1. fast folder indexing
|
||||||
|
2. rich browsing and preview UX
|
||||||
|
3. background thumbnail and metadata processing
|
||||||
|
4. CLIP-powered similarity search via `sqlite-vec`
|
||||||
|
|
||||||
|
## Phase 1: Core Indexing And Gallery Stability
|
||||||
|
|
||||||
|
Status: done
|
||||||
|
|
||||||
|
Goals:
|
||||||
|
|
||||||
|
1. fix folder add/index so media actually appears
|
||||||
|
2. fix gallery rendering/layout issues
|
||||||
|
3. stream indexed items into the gallery incrementally
|
||||||
|
4. stop full-gallery refresh churn during indexing
|
||||||
|
|
||||||
|
Completed:
|
||||||
|
|
||||||
|
1. fixed broken DB image queries
|
||||||
|
2. fixed blank gallery rendering path
|
||||||
|
3. simplified the grid rendering path
|
||||||
|
4. changed indexing updates to stream into the current gallery
|
||||||
|
|
||||||
|
## Phase 2: Media Model And UI Expansion
|
||||||
|
|
||||||
|
Status: mostly done
|
||||||
|
|
||||||
|
Goals:
|
||||||
|
|
||||||
|
1. support images and videos as first-class media types
|
||||||
|
2. expand the shell UI so future features fit naturally
|
||||||
|
3. add favorites, ratings, context actions, and richer preview behavior
|
||||||
|
|
||||||
|
Completed:
|
||||||
|
|
||||||
|
1. media kind support in backend and frontend
|
||||||
|
2. favorites and ratings persisted in SQLite
|
||||||
|
3. top menu bar and richer toolbar
|
||||||
|
4. right-click context menu in the gallery
|
||||||
|
5. improved lightbox with zoom, rating, favorite controls, and video playback
|
||||||
|
|
||||||
|
Remaining polish:
|
||||||
|
|
||||||
|
1. broader UI redesign pass later
|
||||||
|
2. continue refining background task presentation
|
||||||
|
|
||||||
|
## Phase 3: Media Processing Foundation
|
||||||
|
|
||||||
|
Status: in progress
|
||||||
|
|
||||||
|
Goals:
|
||||||
|
|
||||||
|
1. stable thumbnail pipeline for images and videos
|
||||||
|
2. video metadata extraction
|
||||||
|
3. visible background task tracking
|
||||||
|
4. optimized indexing and reindexing, especially for large/external drives
|
||||||
|
5. stable shipping story for FFmpeg/FFprobe
|
||||||
|
|
||||||
|
Completed:
|
||||||
|
|
||||||
|
1. image thumbnail generation upgraded to `fast_image_resize`
|
||||||
|
2. EXIF orientation handling added for images
|
||||||
|
3. stable thumbnail cache hashing via `xxh3`
|
||||||
|
4. video poster generation via sidecar-managed FFmpeg
|
||||||
|
5. video metadata extraction via FFprobe
|
||||||
|
6. background task panel added
|
||||||
|
7. reindexing changed from rebuild-from-zero to reconciliation against DB state
|
||||||
|
8. active folder indexing is prioritized over thumbnail/metadata workers
|
||||||
|
9. cold-index path optimized by moving image dimension extraction out of the scan path
|
||||||
|
10. FFmpeg/FFprobe provisioning now uses `ffmpeg-sidecar`
|
||||||
|
|
||||||
|
Still to do before moving on fully:
|
||||||
|
|
||||||
|
1. optimize thumbnail throughput further
|
||||||
|
2. optimize cold indexing on large/external drives further if needed
|
||||||
|
3. validate that fresh indexing, reindexing, video posters, and metadata all behave well at scale
|
||||||
|
|
||||||
|
Current next optimization pass:
|
||||||
|
|
||||||
|
1. atomic thumbnail job claiming
|
||||||
|
2. multiple thumbnail workers
|
||||||
|
3. batch DB writes in thumbnail worker
|
||||||
|
4. switch image thumbnails from WebP to JPEG if benchmarking confirms it helps
|
||||||
|
|
||||||
|
## Phase 4: Embeddings And Similarity Search
|
||||||
|
|
||||||
|
Status: not started
|
||||||
|
|
||||||
|
Goals:
|
||||||
|
|
||||||
|
1. CLIP embedding worker
|
||||||
|
2. `sqlite-vec` writes
|
||||||
|
3. image-to-image similarity search
|
||||||
|
4. later text-to-image search
|
||||||
|
|
||||||
|
Foundation already in place:
|
||||||
|
|
||||||
|
1. `sqlite-vec` table scaffold exists
|
||||||
|
2. embedding status columns exist
|
||||||
|
3. embedding jobs table exists
|
||||||
|
|
||||||
|
Implementation plan:
|
||||||
|
|
||||||
|
1. add CLIP runtime/inference path
|
||||||
|
2. process embedding jobs in background
|
||||||
|
3. write embeddings to `sqlite-vec`
|
||||||
|
4. add `find_similar_images(image_id, limit)` command
|
||||||
|
5. expose similar-image action in gallery/lightbox UI
|
||||||
|
|
||||||
|
## Phase 5: Discovery And Library Features
|
||||||
|
|
||||||
|
Status: later
|
||||||
|
|
||||||
|
Planned areas:
|
||||||
|
|
||||||
|
1. tags
|
||||||
|
2. albums / collections
|
||||||
|
3. richer metadata filters
|
||||||
|
4. better search UX
|
||||||
|
5. similarity-driven browsing workflows
|
||||||
|
|
||||||
|
## Immediate Priorities
|
||||||
|
|
||||||
|
Work these in order:
|
||||||
|
|
||||||
|
1. finish indexing/thumbnail throughput optimization
|
||||||
|
2. validate media processing behavior on large folders and external drives
|
||||||
|
3. move into embeddings
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
Current backend direction is fixed as:
|
||||||
|
|
||||||
|
1. SQLite for source-of-truth metadata and job state
|
||||||
|
2. `sqlite-vec` for vector search
|
||||||
|
3. sidecar-managed FFmpeg/FFprobe for video poster/metadata processing
|
||||||
|
|
||||||
|
Current architectural principle:
|
||||||
|
|
||||||
|
1. scan fast first
|
||||||
|
2. queue expensive downstream work
|
||||||
|
3. process heavy work after active indexing when possible
|
||||||
Reference in New Issue
Block a user