changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "analysis": {
+ "description": "Metadata analysis of the uploaded image.",
+ "properties": {
+ "camera_info": {
+ "description": "Camera make/model/software and capture settings, or null when no camera fields are present.",
+ "properties": {
+ "make": {
+ "description": "Camera manufacturer (EXIF Make).",
+ "type": "string"
+ },
+ "model": {
+ "description": "Camera model (EXIF Model).",
+ "type": "string"
+ },
+ "settings": {
+ "description": "Capture settings when present.",
+ "properties": {
+ "aperture": {
+ "description": "Aperture, e.g. f/2.8.",
+ "type": "string"
+ },
+ "exposure_time": {
+ "description": "Exposure time as stored in EXIF.",
+ "type": "string"
+ },
+ "focal_length": {
+ "description": "Focal length as stored in EXIF.",
+ "type": "string"
+ },
+ "iso": {
+ "description": "ISO speed, e.g. ISO 100.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "software": {
+ "description": "Capturing/editing software (EXIF Software).",
+ "type": "string"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "exif_data": {
+ "additionalProperties": true,
+ "description": "Map of human-readable EXIF field names (e.g. Camera Make, Camera Model, Date Taken, F-Number, ISO Speed, Focal Length, Orientation, Software) to values. Date and Exposure Time/Focal Length fields expand to objects with raw/formatted sub-fields. Empty object when no EXIF is found.",
+ "type": "object"
+ },
+ "file_info": {
+ "description": "Basic file facts.",
+ "properties": {
+ "mime_type": {
+ "description": "Detected MIME type.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Original client filename of the upload.",
+ "type": "string"
+ },
+ "size": {
+ "description": "File size in bytes.",
+ "type": "integer"
+ },
+ "size_formatted": {
+ "description": "Human-readable size, e.g. 2.31 MB.",
+ "type": "string"
+ },
+ "supported": {
+ "description": "True only for image/jpeg or image/tiff (formats that can carry EXIF).",
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+ },
+ "gps_data": {
+ "description": "GPS location, or null when the image has no GPS tags.",
+ "properties": {
+ "altitude": {
+ "description": "Altitude, or null when absent.",
+ "properties": {
+ "feet": {
+ "description": "Altitude in feet.",
+ "type": "number"
+ },
+ "meters": {
+ "description": "Altitude in metres.",
+ "type": "number"
+ },
+ "reference": {
+ "description": "Above sea level or Below sea level.",
+ "type": "string"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "has_location": {
+ "description": "True when latitude or longitude was resolved.",
+ "type": "boolean"
+ },
+ "latitude": {
+ "description": "Decimal degrees latitude (negative for South), 6 dp.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "longitude": {
+ "description": "Decimal degrees longitude (negative for West), 6 dp.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "raw_data": {
+ "additionalProperties": true,
+ "description": "Raw EXIF GPS tag array as returned by the parser.",
+ "type": "object"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "privacy_concerns": {
+ "description": "Privacy findings (GPS location, artist/author, copyright, serial number, software).",
+ "items": {
+ "properties": {
+ "category": {
+ "description": "Finding category, e.g. Location Privacy.",
+ "type": "string"
+ },
+ "message": {
+ "description": "Human-readable explanation.",
+ "type": "string"
+ },
+ "type": {
+ "description": "Severity: warning or info.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "recommendations": {
+ "description": "Plain-text scrubbing/sharing recommendations.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "success": {
+ "description": "True when the image was accepted and parsed; false on missing file or parse error (with an error message).",
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+}