Repository navigation
Conversation
Rule groups (all/any/none, nested) over culling, keywords, capture date, camera, lens, file type, location, place, People, folder, edits and kept versions; persisted on buckets as `filter`. Camera and lens join the EXIF pass via a separate .cam cache. Playlist order/shuffle/loop, preload window and Ken Burns framing maths, with tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Smart albums are buckets with rules, evaluated by the existing smart-bucket pass and re-run when the index, decisions or People tags change; they get a sidebar section and an editor. The slideshow plays the grid's view or selection fullscreen with cut/crossfade/face-aware Ken Burns, shuffle, loop, captions, silent video, display-size preloading and culling keys. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
IAmJSD
force-pushed
the
feat/gallery-slideshow-smart-albums
branch
from
October 4, 2026 18:16
3f30791 to
c4c9252
Compare
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.
What and why
Two gallery features:
Design
filter: RuleGroup. It is persisted as an optionalfilterkey onBucketFile::Rich. Older files read unchanged, and a bucket without rules writes no key. There is no parallel engine:refresh_smart_buckets(the pass that already fills query and area buckets) also checks each album's rules againstPhotoFactsgathered from the in-memory index. Query, area and rules are ANDed when more than one is set. The pass key gainspeople_revwhile an album exists, so ratings, flags, labels and People tags re-run it just as index changes do. No decoding is involved. Only albums that use "has earlier versions" list each folder's.schist/versions, once per pass.schist-gallery(smart.rs,slideshow.rs). They are pure and unit-tested, and the headless MCP server can read them..camfile beside the thumbnail, so the.metaformat and its caches stay as they are. Keywords come through the existing XMP overlay. On upgrade, each photo's EXIF is read once more on the next metadata refresh to fill.cam.exclude_query), while this PR adds metadata rules (filter). Both are additive optional fields on the same bucket and narrow the same match set. I deliberately did not changeconfigure_bucket's signature or theBucketNamemodal that Add exclusion queries to smart buckets #171 edits; albums useset_bucket_filterand their ownModal::SmartAlbum. Expect small mechanical conflicts where both touch the field list inBucketFile::Rich, the bucket load/save mapping and the candidate-set branch inrefresh_smart_buckets(Add exclusion queries to smart buckets #171 changes the area-only branch to use all indexed paths, and this PR adds a filter-only branch beside it). Resolve them by keeping both sides.video_mobile.rswas not needed). The browser build has no local gallery, and the Cloud gallery does not offer a slideshow. Both are documented.Verification done
cargo test -p schist-gallery: 78 pass. New tests cover every predicate, all/any/none, nesting, blank and empty albums, JSON round-trip and defaults, file kinds, kept-version detection, persistence and migration offilterand slideshow options, playlist order/shuffle/loop and reshuffle seams, the preload window, display edge, and Ken Burns framing (start = fit, end covers the view, edge faces never pull in background, a fitting axis stays centred) plus the face-weighted subject point.cargo test -p schist-editor --lib: 426 pass, 1 fails:clipboard::tests::image_url_follows_redirects_and_checks_http_errors. That test needs network access and is unrelated to this change. New editor tests cover album facts following the library as it changes (decisions, the metadata pass, People tags, rescans, rule edits invalidating matches), the editor's row and field routing for nested rules, version marking, and caption decision text.cargo clippy -p schist-gallery -p schist-gallery-ui -p schist-app-actions -p schist-editor --all-targets -- -D warnings: clean before the final rebase.cargo fmt --check: clean.cargo test -p schist-i18npasses,tools/check-i18n.py --strict-auditpasses,tools/test-check-i18n.pypasses,sync-i18n.py --checkpasses, andnode --test web/i18n.test.mjspasses. New strings are inslideshow.langandsmart_album.lang, translated for all 150 locales;noandshwere generated.cargo check -p schist-editorsucceeds and the i18n audit and sync checks pass again.Not verified
cargo test --workspacewas not run.Limits
schist-mcpserver reports which buckets are albums but, as with smart buckets, lists only their hand-added photos. The in-appgallery_stateincludes each album's rules.🤖 Generated with Claude Code