---
name: "photo_dump_curation"
description: "Curate photo dumps and profile grid sets that read as one story: find the colour, subject, or place thread in a mixed camera roll, score the selection, sequence wide to medium to tight, pair a short caption, write per-frame alt text, and preview the feed and grid crops before posting. Use when someone asks for a photo dump, a dump caption, help picking or ordering photos for a carousel, or help planning a set of posts that has to sit together on a profile grid."
---

# Photo Dump Curation

## Purpose

Turn a camera roll into a set that reads as one stretch of life, not
as a spill. A photo dump looks casual on purpose. The work behind it
is selection and order: one thread, no repeated frames, a strong
opener, and a closer that earns the last swipe.

This skill is world neutral and platform aware. The method works for
any subject and any account. The hard numbers in it are Instagram
numbers, because the dump is an Instagram carousel format first.
When the target is another app, keep the method and check that app's
composer for its own cap and ratio before exporting.

Facts here come from Instagram Help Center wording and Meta
developer documentation, as cited in
[references/specs_and_sequencing.md](references/specs_and_sequencing.md).
The scoring weights are this skill's own method, stated as method,
not as a platform rule or a published standard.

## Workflow

### 1. Name the set before touching the photos

- Write one line naming the set: the time span, the place, or the
  project, plus the feeling it should leave. "First week of October,
  market mornings, the light going early" is a brief. "Some photos
  from lately" is not.
- Fix the posting route now, because it sets the ceiling. In the
  Instagram app a carousel holds up to 20 photos and videos
  combined. Through the Meta API or a scheduler that uses it, the
  cap is 10 items and the ratio range is tighter. A set planned for
  a scheduler gets built to 10 frames or fewer from the start.
- Decide dump or grid set. A dump is one carousel post. A grid set
  is several separate posts planned to sit together on the profile.
  They share selection rules and differ in sequencing and preview,
  covered in steps 5 and 7.

### 2. Dump the roll into a manifest, then rate honestly

- List every candidate frame in a manifest JSON file. Per frame:
  file, role, quality from 0 to 100, tags for subjects and places,
  and a duplicate group name for near-duplicate frames. Use the
  manifest shape in
  [references/worked_sets.md](references/worked_sets.md).
- Use these roles: wide (the place), medium (a person or subject in
  the place), portrait (a person as the point), tight (a close
  frame), detail (an object that carries meaning), food, funny,
  text (a screenshot or sign), other.
- Rate quality as the frame's strength as a photograph in this set,
  not as a memory. A frame you love because you were there can
  still be a 55. Inflated ratings produce a good score and a weak
  post.
- Group near-duplicates at this stage, while the roll is in front
  of you. Two frames of the same moment are one choice, not two
  slots.

### 3. Find the one thread

- Look for the thread the roll already contains, in this order:
  colour first (one hue family recurring across frames), then
  subject (one person, animal, object, or project recurring), then
  place, then time alone. Time is the weakest thread, so a time set
  should lean on one of the other three whenever it can.
- State the thread in the manifest: a hue in degrees for a colour
  thread, or a tag word for a subject or place thread.
- Allow one break frame: a single frame outside the thread, placed
  in the middle or at the end, that gives the set contrast. A break
  frame as the opener breaks the thread before the reader learns
  it.
- If no thread covers at least half the candidate frames, the roll
  holds two sets, not one. Split it now.

### 4. Select by score, not by attachment

- Run the scorer on the manifest:
  `python3 scripts/dump_score.py manifest.json`
  It scores thread strength out of 30, role diversity out of 25,
  frame quality out of 20, and sequence rhythm out of 25, rescaled
  to 100 over the parts it could score. It fails sets over the
  20 frame cap, sets with a file placed twice, and sets where the
  order and the photo list disagree.
- Cut in this order until the warnings clear or you can name why
  one stays: near-duplicates first (keep the stronger frame),
  frames that carry no thread and explain nothing, frames that
  repeat a role already covered at the same moment, then the
  weakest remaining frame.
- Cover the three distances: at least one wide, one frame with a
  person in it, and one tight or detail frame. A set missing one
  of the three feels flat in a way readers sense and cannot name.
- Treat 80 and up as ready, 60 to 79 as workable with named
  warnings, and under 60 as reselect or resequence. Do not pad a
  set back up to look fuller. A tight four frames beat a loose
  nine, as the rescue set in the worked examples shows.
- A warning can stay when you can state the reason in one sentence,
  such as a closing wide kept as a bookend to the opener. A warning
  you cannot explain is a cut waiting to happen.

### 5. Sequence the set

- Put the strongest frame first. It has to work as a single post,
  because for a carousel it is also the only frame the profile
  grid ever shows.
- Follow the rhythm: wide to medium to tight, then vary. Never
  three frames in a row at the same distance. Put the second
  strongest frame at position 2 or 3.
