Immich-Go is an open-source tool designed to streamline uploading large photo collections to your self-hosted Immich server.

Immich-go:Download all parts on your computer
Importing Your Photos:
Use /path/to/your/files/takeout-*.zip as file name.
* For .tgz files (compressed tar archives), you'll need to decompress all the files into a single folder before importing. When using the import tool, don't forget the -google-photos option.
* You can remove any unwanted files or folders from your takeout before importing.
* Restarting an interrupted import won't cause any problems and it will resume the work where it was left.
-upload-when-missing-JSONFor insights into the reasoning behind this alternative to immich-cli, please read the motivation here.
⚠️ This an early version, not yet extensively tested
⚠️ Keep a backup copy of your files for safety
immich-goThe immich-go is a command line tool that must be run from a terminal window.
The immich-go program uses the Immich API. Hence it needs the server address and a valid API key.
On linux, MacOS, FreeBSD and linux friends:
./immich-go -server=URL -key=KEY -general_options COMMAND -command_options... {path/to/files}
[!IMPORTANT] MAC OS users have to allow immich-go to run. Open Privacy & Security > Security Settings
On Windows systems:
.\immich-go -server=URL -key=KEY -general_options COMMAND -command_options... {path/to/files}
Boolean options have a default value indicated below. Mentioning any option on the common line changes the option to TRUE.
to force an option to FALSE, use the following syntax: -option=FALSE.
Example: Immich-go check the server's SSL certificate. you can disable this behavior by turning on the skip-verify-ssl option. Just add -skip-verify-ssl.
-skip-verify-ssl is equivalent to -skip-verify-ssl=TRUE. To turn off the feature (which is the default behavior), use -skip-verify-ssl=FALSE
| Parameter | Description | Default value |
|---|---|---|
-use-configuration=path/to/config/file |
Specifies the configuration file to use. |
Server URL and the API key are stored into the immich-go configuration file. They can be omitted for the next runs. | Linux $HOME/.config/immich-go/immich-go.json
Windows %AppData%\immich-go\immich-go.json
Apple $HOME/Library/Application Support/immich-go/immich-go.json |
| -server=URL | URL of the Immich service, example http://:2283 or https://your-domain | |
| -api=URL | URL of the Immich api endpoint (http://container_ip:3301) | |
| -device-uuid=VALUE | Force the device identification | $HOSTNAME |
| -client-timeout=duration | Set the timeout for server calls. The duration is a decimal number with a unit suffix, such as "300ms", "1.5m" or "45m". Valid time units are "ms", "s", "m", "h". | 5m |
| -skip-verify-ssl | Skip SSL verification for use with self-signed certificates | false |
| -key=KEY | A key generated by the user. Uploaded photos will belong to the key's owner. | |
| -log-level=LEVEL | Adjust the log verbosity as follows:
ERROR: Display only errors
WARNING: Same as previous one plus non-blocking error
INFO: Information messages | INFO |
| -log-file=/path/to/log/file | Write all messages to a file | Linux $HOME/.cache/immich-go/immich-go_YYYY-MM-DD_HH-MI-SS.log
Windows %LocalAppData%\immich-go\immich-go_YYYY-MM-DD_HH-MI-SS.log
Apple $HOME/Library/Caches/immich-go/immich-go_YYYY-MM-DD_HH-MI-SS.log |
| -log-json | Output the log as line-delimited JSON file | false |
| -time-zone=time_zone_name | Set the time zone for dates without time zone information | the system's time zone |
| -no-ui | Disable the user interface | false |
| -debug-counters | Enable the generation a CSV beside the log file | false |
| -api-trace | Enable trace of API calls | false |
uploadUse this command for uploading photos and videos from a local directory, a zipped folder or all zip files that google photo takeout procedure has generated.
| Parameter | Description | Default value |
|---|---|---|
-album="ALBUM NAME" |
Import assets into the Immich album ALBUM NAME. |
|
-dry-run |
Preview all actions as they would be done. | FALSE |
-create-album-folder |
Generate immich albums after folder names. | FALSE |
-use-full-path-album-name |
Use the full path to the file to determine the album name. | FALSE |
-album-name-path-separator |
Determines how multiple (sub) folders, if any, will be joined | |
-create-stacks |
Stack jpg/raw or bursts. | FALSE |
-stack-jpg-raw |
Control the stacking of jpg/raw photos. | FALSE |
-stack-burst |
Control the stacking bursts. | FALSE |
-select-types=".ext,.ext,.ext..." |
List of accepted extensions. | |
-exclude-types=".ext,.ext,.ext..." |
List of excluded extensions. |
$ claude mcp add immich-go \
-- python -m otcore.mcp_server <graph>