Framework

A photography workspace that clusters a shoot, ranks what remains against composition and your own keeps, then sequences the frames that belong together.

Type
Web App
Role
Creative Technologist
Built
-
Updated
-
Source
GitHub

Tech stack

  • Next.js
  • React
  • TypeScript
  • AI
  • Computer vision
  • Supabase

The difficult part of photography isn’t taking 500 photographs. It’s knowing which five matter.

Which five frames belong.

framework.chiradeep.me
framework.chiradeep.me

The card is full

  • Duplicates.
  • Soft frames.
  • The same moment, three ways.
  • Two different pictures in one folder.

Taking the photograph got cheap. Deciding which one belongs in the edit did not. Framework starts when the card comes out of the camera.

It clusters, then ranks, then waits. A sharp frame is a fact. Whether it is the frame is the photographer’s call, and the software is not allowed to collapse those into one number.

Signals stay separate

Technical quality, visual structure, and what the picture is of are different questions. Sharpness, exposure, composition, color, people, architecture. None of them is allowed to collapse into one quality score.

lib/vision/signals.ts
type FrameSignals = {  technical: {    sharpness: number    exposure: number    blur: number  }  visual: {    composition: string    color: string    contrast: string  }  subject: string[]} // No single score. A recommendation is a set of reasons.

The keep is the training signal

A generic model can prefer the sharper frame. The photographer may keep the other one. That choice is the data.

Recommendation, decision, preference, a more personal next recommendation. Explanations stay attached, so the model is not pretending the choice was objective.

Recommendation
    ↓
Photographer keeps or rejects
    ↓
Preference signal
    ↓
A more personal next pass

Sequence after the edit

Ranking is not a story. After the shortlist, frames are arranged for continuity, color, subject, and pace. The contact sheet, the reject pile, and the comparison view exist so that sequence has something real to follow.

The hard part

Taste is not a score

The hard question was whether software can learn a photographer’s eye without announcing that the eye is objective. A technically imperfect frame is often the one that matters.

Solution

Recommendations are decision support. Signals stay separate. The keep, not a generic grade, is what the model is allowed to learn.

Trade-offs

DecisionChoiceWhy
QualitySeveral signalsTechnical quality and artistic value are not the same fact.
TasteLearn from keepsA universal photography score is someone else’s eye.
VolumeCluster, then rankHundreds of frames start as groups, not a single sort.
StorySequence after selectionA gallery is not a leaderboard.

What I’d change

  • A RAW-native path, and a way through Lightroom.
  • Stronger personal embeddings.
  • Collaborative curation, and publishing a sequence as a gallery.

In the edit

Why isn’t there a score out of ten?

A technically clean frame and the frame you would print are often different pictures. Sharpness, subject, and composition stay listed beside each other. The recommendation is those reasons, written out.

Does it sequence the whole card?

Only after the cut. Continuity, color, and pace are arranged from the frames that were kept. A contact sheet of five hundred is not a story.

Whose eye is it learning?

Yours. If the model prefers the sharper frame and you keep the other one, that choice is the training signal. A universal “good photograph” is someone else’s taste.

Have an idea...

Have something to build.