Commit Graph

8 Commits (9238a180fda0d4049e1330fc85a2e20e943806b7)

Author SHA1 Message Date
Romain 9238a180fd refactor: replace event-stream with native Node streams 5 months ago
Romain 8639c9d635 refactor: remove obsolete exiftool workaround for bad encoding
Fixed in exiftool version 10.85 (March 2018)
5 months ago
Romain 3590b15cfb chore: use node prefix for all builtin modules 6 months ago
Romain 8cb7a3596b chore: upgrade to latest version of StandardJS 1 year ago
Romain f3571718ce fix: index filenames with utf-8 characters on Windows
Fixes #184
3 years ago
Romain d0bbf94b1c fix(index): don’t crash when trying to parse exiftool output for a badly encoded file 7 years ago
Romain 47a924883e New --log option to print a full text log with different verbosity levels 7 years ago
Romain 24b2f9bd7c Major optimisations: SQLite index + faster disk glob + new exiftool streaming
1. Move from a JSON index to a SQLite database.
  - This allows the indexing to be interrupted & resumed
  - Updating the index consumes less RAM than loading / saving an entire JSON object
  - Loading the index consumes less RAM since it can be streamed, only exacting the properties we need every time (instead of loading all EXIF data in memory, only to discard most of it later)
  - These make a big difference when processing 10,000+ photos

2. Switch from <glob> to a manual <readdir>
  - Glob would take several hundred or GB of RAM when asked to find several thousand files
  - Manual approach with <micromatch> library does the same thing in a fraction of the time / memory usage

3. Exiftool optimisations
  - Run 1 exiftool process per CPU, still in batch mode (divide all files to be read into 1 bucket per CPU)
  - Stream the exiftool output instead of buffering it in memory
7 years ago