TheLastGimbus/GooglePhotosTakeoutHelper
53.6
Weak · 23 September 2026
1k
lines of production code
Dart
primary language
5
measurements over time
What this system is
This system is a cross-platform command-line utility for organizing and managing media files, rewritten in Dart for improved performance and stability. It provides an interactive interface and batch processing modes to sort, deduplicate, and rename files based on extracted metadata or filename patterns. The tool supports multiple date extraction strategies, including EXIF data, JSON metadata, and filename guessing, while also offering utilities for package generation and changelog management.
Features
Added scripts for PKGBUILD generation and changelog retrieval
Two new utility scripts have been added to the repository. The Bash script \scripts/gen-pkgbuild.bash\ generates a PKGBUILD file for the AUR (Arch User Repository), automating the creation of package build files for Linux users. Additionally, the Python script \scripts/get\_changelog.py\ allows users to extract the changelog for a specific version from the CHANGELOG.md file, supporting both 'v' prefixed and unprefixed version inputs. These additions streamline the release and packaging workflow for the project.
scripts · high confidence
Introduction of interactive mode and fix mode in CLI tool
The CLI entry point (bin/gpth.dart) has been updated to support an interactive mode, allowing users to be prompted for input/output directories and configuration options like album handling and date division. Additionally, a 'fix' mode has been added, which allows users to scan a directory and update file modification dates using various extraction strategies. The command-line argument parser has been expanded to include flags for these new modes and options.
bin · high confidence
Migration from Python to Dart with new changelog and documentation
The project has been rewritten in Dart, replacing the previous Python implementation (takeout\_helper.py). This migration brings improved speed, stability, and an interactive mode. The update includes a new CHANGELOG.md detailing version history and bug fixes, an updated README.md with instructions for the new executable and interactive usage, and a new analysis\_options.yaml for Dart static analysis. The Python script has been removed, and the project now provides pre-compiled binaries for Windows, macOS, and Linux.
(repo-wide) · high confidence
New interactive mode and refactored file handling
The application now supports an interactive mode that guides users through the process of selecting input and output directories, handling zip files, and choosing album organization options via a console-based interface. This includes new files for managing media objects, grouping and deduplicating files, and moving or copying them to the output directory. The codebase has been refactored to separate concerns, with dedicated modules for date extraction, folder classification, and interactive prompts. Additionally, the version has been bumped to 3.4.3.
lib · high confidence
Behavioural changes
New date extractors for EXIF, filename guessing, and JSON metadata
The date extraction logic in lib/date\_extractors has been refactored into separate, dedicated extractor files: exif\_extractor.dart for reading EXIF metadata from images, guess\_extractor.dart for parsing common datetime patterns found in filenames, and json\_extractor.dart for reading photoTakenTime from associated JSON files. These new modules implement specific strategies to handle edge cases such as files without extensions, bracket-swapped filenames, and various filename formats, improving the reliability of date detection.
_lib/date\extractors · high confidence
Test coverage
Added comprehensive tests for date extraction, duplicate removal, and utility functions
Added a new test file, test/gpth\_test.dart, which provides comprehensive coverage for the date extraction logic (JSON, EXIF, and filename guessing), duplicate removal, extra file removal, and album finding utilities. The tests verify that dates are correctly parsed from various sources and that duplicate or extra media files are properly identified and handled.
test · high confidence
Dependencies
Migrated Python dependencies to Dart (pubspec)
The project has shifted its dependency management from Python (requirements.txt) to Dart (pubspec.yaml and pubspec.lock). The Python-based exif library has been replaced by the Dart exif package (v3.1.4), and other Python dependencies have been replaced by their Dart equivalents such as fuzzysearch (v0.1.3) and console\_bars (v1.2.0).
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 55 → 54 (-1.5)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 (new)
- Architecture 100 → 100 (+0.0)
- Maturity 49 → 34 (-14.8)
- Readiness 49 → 57 (+8.1)
- Security 49 → 65 (+15.6)
- Domain Modelling 100 → 100 (+0.0)
Resolved (16)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- No exposed public API
- Test reliability not included
- The 'How to use' section begins with '1. Get all your photos from Google Takeout' and then the body is cut at '### 5. Most of your photos should have correct original EXIFs', before the numbered steps are visible. (README.md)
- complexity unreadable for .dart, .py — churn × complexity hotspots could not be measured
New (34)
- Documentation: no installation or build instructions (README.md)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Medium: security finding (details withheld)
- …and 14 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
TheLastGimbus/GooglePhotosTakeoutHelper was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit a9de187efd9ce7cd072c5803dabc45079d416e64 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.