github hankscafe/omnibus v1.4.10
Omnibus v1.4.10

2 hours ago

v1.4.10 - requests that close themselves and say why they're stuck, Specials, ComicInfo.xml left intact, reading lists at scale, and a security round led by a critical Next.js fix

๐Ÿš€ Highlights

  • Requests that close once their issue is in your library, however it got there: the Smart Matcher closed a request only while it was GetComics Link, Pending, Downloading or Needs Review, and the Series Monitor re-searched parked requests without asking whether the issue was already in the library - so once a source had it, Omnibus downloaded it a second time. Now the Smart Matcher closes a request in every waiting state, for the right provider only, and the Series Monitor closes a parked request whose issue you already own instead of searching for it again. The requester gets the "available" alert, once per person per run. What the rule can't tie to a series - MyAnimeList and AniList imports, requests made against the other provider, trades - gets Mark completed in Request Management, with "Tell the requester" ticked by default, which Delete never did. A search or a download that is still running no longer reopens a request that was cancelled, marked completed or deleted meanwhile, and the Smart Matcher's Accept says how many open requests it closed.
  • Why a request is stuck: "searched everywhere, nothing yet" has its own status, Not Found Yet, apart from a released issue the provider gives no date (Awaiting Date). A search that found nothing names what each source did - "GetComics: nothing found ยท Prowlarr: 12 results, none matched ยท Anna's Archive: off" - and a stall's, a review's or a blocked import's reason stays on the request, under its status in Request Management, instead of only in the log or an alert. My Requests, Request Management and the profile name every status the same way instead of printing AWAITING_RELEASE and MANUAL_DDL raw, Request Management filters by every status it can show, and changing a filter clears the selection, so Delete never reaches a request the list has hidden. (#263, reported by niddelicious)
  • Specials: a one-shot that belongs with a series but is neither an annual nor a trade ("Absolute Batman: Ark-M") attaches as a Special, a third kind beside Annuals and Collected Editions. It gets its own section on the series page, out of the run's issue count and its Missing list; its files are named after its own volume ("Absolute Batman Ark-M #1 (2026)"); a missing one is requested under that name with its own year; and it reads after the run and the annuals everywhere, Komga and OPDS included. (#255; PR #259 by CaptainEpix)
  • "Leave it as its own series" sticks: it used to only close the dialog, so every Refresh asked again and one misclick absorbed the series. A trade you keep as its own series now stays in its own folder under collected-edition names, its books show once on the parent's Collected Editions shelf, the choice survives a wipe-and-rescan, and moving a series under its parent no longer fails half-way. Moving an annual or a collected book to another series takes it out of its old series' attached volume. (#239; PR #254 by CaptainEpix)
  • Your ComicInfo.xml, left intact: an embed rebuilt the whole file from what Omnibus stores, so ComicRack's table, , and anything custom disappeared on every re-embed. They're carried over now, and with file priority on, a sync keeps the release date a file gave its issue (#227; PR #232 by dissentingd). With "Write metadata to ComicInfo.xml" off, Omnibus leaves your archives alone - following 80 series used to rewrite 213 files with writing switched off. Syncs, follows, matches, attaches and the scheduled embed all honor it, and the Smart Matcher's own write-to-file toggle finally reaches the files. (#251, reported by conduit4731)
  • Reading lists at scale: with a few hundred imported CBL lists the Reading Lists page became unusable - it loaded every list with every item on every visit. The overview now carries names and counts, and only the list you open loads its items. Every list shows where you are in it: "N / M read", read and in-progress badges, Continue at the first entry you own and haven't finished, and Hide read. A CBL import links entries by the ComicVine (or Metron) ids the list carries and keeps them, so a missing entry links itself once the issue arrives, its Request asks for the right volume, and a same-named series from another year is no longer taken. (#252, #253, reported by conduit4731)
  • ComicVine search, whole again: since about October 23, ComicVine's search answers every volume with no publisher, 0 issues and a blank cover, so every search in Omnibus - Home, the Smart Matcher, Fix Match, Attach volume - showed "Other", "0 issues" and a blank cover on every result. Omnibus fills each page back in from ComicVine's /volumes/ with one more call, and none once ComicVine's search is fixed.
  • One folder can't be both watched and unmatched: with one host folder mapped to both /data/watched and /data/unmatched, every sweep parked the files it couldn't import into the folder it had just read them from. 1.4.9 renamed them on every sweep ("X (copy 1) (copy 1).cbz"), and 1.4.8 and earlier deleted them. The sweep now checks first - it finds the setup even when two paths are two mounts of one folder - and refuses to touch anything, naming both folders in Job History, and System Health shows the same as an error. (#261, reported by de6oliveira-droid)
  • November security round: Next.js 15.5.28 fixes a critical advisory - unauthenticated remote code execution in the Image Optimization API when SVG files are used - and a high-severity Server Actions denial of service. Omnibus serves Next's image optimizer, so this one matters. undici moves past eight advisories (TLS options dropped in an Agent, cross-origin cache poisoning, several denials of service), follow-redirects past a high one, nodemailer past three address-parser advisories that could turn display text into a recipient, and sanitize-html past one. The production audit is back to zero, inside the image too. The engine moves tokio past an I/O-safety advisory and stops building zip's zstd and AES support, which comic archives never use, dropping eleven zstd advisories with it.

๐Ÿ› ๏ธ More fixes and improvements

  • The admin dashboard's GetComics buttons wrap instead of running off a phone screen - two per line until the card has room for one row - and the Unmatched Finished Downloads dropdown no longer pushes Link off the screen (#260, reported by niddelicious)
  • Library cards' hover actions sit two per row, so an admin's four (five in a reading list) are never cut off at 4-8 columns; For Your Library's Monitor and Not interested stack instead of crushing Monitor's label; the Smart Matcher's issue-title example is in English
  • A Request from a reading-list entry asked ComicVine for a person instead of an issue (4040 instead of 4000), so it went out with no volume; it now finds the right one
  • A provider sync no longer takes an attached volume's #N for the run's missing #N and overwrites its provider id; a stray row carrying another series' attachment still pairs (the rule from matkozera's #258, adopted in #259)
  • The Smart Matcher sweep's page size and its end-of-set check can't drift apart and bring back the #231 stall (PR #250 by dissentingd)

๐Ÿ“ฆ Upgrading

Standard three-service compose: docker compose pull && docker compose down && docker compose up -d - update the web app and the engine together. Schema changes are additive (a request's status note and its time, and an attachment's "kept as its own series" flag) and apply automatically on boot; SQLite and PostgreSQL both covered. No new environment variables.

  • Open requests close on upgrade: the first Series Monitor run closes every parked request whose issue is already in your library, each requester gets one "available" alert listing theirs, and the in-app bell rings once for each request it closed.
  • Watched and unmatched on one folder: if /data/watched and /data/unmatched point at the same host folder, or unmatched sits inside watched, watched-folder imports stop until they're separated - map /data/unmatched to a different host folder in both services and recreate the containers. Files already renamed "(copy N)" keep those names.
  • If you had "Write metadata to ComicInfo.xml" off, syncs, matches, follows, attaches and the scheduled embed stop writing your files too. Turn it on to keep the old behavior.
  • A search that finds nothing now parks the request as Not Found Yet (NOT_FOUND in /api/v1). Requests already parked as Awaiting Release become Not Found Yet the first time their re-search comes up empty.
  • A trade you told to "Leave it as its own series" before this release asks once more; answer Leave again and it sticks.
  • CBL lists imported before this release carry no ids: re-import a list to get the self-linking and the right-volume Request.
  • While ComicVine's search stays stripped, a ComicVine search page costs one more ComicVine call.
  • A zip entry compressed with zstd or encrypted with AES is no longer readable; comic archives use stored or deflated entries.

Thanks to CaptainEpix for two pull requests (#254, #259) and the Specials proposal behind them; to dissentingd for #232 and #250, and for #227; to conduit4731 for #251, #252 and #253; to niddelicious for #260 and #263; to de6oliveira-droid for #261; to matkozera for the collected-edition bugs found in #257 and the pairing rule from #258; and to everyone testing betas on :dev.

Don't miss a new omnibus release

NewReleases is sending notifications on new releases.