How bybenmorgan/google2amazon-photos works
Photo Migration is a .NET CLI for preparing extracted Google Takeout media for Amazon Photos. Its user workflow is inventory or analyze an export, preview metadata decisions with plan, then use prepare to publish separate verified copies while preserving the source. The graph retains the distinct sidecar matching, embedded-metadata interpretation, planning, and publication stages, plus ExifTool integration. README documentation supports the major capabilities; excerpts are partial, so some internal call wiring is intentionally not shown.
Main entry points: TakeoutPreparationService.cs Preparation service · TakeoutMetadataPlanner.cs Metadata planner · CliApplication.cs Command dispatcher · ExifToolProcessRunner.cs ExifTool runner
Components 26
CLI workflow
- Command dispatcher
src/PhotoMigration.Cli/CliApplication.cs
Takeout analysis
- File inventory
src/PhotoMigration.Core/FileInventory.cs - Takeout analyzer
src/PhotoMigration.Core/TakeoutAnalyzer.cs - File classifier
src/PhotoMigration.Core/TakeoutFileClassifier.cs - Sidecar matcher
src/PhotoMigration.Core/TakeoutSidecarMatcher.cs - Sidecar parser
src/PhotoMigration.Core/TakeoutSidecarParser.cs
Metadata planning
- Metadata planner
src/PhotoMigration.Core/TakeoutMetadataPlanner.cs - Embedded reader
src/PhotoMigration.Core/ExifToolMetadataReader.cs - ExifTool runner
src/PhotoMigration.Core/ExifToolProcessRunner.cs - Capture-time parser
src/PhotoMigration.Core/EmbeddedCaptureTimeParser.cs - GPS parser
src/PhotoMigration.Core/EmbeddedGpsParser.cs - Metadata decisions
src/PhotoMigration.Core/MediaMetadataPlanBuilder.cs
Verified publishing
- Preparation service
src/PhotoMigration.Core/TakeoutPreparationService.cs - Destination planner
src/PhotoMigration.Core/DestinationPathPlanner.cs - Verified stager
src/PhotoMigration.Core/VerifiedMediaFileStager.cs - Capture-time writer
src/PhotoMigration.Core/AmazonCaptureTimeMetadataWriter.cs - Capture-time verifier
src/PhotoMigration.Core/AmazonCaptureTimeMetadataWriteVerifier.cs - JPEG GPS writer
src/PhotoMigration.Core/JpegGpsMetadataWriter.cs - JPEG GPS verifier
src/PhotoMigration.Core/JpegGpsMetadataWriteVerifier.cs - Unchanged publisher
src/PhotoMigration.Core/VerifiedUnchangedMediaPublisher.cs - Verified JPEG publisher
src/PhotoMigration.Core/VerifiedJpegPublisher.cs - Capture-time publisher
src/PhotoMigration.Core/VerifiedAmazonCaptureTimePublisher.cs
Other components
- CLI user
- ExifTool
- Takeout files
- Output directory
Connections 37
- CLI user → Command dispatcher: runs command
- Command dispatcher → File inventory: requests inventory
- Command dispatcher → Takeout analyzer: requests analysis
- Command dispatcher → Metadata planner: requests plan
- Command dispatcher → Preparation service: requests preparation
- File inventory → Takeout files: reads files
- Takeout analyzer → File inventory: inventories files
- Takeout analyzer → File classifier: classifies files
- Takeout analyzer → Sidecar matcher: matches sidecars
- Sidecar matcher → Sidecar parser: parses candidates
- Metadata planner → File inventory: inventories files
- Metadata planner → Sidecar matcher: matches sidecars
- Metadata planner → Embedded reader: reads metadata
- Metadata planner → Sidecar parser: parses metadata
- Embedded reader → ExifTool runner: runs ExifTool
- ExifTool runner → ExifTool: invokes
- Metadata planner → Metadata decisions: builds plans
- Metadata decisions → Capture-time parser: interprets dates
- Metadata decisions → GPS parser: interprets GPS
- Preparation service → Metadata planner: plans metadata
- Preparation service → Destination planner: plans destinations
- Preparation service → Verified stager: stages copies
- Verified stager → Takeout files: copies source
- Preparation service → Capture-time writer: writes capture time
- Capture-time writer → ExifTool runner: runs ExifTool
- Preparation service → Capture-time verifier: verifies capture time
- Capture-time verifier → ExifTool runner: reads back metadata
- Preparation service → JPEG GPS writer: writes JPEG GPS
- JPEG GPS writer → ExifTool runner: runs ExifTool
- Preparation service → JPEG GPS verifier: verifies JPEG GPS
- JPEG GPS verifier → ExifTool: reads back metadata
- Preparation service → Unchanged publisher: publishes unchanged
- Preparation service → Verified JPEG publisher: publishes verified JPEG
- Preparation service → Capture-time publisher: publishes verified copy
- Unchanged publisher → Output directory: writes copy
- Verified JPEG publisher → Output directory: publishes copy
- Capture-time publisher → Output directory: publishes copy