summaryrefslogtreecommitdiffstats
path: root/scripts/update.rb
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/update.rb')
-rw-r--r--scripts/update.rb26
1 files changed, 20 insertions, 6 deletions
diff --git a/scripts/update.rb b/scripts/update.rb
index 9052341..0b052ba 100644
--- a/scripts/update.rb
+++ b/scripts/update.rb
@@ -80,15 +80,29 @@ end
# ── Metadata enrichment ────────────────────────────────────────────────────────
def enrich_image(full, name, meta)
- # EXIF date (skip if already recorded)
- if meta['taken_at'].nil?
+ needs_exif = meta['taken_at'].nil? || meta['camera'].nil? ||
+ meta['aperture'].nil? || meta['shutter'].nil? || meta['iso'].nil?
+ if needs_exif
begin
exif = MiniExiftool.new(full, numerical: false)
- raw = exif.date_time_original || exif.create_date || exif.date_time
- if raw
- meta['taken_at'] = raw.respond_to?(:strftime) ? raw.strftime('%Y-%m-%dT%H:%M:%S') : raw.to_s
- puts " #{name}: taken_at = #{meta['taken_at']}"
+
+ if meta['taken_at'].nil?
+ raw = exif.date_time_original || exif.create_date || exif.date_time
+ if raw
+ meta['taken_at'] = raw.respond_to?(:strftime) ? raw.strftime('%Y-%m-%dT%H:%M:%S') : raw.to_s
+ puts " #{name}: taken_at = #{meta['taken_at']}"
+ end
+ end
+
+ if meta['camera'].nil?
+ make = exif.make.to_s.strip
+ model = exif.model.to_s.strip
+ cam = model.downcase.start_with?(make.downcase) ? model : [make, model].reject(&:empty?).join(' ')
+ meta['camera'] = cam.empty? ? nil : cam
end
+ meta['aperture'] ||= exif.f_number ? "f/#{exif.f_number}" : nil
+ meta['shutter'] ||= exif.exposure_time&.to_s
+ meta['iso'] ||= (exif.iso_speed_ratings || exif.iso)&.to_i
rescue StandardError => e
warn " #{name}: EXIF error — #{e.message}"
end