Repository navigation
Releases: rairulyle/bitchord-selfhosted-addon
Releases · rairulyle/bitchord-selfhosted-addon
Release list
v1.1.0
Changed
- The public URL is saved automatically when you create the setup password over HTTPS on a public hostname, and the setup page explains what it is. You can still change or clear it. Behind nginx, add
proxy_set_header Host $host;so the addon sees your hostname.
v1.0.0
Breaking: servers are now set up on a password-protected page at /setup instead of in .env, state needs a /data volume, and every BitChord URL changes. Follow the upgrade steps under Removed, or "Upgrading from v0.4" in the README.
Added
- Several servers in one container. Each Plex or Jellyfin server is its own BitChord source with its own URL,
https://<public url>/<server id>/<secret>, so sources are ordered and toggled in BitChord. Server ids areplex-1,plex-2,jellyfin-1and so on, and the name in BitChord is the kind plus a label you choose, such asPlex - Home. - A setup page at
/setup. Choose a password on first visit, then set the public URL, add servers, test each connection, pick a library, copy each server's URL, and regenerate the secret. Changes apply at once; nothing needs a restart. - Sign in with Plex on the setup page, through plex.tv. An empty server URL is filled with the first server on the account the addon can reach, and the connection test and library list run on their own after any sign-in. Pasting a token still works.
- Sign in to Jellyfin with a username and password on the setup page. Only the access token Jellyfin returns is kept; the password is never stored. Pasting an API key still works.
- State lives in
/data/addon.json, on a folder mounted at/data.
Changed
- Every log line about a server names it under
server, next tosource. /healthanswers200with no servers configured, so a fresh container passes its healthcheck before it is set up.- A malformed or unknown server URL segment answers the same empty
404as a wrong secret.
Removed
ADDON_SECRET,PUBLIC_URL,ADDON_NAME,PLEX_URL,PLEX_TOKEN,PLEX_SECTION,JELLYFIN_URL,JELLYFIN_API_KEYandJELLYFIN_LIBRARYare no longer read. The log names any that are still set. Upgrading from 0.4: mount a folder at/data(volumes: - </path/to/your/data>:/data, owned by user65532) as incompose.example.yml, removeenv_file: .env(or keep a.envwith onlyPORT,LOG_LEVEL,LOG_FORMATandREFRESH_INTERVAL), then start the container, open/setup, set a password and the public URL, add your server, and replace the URL in BitChord with the one on its card. The old/<secret>/manifest.jsonURL no longer answers.
v0.4.0
Added
- Jellyfin support. Set
JELLYFIN_URLandJELLYFIN_API_KEYinstead of the Plex variables, and optionallyJELLYFIN_LIBRARY, to serve a Jellyfin music library the same way. Each container talks to one server. The source shows up in the client as "Jellyfin", the manifest id isapp.bitchord-selfhosted-addon.jellyfin, and the API key travels only in theAuthorizationheader. Jellyfin 10.9 or newer is required. source=plexorsource=jellyfinon every log line.
Changed
ADDON_NAMEnow defaults to the server kind,PlexorJellyfin, instead of alwaysPlex.- Starting with neither server configured, or with both, now prints one message naming the variables to set instead of listing every Plex variable as missing.
- A rejected token or key is logged as
upstream request failedwith an error naming the variable to check, such asplex rejected PLEX_TOKEN, instead of a message of its own. - The stream descriptor route answers from the in-memory index and asks the server only for a track the index does not know, which saves one upstream request per play.
- The
startinglog line reports the server host underserverand the filter underlibrary, for both server kinds.
v0.3.1
Fixed
- Tracks that Plex never finished analysing (no media bitrate) now play. Plex answers
500to a direct-play request for those parts but serves the same file as a download, so a500on a file request is retried once withdownload=1. Before this, such tracks got a502and the client fell through to the next source.
v0.3.0
Changed
- The readiness endpoint is now
/health./healthzis gone and answers the same empty404as any unknown path. The image's own healthcheck uses the binary's-healthcheckflag, so containers need no change; update anything external that probes the old path, such as an uptime monitor or a dashboard link.
v0.2.0
Added
search,search miss,streamandplaylog lines atinfo, showing each query with its strict and fallback counts and top row, the track a client went on to play, and how each file transfer ended (complete,client leftorupstream error). Search text is now written to the log; the secret and the Plex token still never are.LOG_FORMATsetting:text(the new default, readable indocker logs) orjson.- A
startingline with the version and the non-secret settings, andadded/removedcounts on every library refresh. - A "Logs" section in the README explaining how to read a miss, and a Roadmap section announcing Jellyfin support.
Changed
- Logs are plain text by default. Set
LOG_FORMAT=jsonto keep the previous format. - The per-request
requestline moved frominfotodebug. - Renamed the project to
bitchord-selfhosted-addon. The image is nowghcr.io/rairulyle/bitchord-selfhosted-addon; the old image name gets no further updates, so change theimage:line incompose.ymland point your reverse proxy at the new container namebitchord-selfhosted-addon. - The manifest id is now
app.bitchord-selfhosted-addon.plex. A client that keys addons by id may list it as a new source, in which case remove the old entry.
Fixed
- Tracks whose titles have punctuation inside a word, accented letters, or mixed scripts are now found by BitChord. BitChord joins
Time‐Bombintotimebomb, reads11:11 PMas1111 pm, deletes accented letters soNaïvebecomesnave, and keeps only the Latin words of a title such asワンテンポ遅れたMonster ain't dead. Those spellings are now indexed alongside the normal ones. Replaying BitChord's queries for an 8,697-track library took unreturned tracks from 175 to 0.
v0.1.0
Added
- BitChord addon server for a Plex music library:
manifest.json,searchandstreamendpoints. - In-memory index of every track in the Plex music sections, refreshed every
REFRESH_INTERVALand swapped atomically, so searches never wait on Plex.PLEX_SECTIONlimits it to one library. - Two-tier search built for BitChord's query shapes: every query word must match across title, track artist, album artist and album, with a fallback on the title alone for when the streaming service credits a different artist than the file's tags. Accents, apostrophes and punctuation are ignored, and non-Latin titles match whole.
- Audio and artwork are proxied from Plex with
Range,If-RangeandHEADsupport, so seeking works and the Plex token never leaves the server. The original file is always served, with its real format, bit depth and sample rate reported. - Every route sits under a secret path segment (
ADDON_SECRET). A wrong secret, an unknown route and a malformed path all get the same empty404, and the secret and the Plex token never appear in logs. /healthzreports readiness once the first index load has finished, and the image probes it with its own-healthcheckflag.- Multi-arch Docker image (
linux/amd64,linux/arm64) on a distroless, non-root base, published toghcr.io/rairulyle/bitchord-selfhosted-addon.