Skip to content

Releases: simulot/immich-go

v0.31.0

23 Nov 16:16

Choose a tag to compare

Release Notes - v0.31.0

This release focuses on richer visibility while uploading assets and a major refresh of the CI/CD system that keeps Immich Go healthy across every platform.

✨ New Features

  • Live terminal tracking – The TUI now exposes separate discovery and processing zones, FileArchived counters, and per-asset size tracking so you can immediately tell what is being scanned, uploaded, or archived.
  • Better metadata insight – FileProcessor records processed assets (including metadata-only updates) and publishes dedicated events, yielding more accurate progress reporting and easier troubleshooting.

🚀 Improvements

  • Globbing resilience – Folder traversal keeps going when the filesystem throws access errors and now surfaces clearer documentation about supported patterns.
  • Upload ergonomics – Standardized error-handling flags across upload commands and improved UI layout by right-aligning size columns, making long-running jobs easier to read.

🐛 Bug Fixes

  • Album flag conflict--folder-as-album=NONE no longer clashes with --into-album, so you can explicitly skip derived album names while still targeting a destination album.

🔧 Internal Changes

  • Revamped CI/CD – Introduced a two-stage fast-feedback + secure E2E workflow, nightly Immich E2E runs, fork-safe triggering, and far more robust helper scripts (doc-only detection, jq fixes, empty-diff handling, standardized formatting).
  • Safer E2E workflow – External contributors now rely on an approval gate (or /run-e2e comment), and the workflow dispatch code was hardened with better payload validation, environment routing, and completion reporting.
  • Broader coverage – Added an album-upload E2E test, refreshed dependency stack (tcell v2.11.0, crypto v0.45.0), and removed legacy journal/reporting structures in favor of a unified FileProcessor + new file-event codes.

New Contributors

Full Changelog: v0.30.0...v0.31.0

v0.30.0

16 Nov 08:51
bb72f3e

Choose a tag to compare

Release Notes for v0.30.0

We're excited to announce the next major release of immich-go, bringing significant improvements to testing infrastructure, enhanced filtering capabilities, and better stability across the board. This release includes comprehensive end-to-end testing, new asset filtering options, and important bug fixes that improve the overall user experience.

✨ New Features

  • Enhanced Asset Filtering: Added support for filtering assets by city, country, state, camera make, model, and tags in the from-immich command
  • Album and People Filtering: New options to filter assets by specific albums, people, and exclude partner's photos
  • Search Suggestions: New GetSearchSuggestions method for improved search functionality
  • Copy Asset Feature: Introduced CopyAsset method for asset duplication (replacing deprecated ReplaceAsset)

🚀 Improvements

  • Unified Asset Tracking: Implemented a new FileProcessor system for consistent asset tracking and event logging across all adapters
  • E2E Testing Framework: Added comprehensive end-to-end tests for upload and archive commands with automated Immich server setup
  • Adapter Migration: Migrated folder, Google Photos, and from-immich adapters to the new FileProcessor design for better performance and consistency
  • Error Handling: Improved error handling in multipart uploads and server communications
  • CLI Consistency: Standardized flag naming and added persistent flag support for better subcommand inheritance
  • Configuration: Enhanced configuration file support with better serialization and validation
  • Documentation: Updated command documentation with comprehensive examples and improved readability

🐛 Bug Fixes

  • Race Condition Fix: Resolved race condition in uploadAsset function that could cause upload failures
  • E2E Test Stability: Fixed various E2E test issues including server readiness checks, Windows compatibility, and user provisioning
  • API Compatibility: Updated API calls to use newer endpoints and improved error handling
  • Date Range Validation: Added validation to ensure date ranges are logically consistent
  • File Extension Handling: Fixed MP4 extension handling and improved file type detection
  • CI/CD Improvements: Enhanced workflow reliability and reduced false positives in automated checks

