- PVA Photo and Video Annotator
PVA Photo and Video Annotator
PVA, the Photo and Video Annotator, is a desktop application for organizing and viewing images and videos in a folder, making it easy to click through media files, add detailed annotations to images and videos, skip unwanted segments of videos, and view the results as a slideshow.
Walkthrough video
Features
- Browse Media: View photos and videos from a folder on your computer (including any subfolders you select) with a clean, intuitive interface
- Organize Media: Quickly skip unwanted files or move them to a “Discard” folder
- Image Annotations: Add text descriptions to photos
- Video Annotations: Add time-stamped text annotations throughout videos
- Skip Video Segments: Mark parts of videos to be automatically skipped during playback
- Location Tagging: Automatically extract GPS coordinates from photos and reverse-geocode them to city/state/country, or add locations manually
- Volume Control: Adjust video volume on a per-file basis
- Image Rotation: Rotate photos that have incorrect orientation
- Persistent Storage: All annotations and metadata are saved to a text file in JSON format, using minimal disk space
- Your files: Your media files are not altered or deleted.
Preparation of Files
File and folder organization
Put the images and videos you want into a single folder. Your folder of images and videos can have subfolders with additional images and videos.
When you launch PVA, select the folder containing your photos and videos.
You’ll be prompted to confirm which subfolders to include in your annotation project.
The program will read any existing annotations from an annotations.json file in the main folder, or create one if it doesn’t exist.
You can add additional files to the folder or subfolder any time you like; PVA will detect them the next time it starts. You can manually remove files from the folder, PVA will not complain that they are gone. But if you rename a file, PVA will not associate the new name with information stored for the old name. PVA reduces the need to edit image files directly.
Supported Formats
Images: JPG, JPEG, PNG, GIF, BMP, TIFF, TIF, WebP
Videos: MP4, MOV, AVI, MKV, FLV, WMV, WebM, M4V, 3GP
Navigation

Sort Order
Files are sorted by creation date, which is determined intelligently:
- For photos: EXIF datetime is used (the actual date the photo was taken)
- For files without EXIF data: The earliest filesystem timestamp is used (the handles Google Photos and other downloaded files correctly)
- You can manually edit any creation date by clicking on the date field and entering a new date in
YYYY-MM-DD HH:MM:SSformat - Manually editing the creation date is useful, for example, if you splice in a downloaded stock image to be part of the slideshow.
- No other sorting criterion is supported at this time.
Buttons and Keyboard
- Next: Moves to the next media file in the folder. If you’re at the last file, it wraps back to the first.
- Previous: Moves to the previous media file. If you’re at the first file, it wraps back to the last.
- Filename Display: The filename is shown with its relative path, so files in subfolders appear as
SubfolderName/filename.jpg - Keyboard Navigation: Use the arrow keys (→ and ←) to navigate between files quickly
- Slideshow for Review: Use Slideshow mode to review or admire your entire collection at once
- Location Dropdowns: The location dropdown shows all previously used locations, making it easy to tag files consistently
- Timestamps: Hover over the video progress bar to see the exact timestamp at any point
- Volume Adjustments: You can change volume while a video is playing; the change applies immediately
Skip or Discard File
Click the Skip button to hide a media file from view. The file is marked as skipped in the annotations and will be automatically passed over when navigating forward or backward.
- The file is not deleted or moved
- The skip information is stored in
annotations.jsonwith"skip": true - Both Next and Previous buttons will skip over these files
- Use this for files you want to ignore without deleting or moving them
Click the Discard button to move a file to a discard subfolder.
This is like deleting a file, but not as severe.
- The file is moved to a
discardfolder in the same directory where the file is located - For files in the main directory: moved to
main_directory/discard/ - For files in subfolders: moved to
subfolder/discard/(this keeps files organized by their original location) - The file is physically moved (not just marked as skipped)
- You can recover files by moving them back out of the discard folder manually
- Use this when you’re sure you don’t want a file and you may want to delete all of the files in the discard folder to save space
Slideshow
Click the Slideshow button to automatically cycle through your media files:
- Images: Each image displays for the configured amount of time (default: 5 seconds), or longer if you’ve added text annotations (annotation text length is factored in)
- Videos: Each video plays to completion before automatically advancing to the next file
- Stop Slideshow: Click the button again to stop the slideshow at any time
- Adjust Timing: Use the editable text field next to the Slideshow button to change how many seconds each image displays. Type a new number (e.g., “10 seconds”) and press Enter. The setting is saved and will be used for all future slideshows.
- Quick View: Use a delay time of 1 second or less to have PVA quickly advance through images and videos; this can help you understand the organization.
Image annotation and display modifications
Image Annotations
For images, you can add and edit a text description:
- Click in the text box at the bottom of the screen
- Type your annotation (e.g., “Family picnic in the park” or technical details about the photo)
- Click elsewhere indicate that you are done editing
The text is automatically saved to the JSON file under the text field for that image.
Rotate Image
Click the Rotate button (only available for images) to rotate a photo clockwise:
- First click: 90° rotation
- Second click: 180° rotation
- Third click: 270° rotation
- Fourth click: Returns to 0° (original orientation)
The rotation preference is saved for the image in the JSON file and will be remembered the next time you view it.
Location Information
The application automatically extracts GPS coordinates from photo metadata using EXIF data. When coordinates are found, it performs a reverse geocoding lookup using OpenStreetMap’s Nominatim service to determine the city, state, and country.
Automatic Location Detection
When you view a photo with GPS data:
- The application extracts latitude and longitude from the photo’s EXIF metadata
- It automatically looks up the address
- The location is stored as
location.automated_textin the JSON file - The location appears in the location dropdown
Manual Location Entry
You can also manually set or override the location:
- Click on the location dropdown on the right side of the screen
- Either type a new location or select a previously used location from the list
- The location is saved as
location.manual_textin the JSON file - If both manual and automated locations exist, the manual location is displayed
The dropdown shows all unique locations (both manual and automated) across all files in your collection, making it easy to maintain consistency.
Video Display and Annotations

