Soloist for Kodi – Spotify Connect on LibreELEC via Spotify's official Soloist client

  • Hi all,

    I wrote a Kodi add-on that turns a LibreELEC box into a Spotify Connect
    device, using Spotify Soloist, Spotify's own headless client that was
    released this year. As far as I know it is the first Kodi add-on built on
    Soloist instead of librespot.

    Why: librespot-based solutions often fail with an "Audio key error" on
    newly created Spotify accounts. Soloist is the official client, so it
    should not be affected by that.

    What it does:
    - The box shows up as a device in the Spotify app.
    - Audio plays through Kodi's own player; title, artist and cover art are
    shown on the TV.
    - Pause, next and stop in Kodi are passed on to Spotify.
    - If Kodi starts something else, Spotify pauses.
    - Volume can follow the Spotify app or stay pinned at 100% for AV receivers.

    How it works: Soloist is closed source, so it runs isolated in a Docker
    container (non-root, read-only file system, no capabilities). Audio goes
    through a PulseAudio sink and RTP into Kodi, the same approach as
    LibreELEC's librespot add-on. The Soloist binary is not shipped with the
    add-on; the container downloads it from Spotify's CDN.

    Requirements:
    - LibreELEC 12 / Kodi 21 with treELEC repository
    - A Soloist API key, created wi Every user
    needs their own key.

    Tested on a Raspberry Pi 5. aar work, but I
    could only test the Pi 5, so re very welcome.

    Install: there is a small reposve
    automatically. Instructions and

    GitHub - willheisenberg/kodi-soloist: Spotify Connect for Kodi on LibreELEC via Spotify's official Soloist client – isolated in Docker, now-playing in Kodi, PartyQueue bot handover
    Spotify Connect for Kodi on LibreELEC via Spotify's official Soloist client – isolated in Docker, now-playing in Kodi, PartyQueue bot handover -…
    github.com

    This is an unofficial hobby proSpotify.
    Feedback and bug reports are wees.

  • Thank you for sharing this, willhunting

    According ldd, only libatomic is missing to run soloist natively on LibreELEC 12 and 13. Although the LibreELEC GitHub shows that adding libatomic directly to the base image was discussed and declined, it would be possible to build and bundle it within an add-on. This approach would eliminate the Docker requirement entirely. Doing so excludes running soloist on Windows, but so does the existing reliance on PulseAudio RTP.

    I could try to build a package for libatomic for LibreELEC 12.2 for RPi5.aarch64 if you are interested. Let me know.

    Code
    ldd soloist
    	linux-vdso.so.1 (0x00007ffede918000)
    	libm.so.6 => /usr/lib/libm.so.6 (0x00007ffedc800000)
    	libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007ffedc7d0000)
    	libdl.so.2 => /usr/lib/libdl.so.2 (0x00007ffedc7a0000)
    	libatomic.so.1 => not found
    	librt.so.1 => /usr/lib/librt.so.1 (0x00007ffedc770000)
    	libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007ffedc730000)
    	libc.so.6 => /usr/lib/libc.so.6 (0x00007ffedc5a0000)
    	/lib/ld-linux-aarch64.so.1 => /usr/lib/ld-linux-aarch64.so.1 (0x00007ffede8e0000)
  • I have created a package for libatomic that allows soloist to run natively. Because the package reuses GCC, it is non-standard. I would therefore be grateful if heitbaum could review it.

    Code
    LD_LIBRARY_PATH=. ldd soloist
        linux-vdso.so.1 (0x00007fff0de38000)
        libm.so.6 => /usr/lib/libm.so.6 (0x00007fff0bd20000)
        libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fff0bcf0000)
        libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fff0bcc0000)
        libatomic.so.1 => ./libatomic.so.1 (0x00007fff0bc90000)
        librt.so.1 => /usr/lib/librt.so.1 (0x00007fff0bc60000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007fff0bc20000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007fff0ba90000)
        /lib/ld-linux-aarch64.so.1 => /usr/lib/ld-linux-aarch64.so.1 (0x00007fff0de00000)
    Code
    LD_LIBRARY_PATH=. ./soloist --version
    soloist 1.3.9.4 build 1791547338 (20261009) (g440165f200) (linux/aarch64)