[BUG] Link shared public albums have issues displaying and working on the web #1871

Closed
opened 2026-02-05 04:16:33 +03:00 by OVERLORD · 2 comments
Owner

Originally created by @MisterMustache on GitHub (Dec 23, 2023).

The bug

I created a 300 picture album and created a public shared link for It. When viewing the link the UI loads as expected but clicking an asset sometimes opens the viewer and sometimes it doesn't. But even if it does open and you click in the "info" button the docked view doesn't appear. Instead the UI gets "stuck" in some way. The arrow buttons and even the keyboard shortcuts don't work nor does the return (to exit the viewer) button.

The OS that Immich Server is running on

Ubuntu 22.04.3 LTS x86_64

Version of Immich Server

v1.91.4

Version of Immich Mobile App

v1.91.4

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

version: "3.8"

services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    container_name: immich_server
    env_file:
      - .env
    command: ["start.sh", "immich"]
    depends_on:
      - redis
      - database
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    networks:
      - prod-network
    ports:
      - 2283:3001
    restart: unless-stopped

  immich-microservices:
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    container_name: immich_microservices
    extends:
      file: hwaccel.yaml
      service: hwaccel
    env_file:
      - .env
    command: ["start.sh", "microservices"]
    depends_on:
      - redis
      - database
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    networks:
      - prod-network
    restart: unless-stopped

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    container_name: immich_machine_learning
    env_file:
      - .env
    volumes:
      - ./model-cache:/cache
    networks:
      - prod-network
    restart: unless-stopped

  redis:
    image: redis:6.2-alpine@sha256:70a7a5b641117670beae0d80658430853896b5ef269ccf00d1827427e3263fa3
    container_name: immich_redis
    networks:
      - prod-network
    restart: unless-stopped

  database:
    image: tensorchord/pgvecto-rs:pg14-v0.1.11
    container_name: immich_postgres
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
    env_file:
      - .env
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    networks:
      - prod-network
    restart: unless-stopped

#volumes:
#  pgdata:
#  model-cache:
#  tsdata:
networks:
  prod-network:
    name: prod-network
    external: true

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=
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=v1.91.4

# Connection secrets for postgres and typesense. You should change these to random passwords
TYPESENSE_API_KEY=
DB_PASSWORD=

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

REDIS_HOSTNAME=immich_redis

####################################################################################
# WEB - Optional
#
# Custom message on the login page, should be written in HTML form.
# For example:
# PUBLIC_LOGIN_PAGE_MESSAGE="This is a demo instance of Immich.<br><br>Email: <i>demo@demo.de</i><br>Password: <i>demo</i>"
####################################################################################

PUBLIC_LOGIN_PAGE_MESSAGE=

####################################################################################
# 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

###################################################################################
# Log message level - [log|verbose]
###################################################################################

LOG_LEVEL=log

Reproduction steps

1. Create album that contains images
2. Top right button to share album - Create link share
3. Set some description, no password, show metadata, allow public user to download, NOT allow public user to upload, set expiration to 30 days.
4. Open the shared link
5. Try to click on image
5.1 If it works: Click top right info button: UI is "stuck".
5.2 If it doesn't: UI is "stuck".

Additional information

I have tested the following with two different albums (one with 150 images and one with 300), it broke each time. I have opened the link in the same browser (so where my user session cookie exists), in a private windows, different browser and different device. The issue persisted.

Server container logs:

[Nest] 7  - 12/23/2023, 12:07:28 PM     LOG [CommunicationRepository] Websocket Connect:    xJufz9cKzqy7SWX5AAAf
[Nest] 7  - 12/23/2023, 12:07:28 PM   ERROR [UnauthorizedException: Authentication required
    at AuthService.validate (/usr/src/app/dist/domain/auth/auth.service.js:113:15)
    at CommunicationRepository.handleConnection (/usr/src/app/dist/infra/repositories/communication.repository.js:52:49)
    at Object.next (/usr/src/app/node_modules/@nestjs/websockets/web-sockets-controller.js:77:47)
    at ConsumerObserver.next (/usr/src/app/node_modules/rxjs/dist/cjs/internal/Subscriber.js:113:33)
    at Subscriber._next (/usr/src/app/node_modules/rxjs/dist/cjs/internal/Subscriber.js:80:26)
    at Subscriber.next (/usr/src/app/node_modules/rxjs/dist/cjs/internal/Subscriber.js:51:18)
    at /usr/src/app/node_modules/rxjs/dist/cjs/internal/operators/distinctUntilChanged.js:18:28
    at OperatorSubscriber._this._next (/usr/src/app/node_modules/rxjs/dist/cjs/internal/operators/OperatorSubscriber.js:33:21)
    at Subscriber.next (/usr/src/app/node_modules/rxjs/dist/cjs/internal/Subscriber.js:51:18)
    at /usr/src/app/node_modules/rxjs/dist/cjs/internal/Subject.js:69:34] Websocket connection error: UnauthorizedException: Authentication required
[Nest] 7  - 12/23/2023, 12:07:28 PM     LOG [CommunicationRepository] Websocket Disconnect: xJufz9cKzqy7SWX5AAAf

Additional Info (if it helps):

  • I use Immich behind a reverse proxy using Nginx Proxy Manager. I also use Authentik for authentication.
