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] # https://exiftool.org/config.html (the project's example.config) says to # activate a user configuration by renaming it .ExifTool_config and placing it # in the home directory. It also says the home is selected from EXIFTOOL_HOME, # HOME, HOMEDRIVE+HOMEPATH, or the current directory; this catalog records the # canonical home-directory location only. 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"]