#4919·Kavita

Binding Default reading profile to library or series overrides all other reading profiles and prevents changing the bound reading profiles with the Set Reading Profiles action

Author: MGStan0Created Sep 6, 2026Updated Sep 7, 2026

What happened?

When the Default Profile is bound alongside custom reading profiles with associated devices, the library or series always uses the default profile instead of the profile associated with the current device.

This also causes the Set Reading Profile action to stop functioning correctly:

  • The Default Profile does not appear as bound when the menu is reopened, even though it continues to override all other profiles.
  • Changes made to the bound profiles do not save.
  • The reading-profile bindings become stuck in this state.

The only way I have found to recover is to use Clear Reading Profile, then bind only the custom profiles. The Default Profile must not be selected in the Set Reading Profile action.

I reproduced this behavior using a fresh Kavita Docker container. For a server that already has a library configured, begin at step 6.

Steps to reproduce

  1. Create a Kavita Docker container.

    Starting from the home directory:

    bash
    mkdir -p ~/docker/kavita-test
    cd ~/docker/kavita-test
    mkdir config data
    nano docker-compose.yaml

    Paste the following configuration:

    yaml
    services:
      kavita:
        image: lscr.io/linuxserver/kavita:latest
        container_name: kavita-test
        ports:
          # Use port 5001 on the host to avoid conflicting with another Kavita server.
          - "5001:5000"
        environment:
          # These use my user and group for convenience. Change as appropriate.
          - PUID=1000
          - PGID=1000
        volumes:
          - ~/docker/kavita-test/config:/config
          - ~/docker/kavita-test/data:/data
        restart: always

    Start the container:

    bash
    docker compose up -d
  2. Add placeholder media to the data directory.

    I used Pepper & Carrot by David Revoy, available from peppercarrot.com under the CC BY 4.0 license.

    bash
    mkdir -p "data/demo/pepper and carrot"

    Copy at least one .cbz file into that directory.

  3. Open Kavita.

    Navigate to:

    http://{host}:5001
  4. Create an administrator account.

  5. Create a library.

    Go to Settings → Server → Libraries, then:

    • Set the name to Demo.
    • Add the folder /data/demo.
    • Save the library.
  6. Create a custom reading profile.

    Go to Settings → Account → Reading Profiles, then create a profile with these settings:

    • Name: Widescreen
    • Layout Mode: Double
    • Set Devices: Add a landscape device that will be used for testing.
    • Leave all other settings at their defaults.
  7. Bind both the custom and default profiles to the library.

    From the home screen:

    • Open the context menu for the Demo library.
    • Select Reading Profiles → Set Reading Profile.
    • Select both Default Profile and Widescreen, so both appear as bound.
    • Select Confirm.
  8. Read a series using the device added in step 6.

    Open the reading-profile settings inside the reader.

    Actual behavior:

    • The settings show Save to Default.
    • The Default Profile is used instead of Widescreen.
    • The reading profiles are now in a broken state.

    Expected behavior:

    • The settings should show Save to Widescreen.
    • The profile associated with the current device should take priority.
  9. Attempt to change the profile bindings.

    From the home screen:

    • Open the context menu for the Demo library.
    • Select Reading Profiles → Set Reading Profile.
    • Only Widescreen appears as bound, even though Default Profile was also selected previously.
    • Select Widescreen to unbind it.
    • Select Confirm.
    • Reopen the Set Reading Profile menu.

    Result:

    • Widescreen still appears as bound. The attempted change was not saved.
    • The default profile is still overriding all other reading profiles despite not being shown as bound.
  10. Clear the broken state and bind only the custom profile.

    From the home screen:

    • Open the context menu for the Demo library.
    • Select Reading Profiles → Clear Reading Profile.
    • Reopen the context menu and select Reading Profiles → Set Reading Profile.
    • Bind only Widescreen.
    • Ensure that Default Profile is not bound.
    • Select Confirm.

Result - The reader settings menu now shows Save to Widescreen, indicating that the custom profile is active.

Additional information

The same behavior occurs when reading profiles are applied at the series level rather than the library level.

What did you expect?

I would expect that Default would always be the fallback profile and not be selectable from the Set Reading Profile action, and if selectable the priority would be given to all other custom profiles that match the current reading device.

I would expect that the Set Reading Profile UI would properly reflect the current state of the Reading Profiles and to allow changes to be made without needing to use the Clear Reading Profile action.

Kavita Version Number - If you don't see your version number listed, please update Kavita and see if your issue still persists.

0.9.1 - Stable

Are you accessing kavita through a reverse proxy? If yes, confirm that the issue persists with a direct connection

Yes

What operating system is Kavita being hosted from?

Docker (LSIO Container)

If the issue is being seen on Desktop, what OS are you running where you see the issue?

None

If the issue is being seen in the UI, what browsers are you seeing the problem on?

Firefox, Chrome, Safari

If the issue is being seen on Mobile, what OS are you running where you see the issue?

iOS

If the issue is being seen on the Mobile UI, what browsers are you seeing the problem on?

Safari

Relevant log output

bash
[Kavita] [2026-09-06 16:40:51.802 -05:00  68] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP GET /api/reading-profile/library?libraryId=2 responded 200 in 3.8978 ms
[Kavita] [2026-09-06 16:40:51.803 -05:00  65] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP GET /api/reading-profile/all responded 200 in 1.8142 ms
[Kavita] [2026-09-06 16:40:53.278 -05:00  68] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP POST /api/reading-profile/library/2 responded 200 in 1.2152 ms
[Kavita] [2026-09-06 16:40:55.491 -05:00  71] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP GET /api/reading-profile/library?libraryId=2 responded 200 in 3.4354 ms
[Kavita] [2026-09-06 16:40:55.498 -05:00  71] [Information] Serilog.AspNetCore.RequestLoggingMiddleware HTTP GET /api/reading-profile/all responded 200 in 3.6494 ms

Additional Notes

I've tested accessing Kavita from Safari on Mac OS and iOS, and Firefox and Chrome on Windows.