💥 Breaking Changes

  • Flag Renaming: Renamed --server-errors flag to --on-errors for consistency
  • API Changes: Updated replaceAsset method to use assets/copy endpoint instead of direct replacement
  • Configuration Structure: Some internal configuration structures have changed for better serialization

🔧 Internal Changes

  • Code Refactoring: Extensive refactoring to improve code maintainability and remove technical debt
  • Dependency Updates: Updated Go dependencies and CI/CD tools to latest versions
  • Test Infrastructure: Added E2E test tasks to pre-commit checks and improved test coverage
  • Documentation Generation: Enhanced automated documentation generation and release notes process
  • CI/CD Optimization: Streamlined workflows with conditional E2E testing and improved branch validation

What's Changed

  • v0.29.0 by @simulot in #1164
  • chore(deps): bump actions/setup-go from 5 to 6 by @dependabot[bot] in #1094
  • chore(deps): bump actions/checkout from 4 to 5 by @dependabot[bot] in #1095
  • feature: improve documentation and developer experience by @simulot in #1171
  • chore(deps): bump golangci/golangci-lint-action from 8 to 9 by @dependabot[bot] in #1170
  • chore(deps): bump actions/github-script from 7 to 8 by @dependabot[bot] in #1169
  • feature: unified asset tracking and event logging system by @simulot in #1179
  • chore: update Go dependencies by @simulot in #1180
  • feature/fix CLI flag inconsistencies in documentation by @simulot in #1181
  • feature: add e2e tests for from-folder by @simulot in #1183
  • docs: add release notes for v0.30.0 with new features, improvements, bug fixes, breaking changes, and internal updates by @simulot in #1184
  • release: v0.30.0 by @simulot in #1185

Full Changelog: v0.29.0...v0.30.0

v0.29.0

08 Nov 18:02

Choose a tag to compare

Release Notes - v0.29.0

This release brings powerful new filtering capabilities for the from-immich command and configuration file support, making it easier to manage complex migration scenarios.

✨ New Features

  • Advanced asset filtering for from-immich - Filter your Immich library with precision using:

    • --from-people - Filter by people/faces in photos
    • --from-tag - Filter by tags
    • --from-album, --from-no-album - Filter by albums, including assets not in any album
    • --from-city, --from-country, --from-state - Geographic filtering
    • --from-make, --from-model - Camera make and model filtering with validation
    • --from-archived, --from-trashed, --from-favorite - Filter by asset state
    • --from-minimal-rating - Filter by minimum rating
    • --from-partners - Exclude partner's shared photos
    • --from-date-range - Filter by a date range (dates, date, year)
    • --from-include-extensions, --from-exclude-extensions - Include/exclude file extensions (e.g., include .jpg but exclude .bmp)
    • --from-include-type - Select only videos or only photos

    Example:

    immich-go from-immich [server parameters] --from-people="John" --from-date=2024 --from-favorite
  • Configuration file support - Create YAML/TOML configuration files to manage settings across projects
    Configuration values can come from files, environment variables, or command-line flags, with clear logging of which source is used.
    Check the documentation for supported formats and usage at /docs/configuration.md.

🚀 Improvements

  • Renamed --server-errors to --on-errors - More consistent flag naming across commands for error handling behavior

  • Better upload logging - Upload events now show asset details instead of just filenames, making it easier to track progress during large migrations

  • Enhanced configuration visibility - The application now logs:

    • Which configuration file is being used (if any)
    • Where each setting comes from (file, environment, or command-line)
    • All active flags and parameters at startup for easier debugging
  • Streamlined CLI structure:

    • Concurrency settings (e.g., --concurrent-upload) now available from the root command
    • Clearer separation between upload, archive, and from-* commands
    • Simplified from-folder command usage
  • Date range validation - Automatically prevents invalid date ranges where "before" is after "after"

  • Comprehensive documentation - New guides for installation, usage examples, migration scenarios, and performance tuning

