Repository navigation
Add oMLX embedding provider, cloud file support, and interactive demo - #3
Merged
Merged
Conversation
- Fix the misspelled 'Ophelderd' (brightened) -> 'Helderder'
- Use 'Gekoppelde bestanden' consistently for paired files
- Use the verb-last pattern of other options ('Systeem volgen', 'App-taal volgen')
- Complete the offline 'requires original' message
- 'Willekeurig draaien' for random rotation in collage
Claude-Session: https://claude.ai/code/session_01XFzC7XqToaa3ABP8G83GgS
Co-authored-by: OPGERUIMD97 <OPGERUIMD97@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…lyx10#394 part 2) (julyx10#432) * feat: add cloud-only read guards and OneDrive release helper (julyx10#394) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat: store cloud-only and pending-metadata state per file (julyx10#394) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat: index cloud-only files from their directory entry without downloading (julyx10#394) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat: skip cloud-only originals in thumbnail, AI, face and duplicate tasks (julyx10#394) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat: show a cloud badge and keep online-only originals unread in the grid (julyx10#394) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat: add 'Download, index, then free up space' for cloud-only selections (julyx10#394) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix: keep cloud-only files unread in Live Photo pairing, previews and duplicate hashes (julyx10#394) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(cloud): re-sync a folder when returning to it from another view Free up space leaves the folder mtime unchanged, so the cloud flags are only refreshed by the folder sync, which was skipped while the debounce key still named the folder. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(cloud): keep a vanished file's cloud flag off at rename update_path ran for any unreadable renamed file and always set cloud_only = 1; read the flag from disk instead. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(cloud): harden online-only handling with fail-safe reads and async release - refresh cloud state per opened folder without loading full catalog rows - guard face/embedding/thumbnail/person reads with content_readable - report OneDrive release as requested (async), surface partial errors - fail-safe isCloudOnlyFile, invalidate stale hover/warmup attribute checks - drop output-only live_photo_video_cloud_only in favor of a live check - backfill cloud-only UI strings across all locales --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: julyx10 <tiangle@gmail.com>
The Welcome screen carried its own language selector, so a new install showed English until the user happened to notice it. - resolve the system locale once before components read messages, mapping zh-Hant (TW/HK/MO) to zh-TW and falling back to en for unsupported or malformed values - record languageInitialized, and let setLanguage(fromUser) claim user intent before the locale bundle loads, so the startup probe and the settings sync echo can never overwrite a choice the user just made - migrate existing installs to "already chosen" on config load - drop the Welcome language selector; the same 15 options stay in Settings > General
Entering scan streaming from a previously sorted view or another album kept the old content request and thumbnail queue alive, so pages of the previous query could still hydrate the cleared placeholders and enqueue their thumbnails. Bump currentContentRequestId and invalidate the thumbnail scheduler, matching what updateContent already does.
Let image-search embeddings be computed by a local oMLX server (OpenAI-compatible /v1/embeddings) instead of the bundled ONNX CLIP models. The provider is opt-in from Settings > Search, runs entirely on the user's machine, and falls back gracefully: the built-in engine stays the default and the ONNX models simply stay unloaded while oMLX is active. - New t_omlx module: connection test, query/image embeddings, batched parallel background re-index with progress events and cancellation - Version embeddings by model (afiles.embed_model, migration v20) so vectors from different models never mix; searches, coverage, and incremental indexing filter by the active model - Library guards around batch writes: requests run without the guard and results are stored only if the library is still the active one - Per-library score calibration and strictness levels for oMLX searches - EmbeddingGemma query task prompt; optional Matryoshka dimensions - Settings UI with server URL / API key / model / dimensions, connection test, coverage, and re-index progress; locale strings for all languages Squashed and rebased onto main (previously 20 commits plus a merge).
- Show embedding coverage and the re-index controls for the built-in provider too, so its vectors can be rebuilt after switching back from oMLX. Scans now treat a file as embedded only when its vector comes from the active model (has_embedding), so regular scans also re-embed files whose vectors were produced by the other provider. - Compute oMLX query vectors outside the search command's library guard. The guard is taken only for the database reads/writes around the HTTP request, so a slow server no longer blocks library switching, and a switch in the meantime fails the search with "Library changed" instead of reading or writing the wrong library. The built-in path no longer loads the ONNX engine for oMLX searches. - Await provider restoration at startup before calling finish_startup, so the bundled ONNX models are not loaded when oMLX is active. - Never read an online-only original to embed it with oMLX. - Tests: re-index controls outside the oMLX-only block, startup order, has_embedding per model (including quoted model names), and upgrading a v18/v19 database through the cloud-state and embed_model migrations. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6JQYbxMg96TrsUQD1cGsm
Resolve conflicts with the reviewed oMLX provider, keeping the fork-only changes: word-start filename/comment search and English translation of oMLX search text (now used by the search command's query embedding). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6JQYbxMg96TrsUQD1cGsm
Owner
Author
|
Generated by Claude Code |
The generate_embedding command held the library guard while the oMLX request was in flight, the same issue the review flagged for search. It now shares the search path's per-file helper: read the input under the guard, embed without it, and store only if the library is unchanged. AFile::generate_embedding is built-in only again, close to main. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6JQYbxMg96TrsUQD1cGsm
The fork has no importable Apple certificate, so tauri-action failed at `security import` after a successful build. Check the certificate first (the same import into a throwaway keychain) and, when it is missing or invalid, build an unsigned DMG and skip notarization instead. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6JQYbxMg96TrsUQD1cGsm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR introduces several major features and improvements to Lap:
Summary
Adds support for optional oMLX embedding provider for image search, implements cloud-only file handling, introduces relocatable thumbnail cache storage, and creates an interactive browser-based demo of the Lap frontend.
Key Changes
oMLX Embedding Provider Integration
t_omlx.rsmodule providing OpenAI-compatible/v1/embeddingsendpoint support for local embedding computationCloud File Support
CloudScanActionenum andcloud_scan_action()function to handle online-only files without downloadingcloud_onlyandmetadata_pendingfields toAFilestruct for tracking file stateDedupScanStatusRelocatable Thumbnail Cache
t_cache_storage.rsmodule for managing thumbnail cache location independently from system defaultsthumbnail_cache_dirfieldInteractive Browser Demo
docs/demo-native/directory with browser-based Lap frontend demotauri.mjs) providing fixture-based responsesUI/UX Improvements
changeLanguage()callback for proper async handlingTesting & Documentation
Configuration & Dependencies
reqwestwith JSON feature for HTTP requests to embedding serverNotable Implementation Details
PARALLEL_SCORE_MIN_ROWS) set to 4096 rows for optimal performancehttps://claude.ai/code/session_01W6JQYbxMg96TrsUQD1cGsm