Evals / image / Metadata and privacy
Where was this taken
Where was DSCN0010.jpg taken? Write the latitude and longitude as decimal degrees to place.txt, one per line.
The task
The reference answer shows the job can be done with deft. It is not an agent run.
(none)
Input

Reference output
How a result is judged (1 check)
- python: code = "v = [float(x) for x in open('place.txt').read().split()]; assert abs(v[0] - 43.47) < 0.1 and abs(v[1] - 11.88) < 0.1, v"
Runs
CodexWithout deftPassed2026-11-07
- Time
- 16s
- New tokens
- 4.5k
- Total input
- 81.4k
- Output tokens
- 0.5k
- Commands
- 5
- Failed
- 1
Trace
I’ll inspect the image’s metadata and, if needed, use visual clues to identify the location, then write the coordinates to `place.txt` in the current directory.
rg --files -g 'DSCN0010.jpg' -g 'AGENTS.md' -g 'place.txt'output
DSCN0010.jpg
exiftool DSCN0010.jpg (exit 127)output
zsh:1: command not found: exiftool
python3 -c 'from PIL import Image; im=Image.open(\"DSCN0010.jpg\"); print(im.size); print(im.getexif())'output
(640, 480) {296: 2, 282: 300.0, 34853: 926, 34665: 268, 270: ' ', 271: 'NIKON', 272: 'COOLPIX P6000', 305: 'Nikon Transfer 1.1 W', 274: 1, 306: '2008:11:01 21:15:07', 531: 1, 283: 300.0}python3 -c 'from PIL import Image; im=Image.open(\"DSCN0010.jpg\"); ex=im.getexif(); print(ex.get_ifd(34853))'output
{1: 'N', 2: (43.0, 28.0, 2.814), 3: 'E', 4: (11.0, 53.0, 6.45599999), 5: b'\x00', 7: (14.0, 27.0, 7.24), 8: '06', 16: '\x00', 18: 'WGS-84 ', 29: '2008:10:23'}python3 -c 'from pathlib import Path; Path(\"place.txt\").write_text(\"43.4674483\\n11.8851267\\n\")'`place.txt` now contains: ```text 43.4674483 11.8851267 ``` These coordinates were converted from the image’s embedded GPS metadata.
Output
43.4674483 11.8851267
CodexWith deft, skill installedPassedRead the skillUsed deft2026-11-07
- Time
- 18s
- New tokens
- 6.1k
- Total input
- 101.8k
- Output tokens
- 0.5k
- Commands
- 6
- Failed
- 1
Trace
I’ll inspect the image’s metadata and, if it doesn’t include GPS coordinates, use the image itself to identify the location. Then I’ll write the coordinates to `place.txt` in the current directory.
cat .agents/skills/deft/SKILL.md && rg --files -g 'DSCN0010.jpg' -g 'AGENTS.md' -g 'place.txt'output
--- name: deft description: "Use deft first for any simple, direct operation on local files, whatever the type: convert, read, extract, edit, compress, merge, split, compare or inspect. Try it before writing a script or one-liner. If unsure, run deft find; if it says no command does this, use another tool. Not for programming work: to read, write or change source code, skip it." --- # deft One local command for file jobs. Prefer it over writing Python or shell scripts. Syntax: `deft <group> <command> [inputs] [-o output] [--options]` Groups: - `pdf`: Merge, split, compress, encrypt, forms, OCR, compare, convert - `image`: Resize, crop, convert, compress, filters, montage, OCR - `video`: Trim, crop, speed, convert, compress, GIF, frames (ffmpeg) - `audio`: Convert, trim, merge, fade, speed, tag, normalize (ffmpeg) - `doc`: Word/ODT/RTF: to text, Markdown, HTML, PDF; find and replace - `slides`: PowerPoint: extract text, Markdown outline, PDF handout - `data`: JSON/YAML/TOML/XML: convert, query with jq syntax, merge, diff - `sheet`: Excel/CSV/ODS tables: filter, sort, join, pivot, convert - `md`: Markdown to PDF, HTML, Word, EPUB; table of contents - `html`: HTML to Markdown, text, Word, PDF; screenshots - `epub`: E-books: info, to text, Markdown and PDF - `email`: EML files: headers, text, attachments - `contact`: VCF address books: to and from CSV - `calendar`: ICS calendars: to and from CSV - `gps`: GPX and KML tracks: convert, distance and time - `youtube`: Info, downlo … 862 more characters
deft find "read image EXIF metadata GPS coordinates"output
image meta image -> image Read EXIF, or set --title --author --copyright --date image strip image -> image Remove EXIF, GPS and text metadata image info image -> report Format, dimensions, EXIF orientation, GPS video strip video -> video Remove metadata; no re-encode
deft image info DSCN0010.jpgoutput
ok image.info DSCN0010.jpg 640x480 width=640 height=480 orientation=1 has_metadata=true has_gps=true
deft image meta --help && exiftool -GPSLatitude -GPSLongitude -n DSCN0010.jpg (exit 127)output
deft image meta - Read EXIF, or set --title --author --copyright --date Usage: deft image meta <image>... [-o <image|dir>] [options] In: image (each handled separately) Out: image (default <name>.meta.<ext>) With no options it prints every tag, with GPS as decimal degrees. With options it writes a copy; pixels are untouched. Remove tags with image strip. Options: --title <text> Description --author <text> Artist --copyright <text> Copyright notice --comment <text> User comment --date <text> When taken: 2026-05-01 12:30:00 Common: -o --force --dry-run --json -j (deft help common) Examples: deft image meta photo-1.jpg --author Ada --copyright 'CC BY' -o signed.jpg Result fields: tags zsh:1: command not found: exiftool
deft image meta DSCN0010.jpgoutput
ok image.meta DSCN0010.jpg 54 tags Make=NIKON Model="COOLPIX P6000" Orientation="row 0 at top and column 0 at left" XResolution="300 pixels per inch" YResolution="300 pixels per inch" ResolutionUnit=inch Software="Nikon Transfer 1.1 W" DateTime="2008-11-01 21:15:07" YCbCrPositioning=centered ExposureTime="1/75 s" FNumber=f/5.9 ExposureProgram="normal program" PhotographicSensitivity=64 ExifVersion=2.2 DateTimeOriginal="2008-10-22 16:28:39" DateTimeDigitized="2008-10-22 16:28:39" ComponentsConfiguration=YCbCr_ ExposureBiasValue="0 EV" MaxApertureValue="2.9 EV" MeteringMode=pattern LightSource=unknown Flash="not fired, no return light detection function, suppressed" FocalLength="24 mm" FlashpixVersion=1.0 ColorSpace=sRGB PixelXDimension="640 pixels" PixelYDimension="480 pixels" InteroperabilityIndex=R98 InteroperabilityVersion=1.00 FileSource="digital still camera" SceneType="directly photographed image" CustomRendered="normal process" ExposureMode="auto exposure" WhiteBalance="auto white balance" DigitalZoomRatio=unused FocalLengthIn35mmFilm="112 mm" SceneCaptureType=standard GainControl=none Contrast=normal Saturation=normal Sharpness=normal SubjectDistanceRange=unknown GPSLatitudeRef=N GPSLatitude="43 deg 28 min 2.814 sec N" GPSLongitudeRef=E GPSLongitude="11 deg 53 min 6.45599999 sec E" GPSAltitudeRef="above sea level" GPSTimeStamp=14:27:07.24 GPSSatellites=06 GPSImgDirectionRef="[reserved GPS direction ref \"\", \"\"]" GPSMapDatum=WGS-84 GPSDateStamp=2008-10-23 latitude=4 … 45 more characters
printf '43.46744833333334\\n11.885126666663888\\n' > place.txt && cat place.txtoutput
43.46744833333334 11.885126666663888
`place.txt` contains: ```text 43.46744833333334 11.885126666663888 ``` The coordinates came from the photo’s GPS metadata.
Output
43.46744833333334 11.885126666663888
Claude Opus 5.5Without deftPassed2026-11-07
- Time
- 14s
- New tokens
- 9.4k
- Total input
- 57.0k
- Output tokens
- 0.8k
- Commands
- 0
- Failed
- 0
Trace
Output
43.467448 11.885127
Claude Opus 5.5With deft, skill installedPassedRead the skillUsed deft2026-11-07
- Time
- 17s
- New tokens
- 12.1k
- Total input
- 94.9k
- Output tokens
- 0.8k
- Commands
- 0
- Failed
- 0
Trace
Output
--- name: deft description: "Use deft first for any simple, direct operation on local files, whatever the type: convert, read, extract, edit, compress, merge, split, compare or inspect. Try it before writing a script or one-liner. If unsure, run deft find; if it says no command does this, use another tool. Not for programming work: to read, write or change source code, skip it." --- # deft One local command for file jobs. Prefer it over writing Python or shell scripts. Syntax: `deft <group> <command> [inputs] [-o output] [--options]` Groups: - `pdf`: Merge, split, compress, encrypt, forms, OCR, compare, convert - `image`: Resize, crop, convert, compress, adjust, montage, OCR - `video`: Trim, merge, convert, compress, subtitles, GIF, frames (ffmpeg) - `audio`: Convert, trim, normalize, denoise, cut silence (ffmpeg) - `doc`: Word/ODT/RTF: to text, Markdown, HTML, PDF; find and replace - `slides`: PowerPoint: extract text, Markdown outline - `sheet`: Excel/CSV/ODS tables: SQL query, pivot, merge, split, convert - `json`: JSON: convert, format, merge, diff, validate - `toml`: TOML: convert, format, merge, diff, validate - `xml`: XML: convert, format, merge, diff, validate - `yaml`: YAML: convert, format, merge, diff, validate - `md`: Markdown to PDF, HTML, Word, EPUB; table of contents - `html`: HTML to Markdown, text, Word and PDF - `epub`: E-books: info, to text, Markdown and PDF - `gps`: GPX and KML tracks: convert, distance and time - `qr`: Create QR codes and barcodes; read QR codes How to use it: 1. Run `deft <group>` to list commands, or `deft find "<what you want>"` to search. If it says `no command does this`, use another tool. 2. Run `deft <group> <command> --help` for options and examples. 3. `deft convert <in> -o <out.ext>` converts between formats by extension. 4. Results are one line starting with `ok`, `partial` or `error`; add `--json` to parse them. Errors include a `hint:` with the fix. Inputs are never overwritten; pass `--force` or `--in-place` to allow it. Globs and directories work as inputs; several inputs run in parallel. If `deft` is not installed, ask the user, then follow https://github.com/firstprayer/deft/blob/main/docs/INSTALL.md
43.46744833333334 11.885126666663888
Claude CodeWithout deftNot run yet
Claude CodeWith deftNot run yet