{"id":25025438,"url":"https://github.com/naftalibeder/porte","last_synced_at":"2025-04-13T11:03:56.437Z","repository":{"id":253189211,"uuid":"842753251","full_name":"naftalibeder/porte","owner":"naftalibeder","description":"A tool for fixing and organizing a Google Takeout photos export.","archived":false,"fork":false,"pushed_at":"2024-08-27T00:38:12.000Z","size":35689,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-08-28T02:45:22.700Z","etag":null,"topics":["exif","exif-tags","exiftool","google-photos","google-takeout","photo-library","photos"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/naftalibeder.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-15T02:27:03.000Z","updated_at":"2024-08-27T11:56:43.000Z","dependencies_parsed_at":"2024-08-23T16:25:46.968Z","dependency_job_id":null,"html_url":"https://github.com/naftalibeder/porte","commit_stats":null,"previous_names":["naftalibeder/detaku","naftalibeder/porte"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naftalibeder%2Fporte","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naftalibeder%2Fporte/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naftalibeder%2Fporte/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naftalibeder%2Fporte/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/naftalibeder","download_url":"https://codeload.github.com/naftalibeder/porte/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237335534,"owners_count":19293371,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exif","exif-tags","exiftool","google-photos","google-takeout","photo-library","photos"],"created_at":"2025-02-05T16:39:46.986Z","updated_at":"2025-02-05T16:39:47.534Z","avatar_url":"https://github.com/naftalibeder.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Porte\n\nA tool for fixing and organizing a Google Takeout photos export.\n\n## Description\n\nWhen Google Photos generates a backup of a photo library, the resulting photo files are frequently missing important exif data, like timestamps and geolocation. This metadata is placed into adjacent `.json` files.\n\nPorte uses each file's original metadata, any related metadata file, and the filename itself to output a directory of fixed files containing the most accurate information available.\n\n\u003cimg width=\"100%\" src=\"https://github.com/user-attachments/assets/1eda5914-236a-4902-9e24-6e1f5f613a97\"\u003e\n\n## Features\n\n- Date handling\n  - Copies timestamps, if needed, from any related metadata file.\n  - If a date cannot be found in the exif data or a related metadata file, attempts to parse a date from the filename.\n  - Uses the earliest date found, avoiding errors like assigning the file-modification date as the capture date.\n  - Prefixes files with the capture date, for a chronologically ordered output directory.\n- Geolocation handling\n  - Copies geolocation data, if needed, from any related metadata file.\n- File quality\n  - Edits image exif data without recompressing files.\n  - Edits video exif data and attempts to repackage as `.mp4` without re-encoding, for compatibility. Otherwise, simply renames and copies the file.\n  - Fixes incorrect extensions based on the actual file data.\n  - Preserves original filename in the output filename and exif title tag.\n  - Copies files to an output directory, instead of modifying in-place.\n- Understandable output\n  - Sorts failed files into a separate folder to inspect manually.\n  - Saves a comprehensive log of converting results for each file.\n- Speed\n  - Distributes work across available cores.\n\n## Known limitations\n\n- Does not preserve album data.\n- Editing `.avi` exif data is not currently supported (due to it being unsupported in `ffmpeg`).\n- Setting date tags on `.gif` files does not appear to work.\n- Does not find metadata files that exist in a different archive than their corresponding image. (This requires more cleverness than just matching by filename or image title, since there are many duplicate filenames in a large photo library.)\n\n## Etymology\n\n_Porte_ comes from the French word _emporte_, meaning _takeout_, in the food sense.\n\n## Installation\n\nYou can either use a prebuilt binary or build from source.\n\n#### Prebuilt binary\n\nGo to the [Releases](https://github.com/naftalibeder/porte/releases) page and download a binary for the most recent version.\n\nTo run the program on macOS, you need to make it executable:\n\n```sh\nchmod +x ./macos\n```\n\n#### From source\n\nTo build from source, first install these dependencies:\n\n- [go](https://go.dev/doc/install)\n- [exiftool](https://exiftool.org/install.html)\n- [ffmpeg](https://ffmpeg.org/download.html)\n\nThen, build the project:\n\n```sh\ngo build -o ./porte\n```\n\n## Usage\n\nTo convert your photos, run:\n\n```sh\nporte srcpath destpath\n```\n\nwhere `srcpath` is any directory containing images or videos, and `destpath` is the desired output directory.\n\nIf `destpath` is omitted, a directory will be created by concatenating `srcpath` and `_Export`.\n\n## Development\n\nTo run all tests:\n\n```sh\ngo test ./...\n```\n\n## Acknowledgments\n\nThanks to these useful projects:\n\n- Exif reader/writer: https://github.com/exiftool/exiftool\n- Test images: https://github.com/ianare/exif-samples\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaftalibeder%2Fporte","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnaftalibeder%2Fporte","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaftalibeder%2Fporte/lists"}