# Ente memories: layout and motion spec

For Aman. The prototype is the reference; every number below is in it (`const M` at the top of the script). Open any frame with `?slide=7&ms=900` (slide index from 0, frozen 900 ms in) or `?slide=end&ms=2800`.

Today's viewer (`full_screen_memory.dart` on main, 28 Oct): one photo full screen, 5 s each, random Ken Burns 1.05 to 1.15 with up to 5% random pan, easeInOut, AnimatedSwitcher crossfade 600 ms (200 ms on tap). Everything below replaces that.

## Layouts

| Layout | When to use | Geometry |
|---|---|---|
| Title card | First photo | Full bleed, title at 62% down, bottom scrim 46% tall to 42% black |
| Single | Any portrait | Full bleed |
| Slow pan | Any landscape | Full bleed, scale 1.02, drifts at most 12% of the screen width over the whole hold, centred on the subject, alternating direction |
| Stacked | Two landscapes | Full bleed, two halves, no seam: the two photos meet edge to edge |
| One big + two small | Three photos | Top 56% of height, two below, edges touching, no seams |
| End screen | After the last photo | Blurred cover photo, serif title + date and count, bento collage card, Share, then Replay and Up next |

Never put two vertical strips side by side.

## Zoom (Ken Burns)

- The zoom moves toward the subject. Each photo has a focus point (face centre from Ente's face index, else the saliency centre). The zoom ends with it at 50% across and 42% down, or starts there when zooming out. Edges are never shown.
- Linear easing, and it keeps running 1.4 s past the cut, so nothing stops during a crossfade.
- Max scale: single 1.05, split panes 1.04 (they barely drift, 45% to 55% of their spare room), last photo 1.06 zooming out. Motion should be barely noticed.
- Alternate zoom in and zoom out from photo to photo.

## Transitions

| Name | Where | Numbers |
|---|---|---|
| Crossfade | Default | 700 ms, cubic-bezier(.4,0,.2,1) |
| Blur dissolve | Now and then between singles | 900 ms; outgoing goes to blur 16 + brightness 1.15, incoming comes from blur 10 |
| Blocks in | Into stacked or grid | Position only. Each pane glides in from just past its own edge (top row from the left, bottom row from the right, for stacked and for one big + two small), 1400 ms, expo out = cubic-bezier(.16,1,.3,1): fast off the mark, long soft landing, 80 ms stagger. Nothing dims or scales underneath. Give the new slide its first frames to raster before it moves (pre-decode the photos, keep each pane on its own layer) |
| Blocks out | Leaving a split | Panes carry on out through the opposite side (top row exits right, bottom row exits left), 1200 ms, same expo out cubic-bezier(.16,1,.3,1), uncovering the next photo as it is |
| Pull out | New chapter (new day, year or place) | 1900 ms. Camera pulls back from the photo into a 5×5 wall of the memory's photos (tiles are 60% of the screen, same shape, 10 px gaps, corners grow to 22 px), glides one tile right to the next chapter's photo (others dim to 0.35), pushes in. Keyframes at 0, 36%, 62%, 100%, cubic-bezier(.65,0,.35,1) per segment. Also use it for Up next between memories |
| Quick | Manual tap | 220 ms fade |

**Split in and out: Glide (boss pick 29 Oct, over Sheet, Push and Drift).** Each pane glides in from one side and leaves through the opposite side. The other three are still in the prototype behind `?split=sheet|push|drift` if you want to compare.

## Title and labels

- Title: condensed caps (Oswald 600, 46 px, 0.02em). Comes in 350 ms after the photo: from 14 px lower, blur 6, letter spacing 0.12em to final, 1100 ms, cubic-bezier(.16,1,.3,1). Date follows at +650 ms. Fades out 450 ms before the cut.
- No day or place labels on photos. The title card and end screen carry the only text.

## Timing

Holds of 3.0 to 4.6 s (Apple measured at 2.4 to 4.5 s). Title 4.6 s. A chapter pull-out slide holds 5.4 s, since 1.9 s of it is the move. With music, snap holds to the beat.

## Chrome

- Keep Ente's current placement: top row (52 px, 16 px insets) = close X, title + date with chevron left-aligned, favourite heart right. Bottom row (24 px insets, 48 px buttons spread evenly) = Info, Share, Add to album, Delete. Progress dots sit just above that row. No pause button; hold to pause. The active dot is a 28 px pill that fills over the hold.
- Controls stay on screen like Ente today. Tap right = next, left = back, middle = hide or show controls, hold = pause.

## End screen

Blurred cover photo. Title in serif 46 px with "date · N photos". Under it one rounded bento card (24 px corners, 16 px side margins, 1 : 1.08): two photos on top split 2/3 and 1/3, three equal below, 3 px seams. It rises 28 px from 0.97 scale over 1000 ms, cubic-bezier(.22,1,.36,1), and each photo settles from 1.08 zoom, 90 ms apart. Share memory pill under it. Replay bottom left; Up next bottom right with the next memory's thumbnail and an 8 s fill countdown, then the pull-out into the next memory.

