Split AI Tags by How You Use a Shot in the Edit, Not by What Is in It — 12 Axes Across 4,341 Files
Stuck picking footage for a family video, I rebuilt the tag scheme, and fixed about half of it by eye
I was making a growing-up video from family photos and clips, and most of the time went into picking footage, not editing. There were 4,341 files (3,989 photos, 352 videos, from 2017 to 2026).
The existing tags were all about what's in the shot: kid, food, sea. The questions I actually had while editing were different. Is there a wide landscape shot for the opening? Which shots have empty space for a caption? Can I filter out the blurry ones first?
So I rebuilt the tags around where a shot gets used in the edit. After reading this you'll know which axes make picking footage faster when you AI-tag photos and video, and why you have to check AI tags by eye.
From "what" to "where"
The default categories in photo apps (people, places, things) are for searching. Great for "photos from the beach". When you edit, you search by use instead: "a wide shot I can put a caption on". The two don't overlap, so I kept the defaults and added an editing layer on top.
Every tag is a macOS Finder tag in axis:value form. There are 12 axes. The real tags are in Korean; I've translated them here.
| Axis | Example tags | Where it helps in the edit | How it's decided |
|---|---|---|---|
| Framing | framing:closeup framing:wide |
Rhythm of shot sizes | Height ratio of face and body boxes |
| Position | position:left/center/right |
Transition direction, matching cuts | Face center, saliency area |
| Space | space:top/bottom |
Where captions go | Empty share outside the saliency area |
| Gaze | gaze:front/left/right |
Eyeline matching | Face yaw (left-right turn) |
| Quality | quality:sharp/blurry/dark |
Filter out first | Edge strength, brightness distribution |
| Color and light | color:warm light:night |
Matching grading tone | Mean color, dominant color, capture time |
| Time | season:spring timeofday:evening |
Flow of a day or season | EXIF time |
| Format | format:vertical |
Shorts, Reels | Aspect ratio |
| Video | shot:slowmo length:longtake |
Slow-motion sections | fps, duration |
| Sound | sound:laughter/speech/music |
Shots where the original audio is worth keeping | macOS SoundAnalysis |
| Use | use:opening/ending/caption-bg |
Ready-made candidates | Combination of the axes above |
| Basic | place:sea year:2022 |
What's in it | Vision scene classification |
Use tags are combinations of other axes. use:opening = establishing shot (a wide shot that shows the place) + sharp + landscape orientation. use:caption-bg = wide + empty space at the top or bottom.
Everything ran locally: Vision (faces, bodies, horizon, saliency, scene classification), CoreImage, SoundAnalysis, ffprobe. Not a single external API call. These are family photos, so that was a condition from day one. The result: 9.6 tags per file on average, 88 distinct tags.
About half got fixed by eye
I pulled 14 samples per tag and looked at them myself. Not many of the first rules held up.
| Tag | First rule | Problem | After fixing |
|---|---|---|---|
angle:dutch |
Horizon tilted 8° or more | False hits indoors, mostly photos saved sideways | Dropped |
use:ending |
Afternoon + warm color + landscape | Warm indoor lighting mistaken for golden hour (food photos as ending candidates) | New criteria, 10/14 |
quality:blurry |
Bottom 12% per camera model | Large faces have smooth skin and looked blurry | Exclude large faces |
expression:smile |
Any face smiling | Small faces in the background, statue faces | Only faces at least 50% the size of the largest -> 15/18 |
use:opening |
Landscape label | Food and animals mixed in | Exclude food and animals |
gaze:left/right |
yaw ≠ 0 | Even slightly turned faces | Only absolute yaw of 0.6 or more |
I dropped angle:dutch entirely. It was meant to find tilted compositions, but what it caught were mostly photos stored on their side with no EXIF orientation. I haven't managed to detect those automatically yet.
I haven't sample-checked the space and color axes yet, so I'm not quoting accuracy for them.
Don't wipe existing tags
Some files already had color tags from Finder. Tags live in the file's extended attributes (xattr), so overwriting the whole thing deletes the old ones. I left the originals and appended. After applying, I re-checked all 4,341 files: 0 new tags missing, 0 old tags lost.
Camera movement (pan, tracking, handheld) isn't an axis yet. If I add video analysis, that's the next post.
If you want AI classification on a photo or video archive, or want to organize company material this way, you can ask negabaro (contact).
Key Concepts
Write down the questions you ask while editing (opening, caption space, rejects), then design axes
Make every tag `axis:value` so sorting and combining are easy
Build use tags as combinations of other axes
Check samples per tag by eye; the first rule is usually wrong
Append to existing tags (xattr) instead of overwriting