Album download fails when multiple tracks share identical names #24

Open
opened 2025-12-20 23:49:53 +00:00 by Krunox · 0 comments

Describe the bug
When attempting to download albums containing multiple tracks with the same title, only the first track is actually downloaded. The downloader reports that the subsequent tracks have been successfully downloaded, but they are missing from the output directory.

For example, the album Everflow has four consecutive tracks all titled Everflow. In this case, only the first track is downloaded, while tracks two to four are skipped despite being marked as completed.

To Reproduce
Steps to reproduce the behaviour:
Download any album with identical names, example: Everflow(Original Game Soundtrack).

Expected behaviour
The album should download successfully, with all tracks saved regardless of whether they share the same name. Ideally, spotizerr should handle identical track names gracefully, for example by appending an index (I thought spotizerr is already doing this?) or differentiating them in another way.

Screenshots
N/A

Desktop (please complete the following information):

  • OS: Debian 12
  • Browser: Zen Browser

docker-compose.yaml

  spotizerrphoenix:
    image: spotizerrphoenix/spotizerr:latest
    user: 0:0 # Spotizerr user:group ids
    volumes:
      # Ensure these directories and the .cache file exist and are writable by the container user
    - ./data:/app/data # data directory, contains config, creds, watch, history
    - ./downloads:/app/downloads # downloads directory, contains downloaded files
    - ./logs:/app/logs # logs directory, contains logs
    - ./.cache:/app/.cache # cache file
    ports:
      # Port to expose the app on
      - 17171:7171
    container_name: spotizerr-app
    restart: unless-stopped
    env_file:
      # Ensure you have a .env file in the root of the project, with the correct values
      - .env
    depends_on:
      - redis
  redis:
    image: redis:alpine
    container_name: spotizerr-redis
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - redis-data:/data
    command: sh -c 'redis-server --requirepass "$REDIS_PASSWORD" --appendonly yes'
# spotizerr redis volume
volumes:
  redis-data:
    driver: local

.env

# Interface to bind to. Unless you know what you're doing, don't change this
HOST=0.0.0.0

# Redis connection (external or internal).
# Host name 'redis' works with docker-compose.yml setup
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=0
REDIS_PASSWORD=**********

# Set to true to filter out explicit content.
EXPLICIT_FILTER=false

# Optional: Sets the default file permissions for newly created files within the container.
UMASK=0022

# Whether to setup file permissions on startup. May improve performance on remote/slow filesystems
SKIP_SET_PERMISSIONS=false

# Whether to allow new users to register themselves or leave that only available for admins
DISABLE_REGISTRATION=false

LOG_LEVEL=info

Config

{
    "version": "3.3.1",
    "watch": {
        "enabled": false,
        "watchPollIntervalSeconds": 3600,
        "maxTracksPerRun": 50,
        "watchedArtistAlbumGroup": [
            "album",
            "single"
        ],
        "delayBetweenPlaylistsSeconds": 2,
        "delayBetweenArtistsSeconds": 5,
        "useSnapshotIdChecking": true,
        "maxItemsPerRun": 50
    },
    "service": "spotify",
    "spotify": "spotify",
    "deezer": "",
    "fallback": false,
    "spotifyQuality": "NORMAL",
    "deezerQuality": "MP3_320",
    "realTime": true,
    "customDirFormat": "%ar_album%/%album%",
    "customTrackFormat": "%tracknum%. %music%",
    "tracknumPadding": true,
    "saveCover": true,
    "maxConcurrentDownloads": 1,
    "utilityConcurrency": 1,
    "librespotConcurrency": 2,
    "maxRetries": 25,
    "retryDelaySeconds": 5,
    "retryDelayIncrease": 5,
    "convertTo": "OPUS",
    "bitrate": "",
    "artistSeparator": "; ",
    "recursiveQuality": false,
    "spotifyMetadata": true,
    "separateTracksByUser": false,
    "realTimeMultiplier": 0,
    "padNumberWidth": 3,
    "sseUpdateIntervalSeconds": 1,
    "warning": "Global Spotify API credentials are not fully configured or file is missing.",
    "client_id": "client_id",
    "client_secret": "client_secret",
    "explicitFilter": false,
    "url": "",
    "events": [],
    "available_events": [
        "download_start",
        "download_complete",
        "download_failed",
        "watch_added"
    ],
    "clientId": "clientId",
    "clientSecret": "clientSecret",
    "availableEvents": [
        "download_start",
        "download_complete",
        "download_failed",
        "watch_added"
    ]
}