Playing Videos
When you navigate to a video:
- The video begins playing automatically
- The volume is set to whatever you previously selected (or 100% if newly displayed)
- Use Play/Pause to control playback
- Use Replay to restart from the beginning
- Click on the progress slider to jump to a specific time, or hover over it to see timestamps
Video Volume Control
For videos, use the Volume button (showing the current volume level) to adjust playback volume:
- Click to cycle through: 100% → 80% → 60% → 40% → 20% → 0% → back to 100%
- The volume preference is saved per video file
- When you return to a video, it plays at the previously saved volume level
Use this to mute videos with too much background noise or to reduce or equalize volume for quieter content.
Add Video Annotation
Videos support more sophisticated annotation: you can add multiple text annotations at different time points, and mark segments to be automatically skipped.
To add a text annotation at a specific time:
- Pause the video at the desired time point
- Click Add annotation
- Type your text (e.g., “Golden retriever enters the scene”)
- Click elsewhere or press tab to save
- The annotation is saved with the current video timestamp
You can add as many annotations as you want throughout the video, each with its own timestamp.
Edit Video Annotation
To edit an existing annotation:
- Pause the video at any time within an annotated segment (the annotation text will appear in the text box)
- Click Edit annotation
- Modify the text
- Click elsewhere to save
The text is updated while the timestamp remains unchanged.
Skipping Video Segment
To mark a segment of the video to be automatically skipped during playback:
- Pause the video at the point where you want skipping to begin
- Click Skip until next annotation
- The video marks this point and jumps to the next annotation (or end of video)
- During playback, when this skip point is reached, the video automatically jumps to the next annotation
- There is no particular limit to the number of segments that can be skipped
This is useful for removing unwanted sections (background noise, false starts, etc.) without deleting the original video file. You can adjust the slider into a skipped segment to remove the skip annotation, if desired, or to start a new annotation where the video should start playing again.
Removing Video Annotation
To delete an annotation:
- Pause the video during the time of the annotation you want to remove
- Click Remove annotation
- The annotation is deleted and the video returns to the previous annotation
Download and Install Executable Files
The easiest way to use PVA is to use the download link below to get the file(s) necessary for your operating system.
Windows
Download:
PVA_Photo_and_Video_Annotator_Windows.exe
Notes:
- If Windows warns that the program is unsafe, click More info → Run anyway
- After that, you can right-click an image file, choose Open with…, and select the PVA executable to be used once or always
macOS
Download both:
PVA_Photo_and_Video_Annotator_macOSrun_PVA_macOS.command
On the first run:
- Save both files in the same folder
- Double-click
run_PVA_macOS.commandto set permissions - The script will prepare and launch the app
After that, you can launch PVA_Photo_and_Video_Annotator_macOS directly
Linux
Download:
PVA_Photo_and_Video_Annotator_Linux
Make executable if needed:
chmod +x PVA_Photo_and_Video_Annotator_Linux
Technical Details
Storage and Formats
All annotations, metadata, and preferences are stored in a JSON file (annotations.json) in your media folder. The JSON format makes it easy to:
- Back up your annotations
- Share annotations with others
- Edit annotations manually if needed
- Use the annotations with other tools
However, be careful with JSON format because the brackets and commas are very important; it is better to avoid editing the JSON file if at all possible.
Date and Time Handling
The application intelligently determines creation dates for your media files:
- EXIF DateTime Priority: For photos with EXIF metadata, the
DateTimeOriginaltag is used. This is the most accurate representation of when the photo was actually taken. - Filesystem Timestamp Fallback: For files without EXIF data or videos, the earliest available filesystem timestamp is used (choosing between creation time, modification time, or birth time). This ensures proper sorting even for downloaded files from Google Photos or other sources.
- Manual Override: You can manually edit any file’s creation date by clicking the date field and entering a new date in
YYYY-MM-DD HH:MM:SSformat. This override takes precedence over all automatic detection. - Storage: Automatic dates are cached in the JSON for performance. Manual dates are stored separately and always used when available.
The goal is that files are always sorted in the order they were taken, regardless of whether they were downloaded, emailed, or copied to your collection.
JSON File Entries
The file annotations.json stores the text you type and the location information that PVA extracts and looks up online.
Each media file gets an entry in the JSON with:
text: Text annotation (images) or time-stamped annotations (videos)skip: Whether the file should be skipped (images) or skip points (videos)rotation: Image rotation in degrees (0, 90, 180, or 270) - only stored if non-zerovolume: Video volume level (0-100) - only stored if not 100%location: GPS coordinates and location informationannotations: Array of time-stamped annotations (videos)
The application also stores settings in the _settings object:
image_time: Number of seconds each image displays during slideshow (default: 5)font_size: Font size for text (default: 14)