CLI container build is out of date #2111

Closed
opened 2026-02-05 05:10:14 +03:00 by OVERLORD · 8 comments
Owner

Originally created by @Zlendy on GitHub (Feb 2, 2024).

Originally assigned to: @etnoy on GitHub.

The bug

I'm trying to use the Immich CLI (v.0.41.0) to bulk-upload assets from my computer, but the server returns an error 400 no matter what.
The issue is most likely exclusive to 1.94.0 or 1.94.1 because I just upgraded my server yesterday from 1.93.3

The OS that Immich Server is running on

Docker 25.0.2 on Debian 12 LXC (Proxmox VE 8.1.4)

Version of Immich Server

1.94.1

Version of Immich Mobile App

N/A

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

services:
  immich_server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:release
    command: "start-server.sh"
    volumes:
      - ${DOCKER_ROOT:-.}/immich/data/files:/usr/src/app/upload
    environment:
      - NODE_ENV=production

      - DB_HOSTNAME=immich_psql14
      - DB_USERNAME=REDACTED
      - DB_PASSWORD=REDACTED
      - DB_DATABASE_NAME=immich

      - JWT_SECRET=REDACTED

      - REDIS_HOSTNAME=immich_redis
      - IMMICH_MACHINE_LEARNING_URL=http://immich_machine_learning:3003

    labels:
      - traefik.enable=true
      - traefik.http.routers.immich.rule=Host(`immich.example.com`)
      - traefik.http.routers.immich.entrypoints=https
      - traefik.http.routers.immich.tls=true
      - traefik.http.services.immich.loadbalancer.server.port=3001

      - homepage.group=Media
      - homepage.name=Immich
      - homepage.description=SSO - Image viewer
      - homepage.icon=/services/immich.png
      - homepage.href=https://immich.example.com
      - homepage.ping=https://immich.example.com
      - homepage.widget.type=immich
      - homepage.widget.url=https://immich.example.com
      - homepage.widget.key=REDACTED
    depends_on:
      - immich_redis
      - immich_psql14
    networks:
      - default
      - immich_network
    restart: unless-stopped

  immich_microservices:
    container_name: immich_microservices
    image: ghcr.io/immich-app/immich-server:release
    command: "start-microservices.sh"
    volumes:
      - ${DOCKER_ROOT:-.}/immich/data/files:/usr/src/app/upload
    environment:
      - NODE_ENV=production

      - DB_HOSTNAME=immich_psql14
      - DB_USERNAME=REDACTED
      - DB_PASSWORD=REDACTED
      - DB_DATABASE_NAME=immich

      - JWT_SECRET=REDACTED

      - REDIS_HOSTNAME=immich_redis
      - IMMICH_MACHINE_LEARNING_URL=http://immich_machine_learning:3003
    depends_on:
      - immich_redis
      - immich_psql14
    networks:
      - immich_network
    restart: unless-stopped

  immich_machine_learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:release
    volumes:
      # - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - ${DOCKER_ROOT:-.}/immich/data/files:/usr/src/app/upload
      - ${DOCKER_ROOT:-.}/immich/data/machine_learning:/cache
    environment:
      - NODE_ENV=production

      - DB_HOSTNAME=immich_psql14
      - DB_USERNAME=REDACTED
      - DB_PASSWORD=REDACTED
      - DB_DATABASE_NAME=immich
    networks:
      - immich_network
    restart: unless-stopped

  immich_redis:
    container_name: immich_redis
    image: redis:6.2
    networks:
      - immich_network
    restart: unless-stopped

  immich_psql14:
    container_name: immich_psql14
    image: tensorchord/pgvecto-rs:pg14-v0.1.11 # postgres:14
    user: 1000:1000
    environment:
      POSTGRES_PASSWORD: REDACTED
      POSTGRES_USER: REDACTED
      POSTGRES_DB: immich
      PG_DATA: /var/lib/postgresql/data
    volumes:
      - ${DOCKER_ROOT:-.}/immich/data/db:/var/lib/postgresql/data
    networks:
      - immich_network
    restart: unless-stopped

