315 Commits

Author SHA1 Message Date
c804ee39cb Merge pull request '001-video-wall' (#52) from 001-video-wall into master
Reviewed-on: #52
2026-03-02 18:45:03 +00:00
Cameron
c05a16f7f2 Add JSON error logging for failed request deserialization
Configures a global JsonConfig error handler that logs the method, URI,
and parse error details at WARN level before returning the 400 response.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 20:02:18 -05:00
Cameron
3982c6d6d4 Fix 10-bit encode not supported error with h264_nvenc
Add format=yuv420p to preview clip filter chains to convert 10-bit
sources to 8-bit before encoding, since NVENC doesn't support 10-bit
H.264.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 19:55:36 -05:00
27a148c0aa Merge branch 'master' into 001-video-wall 2026-02-27 19:06:55 +00:00
Cameron
5975828f65 Fix incorrect frame rate handling in preview clip generation 2026-02-26 10:58:27 -05:00
Cameron
36612444c5 Ensure we re-queue pending/failed records 2026-02-26 10:42:20 -05:00
Cameron
32ece84209 Fix high framerate preview playback 2026-02-26 10:26:52 -05:00
Cameron
7d164bad81 Fix import warnings 2026-02-26 10:10:26 -05:00
Cameron
0d05033b38 Add comprehensive testing for preview clip and status handling
- Implement unit tests for PreviewClipRequest/PreviewStatusRequest serialization and deserialization.
- Add tests for PreviewDao (insert, update, batch retrieval, and status-based queries).
- Extend Actix-web integration tests for `/video/preview/status` endpoint scenarios.
- Introduce in-memory TestPreviewDao for mock database interactions.
- Update README with new config parameters for preview clips.
2026-02-26 10:06:21 -05:00
Cameron
842ed4ed66 Add Speckit and Constitution 2026-02-26 10:05:47 -05:00
Cameron
19c099360e Add VideoWall feature: server-side preview clip generation and mobile grid view
Backend (Rust/Actix-web):
- Add video_preview_clips table and PreviewDao for tracking preview generation
- Add ffmpeg preview clip generator: 10 equally-spaced 1s segments at 480p with CUDA NVENC auto-detection
- Add PreviewClipGenerator actor with semaphore-limited concurrent processing
- Add GET /video/preview and POST /video/preview/status endpoints
- Extend file watcher to detect and queue previews for new videos
- Use relative paths consistently for DB storage (matching EXIF convention)

Frontend (React Native/Expo):
- Add VideoWall grid view with 2-3 column layout of looping preview clips
- Add VideoWallItem component with ActiveVideoPlayer sub-component for lifecycle management
- Add useVideoWall hook for batch status polling with 5s refresh
- Add navigation button in grid header (visible when videos exist)
- Use TextureView surface type to fix Android z-ordering issues
- Optimize memory: players only mount while visible via FlatList windowSize
- Configure ExoPlayer buffer options and caching for short clips
- Tap to toggle audio focus, long press to open in full viewer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 19:40:17 -05:00
cdc2eef833 Merge pull request 'Build insight title from generated summary' (#51) from feature/insight-tweaks into master
Reviewed-on: #51
2026-02-24 21:21:20 +00:00
Cameron
7a0da1ab4a Build insight title from generated summary 2026-02-24 16:08:25 -05:00
1fb3441a38 Merge pull request 'Fix video rotation' (#50) from feature/fix-video-rotation into master
Reviewed-on: #50
2026-02-10 02:54:46 +00:00
Cameron
39c66d81cc Fix video rotation 2026-02-05 18:39:36 -05:00
0d5c141328 Merge pull request 'Expand temporal context window for SMS retrieval from ±2 days to ±4 days' (#49) from feature/increase-insight-context into master
Reviewed-on: #49
2026-02-05 20:57:46 +00:00
Cameron
e92513fbe9 Expand temporal context window for SMS retrieval from ±2 days to ±4 days 2026-01-29 19:48:09 -05:00
92a468233e Merge pull request 'feature/gps-map-support' (#48) from feature/gps-map-support into master
Reviewed-on: #48
2026-01-28 15:54:18 +00:00
Cameron
1efdd02eda Add GPS summary sorting
Run cargo fmt/clippy
2026-01-28 10:52:17 -05:00
Cameron
7d2a3148bb Make Memories week span sorting chronological 2026-01-26 20:51:11 -05:00
Cameron
a6cc64ece0 Bump to version 0.5.2 2026-01-26 20:05:42 -05:00
Cameron
1d2f4e3441 Add circular thumbnail creation for Map view 2026-01-26 20:04:14 -05:00
Cameron
073b5ed418 Added gps-summary endpoint for Map integration 2026-01-26 11:58:24 -05:00
701a06871c Merge pull request 'feature/search-performance' (#47) from feature/search-performance into master
Reviewed-on: #47
2026-01-26 16:03:57 +00:00
Cameron
c9410c9c91 Add rotation check to video transcoding logic
Seems like vertical videos aren't preserving rotation logic on copy.
2026-01-26 10:55:15 -05:00
Cameron
08f402d4d1 Add h264 codec detection and orphaned playlist cleanup job
Implement `is_h264_encoded` to detect existing h264 videos and optimize processing by using stream copy when possible. Introduce a background job for cleaning up orphaned playlists and segments based on missing source videos. Improve checks for playlist generation necessity.
2026-01-19 22:37:50 -05:00
Cameron
9245778391 Generate video playlists on period directory scans 2026-01-19 22:32:00 -05:00
Cameron
ea53932b4b Update Cargo.lock for version bump 2026-01-18 19:26:23 -05:00
Cameron Cordes
85e6567674 Bump to 0.5.1 2026-01-18 19:17:53 -05:00
Cameron
be483c9c1a Add database optimizations for photo search and pagination
Implement database-level sorting with composite indexes for efficient date and tag queries. Add pagination metadata support and optimize tag count queries using batch processing.
2026-01-18 19:17:10 -05:00
5e646dfc19 Merge pull request 'feature/insights' (#46) from feature/insights into master
Reviewed-on: #46
2026-01-15 01:07:57 +00:00
Cameron
e31d5716b6 Additional cleanup and warning fixing 2026-01-14 15:21:44 -05:00
Cameron
02ca60a5d0 Remove individual messages embedding SQL 2026-01-14 14:23:50 -05:00
Cameron
af35a996a3 Cleanup unused message embedding code
Fixup some warnings
2026-01-14 13:33:36 -05:00
Cameron
e2d6cd7258 Run clippy fix 2026-01-14 13:17:58 -05:00
Cameron
e9729e9956 Fix unused import from binary from getting removed with cargo fix 2026-01-14 13:13:06 -05:00
Cameron
b7582e69a0 Add model capability caching and clear functions 2026-01-14 13:12:09 -05:00
Cameron
f65f4efde8 Make date parse from metadata a little more consistent 2026-01-14 12:54:36 -05:00
Cameron
a37a211282 Fix upload with missing file name or space in filename 2026-01-11 21:15:41 -05:00
Cameron
ad0bba63b4 Add check for vision capabilities 2026-01-11 15:22:24 -05:00
Cameron
5b35df4007 Remove unused function 2026-01-11 14:42:25 -05:00
Cameron
fa600f1c2c Fallback to sorting by Metadata date 2026-01-11 14:39:50 -05:00
Cameron
0efa8269a1 Fix test 2026-01-10 11:34:16 -05:00
Cameron
b2cc617bc2 Pass image as additional Insight context 2026-01-10 11:30:01 -05:00
Cameron
084994e0b5 Daily Summary Embedding Testing 2026-01-08 13:41:32 -05:00
Cameron
61e10f7678 Improve Exif Query path handling 2026-01-08 13:41:08 -05:00
Cameron
cd66521c17 Phase 3: Integrate Google Takeout context into InsightGenerator
- Updated InsightGenerator struct with calendar, location, and search DAOs
- Implemented hybrid context gathering methods:
  * gather_calendar_context(): ±7 days with semantic ranking
  * gather_location_context(): ±30 min with GPS proximity check
  * gather_search_context(): ±30 days semantic search
- Added haversine_distance() utility for GPS calculations
- Updated generate_insight_for_photo_with_model() to use multi-source context
- Combined all context sources (SMS + Calendar + Location + Search) with equal weight
- Initialized new DAOs in AppState (both default and test implementations)
- All contexts are optional (graceful degradation if data missing)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-05 14:57:31 -05:00
Cameron
d86b2c3746 Add Google Takeout data import infrastructure
Implements Phase 1 & 2 of Google Takeout RAG integration:
- Database migrations for calendar_events, location_history, search_history
- DAO implementations with hybrid time + semantic search
- Parsers for .ics, JSON, and HTML Google Takeout formats
- Import utilities with batch insert optimization

Features:
- CalendarEventDao: Hybrid time-range + semantic search for events
- LocationHistoryDao: GPS proximity with Haversine distance calculation
- SearchHistoryDao: Semantic-first search (queries are embedding-rich)
- Batch inserts for performance (1M+ records in minutes vs hours)
- OpenTelemetry tracing for all database operations

Import utilities:
- import_calendar: Parse .ics with optional embedding generation
- import_location_history: High-volume GPS data with batch inserts
- import_search_history: Always generates embeddings for semantic search

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-05 14:50:49 -05:00
Cameron
bb23e6bb25 Cargo fix 2026-01-05 10:31:34 -05:00
Cameron
ad07f5a1fa Update README 2026-01-05 10:09:18 -05:00