NeXroll 2.2.0-beta.7
Pre-release
Pre-release
Almost every number and date the interface showed about your schedules was arrived at a different way in each place that showed it, and several of them were wrong. This release makes them agree, and makes them true. A preroll change that is waiting for playback to finish now says so, instead of reporting itself as a failure.
Most of it comes from user reports. Thank you for sending them.
No configuration change needed.
Prerolls that seemed to go missing
- A preroll change held back during playback was logged as a failure, 246 times in one evening. Plex resolves the next preroll from its preference as playback advances rather than snapshotting it, so rewriting that preference mid-playback makes Plex reach for an entry that is no longer there and hang. The scheduler deliberately waits for playback to finish before writing. Every apply site reported that wait as "Failed to apply", so a guard doing exactly its job filled the log with warnings and looked like a broken scheduler.
- A deferral now reads as a wait, and a genuine failure still reads as a failure.
- Nothing told you a change was queued. In one report the blend genuinely did not reach Plex for one hour and forty-nine minutes while someone was watching, and the only explanation available said it had failed.
- The dashboard alternated between "Blending" and "Nothing applied" for most of that wait, because the blend indicator is driven by
last_run, which is only stamped on the ticks where the blend's random pick lands on the schedule already applied. The Current and next schedule tile now says a preroll change is held until playback finishes, and how long it has been waiting.
Conflicts
- The dashboard could report a conflict the Conflicts page had nothing to open. Four places counted conflicts using two different detectors: one analyses a whole recurrence year and only compares schedules of the same type, the other looks thirty days ahead and pairs every type. The tiles counted overlaps outside the page's window, so clicking through showed "No unresolved conflicts". Every count now comes from one list, and that list is exactly what the page renders — so anything counted can be opened and acted on.
- The schedules page header could read "7 schedule conflicts" while the dashboard read one. Three summary counts included rows the Conflicts page classes as notes rather than conflicts. Those describe a deterministic outcome where one schedule always wins, which is worth saying and is not something to fix.
- Badges stayed on schedules after the counts said zero. The per-schedule badges were still asking the year-long detector. They read the shared list now. A schedule being typed into the form still has detection run against it directly, because a draft has no id and is not in the saved list yet.
- Ignored conflicts came back on every page load. The ignore list was only fetched when the Conflicts tab was opened through one of its buttons, so a fresh page started with an empty list and counted every ignored conflict again — while the Ignored view had nothing to show, because it filters by that same empty list.
- The System health tile never consulted the ignore list at all. It also built its pair key by sorting numerically and joining with a colon, while the list is stored under the shared helper's string sort joined with a dash, so an ignored pair could not have matched even if it had looked.
When schedules run
- Daily and weekly schedules never worked out when they next run. The calculation only handled monthly, yearly and holiday types; the others fell through and returned nothing, so
next_runstayed empty and the rows fell back tostart_date— which on a recurring schedule is simply the day it was created. A daily schedule could show a next run two days in the past. - A schedule past its end date could still name a date it would never run on. No branch of the calculation checked
end_date. All of them do now, and a date in the past is never displayed as a next run regardless of where it came from. - The Upcoming schedules tile said every schedule was running now. It decided a schedule was active by asking whether its
start_datehad passed and itsend_datehad not. Monthly, weekly and yearly schedules keep the2000-01-01sentinel instart_date, so the first half was true for all of them, and with no end date the second half never bit either. - Rows now say when a schedule fires, not just which day. The hour comes from the recurrence rather than from
next_run, which carries the right date but not necessarily the right time, and each row shows its window so "All day" and "7:30 PM - 11:00 PM" are told apart at a glance. Time ranges that run past midnight are handled.
Filler and Coexistence Mode
- Filler could be fully configured, shown as enabled everywhere, and never play. Filler runs in the moment no schedule is active, and Coexistence Mode claims that same moment for the other preroll manager, so the scheduler returns early and nothing said so. The calendar stops drawing filler it will not play, My Schedules says filler will not run and why, and the Coexistence setting explains the clash at the point the choice is made.
- Clear Prerolls When Inactive has the same relationship with filler and is handled the same way; it sits second in the scheduler's order, after Coexistence.
- Filler is deliberately left switched on rather than forced off. It is outranked, not wrong, and turning Coexistence off should not mean setting filler up again from scratch.
Calendar
- Clicking a day opens it. The month view only responded on the small date number and the week view not at all. The whole month cell opens that day, week day headers are buttons that do the same, and empty space in a week column does too. Schedule chips still open the schedule.
Generators
- The Faded Watermark option looked like it removed the logo. The mark was overlaid after the text at fifteen percent opacity, so it was invisible while very slightly washing over the words — and choosing it also switched the header from the single-line "COMING SOON TO" back to two lines, which read as the text moving around for no reason. The list layout now composites the watermark between the background and the text, which is where the option has always claimed it goes.
- Recent generated cards show when each file was last written, relative on the face and exact in the tooltip. A regeneration that came from a sync is marked as automatic; the filesystem cannot tell you that on its own, since the modification time is the same whether a sync wrote the file or someone pressed Generate.
QR Code template
- Corner rounding squared itself back off. The plate was rounded and the square code drawn straight over the top of it. The code is clipped to the plate's shape now, capped short of where a corner arc would start eating the position markers, so the plate can reach a full circle without costing a scan.
- The three module styles looked identical because at roughly three screen pixels per module on the stage, a square, a squircle and a circle are the same shape. The panel now carries a live sample of the real code, large enough for the choice to read, built from the same URL the canvas fetches.
- The plate colour looked like it did nothing, because an opaque code background covers all but a rim of it. That is what the setting does; the sample now shows the relationship, and a line explains that setting the code background to transparent lets the plate through.