id = "exiftool"
name = "ExifTool"
homepage = "https://exiftool.org"
description = "A command-line application and Perl library for reading, writing and editing meta information in a wide variety of files."
executables = ["exiftool"]
[dotfiles]
paths = ["~/.ExifTool_config"]
secret = []
side_effect = false
[commands]
format = 1
label = "Read or strip metadata"
description = "Read metadata from files (optionally as JSON or a table, recursively) or strip all metadata. Writing individual tags, copying tags, geotagging and renaming are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = false, short_attached = false, short_bundles = false }
[[commands.source]]
id = "man"
kind = "manual"
url = "https://manpages.debian.org/bookworm/libimage-exiftool-perl/exiftool.1.en.html"
revision = "bookworm"
evidence = """
exiftool [OPTIONS] [-TAG...] [--TAG...] FILE...
-TAG or --TAG Extract or exclude specified tag
-b (-binary) Output metadata in binary format
-d FMT (-dateFormat) Set format for date/time values
-G[NUM...] (-groupNames) Print group name for each tag
-j[[+]=JSONFILE] (-json) Export/import tags in JSON format
-n (--printConv) No print conversion
-s[NUM] (-short) Short output format (-s for tag names)
-S (-veryShort) Very short output format
-T (-table) Output in tabular format
-a (-duplicates) Allow duplicate tags to be extracted
-ext[+] EXT (-extension) Process files with specified extension
-m (-ignoreMinorErrors) Ignore minor errors and warnings
-o OUTFILE (-out) Set output file or directory name
-overwrite_original Overwrite original by renaming tmp file
-P (-preserve) Preserve file modification date/time
-q (-quiet) Quiet processing
-r[.] (-recurse) Recursively process subdirectories
-ver Print exiftool version number
"exiftool -all= dst.jpg"
"-all= --exif:all" deletes all but EXIF
"""
[[commands.field]]
id = "files"
label = "Files or directories"
type = "path"
position = 0
multiple = true
min = 1
path = { kind = "any", role = "input", must_exist = true }
sources = ["man"]
[[commands.field]]
id = "json"
label = "JSON output"
type = "boolean"
option = ["-json"]
sources = ["man"]
[[commands.field]]
id = "short"
label = "Short tag names"
type = "boolean"
option = ["-s"]
sources = ["man"]
[[commands.field]]
id = "group_names"
label = "Show group names"
type = "boolean"
option = ["-G"]
sources = ["man"]
[[commands.field]]
id = "table"
label = "Tabular output"
type = "boolean"
option = ["-T"]
sources = ["man"]
[[commands.field]]
id = "recurse"
label = "Recurse into directories"
type = "boolean"
option = ["-r"]
sources = ["man"]
[[commands.field]]
id = "extension"
label = "Only this extension"
type = "string"
option = ["-ext"]
suggestions = [{ value = "jpg", label = "JPEG" }, { value = "png", label = "PNG" }, { value = "mp4", label = "MP4" }]
sources = ["man"]
[[commands.field]]
id = "no_print_conv"
label = "Raw values (no print conversion)"
type = "boolean"
option = ["-n"]
sources = ["man"]
[[commands.field]]
id = "duplicates"
label = "Allow duplicate tags"
type = "boolean"
option = ["-a"]
sources = ["man"]
[[commands.field]]
id = "strip_all"
label = "Strip all metadata"
description = "Deletes every writable tag. exiftool keeps a *_original backup unless overwrite original is also set."
type = "boolean"
option = ["-all="]
effect = "overwrite"
sources = ["man"]
[[commands.field]]
id = "overwrite_original"
label = "Overwrite original (no backup)"
type = "boolean"
option = ["-overwrite_original"]
effect = "overwrite"
sources = ["man"]
[[commands.field]]
id = "preserve"
label = "Preserve file modification time"
type = "boolean"
option = ["-P"]
sources = ["man"]
[[commands.task]]
id = "read"
label = "Read all metadata"
fields = ["files", "json", "group_names", "recurse", "extension"]
required = ["files"]
[[commands.task]]
id = "strip"
label = "Strip all metadata"
fields = ["files", "strip_all", "overwrite_original", "preserve", "recurse", "extension"]
required = ["files"]
set = { strip_all = [true] }
lock = ["strip_all"]
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["files", "json", "short", "group_names", "table", "recurse", "extension"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["no_print_conv", "duplicates", "strip_all", "overwrite_original", "preserve"]