Skip to content

Releases: 887/shutterboy

shutterboy 0.1 (c5d1219)

Choose a tag to compare

@887 887 released this 04 Jun 16:46

Auto-built APK from commit c5d1219.

Install

Sideload via Obtainium (recommended — see the project README for setup) or install directly:

adb install -r shutterboy-0.1-c5d1219.apk

Changes since v0.1-95ec600

  • Show Smart Tags as chips in the viewer info panel (c5d1219)
  • Tick smart-tags plan: search wired + AVD-verified (3893944)
  • Wire Smart Tags into search (9a9ff58)
  • Add Smart Tags: on-device AI photo tagging (95ec600)

Verify build

Field Value
Commit c5d121918faa02d5f9b2c78bf3355c41ca2904a7
APK shutterboy-0.1-c5d1219.apk
APK SHA-256 906fbe0026de75c8276015a5dfc4d732d515e94796d4d60aa61c20004d041ae9
Build flavour assembleDebug

To verify locally:

sha256sum shutterboy-0.1-c5d1219.apk
# expected: 906fbe0026de75c8276015a5dfc4d732d515e94796d4d60aa61c20004d041ae9

shutterboy 0.1 (9a9ff58)

Choose a tag to compare

@887 887 released this 04 Jun 16:25

Auto-built APK from commit 9a9ff58.

Install

Sideload via Obtainium (recommended — see the project README for setup) or install directly:

adb install -r shutterboy-0.1-9a9ff58.apk

Changes since v0.1-95ec600

  • Wire Smart Tags into search (9a9ff58)
  • Add Smart Tags: on-device AI photo tagging (95ec600)

Verify build

Field Value
Commit 9a9ff5897674a40a9b184894d771ee9edb076543
APK shutterboy-0.1-9a9ff58.apk
APK SHA-256 332185b7a5e07379c6dcb4bc4add2519694a11ff5420fe153d92ee3a91f47fc1
Build flavour assembleDebug

To verify locally:

sha256sum shutterboy-0.1-9a9ff58.apk
# expected: 332185b7a5e07379c6dcb4bc4add2519694a11ff5420fe153d92ee3a91f47fc1

shutterboy 0.1 (95ec600)

Choose a tag to compare

@887 887 released this 02 Jun 15:09

Auto-built APK from commit 95ec600.

Install

Sideload via Obtainium (recommended — see the project README for setup) or install directly:

adb install -r shutterboy-0.1-95ec600.apk

Changes since v0.1-e71b7fa

  • Add Smart Tags: on-device AI photo tagging (95ec600)
  • fix: clamp viewer pan so zoomed image can't fly off-screen (e71b7fa)

Verify build

Field Value
Commit 95ec600ac6b2c692510dc00f8e43d52072fe8957
APK shutterboy-0.1-95ec600.apk
APK SHA-256 9f09da908905aa329ac03d9fbdae1635e2e24a7a95ed1d7220e3610caa6a945e
Build flavour assembleDebug

To verify locally:

sha256sum shutterboy-0.1-95ec600.apk
# expected: 9f09da908905aa329ac03d9fbdae1635e2e24a7a95ed1d7220e3610caa6a945e

shutterboy 0.1 (238c349)

Choose a tag to compare

@887 887 released this 14 Aug 00:29

Auto-built APK from commit 238c349.

Install

Sideload via Obtainium (recommended — see the project README for setup) or install directly:

adb install -r shutterboy-0.1-238c349.apk

Changes since v0.1-95ec600

  • Fix Edit crash and add bulk share to selection mode (238c349)
  • Show Smart Tags as chips in the viewer info panel (c5d1219)
  • Tick smart-tags plan: search wired + AVD-verified (3893944)
  • Wire Smart Tags into search (9a9ff58)
  • Add Smart Tags: on-device AI photo tagging (95ec600)

Verify build

Field Value
Commit 238c349fcc173fa43267abcf53af18b8dceecfc8
APK shutterboy-0.1-238c349.apk
APK SHA-256 ef43aefc45a1eab3c9a97c14ad0ef532560b2f0c70520e385da8cddbaa1e8fd8
Build flavour assembleDebug

To verify locally:

sha256sum shutterboy-0.1-238c349.apk
# expected: ef43aefc45a1eab3c9a97c14ad0ef532560b2f0c70520e385da8cddbaa1e8fd8

shutterboy 0.1 (e71b7fa)

Choose a tag to compare

@887 887 released this 25 May 12:42

Auto-built APK from commit e71b7fa.

Install

Sideload via Obtainium (recommended — see the project README for setup) or install directly:

adb install -r shutterboy-0.1-e71b7fa.apk

Changes since v0.1-de0d660

  • fix: clamp viewer pan so zoomed image can't fly off-screen (e71b7fa)
  • appearance: tint surface colors from custom base theme seed (de0d660)

Verify build

Field Value
Commit e71b7faddef5172147e453850183ef1efa8a3bdb
APK shutterboy-0.1-e71b7fa.apk
APK SHA-256 558bde752c9d3ddcc476c6c66476f64bc59c19c49e3d4e9159cc39ca712e7e69
Build flavour assembleDebug

To verify locally:

sha256sum shutterboy-0.1-e71b7fa.apk
# expected: 558bde752c9d3ddcc476c6c66476f64bc59c19c49e3d4e9159cc39ca712e7e69

shutterboy 0.1 (de0d660)

Choose a tag to compare

@887 887 released this 24 May 23:44

Auto-built APK from commit de0d660.

Install

Sideload via Obtainium (recommended — see the project README for setup) or install directly:

adb install -r shutterboy-0.1-de0d660.apk

Changes since v0.1-3f86596

  • appearance: tint surface colors from custom base theme seed (de0d660)
  • appearance: add Custom seed colour option to base theme picker (3f86596)

Verify build

Field Value
Commit de0d66043789571099a74474182ba14c591b5a00
APK shutterboy-0.1-de0d660.apk
APK SHA-256 7e84e3c4071a0d5a9f277749eb44ae9ff6913fe7a4718484c6c21630773a1e96
Build flavour assembleDebug

To verify locally:

sha256sum shutterboy-0.1-de0d660.apk
# expected: 7e84e3c4071a0d5a9f277749eb44ae9ff6913fe7a4718484c6c21630773a1e96

shutterboy 0.1 (3f86596)

Choose a tag to compare

@887 887 released this 24 May 23:33

Auto-built APK from commit 3f86596.

Install

Sideload via Obtainium (recommended — see the project README for setup) or install directly:

adb install -r shutterboy-0.1-3f86596.apk

Changes since v0.1-115903a

  • appearance: add Custom seed colour option to base theme picker (3f86596)
  • nav: BROWSABLE + explicit schemes + ACTION_EDIT in Open-with filter (115903a)

Verify build

Field Value
Commit 3f865968ef2525c2b54ed97059b7b8b3d289192a
APK shutterboy-0.1-3f86596.apk
APK SHA-256 f0e50bfb84fd27b070c3b4b421387014babbadabf28f653c0285d3700c7253fb
Build flavour assembleDebug

To verify locally:

sha256sum shutterboy-0.1-3f86596.apk
# expected: f0e50bfb84fd27b070c3b4b421387014babbadabf28f653c0285d3700c7253fb

shutterboy 0.1 (115903a)

Choose a tag to compare

@887 887 released this 24 May 17:09

Auto-built APK from commit 115903a.

Install

Sideload via Obtainium (recommended — see the project README for setup) or install directly:

adb install -r shutterboy-0.1-115903a.apk

