This is an old revision of the document!
Table of Contents
_Uncertain Reclassification Workflow Guide
Generated on: 2026-02-23 04:00:02
Overview
This document describes a safe and extensible workflow for reclassifying files from the _Uncertain folder without modifying original SHA-256 hashes.
Core principles:
- SHA-256 original file list remains untouched
- Files are never edited (no EXIF rewrite, no re-save)
- Reclassification is handled via external override records
- Designed to support future expansion (albums, people, places)
Step 0 -- Create Operational Folders
Create:
PhotoVault_ops
PhotoVault_ops\reclass{=tex}
PhotoVault_ops\notes{=tex}\
These folders store operational metadata only.
Step 1 -- Export _Uncertain List
$unc = "PhotoVault\Media\_Uncertain" Get-ChildItem $unc -File -Recurse | Select-Object FullName, Name, Length, LastWriteTime | Export-Csv "PhotoVault\_ops\reclass\uncertain_review.csv" -NoTypeInformation -Encoding UTF8
Step 2 -- Manual Review
Open uncertain_review.csv in Excel.
Add two columns:
- year_final
- note
Fill only confident cases.
Save as:
PhotoVault_ops\reclass{=tex}\uncertain{=tex}_review_done.csv
Step 3 -- Create Year Override File
$in = "PhotoVault\_ops\reclass\uncertain_review_done.csv" $out = "PhotoVault\_ops\reclass\year_override.tsv" Import-Csv $in | Where-Object { $_.year_final -match '^\d{4}$' } | ForEach-Object { $h = (Get-FileHash $_.FullName -Algorithm SHA256).Hash "{0}`t{1}`t{2}`t{3}" -f $h, $_.year_final, (Get-Date -Format "yyyy-MM-dd"), ($_.note -replace "`t"," ") } | Set-Content $out -Encoding UTF8
Format:
sha256<TAB>{=html}year_final<TAB>{=html}date<TAB>{=html}note
Step 4 -- Move Files to Year Folder
$in = "PhotoVault\_ops\reclass\uncertain_review_done.csv" $rootMedia = "PhotoVault\Media" $log = "PhotoVault\_ops\reclass\move_log.tsv" Import-Csv $in | Where-Object { $_.year_final -match '^\d{4}$' } | ForEach-Object { $src = $_.FullName $yy = $_.year_final $dstDir = Join-Path $rootMedia $yy if (!(Test-Path $dstDir)) { New-Item -ItemType Directory -Path $dstDir | Out-Null } $dst = Join-Path $dstDir $_.Name if (Test-Path $dst) { $h8 = (Get-FileHash $src -Algorithm SHA256).Hash.Substring(0,8) $dst = Join-Path $dstDir ("{0}_{1}" -f $h8, $_.Name) } Move-Item -LiteralPath $src -Destination $dst "{0}`t{1}`t{2}`t{3}" -f (Get-Date -Format "yyyy-MM-dd HH:mm:ss"), $src, $dst, "moved" | Add-Content $log -Encoding UTF8 }
Optional -- Future Annotation File
Create:
PhotoVault_ops\notes{=tex}\annotations{=tex}.tsv
Format:
sha256<TAB>{=html}key<TAB>{=html}value<TAB>{=html}date
Example:
AAA… place Jeju Seongsan 2026-02-23 AAA… people Mom;Dad 2026-02-23
This allows future expansion to albums, people, places without changing the core index.
Operating Loop
- Review
_Uncertain - Fill
year_final - Generate
year_override.tsv - Move files
- Repeat until
_Uncertainshrinks
Design Philosophy
- Files are immutable objects
- SHA-256 is permanent identity
- Reclassification is metadata
- Albums and annotations are relationship layers
End of document.
