{"id":21854720,"url":"https://github.com/huangsam/photohaul","last_synced_at":"2025-10-05T09:21:40.991Z","repository":{"id":264395186,"uuid":"893250030","full_name":"huangsam/photohaul","owner":"huangsam","description":"Effortless photo management","archived":false,"fork":false,"pushed_at":"2025-05-05T07:17:43.000Z","size":6832,"stargazers_count":66,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-09T00:06:23.496Z","etag":null,"topics":["canon","dropbox","file-transfer","google-drive","gradle","java","jpeg","lightroom","nas-storage","nikon","photo","photography","png","productivity-tools","sony"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/huangsam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2024-11-23T23:23:27.000Z","updated_at":"2025-05-05T07:17:47.000Z","dependencies_parsed_at":"2024-11-24T00:23:48.042Z","dependency_job_id":"ca825863-589c-4ee8-b594-fd7e3d681fea","html_url":"https://github.com/huangsam/photohaul","commit_stats":null,"previous_names":["huangsam/photohaul"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huangsam%2Fphotohaul","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huangsam%2Fphotohaul/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huangsam%2Fphotohaul/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huangsam%2Fphotohaul/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/huangsam","download_url":"https://codeload.github.com/huangsam/photohaul/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253166518,"owners_count":21864476,"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":["canon","dropbox","file-transfer","google-drive","gradle","java","jpeg","lightroom","nas-storage","nikon","photo","photography","png","productivity-tools","sony"],"created_at":"2024-11-28T02:10:35.671Z","updated_at":"2025-10-05T09:21:40.963Z","avatar_url":"https://github.com/huangsam.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Photohaul\n\n[![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/huangsam/photohaul/ci.yml)](https://github.com/huangsam/photohaul/actions)\n[![Code Coverage](https://img.shields.io/codecov/c/github/huangsam/photohaul)](https://codecov.io/gh/huangsam/photohaul)\n[![License](https://img.shields.io/github/license/huangsam/photohaul)](https://github.com/huangsam/photohaul/blob/main/LICENSE)\n\nEffortless photo management.\n\n- Reorganize 10K+ photos (30 GB) in seconds!\n- Migrate photos locally and to the cloud (Dropbox, Google Drive)\n- Customize folder structures based on date, camera, and more\n- Filter photos by file type, size, and other criteria\n\nSay goodbye to photo clutter - 👋 + 🚀\n\n![Sunny Bunny Tidy Up](images/sunny-bunny-tidy-up.webp)\n\n## Motivation\n\nAs an avid photographer, I use Adobe Lightroom to organize my edited SLR\nphotos with custom file names and folder structures. This has worked well\nfor me since 2015, when I started getting serious about photography.\n\nI want to apply those same patterns to old photos, so that it is easier\nfor me to access my precious memories. However, I struggle to apply the\nsame organization to my vast collection of older photos. I cannot apply\nLightroom settings to previously exported images and writing custom\nscripts seems daunting.\n\nI also want to migrate my photos over to a NAS or a cloud provider like\nGoogle Drive, but it involves endless rounds of manual drag-and-drop\noperations. I keep thinking to myself - is there a solution out there\nthat \"just works\" for my workflow?\n\n## Value\n\nPhotohaul addresses the pain points above by providing a central hub for\nphotographers to filter, organize, and migrate photos to local storage\nand cloud services. The folder structure for photos can be based on info\nsuch as year taken and camera make.\n\n## Getting started\n\nFor detailed instructions: [link](USERGUIDE.md)\n\n**Install prerequisites:**\n\n- Java 17 or later\n- Gradle 8 or later\n\n**Build application:**\n\n- Run `./gradlew build` in your terminal\n\n**Configure settings:**\n\n- Set `PathRuleSet` to filter by extension, file size, etc.\n- Set `MigratorMode` to `PATH`, `DROPBOX` or `GOOGLE_DRIVE`\n- Set `PhotoResolver` to adjust folder structure\n- Fill config file. Refer to examples in [src/main/resources](src/main/resources)\n\n**Run application:**\n\n- Run `./gradlew run` in your terminal\n\n```text\n\u003e Task :run\n20:05:18.533 [main] INFO io.huangsam.photohaul.Settings -- Use config file from photohaul.config: config.properties\n20:05:18.538 [main] DEBUG io.huangsam.photohaul.traversal.PathWalker -- Start traversal of /Users/samhuang/Pictures/Dummy PNG\n20:05:18.768 [main] DEBUG io.huangsam.photohaul.migration.GoogleDriveMigrator -- Start Drive migration to 10uRd6...\n20:05:23.145 [main] INFO io.huangsam.photohaul.Main -- Finish with success=6 failure=0\n\nBUILD SUCCESSFUL in 5s\n3 actionable tasks: 1 executed, 2 up-to-date\n```\n\n**That's it!** Sit back and rediscover your memories! 😎 + 🍹 + 🌴\n\nYou're welcome 🙏\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuangsam%2Fphotohaul","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhuangsam%2Fphotohaul","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuangsam%2Fphotohaul/lists"}