networks:
  default:
    name: service_network
    external: true

  immich_network:
    name: immich_network
    driver: bridge

Your .env content

###################################################################################
# Database
###################################################################################

DB_HOSTNAME=immich_psql14
DB_USERNAME=REDACTED
DB_PASSWORD=REDACTED
DB_DATABASE_NAME=immich

###################################################################################
# Redis
###################################################################################

REDIS_HOSTNAME=immich_redis

###################################################################################
# JWT SECRET
#
# This JWT_SECRET is used to sign the authentication keys for user login
# You should set it to a long randomly generated value
# You can use this command to generate one: openssl rand -base64 128
###################################################################################

JWT_SECRET=REDACTED

####################################################################################
# Alternative Service Addresses - Optional
#
# This is an advanced feature for users who may be running their immich services on different hosts.
# It will not change which address or port that services bind to within their containers, but it will change where other services look for their peers.
# Note: immich-microservices is bound to 3002, but no references are made
####################################################################################

IMMICH_WEB_URL=http://immich_web:3000
IMMICH_SERVER_URL=http://immich_server:3001
IMMICH_MACHINE_LEARNING_URL=http://immich_machine_learning:3003

Reproduction steps

Run the following command

docker run -i --rm -v /path/to/host/directory:/import ghcr.io/immich-app/immich-cli:latest upload --key "$KEY" --server "https://immich.example.com/api" --recursive /import --yes

Additional information

standard output:

latest: Pulling from immich-app/immich-cli
Digest: sha256:023a97dee605ba41dc61ce132e7814ebcd64843aeb01e844528467ed84802faa
Status: Image is up to date for ghcr.io/immich-app/immich-cli:latest
ghcr.io/immich-app/immich-cli:latest
Checking connectivity with Immich instance...
Server status: OK
Checking credentials...
Login status: OK
Successful authentication for user redacted@immich.example.com
Indexing local assets...
Indexing complete, found 359 local assets
Comparing local assets with those on the Immich instance...
Error getting device's uploaded assets
Error: Request failed with status code 400
    at createError (/usr/src/app/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/usr/src/app/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/usr/src/app/node_modules/axios/lib/adapters/http.js:322:11)
    at IncomingMessage.emit (node:events:539:35)
    at endReadableNT (node:internal/streams/readable:1345:12)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: [Function: httpAdapter],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    validateStatus: [Function: validateStatus],
    headers: {
      Accept: 'application/json, text/plain, */*',
      'x-api-key': 'REDACTED',
      'User-Agent': 'axios/0.26.0'
    },
    method: 'get',
    url: 'https://immich.example.com/api/asset/CLI',
    data: undefined
  },
  request: <ref *1> ClientRequest {
    _events: [Object: null prototype] {
      abort: [Function (anonymous)],
      aborted: [Function (anonymous)],
      connect: [Function (anonymous)],
      error: [Function (anonymous)],
      socket: [Function (anonymous)],
      timeout: [Function (anonymous)],
      prefinish: [Function: requestOnPrefinish]
    },
    _eventsCount: 7,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    destroyed: false,
    _last: true,
    chunkedEncoding: false,
    shouldKeepAlive: false,
    maxRequestsOnConnectionReached: false,
    _defaultKeepAlive: true,
    useChunkedEncodingByDefault: false,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    _contentLength: 0,
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    _closed: false,
    socket: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'immich.example.com',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 10,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'immich.example.com',
      _readableState: [ReadableState],
      _maxListeners: undefined,
      _writableState: [WritableState],
      allowHalfOpen: false,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      parser: null,
      _httpMessage: [Circular *1],
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: true,
      [Symbol(pendingSession)]: null,
      [Symbol(async_id_symbol)]: 156,
      [Symbol(kHandle)]: [TLSWrap],
      [Symbol(lastWriteQueueSize)]: 0,
      [Symbol(timeout)]: null,
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(kCapture)]: false,
      [Symbol(kSetNoDelay)]: false,
      [Symbol(kSetKeepAlive)]: true,
      [Symbol(kSetKeepAliveInitialDelay)]: 60,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(connect-options)]: [Object],
      [Symbol(RequestTimeout)]: undefined
    },
    _header: 'GET /api/asset/CLI HTTP/1.1\r\n' +
      'Accept: application/json, text/plain, */*\r\n' +
      'x-api-key: REDACTED\r\n' +
      'User-Agent: axios/0.26.0\r\n' +
      'Host: immich.example.com\r\n' +
      'Connection: close\r\n' +
      '\r\n',
    _keepAliveTimeout: 0,
    _onPendingData: [Function: nop],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object: null prototype],
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype],
      freeSockets: [Object: null prototype] {},
      keepAliveMsecs: 1000,
      keepAlive: false,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      [Symbol(kCapture)]: false
    },
    socketPath: undefined,
    method: 'GET',
    maxHeaderSize: undefined,
    insecureHTTPParser: undefined,
    path: '/api/asset/CLI',
    _ended: true,
    res: IncomingMessage {
      _readableState: [ReadableState],
      _events: [Object: null prototype],
      _eventsCount: 4,
      _maxListeners: undefined,
      socket: [TLSSocket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 400,
      statusMessage: 'Bad Request',
      client: [TLSSocket],
      _consuming: false,
      _dumped: false,
      req: [Circular *1],
      responseUrl: 'https://immich.example.com/api/asset/CLI',
      redirects: [],
      [Symbol(kCapture)]: false,
      [Symbol(kHeaders)]: [Object],
      [Symbol(kHeadersCount)]: 18,
      [Symbol(kTrailers)]: null,
      [Symbol(kTrailersCount)]: 0,
      [Symbol(RequestTimeout)]: undefined
    },
    aborted: false,
    timeoutCb: null,
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: false,
    host: 'immich.example.com',
    protocol: 'https:',
    _redirectable: Writable {
      _writableState: [WritableState],
      _events: [Object: null prototype],
      _eventsCount: 3,
      _maxListeners: undefined,
      _options: [Object],
      _ended: true,
      _ending: true,
      _redirectCount: 0,
      _redirects: [],
      _requestBodyLength: 0,
      _requestBodyBuffers: [],
      _onNativeResponse: [Function (anonymous)],
      _currentRequest: [Circular *1],
      _currentUrl: 'https://immich.example.com/api/asset/CLI',
      [Symbol(kCapture)]: false
    },
    [Symbol(kCapture)]: false,
    [Symbol(kNeedDrain)]: false,
    [Symbol(corked)]: 0,
    [Symbol(kOutHeaders)]: [Object: null prototype] {
      accept: [Array],
      'x-api-key': [Array],
      'user-agent': [Array],
      host: [Array]
    }
  },
  response: {
    status: 400,
    statusText: 'Bad Request',
    headers: {
      'alt-svc': 'h3=":443"; ma=2592000',
      'content-length': '72',
      'content-type': 'application/json; charset=utf-8',
      date: 'Fri, 02 Feb 2024 08:12:49 GMT',
      etag: '"48-z7/p6o3CGbDGy67o/kJVQM9fcOs"',
      vary: 'Accept-Encoding',
      'x-powered-by': 'Express',
      connection: 'close'
    },
    config: {
      transitional: [Object],
      adapter: [Function: httpAdapter],
      transformRequest: [Array],
      transformResponse: [Array],
      timeout: 0,
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      maxContentLength: -1,
      maxBodyLength: -1,
      validateStatus: [Function: validateStatus],
      headers: [Object],
      method: 'get',
      url: 'https://immich.example.com/api/asset/CLI',
      data: undefined
    },
    request: <ref *1> ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'GET /api/asset/CLI HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'x-api-key: REDACTED\r\n' +
        'User-Agent: axios/0.26.0\r\n' +
        'Host: immich.example.com\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      path: '/api/asset/CLI',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'immich.example.com',
      protocol: 'https:',
      _redirectable: [Writable],
      [Symbol(kCapture)]: false,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype]
    },
    data: { message: [Array], error: 'Bad Request', statusCode: 400 }
  },
  isAxiosError: true,
  toJSON: [Function: toJSON]
}
Originally created by @Zlendy on GitHub (Feb 2, 2024). Originally assigned to: @etnoy on GitHub. ### The bug I'm trying to use the Immich CLI (v.0.41.0) to bulk-upload assets from my computer, but the server returns an error 400 no matter what. The issue is most likely exclusive to 1.94.0 or 1.94.1 because I just upgraded my server yesterday from 1.93.3 ### The OS that Immich Server is running on Docker 25.0.2 on Debian 12 LXC (Proxmox VE 8.1.4) ### Version of Immich Server 1.94.1 ### Version of Immich Mobile App N/A ### Platform with the issue - [X] Server - [ ] Web - [ ] Mobile ### Your docker-compose.yml content ```YAML services: immich_server: container_name: immich_server image: ghcr.io/immich-app/immich-server:release command: "start-server.sh" volumes: - ${DOCKER_ROOT:-.}/immich/data/files:/usr/src/app/upload environment: - NODE_ENV=production - DB_HOSTNAME=immich_psql14 - DB_USERNAME=REDACTED - DB_PASSWORD=REDACTED - DB_DATABASE_NAME=immich - JWT_SECRET=REDACTED - REDIS_HOSTNAME=immich_redis - IMMICH_MACHINE_LEARNING_URL=http://immich_machine_learning:3003 labels: - traefik.enable=true - traefik.http.routers.immich.rule=Host(`immich.example.com`) - traefik.http.routers.immich.entrypoints=https - traefik.http.routers.immich.tls=true - traefik.http.services.immich.loadbalancer.server.port=3001 - homepage.group=Media - homepage.name=Immich - homepage.description=SSO - Image viewer - homepage.icon=/services/immich.png - homepage.href=https://immich.example.com - homepage.ping=https://immich.example.com - homepage.widget.type=immich - homepage.widget.url=https://immich.example.com - homepage.widget.key=REDACTED depends_on: - immich_redis - immich_psql14 networks: - default - immich_network restart: unless-stopped immich_microservices: container_name: immich_microservices image: ghcr.io/immich-app/immich-server:release command: "start-microservices.sh" volumes: - ${DOCKER_ROOT:-.}/immich/data/files:/usr/src/app/upload environment: - NODE_ENV=production - DB_HOSTNAME=immich_psql14 - DB_USERNAME=REDACTED - DB_PASSWORD=REDACTED - DB_DATABASE_NAME=immich - JWT_SECRET=REDACTED - REDIS_HOSTNAME=immich_redis - IMMICH_MACHINE_LEARNING_URL=http://immich_machine_learning:3003 depends_on: - immich_redis - immich_psql14 networks: - immich_network restart: unless-stopped immich_machine_learning: container_name: immich_machine_learning image: ghcr.io/immich-app/immich-machine-learning:release volumes: # - ${UPLOAD_LOCATION}:/usr/src/app/upload - ${DOCKER_ROOT:-.}/immich/data/files:/usr/src/app/upload - ${DOCKER_ROOT:-.}/immich/data/machine_learning:/cache environment: - NODE_ENV=production - DB_HOSTNAME=immich_psql14 - DB_USERNAME=REDACTED - DB_PASSWORD=REDACTED - DB_DATABASE_NAME=immich networks: - immich_network restart: unless-stopped immich_redis: container_name: immich_redis image: redis:6.2 networks: - immich_network restart: unless-stopped immich_psql14: container_name: immich_psql14 image: tensorchord/pgvecto-rs:pg14-v0.1.11 # postgres:14 user: 1000:1000 environment: POSTGRES_PASSWORD: REDACTED POSTGRES_USER: REDACTED POSTGRES_DB: immich PG_DATA: /var/lib/postgresql/data volumes: - ${DOCKER_ROOT:-.}/immich/data/db:/var/lib/postgresql/data networks: - immich_network restart: unless-stopped networks: default: name: service_network external: true immich_network: name: immich_network driver: bridge ``` ### Your .env content ```Shell ################################################################################### # Database ################################################################################### DB_HOSTNAME=immich_psql14 DB_USERNAME=REDACTED DB_PASSWORD=REDACTED DB_DATABASE_NAME=immich ################################################################################### # Redis ################################################################################### REDIS_HOSTNAME=immich_redis ################################################################################### # JWT SECRET # # This JWT_SECRET is used to sign the authentication keys for user login # You should set it to a long randomly generated value # You can use this command to generate one: openssl rand -base64 128 ################################################################################### JWT_SECRET=REDACTED #################################################################################### # Alternative Service Addresses - Optional # # This is an advanced feature for users who may be running their immich services on different hosts. # It will not change which address or port that services bind to within their containers, but it will change where other services look for their peers. # Note: immich-microservices is bound to 3002, but no references are made #################################################################################### IMMICH_WEB_URL=http://immich_web:3000 IMMICH_SERVER_URL=http://immich_server:3001 IMMICH_MACHINE_LEARNING_URL=http://immich_machine_learning:3003 ``` ### Reproduction steps ```bash Run the following command docker run -i --rm -v /path/to/host/directory:/import ghcr.io/immich-app/immich-cli:latest upload --key "$KEY" --server "https://immich.example.com/api" --recursive /import --yes ``` ### Additional information standard output: ```log latest: Pulling from immich-app/immich-cli Digest: sha256:023a97dee605ba41dc61ce132e7814ebcd64843aeb01e844528467ed84802faa Status: Image is up to date for ghcr.io/immich-app/immich-cli:latest ghcr.io/immich-app/immich-cli:latest Checking connectivity with Immich instance... Server status: OK Checking credentials... Login status: OK Successful authentication for user redacted@immich.example.com Indexing local assets... Indexing complete, found 359 local assets Comparing local assets with those on the Immich instance... Error getting device's uploaded assets Error: Request failed with status code 400 at createError (/usr/src/app/node_modules/axios/lib/core/createError.js:16:15) at settle (/usr/src/app/node_modules/axios/lib/core/settle.js:17:12) at IncomingMessage.handleStreamEnd (/usr/src/app/node_modules/axios/lib/adapters/http.js:322:11) at IncomingMessage.emit (node:events:539:35) at endReadableNT (node:internal/streams/readable:1345:12) at processTicksAndRejections (node:internal/process/task_queues:83:21) { config: { transitional: { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }, adapter: [Function: httpAdapter], transformRequest: [ [Function: transformRequest] ], transformResponse: [ [Function: transformResponse] ], timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, validateStatus: [Function: validateStatus], headers: { Accept: 'application/json, text/plain, */*', 'x-api-key': 'REDACTED', 'User-Agent': 'axios/0.26.0' }, method: 'get', url: 'https://immich.example.com/api/asset/CLI', data: undefined }, request: <ref *1> ClientRequest { _events: [Object: null prototype] { abort: [Function (anonymous)], aborted: [Function (anonymous)], connect: [Function (anonymous)], error: [Function (anonymous)], socket: [Function (anonymous)], timeout: [Function (anonymous)], prefinish: [Function: requestOnPrefinish] }, _eventsCount: 7, _maxListeners: undefined, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: false, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, _contentLength: 0, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: TLSSocket { _tlsOptions: [Object], _secureEstablished: true, _securePending: false, _newSessionPending: false, _controlReleased: true, secureConnecting: false, _SNICallback: null, servername: 'immich.example.com', alpnProtocol: false, authorized: true, authorizationError: null, encrypted: true, _events: [Object: null prototype], _eventsCount: 10, connecting: false, _hadError: false, _parent: null, _host: 'immich.example.com', _readableState: [ReadableState], _maxListeners: undefined, _writableState: [WritableState], allowHalfOpen: false, _sockname: null, _pendingData: null, _pendingEncoding: '', server: undefined, _server: null, ssl: [TLSWrap], _requestCert: true, _rejectUnauthorized: true, parser: null, _httpMessage: [Circular *1], [Symbol(res)]: [TLSWrap], [Symbol(verified)]: true, [Symbol(pendingSession)]: null, [Symbol(async_id_symbol)]: 156, [Symbol(kHandle)]: [TLSWrap], [Symbol(lastWriteQueueSize)]: 0, [Symbol(timeout)]: null, [Symbol(kBuffer)]: null, [Symbol(kBufferCb)]: null, [Symbol(kBufferGen)]: null, [Symbol(kCapture)]: false, [Symbol(kSetNoDelay)]: false, [Symbol(kSetKeepAlive)]: true, [Symbol(kSetKeepAliveInitialDelay)]: 60, [Symbol(kBytesRead)]: 0, [Symbol(kBytesWritten)]: 0, [Symbol(connect-options)]: [Object], [Symbol(RequestTimeout)]: undefined }, _header: 'GET /api/asset/CLI HTTP/1.1\r\n' + 'Accept: application/json, text/plain, */*\r\n' + 'x-api-key: REDACTED\r\n' + 'User-Agent: axios/0.26.0\r\n' + 'Host: immich.example.com\r\n' + 'Connection: close\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: Agent { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, defaultPort: 443, protocol: 'https:', options: [Object: null prototype], requests: [Object: null prototype] {}, sockets: [Object: null prototype], freeSockets: [Object: null prototype] {}, keepAliveMsecs: 1000, keepAlive: false, maxSockets: Infinity, maxFreeSockets: 256, scheduling: 'lifo', maxTotalSockets: Infinity, totalSocketCount: 1, maxCachedSessions: 100, _sessionCache: [Object], [Symbol(kCapture)]: false }, socketPath: undefined, method: 'GET', maxHeaderSize: undefined, insecureHTTPParser: undefined, path: '/api/asset/CLI', _ended: true, res: IncomingMessage { _readableState: [ReadableState], _events: [Object: null prototype], _eventsCount: 4, _maxListeners: undefined, socket: [TLSSocket], httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: '1.1', complete: true, rawHeaders: [Array], rawTrailers: [], aborted: false, upgrade: false, url: '', method: null, statusCode: 400, statusMessage: 'Bad Request', client: [TLSSocket], _consuming: false, _dumped: false, req: [Circular *1], responseUrl: 'https://immich.example.com/api/asset/CLI', redirects: [], [Symbol(kCapture)]: false, [Symbol(kHeaders)]: [Object], [Symbol(kHeadersCount)]: 18, [Symbol(kTrailers)]: null, [Symbol(kTrailersCount)]: 0, [Symbol(RequestTimeout)]: undefined }, aborted: false, timeoutCb: null, upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: 'immich.example.com', protocol: 'https:', _redirectable: Writable { _writableState: [WritableState], _events: [Object: null prototype], _eventsCount: 3, _maxListeners: undefined, _options: [Object], _ended: true, _ending: true, _redirectCount: 0, _redirects: [], _requestBodyLength: 0, _requestBodyBuffers: [], _onNativeResponse: [Function (anonymous)], _currentRequest: [Circular *1], _currentUrl: 'https://immich.example.com/api/asset/CLI', [Symbol(kCapture)]: false }, [Symbol(kCapture)]: false, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype] { accept: [Array], 'x-api-key': [Array], 'user-agent': [Array], host: [Array] } }, response: { status: 400, statusText: 'Bad Request', headers: { 'alt-svc': 'h3=":443"; ma=2592000', 'content-length': '72', 'content-type': 'application/json; charset=utf-8', date: 'Fri, 02 Feb 2024 08:12:49 GMT', etag: '"48-z7/p6o3CGbDGy67o/kJVQM9fcOs"', vary: 'Accept-Encoding', 'x-powered-by': 'Express', connection: 'close' }, config: { transitional: [Object], adapter: [Function: httpAdapter], transformRequest: [Array], transformResponse: [Array], timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, validateStatus: [Function: validateStatus], headers: [Object], method: 'get', url: 'https://immich.example.com/api/asset/CLI', data: undefined }, request: <ref *1> ClientRequest { _events: [Object: null prototype], _eventsCount: 7, _maxListeners: undefined, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: false, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, _contentLength: 0, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: [TLSSocket], _header: 'GET /api/asset/CLI HTTP/1.1\r\n' + 'Accept: application/json, text/plain, */*\r\n' + 'x-api-key: REDACTED\r\n' + 'User-Agent: axios/0.26.0\r\n' + 'Host: immich.example.com\r\n' + 'Connection: close\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: [Agent], socketPath: undefined, method: 'GET', maxHeaderSize: undefined, insecureHTTPParser: undefined, path: '/api/asset/CLI', _ended: true, res: [IncomingMessage], aborted: false, timeoutCb: null, upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: 'immich.example.com', protocol: 'https:', _redirectable: [Writable], [Symbol(kCapture)]: false, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype] }, data: { message: [Array], error: 'Bad Request', statusCode: 400 } }, isAxiosError: true, toJSON: [Function: toJSON] } ```
OVERLORD added the cli label 2026-02-05 05:10:14 +03:00
Author
Owner

