Greek font rendering incorrectly in Immich Mobile App #3557

Closed
opened 2026-02-05 08:58:34 +03:00 by OVERLORD · 9 comments
Owner

Originally created by @Vitaspiros on GitHub (Jun 17, 2024).

The bug

I have set the language in Immich App to Greek, and due to that funky font, it renders incorrectly. Let me show you what I mean.

This is the Greek translation for the text 'Troubleshooting' under the Advanced tab in settings rendered correctly using this website with the font 'Noto Sans':
Screenshot from 2024-06-17 17-24-48

Now, this is what the same text looks like on your app:
Screenshot_20240617-171323_Immich_1

I hope you can see that the main problem is that the acute accents overlap with the letters. They have to be one position back, but instead they are here.

Other problems include:

  • Some letters with acute accent do not render at all
  • The Greek Letter Σ (Sigma) renders as the latin C

This screenshot of the string 'Σάβ 4 Μαΐ' ('Sat 4 May' in English, representing a date) shows all the problems simultaneously:
Screenshot_20240617-173203_Immich_1

I propose these fixes:

  • Fix the font
  • Add an option to choose a fallback font
  • Don't use this font

Also, thank you for this amazing piece of software you are developing. I am just trying out for the first time and it seems very nice to have your own selfhosted Google Photos with all the features.

The OS that Immich Server is running on

Debian

Version of Immich Server

v1.106.4

Version of Immich Mobile App

v1.106.3 build.143

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

#
# WARNING: 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:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - 2283:3001
    depends_on:
      - redis
      - database
    restart: always

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, openvino] 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, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine@sha256:d6c2911ac51b289db208767581a5d154544f2b2fe4914ea5056443f62dc6e900
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    healthcheck:
      test: pg_isready --dbname='${DB_DATABASE_NAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    command: ["postgres", "-c" ,"shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
    restart: always

volumes:
  model-cache:

Your .env content

# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=./library
# The location where your database files are stored
DB_DATA_LOCATION=./db

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=supersecretpasswordiamnotrevealing

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

Reproduction steps

1. Open the app
2. Set the Language to Greek
3. Observe the text

Relevant log output

No response

Additional information

No response

Originally created by @Vitaspiros on GitHub (Jun 17, 2024). ### The bug I have set the language in Immich App to Greek, and due to that funky font, it renders incorrectly. Let me show you what I mean. This is the Greek translation for the text 'Troubleshooting' under the Advanced tab in settings rendered correctly using [this website](https://txt.svg.beauty/) with the font 'Noto Sans': ![Screenshot from 2024-06-17 17-24-48](https://github.com/immich-app/immich/assets/49318253/c38d3da8-d972-48cd-8fbe-3dfabe2193de) Now, this is what the same text looks like on your app: ![Screenshot_20240617-171323_Immich_1](https://github.com/immich-app/immich/assets/49318253/3d095195-7f6e-42ea-87a9-75e02d3e096d) I hope you can see that the main problem is that the [acute accents](https://en.wikipedia.org/wiki/Acute_accent) overlap with the letters. They have to be one position back, but instead they are here. Other problems include: - Some letters with acute accent do not render at all - The Greek Letter Σ (Sigma) renders as the latin C This screenshot of the string 'Σάβ 4 Μαΐ' ('Sat 4 May' in English, representing a date) shows all the problems simultaneously: ![Screenshot_20240617-173203_Immich_1](https://github.com/immich-app/immich/assets/49318253/f9146796-ac83-47fe-a5f6-ba2b039ffcaa) I propose these fixes: - Fix the font - Add an option to choose a fallback font - Don't use this font Also, thank you for this amazing piece of software you are developing. I am just trying out for the first time and it seems very nice to have your own selfhosted Google Photos with all the features. ### The OS that Immich Server is running on Debian ### Version of Immich Server v1.106.4 ### Version of Immich Mobile App v1.106.3 build.143 ### Platform with the issue - [ ] Server - [ ] Web - [X] Mobile ### Your docker-compose.yml content ```YAML # # WARNING: 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: - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - .env ports: - 2283:3001 depends_on: - redis - database restart: always immich-machine-learning: container_name: immich_machine_learning # For hardware acceleration, add one of -[armnn, cuda, openvino] 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, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable volumes: - model-cache:/cache env_file: - .env restart: always redis: container_name: immich_redis image: docker.io/redis:6.2-alpine@sha256:d6c2911ac51b289db208767581a5d154544f2b2fe4914ea5056443f62dc6e900 healthcheck: test: redis-cli ping || exit 1 restart: always database: container_name: immich_postgres image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' volumes: - ${DB_DATA_LOCATION}:/var/lib/postgresql/data healthcheck: test: pg_isready --dbname='${DB_DATABASE_NAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1 interval: 5m start_interval: 30s start_period: 5m command: ["postgres", "-c" ,"shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"] restart: always volumes: model-cache: ``` ### Your .env content ```Shell # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=./library # The location where your database files are stored DB_DATA_LOCATION=./db # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List # TZ=Etc/UTC # The Immich version to use. You can pin this to a specific version like "v1.71.0" IMMICH_VERSION=release # Connection secret for postgres. You should change it to a random password DB_PASSWORD=supersecretpasswordiamnotrevealing # The values below this line do not need to be changed ################################################################################### DB_USERNAME=postgres DB_DATABASE_NAME=immich ``` ### Reproduction steps ```bash 1. Open the app 2. Set the Language to Greek 3. Observe the text ``` ### Relevant log output _No response_ ### Additional information _No response_
OVERLORD added the 📱mobile label 2026-02-05 08:58:34 +03:00
Author
Owner

