Image Vault is a powerful command-line tool specifically designed for managing and organizing photo libraries. It provides photographers and photo enthusiasts with features for initializing photo libraries, adding and organizing image files, verifying library integrity, and displaying detailed photo metadata.
To install Image Vault, use the following command:
go install github.com/askolesov/image-vault/cmd/imv@latest
Alternatively, you can build from source (see Building from Source).
Image Vault requires exiftool
to be installed on your system for handling photo metadata. Below are instructions for installing exiftool
on different operating systems:
To install exiftool
on Linux, you can use the package manager for your distribution. For example, on Ubuntu, you can use:
sudo apt install libimage-exiftool-perl
To install exiftool
on Windows using Homebrew, first ensure you have Homebrew installed, then run:
brew install exiftool
Image Vault offers several commands to manage your photo library efficiently. Here are the main commands and their usage:
To initialize a new Image Vault photo library in the current directory:
imv init
This command creates a configuration file (image-vault.yaml
) in the current directory, setting up the structure for your photo organization.
To add photos to your library:
imv add <path_to_photos>
This command processes the photos at the specified path, organizes them according to the configured template (which can include metadata like date taken, camera model, etc.), and adds them to the library.
To verify the integrity of your photo library:
imv verify
This command checks all photos in the library to ensure they are properly organized and match their expected locations based on their metadata and the configured template.
To show detailed metadata for a specific photo:
imv info <photo_path>
This command displays comprehensive metadata information for the specified photo, including camera settings, date taken, and other EXIF data.
To display version information about Image Vault:
imv version
Image Vault uses a YAML configuration file (image-vault.yaml
) to customize its behavior. Here's an example of the default configuration:
template: |-
{{- $make := or .Exif.Make .Exif.DeviceManufacturer "NoMake" -}}
{{- $model := or .Exif.Model .Exif.DeviceModelName "NoModel" -}}
{{- $dateTimeOriginal := and (any .Exif.DateTimeOriginal) (ne .Exif.DateTimeOriginal "0000:00:00 00:00:00") | ternary .Exif.DateTimeOriginal "" -}}
{{- $mediaCreateDate := and (any .Exif.MediaCreateDate) (ne .Exif.MediaCreateDate "0000:00:00 00:00:00") | ternary .Exif.MediaCreateDate "" -}}
{{- $date := or $dateTimeOriginal $mediaCreateDate "1970:01:01 00:00:00" | toDate "2006:01:02 15:04:05" -}}
{{- $mimeType := .Exif.MIMEType | default "unknown/unknown" | splitList "/" | first -}}
{{$make}} {{$model}} ({{$mimeType}})/{{$date | date "2006"}}/{{$date | date "2006-01-02"}}/{{$date | date "2006-01-02_15-04-05"}}_{{.Hash.Md5Short}}{{.Fs.Ext | lower}}
skipPermissionDenied: true
ignore:
- image-vault.yaml
- .*
sidecarExtensions:
- ".xmp"
- ".yaml"
- ".json"
You can modify this configuration to suit your photo organization needs. The template
field is particularly important as it determines how your photos will be organized in the library based on their metadata.
To build Image Vault from source:
-
Clone the repository:
git clone https://github.com/askolesov/image-vault.git
-
Navigate to the project directory:
cd image-vault
-
Build the project:
make build
This will create the
imv
binary in thebuild/
directory. -
(Optional) Install the binary:
make install
Contributions to Image Vault are welcome! Please feel free to submit pull requests, create issues, or suggest improvements.
Before submitting a pull request, please ensure that:
-
Your code passes all tests:
make test
-
Your code passes the linter:
make lint
-
You've added tests for any new functionality.