Changes since v0.1-0197963

  • nav: BROWSABLE + explicit schemes + ACTION_EDIT in Open-with filter (115903a)
  • fix: show thumbnail in video delete consent dialog (c37011e)
  • nav: simplify Open-with intent filter to MIME-only (59375b5)
  • nav: register as image/video viewer in the system "Open with" chooser (07b64b8)
  • appearance: reset button on color picker dialog (7b43233)
  • nav: settings opens as full-screen modal (tonearmboy/whisperboy parity) (bf74fd6)
  • chore: fix pre-existing test failures + clean up compiler warnings (7bcfe47)
  • about: app-icon header + Credits card + navigationBarsPadding (f56a353)
  • prefetch: expose scheduler rate as user setting (normal + battery saver) (7d985e4)
  • prefetch: bump scheduler poll 50ms → 100ms (7c80e14)
  • prefetch: bump scheduler poll from 20ms → 50ms (696bea4)
  • prefetch: move ThumbnailPrefetcher to AppGraph (process scope) (e740aee)
  • prefetch: viewport-center LIFO + always-on baseline lookahead (c4f58e4)
  • prefetch: 20 ms poll + symmetric safe zone for direction reverses (1f4ce0a)
  • prefetch: halve scheduler poll rate (40 ms → 80 ms) (0197963)
  • photos: persist grouping + column count across nav lifecycle (6a09702)
  • photos: fix grouping dispatch + distinct 5-column icon (bee0bd8)
  • photos: split grouping from column count — independent controls (fb9c295)
  • photos: add density-cycle FAB above the search FAB (33d3779)
  • settings: move Display section from Look-and-feel to Photos (cf216fc)
  • prefetch: progressive quality — low first, upgrade on dwell (8ee0ca2)
  • display: ThumbnailQuality becomes a multiplier on cell-px, auto-derived (1c55474)
  • display: halve ThumbnailQuality targets (96/192/384) (82e5802)
  • prefetch: self-submit on cell composition + tighter direction reaction (511a2a8)
  • fetcher: honor coroutine cancellation in MediaStoreThumbnailFetcher (f3f1848)
  • prefetch: rip the tiny tier — render target immediately, no placeholder (c7c0df7)
  • Revert "prewarm: force MediaStore to generate MINI_KIND on disk at scan time" (5bd8cbd)
  • prewarm: force MediaStore to generate MINI_KIND on disk at scan time (7110332)
  • prefetch: suspend FAR ring during fling so visible decodes win the OS pipe (bfe1293)
  • prefetch: coalesce mid-fling schedules + symmetric keep-zone for bounce-back (fc9cc03)
  • prefetch: adaptive velocity-scaled window + leading-edge priority + cancel-on-reverse (4761c0c)
  • scan: debounce observer + incremental upsert (9303ba5)
  • scan: use scanIfChanged() not forceRescan() on cold launch (9330ea1)
  • grid: play-circle overlay on video thumbnails (68431f7)
  • nav: drop GalleryTimelineFrame's transformable — it was eating root-tab swipes (ac35b96)
  • nav: horizontal swipe between Photos / Favorites / Collections tabs (f3ac365)
  • collections: lean folder tile — memoised request + thumb-cache alignment + stable click (296ded4)
  • scrubber: shorten pause-to-peek debounce 200 ms → 80 ms (f05b460)
  • scan: bump streaming batch size to 2500 to cut CursorWindow race surface (9c88df3)
  • grid: lean tile pass — strip shared-element + suppress-decode + selection-mode plumbing (f61c0f4)
  • delete: eager-remove from Room cache so the grid updates instantly (Aves-style) (f8bd735)
  • thumbs: aspect-preserving downscale — stop stretching tiles into squares (6505a2e)
  • thumbs: resize OS thumbnail down to requested size before HARDWARE copy (13724bd)
  • grid: static spinner at 0.75 progress — fuller ring without the animation tick (b4c538e)
  • Revert "grid: static spinner — keep the ring shape, drop the animation" (5e24d37)
  • grid: static spinner — keep the ring shape, drop the animation (8fdff94)
  • favorites: persist across scans — drop CASCADE FK + scanner safety net (c4a7956)
  • viewer: shorten shared-element open animation to 120 ms — unblock pager swipes faster (4c3fd9e)
  • viewer: filmstrip + page counter at the bottom; hides when zoomed (f84dc2c)
  • grid: stable cell callbacks — eliminate per-cell recompose on every scroll frame (fd34d35)

Verify build

Field Value
Commit 115903a27255f55b9cd62d4c8837fa493b3a394e
APK shutterboy-0.1-115903a.apk
APK SHA-256 4fc1c6f7144bad40c375a97ae3c5926c6b18b8bcc523974409965db58e920207
Build flavour assembleDebug

To verify locally:

sha256sum shutterboy-0.1-115903a.apk
# expected: 4fc1c6f7144bad40c375a97ae3c5926c6b18b8bcc523974409965db58e920207

shutterboy 26.05.19215641 (c8c78e6)

Choose a tag to compare

@887 887 released this 19 May 19:56

Auto-built APK from commit c8c78e6.

Install

Sideload via Obtainium (recommended — see the project README for setup) or install directly:

adb install -r shutterboy-26.05.19215641-c8c78e6.apk

