MUSERPERSONAL
A hidden, fully-isolated sub-tool that triages a 46,978-image Google Photos Takeout into personal, in-between, and reference — locally, offline, $0 for the core. The architecture, the math that decides each photo, and the engineering that keeps the labels safe.
Personal · 0.75
Problem
undifferentiated · 46k imagesA decade of Takeout is an undifferentiated 46k-image dump — real life mixed with saved internet art, game caps, screenshots, scanned reference, movie stills.
You want the personal stuff kept and private, the genuinely-aesthetic stuff promotable to the main Muser library, and the junk gone — without hand-sorting 46k files or shipping them to a cloud. So the whole core runs locally, offline, for $0.
Pipeline
one photo · left → rightThe scorer
two brains · sup decides 100%Most descriptions stop at the heuristic. In production there are two scorers, and on the live corpus the second decides 100% of buckets (sig.sup == true on all 46,978).
① Cold-start heuristic
_classify_one — a hand-weighted fusion of 5 signals + 3 floors. Interpretable, needs zero labels, fully explainable.
② Supervised override
reclassify_supervised — a logistic regression P = σ(w·e + b) over the frozen SigLIP embedding, trained on your labels. Once you label, it re-buckets everything and wins.
Why two: a frozen-embedding linear probe beats both the hand-tuned heuristic and full fine-tuning when labels are scarce — ~769 parameters can't overfit a few hundred labels, and it reuses the embedding you already computed. The heuristic is the interpretable bootstrap; the probe is the accurate decider. The 59 → 86% jump is why it exists.
# evidence-driven: personal-ness needs POSITIVE evidence, not "doesn't look aesthetic" base = 1 − R # R = reference-likeness (linear probe) P = 0.45·F + 0.40·cam + 0.15·base # F=faces · cam=EXIF · base=appearance if doc: P = max(P, 0.50) # utility → reviewable, never auto-personal if cam: P = max(P, 0.48) # camera-taken → at least reviewable if people: P = max(P, 0.95) # user-TAGGED person → decisive P = clip(P ± 0.08, 0, 1) # album nudge (camera-roll vs named album) bucket: P≥0.55 personal · P≤0.40 reference · else in-between
Signals
5 signals · 3 floors · 3 buckets| Signal | weight | What it is | coverage |
|---|---|---|---|
| F faces | ×0.45 | max(recurring person ≥12-cluster, face-box ≥18% of frame) | 33,036 |
| cam EXIF | ×0.40 +floor | camera Make/Model present = “a photo I took” | 2,931 / 46,978 |
| base 1−R | ×0.15 | inverse of a linear probe’s reference-likeness | all |
| people tagged | floor .95 | you tagged this person in Google Photos | decisive |
| doc utility | floor .50 | screenshot / scan / receipt | reviewable |
| A album | ±0.08 | camera-roll vs named album nudge | — |
| Bucket | band | Meaning |
|---|---|---|
| personal | P ≥ 0.55 | keep — your life |
| in-between | 0.40–0.55 | review — ambiguous / camera reference / docs |
| reference | P ≤ 0.40 | eligible to move into the main aesthetic library |
Real cases
actual photos · actual signals
heur .48 in-betw
model .75 personal

floor .95
personal

P .07
reference

P .80
personal

P .90
personal
Live verdicts from the supervised model. The selfie shows the heuristic→model gap that motivates the probe: the formula says in-between, the trained model — from the embedding alone — correctly says personal.
After
curate · cleanup · exportVisualization Suite
interactive diagrams of the pipelineExplore the decision logic with interactive visualizations: the evidence flow through the pipeline, the embedding manifold, and the decision boundaries. Each diagram is interactive — hover to reveal signals, click to explore details.