- Bridge hard cuts with a match: same colour, same shape, same
  direction of movement, a repeated gesture, or a light change.
- Place the funny or imperfect frame in the middle or late. Early,
  it sets the wrong expectation for the whole set.
- End on something small: a detail, a tight frame, or the funny
  frame. The one exception is the bookend, a closing wide that
  mirrors the opener in place or colour, used for trip sets.
- Keep chronology when time is the thread. Break it only for a
  match bridge, and never so far that the reader loses which day a
  frame belongs to.
- For a grid set, sequence in posting order and remember the grid
  displays newest first. The scorer checks a grid set the same
  way, but the preview in step 7 is the check that matters.

### 6. Set one ratio and export once

- Build every frame at one ratio. Default to 1080 x 1350 px (4:5):
  it works in the app, in schedulers, and through the API.
- Use 1080 x 1440 px (3:4) only when publishing in the app itself
  and the profile grid look matters, because 3:4 matches the
  current grid tile exactly and phone photos often arrive at 3:4.
- Keep the subject and any text inside the middle band of the
  frame. The grid centre crops a 4:5 frame to 3:4, trimming about
  34 px from each side of a 1080 px wide export.
- Export sRGB, at the canvas size. Wider than 1080 px gets scaled
  down on upload anyway, and non sRGB colour gets converted on API
  upload, sometimes unkindly.

### 7. Preview both surfaces before posting

- Run the preview for a dump:
  `python3 scripts/grid_preview.py manifest.json --mode carousel --out preview.html`
  It shows the swipe strip at 4:5 in posting order, then the single
  3:4 grid tile the profile shows, which is the first slide only.
- Run it for a grid set:
  `python3 scripts/grid_preview.py manifest.json --mode grid --out preview.html`
  It reverses the posting order into display order and tiles the
  posts three to a row at 3:4, with a note when the count does not
  fill whole rows.
- Open the HTML and check three things at phone size: the opener
  still reads after the 3:4 crop, no row or column in a grid set
  puts two similar colours or two faces side by side by accident,
  and no frame loses its subject to a crop.
- Fix order problems in the manifest and rerun both tools. Fix crop
  problems by recentring the frame, not by changing the ratio of
  one frame in the set.
- For a grid set, post in the planned order in one sitting when
  you can, so no unrelated post lands inside the set on the grid.

### 8. Pair the caption and write the alt text

- Write the caption after the order is locked. First line names the
  thread and the time span. Then one specific line: a real place, a
  real day, the thing that went wrong. Stop there unless a frame
  needs explaining.
- Do not retell every frame in the caption, and do not number the
  frames unless one of them needs context the image cannot give.
- Write alt text per frame: subject, setting, and action in one or
  two sentences, no "image of" opener, visible text included. The
  caption is not alt text, and alt text is not a second caption.
- Add the alt text where the platform keeps it: on a new Instagram
  post, under Advanced Settings, Accessibility, Write Alt Text,
  with one slot per frame in a carousel. On a published post, Edit,
  then Edit Alt Text.
- Read the caption aloud once and swipe the exported set once, in
  order, before it goes up. Order cannot be counted on to be
  fixable after posting, so the last check happens before.

## Output Contract

Deliver, in this order:

- The one line set brief: time span or place or project, plus the
  thread and its type.
- The manifest JSON used, with file, role, quality, tags, and alt
  text per frame, and the final order.
- The scorer report: total score, the four part scores, and every
  FAIL and WARN line, each either fixed or kept with a one sentence
  reason.
- The selected set as a numbered list: position, file, role, and
  the job that frame does in the set.
- The frames cut, in one short list, with the reason per frame:
  duplicate, off thread, repeated role, or weakest remaining.
- The preview result: which mode was run, what the 3:4 grid view
  showed, and any crop or row problem found and fixed.
- The export spec used: ratio, pixel size, frame count, and the
  publishing route it was built for.
- The caption as written, followed by the per-frame alt text list.

## Operating Rules

- World neutral: the method never assumes a subject, a place, a
  fandom, or a house style. Threads come from the roll in front of
  you, not from a template pack.
- One set, one thread. A request covering two weeks, two trips, or
  two projects ships as two sets, decided with the user.
- Never invent engagement numbers, reach claims, or algorithm rules
  for dumps or carousels. The platform cap and the crop figures are
  the only numbers this skill states as platform fact.
- The scorer is a check, not a judge. A high score on inflated
  quality ratings means nothing, and a warning with a stated reason
  can be the right call. Say which warnings were kept and why.
- Casual is the look, not the method. If a set was built by
  selecting everything and shuffling, say so and rebuild it.
- Nothing in a frame gets cropped silently. If a crop removes a
  person, a sign, or the point of the frame, that frame is
  recentred, replaced, or cut, and the delivery notes say which.