@Zlendy commented on GitHub (Feb 2, 2024):

Note: There are no new logs on the server

@Zlendy commented on GitHub (Feb 2, 2024): Note: There are no new logs on the server
Author
Owner

@bo0tzz commented on GitHub (Feb 2, 2024):

The docker version of the CLI unfortunately hasn't been updated since a rewrite a few months ago. I belive @etnoy is already looking into this.

@bo0tzz commented on GitHub (Feb 2, 2024): The docker version of the CLI unfortunately hasn't been updated since a rewrite a few months ago. I belive @etnoy is already looking into this.
Author
Owner

@Zlendy commented on GitHub (Feb 2, 2024):

Hi @bo0tzz, is there any alternative I could use in the meantime?

@Zlendy commented on GitHub (Feb 2, 2024): Hi @bo0tzz, is there any alternative I could use in the meantime?
Author
Owner

@bo0tzz commented on GitHub (Feb 2, 2024):

You can install the CLI via NPM, see https://immich.app/docs/features/command-line-interface.

@bo0tzz commented on GitHub (Feb 2, 2024): You can install the CLI via NPM, see https://immich.app/docs/features/command-line-interface.
Author
Owner

@Zlendy commented on GitHub (Feb 2, 2024):

Hmm, that doesn't seem to work either.
It's the same version in both docker and npm (0.41.0)
image

