it looks like iNat gets all image metadata tags, except those from a selected list: https://github.com/inaturalist/inaturalist/blob/main/lib/exif_metadata.rb#L5-L30
then it translates certain tags to fields in the observation:
https://github.com/inaturalist/inaturalist/blob/main/app/models/local_photo.rb#L323-L410
it looks like the translations include:
- coordinates (from
gps_latitude
andgps_longitude
, making use of information fromgps_latitude_ref
andgps_longitude_ref
) - positioning error (from
gps_h_positioning_error
) - observation time (from
date_time_original
ordate_time_digitized
) - taxon (from subject tags or
dc:title
) - observation description / notes (from
dc:description
orimage_description
) - observation fields (from subject tags)
- observation tags (from subject tags)
here’s a post that describes an example of one person’s tags and how they were translated (including taxon and observation fields): https://forum.inaturalist.org/t/web-uploader-not-recognizing-scientific-binomials-or-gps-data-in-photo-metadata/37243/7
it didn’t turn up in my quick code search, and i didn’t test it, but i think certain subject tags that match certain terms (https://github.com/inaturalist/inaturalist/blob/main/app/models/controlled_term.rb#L47-L65) will also get turned into observation fields, even if you don’t use the [observation field name]=[observation field value]
syntax.
also, i didn’t get super deep into the code, but superficially, it looks to me like the subject tags can come from both the image metadata and the image filename. so as a result, you should be able to set, say taxon name, by adding it as an underscore-separated value in the filename. (or maybe there’s a separate mechanism for that functionality.)