Logs

N/A

Version
v4.0.15

**Describe the bug** When attempting to download albums containing multiple tracks with the same title, only the first track is actually downloaded. The downloader reports that the subsequent tracks have been successfully downloaded, but they are missing from the output directory. For example, the album Everflow has four consecutive tracks all titled Everflow. In this case, only the first track is downloaded, while tracks two to four are skipped despite being marked as completed. **To Reproduce** Steps to reproduce the behaviour: Download any album with identical names, example: [Everflow(Original Game Soundtrack)](https://open.spotify.com/album/7AxazMbQUhX1g7Xi9KOi5G). **Expected behaviour** The album should download successfully, with all tracks saved regardless of whether they share the same name. Ideally, spotizerr should handle identical track names gracefully, for example by appending an index (I thought spotizerr is already doing this?) or differentiating them in another way. **Screenshots** N/A **Desktop (please complete the following information):** - OS: Debian 12 - Browser: Zen Browser **docker-compose.yaml** ```yaml spotizerrphoenix: image: spotizerrphoenix/spotizerr:latest user: 0:0 # Spotizerr user:group ids volumes: # Ensure these directories and the .cache file exist and are writable by the container user - ./data:/app/data # data directory, contains config, creds, watch, history - ./downloads:/app/downloads # downloads directory, contains downloaded files - ./logs:/app/logs # logs directory, contains logs - ./.cache:/app/.cache # cache file ports: # Port to expose the app on - 17171:7171 container_name: spotizerr-app restart: unless-stopped env_file: # Ensure you have a .env file in the root of the project, with the correct values - .env depends_on: - redis redis: image: redis:alpine container_name: spotizerr-redis restart: unless-stopped env_file: - .env volumes: - redis-data:/data command: sh -c 'redis-server --requirepass "$REDIS_PASSWORD" --appendonly yes' # spotizerr redis volume volumes: redis-data: driver: local ``` **.env** ```env # Interface to bind to. Unless you know what you're doing, don't change this HOST=0.0.0.0 # Redis connection (external or internal). # Host name 'redis' works with docker-compose.yml setup REDIS_HOST=redis REDIS_PORT=6379 REDIS_DB=0 REDIS_PASSWORD=********** # Set to true to filter out explicit content. EXPLICIT_FILTER=false # Optional: Sets the default file permissions for newly created files within the container. UMASK=0022 # Whether to setup file permissions on startup. May improve performance on remote/slow filesystems SKIP_SET_PERMISSIONS=false # Whether to allow new users to register themselves or leave that only available for admins DISABLE_REGISTRATION=false LOG_LEVEL=info ``` **Config** ```json { "version": "3.3.1", "watch": { "enabled": false, "watchPollIntervalSeconds": 3600, "maxTracksPerRun": 50, "watchedArtistAlbumGroup": [ "album", "single" ], "delayBetweenPlaylistsSeconds": 2, "delayBetweenArtistsSeconds": 5, "useSnapshotIdChecking": true, "maxItemsPerRun": 50 }, "service": "spotify", "spotify": "spotify", "deezer": "", "fallback": false, "spotifyQuality": "NORMAL", "deezerQuality": "MP3_320", "realTime": true, "customDirFormat": "%ar_album%/%album%", "customTrackFormat": "%tracknum%. %music%", "tracknumPadding": true, "saveCover": true, "maxConcurrentDownloads": 1, "utilityConcurrency": 1, "librespotConcurrency": 2, "maxRetries": 25, "retryDelaySeconds": 5, "retryDelayIncrease": 5, "convertTo": "OPUS", "bitrate": "", "artistSeparator": "; ", "recursiveQuality": false, "spotifyMetadata": true, "separateTracksByUser": false, "realTimeMultiplier": 0, "padNumberWidth": 3, "sseUpdateIntervalSeconds": 1, "warning": "Global Spotify API credentials are not fully configured or file is missing.", "client_id": "client_id", "client_secret": "client_secret", "explicitFilter": false, "url": "", "events": [], "available_events": [ "download_start", "download_complete", "download_failed", "watch_added" ], "clientId": "clientId", "clientSecret": "clientSecret", "availableEvents": [ "download_start", "download_complete", "download_failed", "watch_added" ] } ``` **Logs** ```logs N/A ``` **Version** v4.0.15
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
spotizerrphoenix/spotizerr-phoenix#24
No description provided.