Skip to content

v1.5.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 00:55
f2702dd

1.5.0 (2026-10-09)

Features

  • cli: forget, to stop managing a collection and leave it on the server (#36) (f2a6c35)
  • cli: remove shows which collections it would delete before asking (#36) (f2a6c35)
  • collections: Binge, BBC iPlayer, ITVX, Channel 4, Crunchyroll, Shudder, the Criterion Collection, and Korean, Japanese, Indian, British and Australian collections (#37) (208c9cb)
  • collections: fixed franchise lists also match titles written another way or a year out, never a remake (#37) (208c9cb)
  • collections: franchises completed from TMDB, plus 22 new ones including Dune, Final Destination and Wicked (#37) (208c9cb)
  • collections: seasonal collections have dates, and new Christmas movies, TV and kids collections (#37) (208c9cb)
  • collections: two collections that would share a name get a note instead of being mixed up (#37) (208c9cb)
  • config: warn about settings CineSets doesn't know, with a suggestion for typos (#36) (f2a6c35)
  • docker: a ready-made image for amd64 and arm64 on ghcr.io/blurbery/cinesets with each release (#38) (c0b1ecf)
  • docker: an Unraid template (#38) (c0b1ecf)
  • install: ./install.sh --uninstall takes only this folder's schedule off and says what else to do (#38) (c0b1ecf)
  • posters: artwork can be set for a section or a single collection (#40) (326ed89)
  • posters: logos for Binge, BBC iPlayer, Channel 4, Crunchyroll and Shudder, with alternative logos and icons for iPlayer and Crunchyroll (#44) (b96774d)
  • posters: mosaic artwork made from the collection's own posters in a 2x2 or 3x3 grid (#40) (326ed89)
  • seasonal collections are removed outside their season (#36) (f2a6c35)
  • servers: ask Emby, Jellyfin and Silo for each title's own poster (#40) (326ed89)
  • servers: server.verify for self-signed certificates (false, or a CA certificate file) (#35) (72fcf2f)
  • web: a short getting-started note on first use (#34) (890219a)
  • web: an optional web: hosts list that turns away other names, a defence against DNS rebinding (#33) (42d9629)
  • web: Apply offers to save unsaved changes first (#34) (890219a)
  • web: checking an MDBList list counts the type you pick and warns when too few are in your library to make a collection (#34) (890219a)
  • web: on phones Save and Apply stay at the bottom, with a small copy of the poster while you scroll (#34) (890219a)
  • web: smaller, faster previews in the strip and Preview all, with Try again when one fails (#34) (890219a)
  • web: the Design tab offers mosaic artwork at every scope, with previews and tile shuffling (#40) (326ed89)
  • web: the run log keeps growing past 500 lines and shows how each run went: its summary, any problems and whether it stopped early (#34) (890219a)
  • web: undo and redo for poster designs, and Undo for removing a list, "Use the usual words" and resets (#34) (890219a)

Bug fixes

  • a poster or artwork problem no longer stops a collection's titles updating (#36) (f2a6c35)
  • CineSets never takes over or loses a collection because another one shares its name (#36) (f2a6c35)
  • collections: franchises need fewer of their films, so a library missing one still gets the collection (#37) (208c9cb)
  • collections: stale or odd lists replaced (Most Watched, DC, Star Wars, MCU shows, Preschool, Popular Animation, Peacock), and Middle-earth and John Wick are fixed lists (#37) (208c9cb)
  • collections: The Evil Dead uses TMDB's year (1983), so it matches (#37) (208c9cb)
  • docker: the compose example can run a second install, with a port per install and a dashboard healthcheck (#38) (c0b1ecf)
  • emby/jellyfin: ask for artwork tall enough for a sharp poster (#35) (72fcf2f)
  • emby/jellyfin: delete only items that are collections (#35) (72fcf2f)
  • emby/jellyfin: page through libraries in a fixed order and warn when fewer titles come back than the server counted (#35) (72fcf2f)
  • emby/jellyfin: say clearly when the API key can see no administrator (#35) (72fcf2f)
  • install: a Python environment broken by a Python upgrade is made again, and run.sh says so (#38) (c0b1ecf)
  • install: CineSets runs as the folder's owner, switching from root when it can, and cron.example uses that user (#38) (c0b1ecf)
  • install: the installer says when there's no cron instead of asking to run it again (#38) (c0b1ecf)
  • keep a backup of state.json, and explain a broken config.yml or state.json instead of showing a traceback (#36) (f2a6c35)
  • logos: renamed logos are found, one missing logo no longer stops the rest, and a cut-off download never leaves a broken file (#43) (ffc73f9)
  • plan, posters and apply end with a Summary line and exit with 1 when something failed or the run stopped early (#36) (f2a6c35)
  • posters: artwork is turned by its EXIF orientation and converted to sRGB when it has another colour profile (#43) (ffc73f9)
  • posters: Greek, Cyrillic and Vietnamese letters are drawn in Noto Sans instead of as boxes (#43) (ffc73f9)
  • posters: long titles go onto two lines and shrink further, and long labels and streaming subtitles shrink, so text stays on the poster (#43) (ffc73f9)
  • posters: streaming posters made before their logo was downloaded are drawn again with it, and so are posters whose text ran off or had missing letters (#43) (ffc73f9)
  • posters: text over artwork too bright to read gets the artwork darkened just behind it, and a near-black text colour is lightened (#43) (ffc73f9)
  • posters: very wide or very tall artwork no longer uses hundreds of megabytes while it's cropped (#43) (ffc73f9)
  • servers: retry reads and repeatable writes after a dropped connection, a timeout or a busy server, honouring Retry-After, but never resend making a collection (#35) (72fcf2f)
  • servers: say what to do when the server refuses the API key, the address is wrong, a proxy rejects a poster upload, the server is rate limiting, or its certificate isn't trusted (#35) (72fcf2f)
  • servers: tidy only the path of a pasted address, so servers named emby or web keep their names, and tidy addresses in config.yml and CINESETS_URL too (#35) (72fcf2f)
  • silo: look up missing show ids again after a week instead of keeping a gap forever (#35) (72fcf2f)
  • silo: send the API key for artwork only to Silo's own scheme, host and port, and follow storage redirects only on the same host (#35) (72fcf2f)
  • stop the run when the server turns down the API key or keeps asking CineSets to slow down (#36) (f2a6c35)
  • the Docker scheduler retries a job that didn't finish after about an hour, remembers when jobs ran, and stops cleanly on docker stop (#36) (f2a6c35)
  • wait out MDBList's rate limit politely, and warn every run about a list that keeps failing (#36) (f2a6c35)
  • web: a collection's new words can't give it another collection's name (#34) (890219a)
  • web: better contrast, larger touch targets, 16px fields on phones, and focus that follows the Design buttons (#34) (890219a)
  • web: create web.json readable only by you on filesystems without hard links (#33) (42d9629)
  • web: error messages stay until dismissed, and the unsaved state keeps its word on narrow screens (#34) (890219a)
  • web: on touch screens a tap previews artwork and "Use this" keeps it (#34) (890219a)
  • web: people who aren't signed in and slow uploads can no longer fill the dashboard's busy slots (#33) (42d9629)
  • web: refuse a negative Content-Length, oversized sign-in bodies and overlong session cookies (#33) (42d9629)
  • web: setting, changing or removing the dashboard password signs everyone out (#33) (42d9629)
  • web: the access key always signs in, and only wrong passwords are rate limited, with the wait shown in minutes (#33) (42d9629)
  • web: the dashboard keeps the run log when it restarts mid-run, and shows one banner that retries by itself when CineSets can't be reached (#34) (890219a)
  • web: the Design tab names Noto Sans as the last fallback font and says when Auto adds a text shadow (#44) (b96774d)
  • web: warn when public mode listens beyond this machine (#33) (42d9629)
  • web: words typed in the Text card count as unsaved, are saved by Save and Ctrl+S, and aren't lost without asking (#34) (890219a)

Performance

  • posters: fonts are kept once loaded, and logos and gradient titles are drawn much faster (#43) (ffc73f9)
  • silo: pause between writes only as long as each write calls for, roughly halving a first run on a fast server (#35) (72fcf2f)

Dependencies

  • tested dependency versions in constraints.txt, used by install.sh, Docker and CI (#38) (c0b1ecf)
  • update pytest requirement from >=7.0 to >=8.4.2 (#42) (bd9d6b3)

Documentation

  • dashboard: give the dashboard a name of its own rather than a path on an existing site (#33) (42d9629)
  • how release notes work, and how to merge a release pull request (#31) (b931a58)
  • mosaic artwork in the README, example config, preview and dashboard guide (#40) (326ed89)
  • uninstalling, Docker from ghcr.io, and Unraid, TrueNAS SCALE and Synology (#38) (c0b1ecf)

Tests

  • collections: a checker for every MDBList list in the catalogue (#37) (208c9cb)

Continuous integration

  • a pull request can list several changes in its release notes box, each with its own line in the notes (#31) (b931a58)
  • every merged pull request gets a line in the release notes, docs and refactors included (#31) (b931a58)
  • every push to main gets a full CI run instead of being cancelled by the next one (#31) (b931a58)
  • keep pytest below 9 while CineSets supports Python 3.9 (#41) (cdbfb3d)
  • the release pull request can come from a GitHub App so its checks start by themselves (#31) (b931a58)
  • unit tests on Python 3.10, 3.11 and 3.14, a lint job, pinned actions and Dependabot (#38) (c0b1ecf)
  • weekly checks of the newest servers and of every MDBList list that fail when something breaks (#38) (c0b1ecf)