Changes since v0.1-047cc84

  • theme: split base scheme from tint accent — copy tonearmboy's behaviour (c8c78e6)
  • Use yy.mm.ddhhMMss timestamp as the build version (96abc71)
  • theme: drop shutterboy-palette; tint shortcut + ColumnCount on Favorites (f39137f)
  • ui: Search FAB + Favorites uses RootTopBar + workers back to 8 (4b404cf)
  • ui: Favorites tab + viewer chrome polish (translucent + scrolling title + rotate/flip) (0b41b14)
  • ui: spinner placeholder + column-count cycle button + 4 workers (35daabd)
  • perf: HARDWARE bitmaps + Activity survives rotation (71d379d)
  • graph: auto-rescan on MediaStore changes — deletes now refresh the gallery (0d7ff12)
  • prefetch: tiered ring layout (tiny-wide, both-near) + drop to 8 workers (99605df)
  • graph: app-scoped photosFeed — gallery survives viewer round-trip instantly (07c5c35)
  • prefetch: two-tier (96 px + target) so cells never render fully-grey (3cfea61)
  • viewer: skip memory cache + use thumb as placeholder (9e99955)
  • perf: drop prefetch logging + memoize ImageRequest in PhotoThumbnail (7810575)
  • prefetch: bypass Coil queue + use placeholderMemoryCacheKey for instant render (dc0089a)
  • prefetch: warm tiles continuously, including DURING scroll (4892a54)
  • scrubber: scroll to current target after 200 ms of stillness (Aves pattern) (74031b6)
  • perf: remove crossfade + widen prefetch to 15 viewports each direction (5499eab)
  • scrubber: pill tracks thumb during drag; stop suppressing decodes on normal scroll (a4b12ea)
  • scrubber: grid scroll deferred to release — thumb input never blocked (f389c80)
  • scrubber: throttle scrollToItem to 12 Hz + reverse prefetch LIFO order (c504418)
  • scrubber: AndroidFastScroll cancel-and-relaunch pattern (ac92ce9)
  • scrubber: dispatchRawDelta (Fossify/RecyclerView trick) + bring back fast crossfade (505e6b5)
  • perf: conflate scrollToItem flow + 32 fetcher / 16 prefetch workers + 5-viewport prefetch (1c0a28b)
  • coil: MediaStore loadThumbnail fetcher (Aves trick) + drop crossfade (8c15ce2)
  • scrubber: serialize scrollToItem via snapshotFlow (fixes freeze on fast drag) (b2d7324)
  • scrubber: Aves _boundlessThumbOffset accumulator — fix up-drag freeze (a16911e)
  • grid: keep already-cached tiles visible during scroll; verify prefetch (04a67b9)
  • grid: suppress-decode-while-moving (Aves pattern) (a6b8abc)
  • grid: ThumbnailPrefetcher — bounded LIFO queue + 4 IO workers (9e7483a)
  • loader: 8-worker fetch+decode pool; prefetch yields to scroll (155a02b)
  • grid: per-id deduped Coil prefetch for the surrounding viewport (047cc84)
  • grid: revert fast-scrub model-null + prefetch flood — both regressed loading (b54c7b4)
  • grid: Aves-style fast-scrub + bi-directional Coil prefetch (64415a4)
  • grid: thumb stays during drag; debounce scan emissions; drop layout animation (c8d116c)
  • grid: stop the scroll-freeze on photo emissions; pills don't wrap (f5b1c73)
  • grid: chunky Aves-style thumb + async timeline build (af1ca62)
  • grid: distinguish loading from empty in PhotosGrid (ab44276)
  • grid: grabbable scroll thumb for quick-scroll (07e9b41)
  • grid: thin Aves-style scroll thumb on the right edge (c035c77)
  • grid: Aves-style floating pills only, drop draggable scrubber + sticky banner (e624d34)
  • settings + grid polish: theme split, density-weighted scrubber, divider rows (7f06e3e)

Verify build

Field Value
Commit c8c78e6b1bc49de9ae976efb12e5e0b60a63f3a8
APK shutterboy-26.05.19215641-c8c78e6.apk
APK SHA-256 812497629aa3f751dccffce875cd8ffd2ddd7d3c6f9b02278865dce19be33051
Build flavour assembleDebug

To verify locally:

sha256sum shutterboy-26.05.19215641-c8c78e6.apk
# expected: 812497629aa3f751dccffce875cd8ffd2ddd7d3c6f9b02278865dce19be33051

shutterboy 0.1 (fd34d35)

Choose a tag to compare

@887 887 released this 19 May 23:09

Auto-built APK from commit fd34d35.

Install

Sideload via Obtainium (recommended — see the project README for setup) or install directly:

adb install -r shutterboy-0.1-fd34d35.apk