Originally created by @MisterMustache on GitHub (Dec 23, 2023). ### The bug I created a 300 picture album and created a public shared link for It. When viewing the link the UI loads as expected but clicking an asset sometimes opens the viewer and sometimes it doesn't. But even if it does open and you click in the "info" button the docked view doesn't appear. Instead the UI gets "stuck" in some way. The arrow buttons and even the keyboard shortcuts don't work nor does the return (to exit the viewer) button. ### The OS that Immich Server is running on Ubuntu 22.04.3 LTS x86_64 ### Version of Immich Server v1.91.4 ### Version of Immich Mobile App v1.91.4 ### Platform with the issue - [X] Server - [X] Web - [ ] Mobile ### Your docker-compose.yml content ```YAML version: "3.8" services: immich-server: image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} container_name: immich_server env_file: - .env command: ["start.sh", "immich"] depends_on: - redis - database volumes: - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro networks: - prod-network ports: - 2283:3001 restart: unless-stopped immich-microservices: image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} container_name: immich_microservices extends: file: hwaccel.yaml service: hwaccel env_file: - .env command: ["start.sh", "microservices"] depends_on: - redis - database volumes: - ${UPLOAD_LOCATION}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro networks: - prod-network restart: unless-stopped immich-machine-learning: image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} container_name: immich_machine_learning env_file: - .env volumes: - ./model-cache:/cache networks: - prod-network restart: unless-stopped redis: image: redis:6.2-alpine@sha256:70a7a5b641117670beae0d80658430853896b5ef269ccf00d1827427e3263fa3 container_name: immich_redis networks: - prod-network restart: unless-stopped database: image: tensorchord/pgvecto-rs:pg14-v0.1.11 container_name: immich_postgres environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} env_file: - .env volumes: - ./pgdata:/var/lib/postgresql/data networks: - prod-network restart: unless-stopped #volumes: # pgdata: # model-cache: # tsdata: networks: prod-network: name: prod-network external: true ``` ### 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= # The Immich version to use. You can pin this to a specific version like "v1.71.0" IMMICH_VERSION=v1.91.4 # Connection secrets for postgres and typesense. You should change these to random passwords TYPESENSE_API_KEY= DB_PASSWORD= # The values below this line do not need to be changed ################################################################################### DB_HOSTNAME=immich_postgres DB_USERNAME=postgres DB_DATABASE_NAME=immich REDIS_HOSTNAME=immich_redis #################################################################################### # WEB - Optional # # Custom message on the login page, should be written in HTML form. # For example: # PUBLIC_LOGIN_PAGE_MESSAGE="This is a demo instance of Immich.<br><br>Email: <i>demo@demo.de</i><br>Password: <i>demo</i>" #################################################################################### PUBLIC_LOGIN_PAGE_MESSAGE= #################################################################################### # 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 ################################################################################### # Log message level - [log|verbose] ################################################################################### LOG_LEVEL=log ``` ### Reproduction steps ```bash 1. Create album that contains images 2. Top right button to share album - Create link share 3. Set some description, no password, show metadata, allow public user to download, NOT allow public user to upload, set expiration to 30 days. 4. Open the shared link 5. Try to click on image 5.1 If it works: Click top right info button: UI is "stuck". 5.2 If it doesn't: UI is "stuck". ``` ### Additional information I have tested the following with two different albums (one with 150 images and one with 300), it broke each time. I have opened the link in the same browser (so where my user session cookie exists), in a private windows, different browser and different device. The issue persisted. Server container logs: ```console [Nest] 7 - 12/23/2023, 12:07:28 PM LOG [CommunicationRepository] Websocket Connect: xJufz9cKzqy7SWX5AAAf [Nest] 7 - 12/23/2023, 12:07:28 PM ERROR [UnauthorizedException: Authentication required at AuthService.validate (/usr/src/app/dist/domain/auth/auth.service.js:113:15) at CommunicationRepository.handleConnection (/usr/src/app/dist/infra/repositories/communication.repository.js:52:49) at Object.next (/usr/src/app/node_modules/@nestjs/websockets/web-sockets-controller.js:77:47) at ConsumerObserver.next (/usr/src/app/node_modules/rxjs/dist/cjs/internal/Subscriber.js:113:33) at Subscriber._next (/usr/src/app/node_modules/rxjs/dist/cjs/internal/Subscriber.js:80:26) at Subscriber.next (/usr/src/app/node_modules/rxjs/dist/cjs/internal/Subscriber.js:51:18) at /usr/src/app/node_modules/rxjs/dist/cjs/internal/operators/distinctUntilChanged.js:18:28 at OperatorSubscriber._this._next (/usr/src/app/node_modules/rxjs/dist/cjs/internal/operators/OperatorSubscriber.js:33:21) at Subscriber.next (/usr/src/app/node_modules/rxjs/dist/cjs/internal/Subscriber.js:51:18) at /usr/src/app/node_modules/rxjs/dist/cjs/internal/Subject.js:69:34] Websocket connection error: UnauthorizedException: Authentication required [Nest] 7 - 12/23/2023, 12:07:28 PM LOG [CommunicationRepository] Websocket Disconnect: xJufz9cKzqy7SWX5AAAf ``` Additional Info (if it helps): - I use Immich behind a reverse proxy using Nginx Proxy Manager. I also use Authentik for authentication.
Author
Owner

@alextran1502 commented on GitHub (Dec 23, 2023):

If you use local IP, can you reproduce the issue? Can you grab the browser console screenshot when it happen?

@alextran1502 commented on GitHub (Dec 23, 2023): If you use local IP, can you reproduce the issue? Can you grab the browser console screenshot when it happen?
Author
Owner

@alextran1502 commented on GitHub (Dec 23, 2023):

Ah I can reproduce the issue of cannot open the info panel

@alextran1502 commented on GitHub (Dec 23, 2023): Ah I can reproduce the issue of cannot open the info panel
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: immich-app/immich#1871