And the bug is still present when installed via npm (I won't attach everything again because it's exactly the same)
image

@Zlendy commented on GitHub (Feb 2, 2024): Hmm, that doesn't seem to work either. It's the same version in both docker and npm (0.41.0) ![image](https://github.com/immich-app/immich/assets/22578704/5e7abffd-1b77-4352-9021-3b4cfd8d4e3a) And the bug is still present when installed via npm (I won't attach everything again because it's exactly the same) ![image](https://github.com/immich-app/immich/assets/22578704/0d45c1de-a0bc-4eff-a965-6aaa5fb8778c)
Author
Owner

@bo0tzz commented on GitHub (Feb 2, 2024):

You want @immich/cli, not immich.

@bo0tzz commented on GitHub (Feb 2, 2024): You want `@immich/cli`, not `immich`.
Author
Owner

@Zlendy commented on GitHub (Feb 2, 2024):

Oh, that's a dumb mistake on my end.
But there doesn't seem to be a way to use a different key per each upload.

Well, I'll see if I can find any workaround.

@Zlendy commented on GitHub (Feb 2, 2024): Oh, that's a dumb mistake on my end. But there doesn't seem to be a way to use a different key per each upload. Well, I'll see if I can find any workaround.
Author
Owner

@Zlendy commented on GitHub (Feb 2, 2024):

Yup, @immich/cli works flawlessly.
Thank you very much!

@Zlendy commented on GitHub (Feb 2, 2024): Yup, `@immich/cli` works flawlessly. Thank you very much!
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#2111