Changes since v0.1-047cc84

  • grid: stable cell callbacks — eliminate per-cell recompose on every scroll frame (fd34d35)
  • grid: spinner only shows for cells that aren't memory-cached yet (436635f)
  • revert: drop prepareToDraw and restore the loading spinner — kept Precision.INEXACT (28494d6)
  • nav: stash backing-id lists in AppGraph; route carries a UUID key — fixes TransactionTooLargeException (750564a)
  • viewer: keep chrome visible on video pages — Media3 swallows our taps (f1665ee)
  • grid: stickyHeaderLabel falls through PhotoCell on flat timeline (52b27fc)
  • grid: restore year scrubber on flat timeline + drop per-cell spinner animation (7b86e75)
  • grid: revert LazyLayoutCacheWindow — pre-composing 5 viewports froze main thread (c730940)
  • grid: prepareToDraw + LazyLayoutCacheWindow + Precision.INEXACT — kill main-thread stutter (34f99da)
  • photos: drop date-grouping at all densities — column-cycle is just column count (b838e5a)
  • scan: stream photos into Room in 500-row batches so the gallery fills while scanning (1c27d7b)
  • Revert "Use yy.mm.ddhhMMss timestamp as the build version" (97bf605)
  • theme: split base scheme from tint accent — copy tonearmboy's behaviour (c8c78e6)
  • Use yy.mm.ddhhMMss timestamp as the build version (96abc71)
  • theme: drop shutterboy-palette; tint shortcut + ColumnCount on Favorites (f39137f)
  • ui: Search FAB + Favorites uses RootTopBar + workers back to 8 (4b404cf)
  • ui: Favorites tab + viewer chrome polish (translucent + scrolling title + rotate/flip) (0b41b14)
  • ui: spinner placeholder + column-count cycle button + 4 workers (35daabd)
  • perf: HARDWARE bitmaps + Activity survives rotation (71d379d)
  • graph: auto-rescan on MediaStore changes — deletes now refresh the gallery (0d7ff12)
  • prefetch: tiered ring layout (tiny-wide, both-near) + drop to 8 workers (99605df)
  • graph: app-scoped photosFeed — gallery survives viewer round-trip instantly (07c5c35)
  • prefetch: two-tier (96 px + target) so cells never render fully-grey (3cfea61)
  • viewer: skip memory cache + use thumb as placeholder (9e99955)
  • perf: drop prefetch logging + memoize ImageRequest in PhotoThumbnail (7810575)
  • prefetch: bypass Coil queue + use placeholderMemoryCacheKey for instant render (dc0089a)
  • prefetch: warm tiles continuously, including DURING scroll (4892a54)
  • scrubber: scroll to current target after 200 ms of stillness (Aves pattern) (74031b6)
  • perf: remove crossfade + widen prefetch to 15 viewports each direction (5499eab)
  • scrubber: pill tracks thumb during drag; stop suppressing decodes on normal scroll (a4b12ea)
  • scrubber: grid scroll deferred to release — thumb input never blocked (f389c80)
  • scrubber: throttle scrollToItem to 12 Hz + reverse prefetch LIFO order (c504418)
  • scrubber: AndroidFastScroll cancel-and-relaunch pattern (ac92ce9)
  • scrubber: dispatchRawDelta (Fossify/RecyclerView trick) + bring back fast crossfade (505e6b5)
  • perf: conflate scrollToItem flow + 32 fetcher / 16 prefetch workers + 5-viewport prefetch (1c0a28b)
  • coil: MediaStore loadThumbnail fetcher (Aves trick) + drop crossfade (8c15ce2)
  • scrubber: serialize scrollToItem via snapshotFlow (fixes freeze on fast drag) (b2d7324)
  • scrubber: Aves _boundlessThumbOffset accumulator — fix up-drag freeze (a16911e)
  • grid: keep already-cached tiles visible during scroll; verify prefetch (04a67b9)
  • grid: suppress-decode-while-moving (Aves pattern) (a6b8abc)
  • grid: ThumbnailPrefetcher — bounded LIFO queue + 4 IO workers (9e7483a)
  • loader: 8-worker fetch+decode pool; prefetch yields to scroll (155a02b)
  • grid: per-id deduped Coil prefetch for the surrounding viewport (047cc84)
  • grid: revert fast-scrub model-null + prefetch flood — both regressed loading (b54c7b4)
  • grid: Aves-style fast-scrub + bi-directional Coil prefetch (64415a4)
  • grid: thumb stays during drag; debounce scan emissions; drop layout animation (c8d116c)
  • grid: stop the scroll-freeze on photo emissions; pills don't wrap (f5b1c73)
  • grid: chunky Aves-style thumb + async timeline build (af1ca62)
  • grid: distinguish loading from empty in PhotosGrid (ab44276)
  • grid: grabbable scroll thumb for quick-scroll (07e9b41)

Verify build

Field Value
Commit fd34d35b385eab6ad16a09a514afccd16569048e
APK shutterboy-0.1-fd34d35.apk
APK SHA-256 e8e379a6271766583317a0fd967ba11ee4c21bd970dd5f226b7a97d379c5a19f
Build flavour assembleDebug

To verify locally:

sha256sum shutterboy-0.1-fd34d35.apk
# expected: e8e379a6271766583317a0fd967ba11ee4c21bd970dd5f226b7a97d379c5a19f