3581ffc6bb
The results screenshot is a screenshot *of a photo library*, so the committed capture showed the developer's own photos. tools/make-demo-photos.py draws the library instead: 22 procedural scenes (sunset, mountains, beach, conifers in haze, dunes, city skyline, night sky, bokeh) with grain and a vignette, so there are no people, no third-party content and nothing to license. The duplicate structure is deliberate, because a folder of unrelated pictures demonstrates nothing: - headline group: one scene re-saved at falling quality and size until its reclaimable size reaches --target-mb (45 MB). Results are ranked by reclaimable bytes, so this group has to out-rank whatever is already on the device or a real photo is the first thing back in frame. - exact pair: two byte-identical files, for the SHA-256 path. - singles: the other scenes, once each, so the library looks lived-in. Verified with the app's own engine on the desktop before pushing anything: 22 images -> 2 groups (PERCEPTUAL 14 copies, EXACT 2 copies) with the six singles left alone. Regeneration is byte-identical, the output path resolves from __file__ so it runs from any cwd, and nothing is written outside the repo. demo-photos/ is git-ignored, like fixtures/ and store-assets/raw-screenshots/. STORE_LISTING.md documents the library, why the headline group has a target size, the MediaProvider scan_file recipe and the cleanup step; ROADMAP, README and the release checklist point at it.
30 lines
399 B
Plaintext
30 lines
399 B
Plaintext
# Android / Gradle
|
|
*.iml
|
|
.gradle/
|
|
.kotlin/
|
|
/local.properties
|
|
/.idea/
|
|
.DS_Store
|
|
build/
|
|
/captures
|
|
.externalNativeBuild
|
|
.cxx
|
|
|
|
# Build outputs
|
|
*.apk
|
|
*.aab
|
|
*.ap_
|
|
*.dex
|
|
|
|
# Signing material — never commit keys!
|
|
*.keystore
|
|
*.jks
|
|
keystore.properties
|
|
!debug.keystore
|
|
|
|
# Generated data — regenerated on demand, never committed
|
|
fixtures/
|
|
store-assets/raw-screenshots/
|
|
demo-photos/
|
|
store-assets/screenshots/
|