Photo Version Control: How to Find the Current Edit
Why the current edit shouldn't live in a filename — and what to track instead
A single client photo can pass through four pairs of hands before it ships: the photographer who edits it, the retoucher who touches it up, the client who marks it up, and the approver who signs off. That's four handoffs, and if each one saves its own copy the way most tools default to, you end up with four files that could each plausibly be called "the current one." Naming one of them final doesn't settle the question — it just adds a fifth file to argue about.
This isn't a discipline problem you fix by asking people to be more careful with filenames. It's a version-control problem, and it has the same shape whether you're a solo wedding shooter or a five-person creative team: someone needs a single, unambiguous answer to "which file is current," and a filename typed by a tired human at 11pm is not going to reliably be that answer.
Why v2_FINAL_final.jpg happens to every workflow eventually
The filename-as-version-control pattern isn't a mistake anyone makes on purpose. It's what happens by default when a tool has no other place to record status. You export a round of edits, you call it wedding_v1.jpg. The client asks for two changes, you export again — wedding_v2.jpg. They approve it, but then remember one more thing three days later. Now what do you call the file: wedding_v3.jpg? wedding_v2_final.jpg? Six months later, when the album vendor asks for the approved images, the answer is buried in an email thread, not in the filename.
The underlying issue is that a filename can only encode one thing at a time — usually a sequence number — while "which file is current" actually depends on three separate facts: which version was produced most recently, which version was reviewed most recently, and which version was approved. Those three don't always point to the same file. A photographer can produce v3 while the client has only reviewed v2 and approved v1. A filename has no way to hold all three states at once, so whichever one gets typed into the name wins — and it's usually wrong for at least one of the three questions.
The moment two people can each look at a folder and give a different honest answer to "which one is current," the filename has already failed as a version-control system — no amount of extra typing (_ACTUALLY_final,_use_this_one) fixes that, because the problem was never the word choice.
Where 'current' actually breaks: four handoff points
Version confusion doesn't happen randomly across a project — it clusters at specific handoffs, and each one breaks a different way.
- Photographer to retoucher. The retoucher works from whatever file was last exported, which may not be the file the client most recently commented on. Their edits land on the wrong base image.
- Retoucher back to photographer. The retoucher's output needs a name and a place, and if it goes into the same folder as everything else, it's now indistinguishable from a draft unless something marks it as reviewed.
- Photographer to client. The client sees a gallery link or an attachment, gives feedback, and that feedback needs to attach to the exact frame they saw — not to "the wedding photos" as a category. Generic feedback on a specific version is a common source of the wrong edit getting revised.
- Client to approver. On team or agency work, the person giving feedback and the person with authority to approve are often different people. A client contact can love a version their creative director later rejects, and if that rejection doesn't overwrite the "approved" status visibly, both versions keep circulating.
Each of these is a place where a status — draft, in review, approved, delivered — needs to travel with the file, not live in a person's memory or a Slack message that scrolls away. Teams that track approval status in a general-purpose tool instead of an image-aware one run into this directly; see our breakdown of using Notion or Airtable for photo approval tracking for where a spreadsheet-style tracker keeps up and where it stops working at the image level.
A four-state model that replaces the filename as the source of truth
The fix isn't a better naming scheme — it's moving version status off the filename entirely and onto a field that updates in place. Four states cover almost every photo workflow:
| State | Who can move it here | What it means |
|---|---|---|
| Draft | Photographer / retoucher | Not yet shown to the client or reviewer |
| In review | Photographer | Sent for feedback, waiting on a response |
| Approved | Client or named approver | Signed off — this is what gets delivered |
| Superseded | System, automatically | A newer version replaced this one; kept for reference, not for delivery |
The key property of this model is that the file itself never has to be renamed to reflect its state. The status is metadata attached to the file, so "which one is current" has exactly one answer at any moment: whichever version carries the Approved state, or — if nothing has been approved yet — whichever one is In review. Nobody has to remember; the system can just answer the question when asked.
This is the same reasoning that pushes larger teams toward a proper digital asset management layer. If you're weighing whether your team actually needs one or whether a lighter approval workflow covers it, we cover that trade-off directly in do you need a DAM, or just an approval workflow — the short version is that a four-state model like this one is usually enough until you're managing reuse across many campaigns, not just approval on a single shoot.
Naming conventions that survive a handoff (without the word 'final')
Even with status tracked separately, files still need names — for exports, for backups, for the moments a file leaves your system entirely (a print lab, a stock delivery, an offline archive). The rule that keeps a filename useful without pretending to be a status field: encode facts that don't change, not facts that do.
Status-in-filename
wedding_v2_final.jpgwedding_v3_final_final.jpgwedding_USE_THIS_ONE.jpg- Breaks the moment a later edit happens
- No record of who approved it or when
Fact-in-filename
smith-wedding_0142_v3.jpg- Client + shoot + frame number + sequence — none of which change after export
- Status (draft / approved / delivered) lives in the tracking system, not the name
- A new export gets a new sequence number; old ones aren't touched
Notice what's missing from the right-hand column: the word "final" doesn't appear anywhere. That's deliberate. "Final" is a claim about status, and status is exactly the thing that changes — sometimes after a client remembers one more note three days post-approval. A frame number and a sequence number never lie, because they never had an opinion to begin with.
Keep the sequence number even after a version is superseded. Don't reuse v2 for a different edit later in the project — a sequence number that's been retired should stay retired, so any old link, comment, or email that references _v2 still points at one unambiguous file.
A worked example: one photo, four exports, one approved
Walk one frame through a real revision cycle and the four-state model stops being abstract. Say a corporate headshot goes out for review on a Monday.
Export 1 (v1) goes out Monday morning, status In review. The subject asks for softer retouching on Tuesday — that feedback attaches to v1 specifically, not to "the headshot" generically, so the retoucher knows exactly which file and which note to act on.
Export 2 (v2) ships Tuesday afternoon with the requested change. v1 automatically flips to Superseded — it's still sitting in the history if anyone needs to compare, but nothing points a retoucher, a client, or an automated delivery job back at it. HR, reviewing separately, asks for a color correction on v2 Wednesday.
Export 3 (v3) addresses that note. The subject approves v3 Wednesday afternoon. Status: Approved. At this point, three exports exist, two are Superseded, and exactly one — v3 — is the file every downstream system should pull: the delivery gallery, the HR system, the print vendor.
Export 4 shows up two weeks later, when the subject changes their mind about the crop for a conference bio. It doesn't overwrite v3's record — it becomes a new version with its own review cycle, and v3 stays the approved-and-delivered file of record until v4 clears its own approval. Four exports, one unambiguous current file at every point in the timeline, and a full history of who asked for what and when — none of it stored in a filename.
Making 'current' a system fact, not a memory
The teams that stop having this problem share one habit: they treat "what's current" as a question the system answers, not a question a person has to hold in their head. In practice that means three things happening automatically, without anyone remembering to do them by hand.
First, a new export doesn't overwrite or rename the previous one — it creates a new version and marks the old one superseded, so the review history stays intact even after the file everyone's looking at has changed. Second, feedback attaches to the specific version it was given on, so a comment made on v2 doesn't silently get read as applying to v3 once a new export lands. Third, approval is a single action taken by one named person on one specific version — not a status that gets inferred from an email that said "looks good" three replies deep in a thread about something else.
The most common failure isn't a missing naming convention — it's a review tool that lets feedback exist independent of a version. If a client can leave a comment on "the gallery" instead of on frame 0142 version 3 specifically, that comment will eventually get applied to the wrong export. Any fix that doesn't tie feedback to an exact version is treating the symptom, not the cause.
None of this requires enterprise software. It requires a review process where status and version are tracked as data rather than typed into filenames by hand — which is a smaller ask than it sounds like, and the payoff is that "which one is current" stops being a question anyone on the team has to answer from memory.
Frequently asked questions
What's the difference between version control and file naming for photos?
File naming is just a label on a file; version control is a system that tracks the relationship between versions — which one is newest, which one was reviewed, which one was approved, and what replaced what. A good naming convention makes files identifiable, but it can't answer "which one is current" on its own, because that answer changes over time and a filename typed at export time can't update itself later.
Should I include the word 'final' in a photo filename?
No. 'Final' describes a status, and status is exactly what changes after a client asks for one more revision. Use filenames for facts that don't change — client name, shoot, frame number, export sequence — and track approval status separately, wherever your team records who signed off and when.
How do I stop a retoucher from editing the wrong version of a photo?
Make sure the version a retoucher pulls is the one currently marked approved-for-edit or in-review, not just the most recently modified file in a shared folder. If your handoff process relies on the retoucher guessing which export is current from a filename or a folder's sort order, that's the exact point where the wrong version gets picked up.
Do I need dedicated software to manage photo versions, or can I use folders?
A folder structure can work for a solo photographer on simple shoots, as long as every export gets a new, never-reused sequence number and approval status is recorded somewhere outside the filename — even a simple log. It stops working once more than one person needs to know the current status without asking, which is the point most teams move to a tool that tracks version and approval state directly on the image.