Can't set image description to blank #5803

Open
opened 2026-02-20 04:04:52 -05:00 by deekerman · 4 comments
Owner

Originally created by @orrd on GitHub (Jun 13, 2025).

Originally assigned to: @dahool on GitHub.

I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.

  • Yes

The bug

When trying to set the image description to blank, it defaults to what's stored in the photo's exif tag. There doesn't seem to be a way to clear this without going and editing the image file itself.

There was an existing issue #11238 of this same problem. It looks like this had been fixed, but it seems to have reverted to be a problem again.

The OS that Immich Server is running on

Ubuntu 22.04.5

Version of Immich Server

1.134.0

Version of Immich Mobile App

1.134.0

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

#
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - '2283:2283'
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:8-bookworm@sha256:ff21bc0f8194dc9c105b769aeabf9585fea6a8ed649c0781caeac5cb3c247884
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0@sha256:fa4f6e0971f454cd95fec5a9aaed2ed93d8f46725cc6bc61e0698e97dba96da1
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
      # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
      # DB_STORAGE_TYPE: 'HDD'
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    restart: always

volumes:
  model-cache:

Your .env content

UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
IMMICH_VERSION=release
DB_PASSWORD=xxx
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

Reproduction steps

  1. Upload an image with an exif description.
  2. Use Immich to edit the description and set it to blank.
  3. Reload the Immich page in Immich and see that it didn't save updated the description.
  4. Enter a new description.
  5. Reload the Immich and see that it did save the description.
  6. Delete the description.
  7. Reload the Immich page and see that it reverts to the image's exif description.
    ...

Relevant log output


Additional information

No response

Originally created by @orrd on GitHub (Jun 13, 2025). Originally assigned to: @dahool on GitHub. ### I have searched the existing issues, both open and closed, to make sure this is not a duplicate report. - [x] Yes ### The bug When trying to set the image description to blank, it defaults to what's stored in the photo's exif tag. There doesn't seem to be a way to clear this without going and editing the image file itself. There was an existing issue #11238 of this same problem. It looks like this had been fixed, but it seems to have reverted to be a problem again. ### The OS that Immich Server is running on Ubuntu 22.04.5 ### Version of Immich Server 1.134.0 ### Version of Immich Mobile App 1.134.0 ### Platform with the issue - [ ] Server - [x] Web - [ ] Mobile ### Your docker-compose.yml content ```YAML # # WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose # # Make sure to use the docker-compose.yml of the current release: # # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml # # The compose file on main may not be compatible with the latest release. name: immich services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} # extends: # file: hwaccel.transcoding.yml # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding volumes: # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - '2283:2283' depends_on: - redis - database restart: always healthcheck: disable: false immich-machine-learning: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. # Example tag: ${IMMICH_VERSION:-release}-cuda image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration # file: hwaccel.ml.yml # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache env_file: - .env restart: always healthcheck: disable: false redis: container_name: immich_redis image: docker.io/valkey/valkey:8-bookworm@sha256:ff21bc0f8194dc9c105b769aeabf9585fea6a8ed649c0781caeac5cb3c247884 healthcheck: test: redis-cli ping || exit 1 restart: always database: container_name: immich_postgres image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0@sha256:fa4f6e0971f454cd95fec5a9aaed2ed93d8f46725cc6bc61e0698e97dba96da1 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs # DB_STORAGE_TYPE: 'HDD' volumes: # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file - ${DB_DATA_LOCATION}:/var/lib/postgresql/data restart: always volumes: model-cache: ``` ### Your .env content ```Shell UPLOAD_LOCATION=./library DB_DATA_LOCATION=./postgres IMMICH_VERSION=release DB_PASSWORD=xxx DB_USERNAME=postgres DB_DATABASE_NAME=immich ``` ### Reproduction steps 1. Upload an image with an exif description. 2. Use Immich to edit the description and set it to blank. 3. Reload the Immich page in Immich and see that it didn't save updated the description. 4. Enter a new description. 5. Reload the Immich and see that it *did* save the description. 6. Delete the description. 7. Reload the Immich page and see that it reverts to the image's exif description. ... ### Relevant log output ```shell ``` ### Additional information _No response_
Author
Owner

@JAKESNAKE523 commented on GitHub (Jan 28, 2026):

I will take a look at this issue. Looking for somewhere to contribute and I think I can handle this

@JAKESNAKE523 commented on GitHub (Jan 28, 2026): I will take a look at this issue. Looking for somewhere to contribute and I think I can handle this
Author
Owner

@JAKESNAKE523 commented on GitHub (Jan 29, 2026):

I took a look and there are a couple issues I see.
Exiftool-vendored will not store a blank field like that. Empty strings and null values are taken as deleted fields. I think this is partially to prevent any possible parsing issues from other software.

I can think of a couple options

  1. Write a zero width space \u200B so that it is taken as a character and written
  2. Come up with some placeholder, such as [empty] or something else

The zero width space has the positive that it would display as blank in other editors that recognize sidecar files.

Either of these would be sanitized to an empty string when fetched for the frontend.

Is there a preferred option between these two for how to handle this or any other ideas?

@JAKESNAKE523 commented on GitHub (Jan 29, 2026): I took a look and there are a couple issues I see. Exiftool-vendored will not store a blank field like that. Empty strings and null values are taken as deleted fields. I think this is partially to prevent any possible parsing issues from other software. I can think of a couple options 1. Write a zero width space \u200B so that it is taken as a character and written 2. Come up with some placeholder, such as [empty] or something else The zero width space has the positive that it would display as blank in other editors that recognize sidecar files. Either of these would be sanitized to an empty string when fetched for the frontend. Is there a preferred option between these two for how to handle this or any other ideas?
Author
Owner

@dahool commented on GitHub (Jan 29, 2026):

I took a look and there are a couple issues I see.
Exiftool-vendored will not store a blank field like that. Empty strings and null values are taken as deleted fields. I think this is partially to prevent any possible parsing issues from other software.

I can think of a couple options

  1. Write a zero width space \u200B so that it is taken as a character and written
  2. Come up with some placeholder, such as [empty] or something else

The zero width space has the positive that it would display as blank in other editors that recognize sidecar files.

Either of these would be sanitized to an empty string when fetched for the frontend.

Is there a preferred option between these two for how to handle this or any other ideas?

I already contributed a fix for this https://github.com/immich-app/immich/pull/19178
but it was closed expecting exiftool to change its behavior instead, and I don't think they will since it's not broken.

@dahool commented on GitHub (Jan 29, 2026): > I took a look and there are a couple issues I see. > Exiftool-vendored will not store a blank field like that. Empty strings and null values are taken as deleted fields. I think this is partially to prevent any possible parsing issues from other software. > > I can think of a couple options > 1. Write a zero width space \u200B so that it is taken as a character and written > 2. Come up with some placeholder, such as [empty] or something else > > The zero width space has the positive that it would display as blank in other editors that recognize sidecar files. > > Either of these would be sanitized to an empty string when fetched for the frontend. > > Is there a preferred option between these two for how to handle this or any other ideas? I already contributed a fix for this https://github.com/immich-app/immich/pull/19178 but it was closed expecting exiftool to change its behavior instead, and I don't think they will since it's not broken.
Author
Owner

@keesjebal commented on GitHub (Feb 7, 2026):

This is still a bug in v2.5.5. Setting a new description works, but setting a blank description results the original value being restored.

@keesjebal commented on GitHub (Feb 7, 2026): This is still a bug in v2.5.5. Setting a new description works, but setting a blank description results the original value being restored.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/immich#5803
No description provided.