@VelocityRa commented on GitHub (Oct 22, 2024):

Hi @alextran1502 @pruthvi-21 I'm interested in fixing this, it makes Greek and probably other languages unpleasant to use.

The underlying issue seems to be that the Overpass font that's in use does not support Greek (not sure what is the current broken font that's rendered - maybe a Flutter fallback?).

Note that I have no experience in Flutter and very limited experience with Android development.
What would be the easiest accepted fix?
(not looking for ie. implementing a font chooser/fallback which is probably beyond my skills/time)

Would it suffice to switch to another similar looking font that supports more languages?

@VelocityRa commented on GitHub (Oct 22, 2024): Hi @alextran1502 @pruthvi-21 I'm interested in fixing this, it makes Greek and probably [other](https://github.com/immich-app/immich/issues/11216) languages unpleasant to use. The underlying issue seems to be that the Overpass font that's in use does not support Greek (not sure what is the current broken font that's rendered - maybe a Flutter fallback?). Note that I have no experience in Flutter and very limited experience with Android development. What would be the easiest accepted fix? (not looking for ie. implementing a font chooser/fallback which is probably beyond my skills/time) Would it suffice to switch to [another](https://fonts.google.com/?preview.layout=grid&lang=sr_Latn&script=Grek) similar looking font that supports more languages?
Author
Owner

@alextran1502 commented on GitHub (Oct 22, 2024):

Hello, I think the acceptable fix is to fallback to system font for these languages.

@alextran1502 commented on GitHub (Oct 22, 2024): Hello, I think the acceptable fix is to fallback to system font for these languages.
Author
Owner

@Vitaspiros commented on GitHub (Oct 23, 2024):

Hello, I think the acceptable fix is to fallback to system font for these languages.

I think the best way to do this, is to have an automatic way of checking for unsupported languages AND a way to toggle the fallback manually. This way, someone could toggle it if there is a false positive, or if the system font renders better.

@Vitaspiros commented on GitHub (Oct 23, 2024): > Hello, I think the acceptable fix is to fallback to system font for these languages. I think the best way to do this, is to have an automatic way of checking for unsupported languages AND a way to toggle the fallback manually. This way, someone could toggle it if there is a false positive, or if the system font renders better.
Author
Owner

@Vitaspiros commented on GitHub (Nov 27, 2024):

Hello everyone. Thanks for actually bothering and creating a fix for this. Now the experience is much better when using one of the problematic languages. However, the issue has not been fully resolved.

The problem still applies to user-specified text (like album titles) when the language of the app is NOT set to one of the problematic languages (and as a result the app does not fallback to the system font) and the user-specified text is written in one of those languages.

For example here is a screenshot of an album named "Γερμανία" (translates to Germany) when the app language is set to Greek: (the app fallbacks to the system font)
Screenshot_20241127-174350_Immich_1_1

And here is a screenshot of the same thing when the app language is not set to Greek (English in this case): (the fallback does not apply)
Screenshot_20241127-174718_Immich_1_1

This however is a less visible and important issue, and a much harder to solve, since it requires checking for every text and label in the app. So I am not expecting it so much to be fixed, I am just reporting the issue.
Either way, the fixes I am suggesting are the following:

  • Implement a way to check and fallback to the system font for every text in the app
  • As @VelocityRa said, switch to a different but similiar font that supports more languages

Also sorry for the late reply and discovery of this next, more complicated issue with the font, I kept forgetting to write this.

@Vitaspiros commented on GitHub (Nov 27, 2024): Hello everyone. Thanks for actually bothering and creating a fix for this. Now the experience is much better when using one of the problematic languages. However, the issue has not been fully resolved. The problem still applies to user-specified text (like album titles) when the language of the app is NOT set to one of the problematic languages (and as a result the app does not fallback to the system font) and the user-specified text is written in one of those languages. For example here is a screenshot of an album named "Γερμανία" (translates to Germany) when the app language is set to Greek: (the app fallbacks to the system font) ![Screenshot_20241127-174350_Immich_1_1](https://github.com/user-attachments/assets/bde500bb-849b-4fa5-a38d-eff576361027) And here is a screenshot of the same thing when the app language is not set to Greek (English in this case): (the fallback does not apply) ![Screenshot_20241127-174718_Immich_1_1](https://github.com/user-attachments/assets/f5aebf04-f29f-4444-ae2f-03ef16fa355a) This however is a less visible and important issue, and a much harder to solve, since it requires checking for every text and label in the app. So I am not expecting it so much to be fixed, I am just reporting the issue. Either way, the fixes I am suggesting are the following: - Implement a way to check and fallback to the system font for every text in the app - As @VelocityRa said, switch to a different but similiar font that supports more languages Also sorry for the late reply and discovery of this next, more complicated issue with the font, I kept forgetting to write this.
Author
Owner

@Vitaspiros commented on GitHub (Jun 1, 2025):

Issue emerged again in Mobile App version 1.333.1 build.199

Image

Someone may need to reopen this...

@Vitaspiros commented on GitHub (Jun 1, 2025): Issue emerged again in Mobile App version 1.333.1 build.199 ![Image](https://github.com/user-attachments/assets/0ef7e1e6-a1ad-4a2f-8aa5-de1c9358ff32) Someone may need to reopen this...
Author
Owner

@VelocityRa commented on GitHub (Jun 2, 2025):

Yeah same. cc @alextran1502 please reopen this

@VelocityRa commented on GitHub (Jun 2, 2025): Yeah same. cc @alextran1502 please reopen this
Author
Owner

@pgetsos commented on GitHub (Jul 28, 2025):

The issue remains as of version 1.136. Please reopen the issue

@pgetsos commented on GitHub (Jul 28, 2025): The issue remains as of version 1.136. Please reopen the issue
Author
Owner

@ArbiterGR commented on GitHub (Oct 18, 2025):

Hello, i experience the same issue with Greek fonts. Also the greek letter "Σ" is being incorrectly displayed as "C". @alextran1502 can you please reopen the issue ?

@ArbiterGR commented on GitHub (Oct 18, 2025): Hello, i experience the same issue with Greek fonts. Also the greek letter "Σ" is being incorrectly displayed as "C". @alextran1502 can you please reopen the issue ?
Author
Owner

@VelocityRa commented on GitHub (Oct 19, 2025):

I opened another issue - anyone who's interested, please add a react, voice interest, or provide further details in https://github.com/immich-app/immich/issues/23056

@VelocityRa commented on GitHub (Oct 19, 2025): I opened another issue - anyone who's interested, please add a react, voice interest, or provide further details in https://github.com/immich-app/immich/issues/23056
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#3557