diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/update.rb | 26 |
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 |