💥 Breaking Changes

  • Asset copy API change - If you use the API directly: ReplaceAsset method is deprecated in favor of CopyAsset, which uses the assets/copy endpoint

  • API key permissions update - API keys must now include asset.copy and asset.delete permissions in addition to previously required permissions. Please update your API keys accordingly.

🔧 Internal Changes

  • Complete E2E testing infrastructure - Comprehensive automated testing with Linux and Windows clients, ensuring reliability across platforms

  • Improved CI/CD - Smarter test execution (skips E2E tests for documentation-only changes), updated GitHub Actions, unified workflow

  • Code quality - Updated to Immich API 2.0.0, better code organization, enhanced debugging capabilities

  • Developer tools - VS Code tasks for common operations, automated release workflow, development branch now named develop

What's Changed

  • Update branch naming and validation rules in CONTRIBUTING.md by @simulot in #1075
  • Update branch naming and validation rules in CONTRIBUTING.md by @simulot in #1076
  • Fix visibility handling for archived Google Photos uploads by @simulot in #1078
  • Fixes completion by @simulot in #1080
  • Enhance asset filtering and retrieval features by @simulot in #1081
  • Implement httptrace package for enhanced request/response logging by @simulot in #1082
  • docs: Comprehensive documentation restructuring and improvement by @simulot in #1084
  • Add comprehensive documentation for Immich-Go by @simulot in #1085
  • refactor: makes the linter happy by @simulot in #1086
  • feat: add vstask for runing linter and prepare PR by @simulot in #1087
  • Add Immich API Monitor Script to check OpenAPI specifications by @simulot in #1088
  • feat: add interactive script for deleting local Git branches by @simulot in #1089
  • refactor: improve concurrency handling in dumpReader and update trace logging methods by @simulot in #1090
  • Refactor configuration management and enhance documentation by @simulot in #1097
  • feat(scripts): remove deprecated pre-release scripts and update publish script for improved versioning by @simulot in #1098
  • Feature/from-immich-options by @simulot in #1100
  • Feature/global-errors-flag by @simulot in #1103
  • reafactoring cobre CLI management by @simulot in #1117
  • Feature/e2etests by @simulot in #1127
  • Feature/move_test_immich by @simulot in #1154
  • Feature/implement api change by @simulot in #1162
  • Feature/release-note-generation by @simulot in #1163

Full Changelog: v0.28.0...v0.29.0

v0.29.4-dev-56e4e32

03 Nov 22:37
56e4e32

Choose a tag to compare

v0.29.4-dev-56e4e32 Pre-release
Pre-release

CI Pipeline Upgrade: Pre-Merge Cross-Platform & API Regression Testing

A more robust CI workflow is now enforced for all Pull Requests. This pipeline executes the complete test suite on both Linux and Windows using the latest published immich-server to proactively catch platform-specific errors and regressions stemming from upstream API changes.

Changelog

  • 56e4e32 Merge pull request #1154 from simulot:feature/move_test_immich
  • 53e33d3 Refactor e2e scripts and configuration paths
  • 88cea87 fix: .gitignore
  • f7bb594 fix: update CI paths and golangci-lint configuration for improved test coverage

v0.29.2-dev-3d89bdd more options for `from-immich`

01 Oct 20:35

Choose a tag to compare

more filters from the command from-immich:

Flags:
      --from-albums strings                     Get assets only from those albums, can be used multiple times
      --from-api-key string                     API Key
      --from-api-trace                          Enable trace of api calls
      --from-archived                           Get only archived assets
      --from-city string                        Get only assets from this city
      --from-client-timeout duration            Set server calls timeout (default 20m0s)
      --from-country string                     Get only assets from this country
      --from-date-range date-range              Only import photos taken within the specified date range (default unset)
      --from-exclude-extensions ExtensionList   Comma-separated list of extension to exclude. (e.g. .gif,.PM) (default: none)
      --from-favorite                           Get only favorite assets
      --from-include-extensions ExtensionList   Comma-separated list of extension to include. (e.g. .jpg,.heic) (default: all)
      --from-include-type IncludeType           Single file type to include. (VIDEO or IMAGE) (default: all)
      --from-make string                        Get only assets with this make
      --from-minimal-rating int                 Get only assets with a rating greater or equal to this value
      --from-model string                       Get only assets with this model
      --from-no-album                           Get only assets that are not in any album
      --from-partners                           Get partner's assets as well
      --from-people strings                     Get assets only with those people, can be used multiple times
      --from-server string                      Immich server address (example http://your-ip:2283 or https://your-domain)
      --from-skip-verify-ssl                    Skip SSL verification
      --from-state string                       Get only assets from this state
      --from-tags strings                       Get assets only with those tags, can be used multiple times
      --from-trash                              Get only trashed assets
  -h, --help                                    help for from-immich

and from the previous pre-releases:

  • rewriting of the readme
  • configuration files
  • Environment variables

What's Changed

  • Update branch naming and validation rules in CONTRIBUTING.md by @simulot in #1075
  • Fix visibility handling for archived Google Photos uploads by @simulot in #1078
  • Fixes completion by @simulot in #1080
  • Enhance asset filtering and retrieval features by @simulot in #1081
  • Implement httptrace package for enhanced request/response logging by @simulot in #1082
  • docs: Comprehensive documentation restructuring and improvement by @simulot in #1084
  • Add comprehensive documentation for Immich-Go by @simulot in #1085
  • refactor: makes the linter happy by @simulot in #1086
  • feat: add vstask for runing linter and prepare PR by @simulot in #1087
  • Add Immich API Monitor Script to check OpenAPI specifications by @simulot in #1088
  • feat: add interactive script for deleting local Git branches by @simulot in #1089
  • refactor: improve concurrency handling in dumpReader and update trace logging methods by @simulot in #1090
  • Refactor configuration management and enhance documentation by @simulot in #1097
  • feat(scripts): remove deprecated pre-release scripts and update publish script for improved versioning by @simulot in #1098
  • Feature/from-immich-options by @simulot in #1100

Full Changelog: v0.28.0...v0.29.2-dev-3d89bdd

v0.29.2-8144339 configuration file

30 Sep 19:45

Choose a tag to compare

Pre-release

New features

Readme and documentation rewritten

better management of configuration files.
The existing configuration files must be rewritten.
YAML, TOML and JSON formats

can use environment variables

Changelog since v0.28.0

What's Changed

  • Update branch naming and validation rules in CONTRIBUTING.md by @simulot in #1075
  • Fix visibility handling for archived Google Photos uploads by @simulot in #1078
  • Fixes completion by @simulot in #1080
  • Enhance asset filtering and retrieval features by @simulot in #1081
  • Implement httptrace package for enhanced request/response logging by @simulot in #1082
  • docs: Comprehensive documentation restructuring and improvement by @simulot in #1084
  • Add comprehensive documentation for Immich-Go by @simulot in #1085
  • refactor: makes the linter happy by @simulot in #1086
  • feat: add vstask for runing linter and prepare PR by @simulot in #1087
  • Add Immich API Monitor Script to check OpenAPI specifications by @simulot in #1088
  • feat: add interactive script for deleting local Git branches by @simulot in #1089
  • refactor: improve concurrency handling in dumpReader and update trace logging methods by @simulot in #1090
  • Refactor configuration management and enhance documentation by @simulot in #1097
  • feat(scripts): remove deprecated pre-release scripts and update publish script for improved versioning by @simulot in #1098

Full Changelog: v0.28.0...v0.29.2-8144339

v0.28.0 Concurrent Uploads

22 Sep 10:01
8300f4f

Choose a tag to compare

Parallel Uploads

On the immich-go side, upload operations are primarily limited by I/O, whether reading takeouts and files or sending files to the server. To improve upload throughput, @jonathan-teamstatus proposed enabling parallel uploads.
On my machine, the best performance is achieved when the number of parallel uploads matches the number of cores, resulting in a 2.5x performance gain. I set the default value for the parameter --concurrent-uploads with the number of available cores.

Server jobs are paused during the upload (as before), allowing the upload to run at full speed. Once complete, server jobs resume, and the heavy lifting begins (thumbnails, machine learning, video encoding, etc.).

image

Thank you to the new contributors:

Noteworthy changes

Fixed: job pausing / resuming:
Only the jobs "thumbnailGeneration", "metadataExtraction", "videoConversion", "faceDetection", "smartSearch" are paused. Those jobs are resumed at the end of the run.

Fixed: Windows #1010:
The windows folders are now correctly parsed

Fixed: Album creation when uploading from an immich server

What's Changed

  • Simulot/issue1055 by @simulot in #1059
  • add API key permissions by @Qhilm in #1048
  • make func (t *ImmichExifTime) UnmarshalJSON support hundreths and tenths of seconds too by @pmorch in #1006
  • Use unix style paths internally and test on windows by @paultyng in #1045
  • Add concurrent uploads support by @jonathan-teamstatus in #993
  • docs: add contributing guidelines to improve collaboration by @simulot in #1063
  • feat: add workflow to validate branch naming conventions and target branches by @simulot in #1064
  • Feature/documentation-on-concurrency by @simulot in #1066
  • Bugfix/from-immich-album by @simulot in #1070
  • Fix issues with image archiving, job pausing, and asset uploads by @simulot in #1072
  • chore(deps): bump github.com/spf13/pflag from 1.0.6 to 1.0.9 by @dependabot[bot] in #1044
  • chore(deps): bump github.com/spf13/pflag from 1.0.9 to 1.0.10 by @dependabot[bot] in #1052
  • chore(deps): bump github.com/rivo/tview from 0.0.0-20241227133733-17b7edb88c57 to 0.42.0 by @dependabot[bot] in #1043
  • chore(deps): bump actions/checkout from 4 to 5 by @dependabot[bot] in #1039
  • chore(deps): bump github.com/gdamore/tcell/v2 from 2.8.1 to 2.9.0 by @dependabot[bot] in #1040
  • chore(deps): bump github.com/go-viper/mapstructure/v2 from 2.2.1 to 2.4.0 in the go_modules group across 1 directory by @dependabot[bot] in #1035
  • chore(deps): bump github.com/navidys/tvxwidgets from 0.11.0 to 0.11.3 by @dependabot[bot] in #1028
  • chore(deps): bump golang.org/x/sync from 0.15.0 to 0.16.0 by @dependabot[bot] in #1009
  • chore(deps): bump golangci/golangci-lint-action from 7 to 8 by @dependabot[bot] in #921
  • chore(deps): bump actions/setup-go from 5 to 6 by @dependabot[bot] in #1051
  • chore(deps): bump github.com/samber/slog-multi from 1.4.1 to 1.5.0 by @dependabot[bot] in #1054

Full Changelog: v0.27.0...v0.28.0

v0.27.0 Faster uploads when photos are located on a nework folder

29 Jun 06:54
64221e9

Choose a tag to compare

Faster

PaulSonOfLars has significantly improved the performance of immich-go when the source of photos is located on a network folder. In his environment, the performance boost is remarkable, going from uploading one picture every 2 seconds to 25 pictures per second: a near 50x increase.

A heartfelt thank you to PaulSonOfLars for this incredible contribution.

What's Changed

New Contributors

We are thrilled to welcome new contributors to the project:

A big thank you to all contributors for their hard work and dedication to improving immich-go. Your efforts make this project better for everyone!


Full Changelog: v0.26.3...v0.27.0

v0.26.3 Fix archive command

24 May 18:55

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.26.2...v0.26.3

v0.26.2 timeout fix

08 May 08:09

Choose a tag to compare

What's Changed

Full Changelog: v0.26.1...v0.26.2