• lindon-v6.0.0-rc1-7 1aefe0ceff

    RudiOnTheAir released this 2026-09-30 11:15:29 +02:00 | 1 commits to main since this release

    Note: GitHub renames ~ to . in uploaded asset filenames — use the
    GitHub-safe form in install commands, e.g. lindon_6.0.0.rc1-7_amd64.deb.

    Changes since rc1-6

    • Fixed RDCartDialog::loadFileData() (the "Load from File" quick-import
      in RDCartSlots) using a hardcoded dBFS-appropriate normalization
      value (-11) that became far too loud when a station has LUFS-based
      loudness normalization enabled. Now uses -23 (LUFS) or -11 (dBFS)
      depending on the station's LOUDNESS_NORMALIZATION setting.
    • New: per-station switch (RDAdmin Edit CartSlots dialog) to toggle
      playback on RDCartSlots slots via the keyboard -- digit keys 1-8
      play/stop the corresponding slot, independent of widget focus
      within the RDCartSlots window. Slots in Breakaway mode ignore the
      key. A green border is drawn around the window while it has focus
      and the feature is enabled. New STATIONS.CARTSLOT_KEY_PLAYBACK
      column, database schema 380 -> 381.
    Downloads
  • lindon-v6.0.0-rc1-6 97b09f25d5

    RudiOnTheAir released this 2026-09-29 13:20:47 +02:00 | 7 commits to main since this release

    What's new

    • Per-station LUFS-based loudness normalization, alongside the
      existing peak-based normalization (RDAdmin Host dialog switch).
      Ports the approach already used in the external M3U-import tooling
      into core Rivendell itself. Requires a DB schema update
      (379 -> 380) — run rddbmgr --modify after installing.
    • Fixed a dead-air bug: a race between RDLogPlay::Stopped() and
      the grace-timer handling could double-start a "Make Next & Wait
      max" line and stall the log for several minutes (observed up to
      4:18) when the grace line was started by a normal segue from its
      predecessor.
    • lindon-install.sh: added a fixed-48kHz sample-rate choice
      alongside the existing 44.1kHz-fixed/auto-detect options.

    Note on the version string

    GitHub renames the tilde in the package version to a dot in uploaded
    asset filenames. If you're scripting the download, use e.g.
    lindon_6.0.0.rc1-6_amd64.deb (dot, not tilde) — the actual Debian
    package version stays 6.0.0~rc1-6.

    Downloads
  • v6.0.0-rc1-4 0a9267ce95

    RudiOnTheAir released this 2026-09-14 11:59:05 +02:00 | 14 commits to main since this release

    "Fix fresh-install detection: the LINDON_HAD_EXISTING_CONFIG check
    was reading /etc/rivendell.d/rd-default.conf AFTER the preceding block
    already created it in the same postinst run, so every fresh install
    (not just a rivolution->lindon upgrade) took the upgrade branch and
    called rddbmgr --modify on a database that was never created. Now
    captured into a variable before that block runs."

    Downloads
  • v6.0.0-rc1-2 22c61eabd5

    RudiOnTheAir released this 2026-09-09 19:00:56 +02:00 | 17 commits to main since this release

    6.0.0~rc1-2

    • Fixed Manual/Forced Segue: RDLogPlay::play() fetched
      rda->airplayConf()->segueLength() but never assigned the result to
      segue_length, so a manual Start on a log line always cut in
      immediately instead of fading over the RDAdmin-configured duration.
    Downloads
  • lindon-6.0.0-rc1-1 e201dbe694

    RudiOnTheAir released this 2026-09-09 16:03:48 +02:00 | 20 commits to main since this release

    lindon 6.0.0~rc1-1

    First release under the new package name. If you're upgrading an
    existing rivolution install, read the "Renamed" section below before
    installing — the short version is: use apt install, not
    lindon-install.sh, and back up your database first regardless.

    Renamed: rivolution → lindon

    The package itself is now lindon (was rivolution). Internal paths
    went the other way — /usr/share/rivolution/, our own systemd units
    — reverted to plain rivendell naming. Also dropped the +lindonN
    version suffix entirely; it's redundant now that the package name
    itself says lindon, and it was quietly breaking our own build
    script's revision auto-bump. Versioning going forward is a plain
    Debian revision count (6.0.0~rc1-1, -2, …) against the upstream
    Rivolution version.

    Upgrading from rivolution:

    mysqldump --all-databases > backup.sql   # do this regardless
    sudo apt install lindon_*.deb lindon-*.deb
    

    Conflicts:/Replaces: handles removing the old rivolution-*
    packages in the same transaction — review apt's summary before
    confirming.

    Two things worth knowing after an upgrade, neither of them
    automatic:

    • If you have existing PyPAD instances, check their script path —
      PYPAD_INSTANCES.SCRIPT_PATH is a string frozen in the database at
      creation time and won't follow the rename on its own. New instances
      created after upgrading pick up the correct path automatically.
    • rivolution.conf under /etc/systemd/system/rivendell.service.d/
      isn't a dpkg-tracked conffile, so it's left sitting there alongside
      the new rivendell.conf rather than being removed. Harmless as
      long as the two don't diverge, but worth cleaning up by hand:
      rm /etc/systemd/system/rivendell.service.d/rivolution.conf.

    Also fixed: postinst's fresh-install-vs-upgrade check relied only on
    dpkg's $OLD_VERSION, which dpkg leaves empty for a Replaces:-
    triggered rename even with a fully working install already in place —
    the very first rivolution→lindon install would otherwise have hit
    the fresh-install branch and dropped the production database. Now
    also checks for a pre-existing /etc/rivendell.d/rd-default.conf
    before deciding.

    New: "Make Next & Wait max"

    A fourth option in "Action If Previous Event Still Playing" (rdairplay
    Edit Event, rdlogedit, and rdlogmanager's clock/event editor), alongside
    Start Immediately / Make Next / Wait up to.

    Reserves the "next" slot immediately like Make Next — so on a busy or
    segue-chained clock, a hard-timed element (news, a legally-timed ID)
    joins the current segue chain instead of the log falling through to
    whatever else happens to be scheduled next. But it still enforces a
    bounded timeout like Wait up to, so an overrunning predecessor can't
    push it past its deadline either.

    Encoded as GRACE_TIME <= -2 (timeout_ms = -GRACE_TIME - 2) — no
    database schema change, existing 0/-1/>0 values unaffected.

    Fixed

    • A side effect in RDLogPlay::transTimerData(): makeNext() calls
      SetTransTimer() internally, which can silently reassign the
      play_trans_line member to the next upcoming hard-time line. The
      new branch now uses the function's own pre-captured local
      (trans_line) consistently instead, matching the defensive pattern
      already used elsewhere in the function. Symptom before the fix: the
      wrong log line could get force-started after the grace timeout.
    • Two independent display bugs that made a correctly-saved value look
      wrong: EventWidget::load() (rdlogmanager) always showed "Start
      Immediately" on reopen regardless of what was actually saved;
      RDEventLine::propertiesText() rendered the new negative
      GRACE_TIME range as a bogus wrapped-around time (e.g. "57:59" for
      a 2:00 timeout) in the RDLogManager event list.

    Notes

    • Includes lindon:-tagged LOG_DEBUG diagnostics around the new
      grace-timer branch, for diagnosing scheduling edge cases.
    • GitHub renames "~" to "." in uploaded asset filenames — use
      lindon_6.0.0.rc1-1_amd64.deb in install commands, not the real
      Debian version string above.
      EOF
      Ausgabe

    lindon 6.0.0~rc1-1

    First release under the new package name. If you're upgrading an
    existing rivolution install, read the "Renamed" section below before
    installing — the short version is: use apt install, not
    lindon-install.sh, and back up your database first regardless.

    Renamed: rivolution → lindon

    The package itself is now lindon (was rivolution). Internal paths
    went the other way — /usr/share/rivolution/, our own systemd units
    — reverted to plain rivendell naming. Also dropped the +lindonN
    version suffix entirely; it's redundant now that the package name
    itself says lindon, and it was quietly breaking our own build
    script's revision auto-bump. Versioning going forward is a plain
    Debian revision count (6.0.0~rc1-1, -2, …) against the upstream
    Rivolution version.

    Upgrading from rivolution:

    mysqldump --all-databases > backup.sql   # do this regardless
    sudo apt install lindon_*.deb lindon-*.deb
    

    Conflicts:/Replaces: handles removing the old rivolution-*
    packages in the same transaction — review apt's summary before
    confirming.

    Two things worth knowing after an upgrade, neither of them
    automatic:

    • If you have existing PyPAD instances, check their script path —
      PYPAD_INSTANCES.SCRIPT_PATH is a string frozen in the database at
      creation time and won't follow the rename on its own. New instances
      created after upgrading pick up the correct path automatically.
    • rivolution.conf under /etc/systemd/system/rivendell.service.d/
      isn't a dpkg-tracked conffile, so it's left sitting there alongside
      the new rivendell.conf rather than being removed. Harmless as
      long as the two don't diverge, but worth cleaning up by hand:
      rm /etc/systemd/system/rivendell.service.d/rivolution.conf.

    Also fixed: postinst's fresh-install-vs-upgrade check relied only on
    dpkg's $OLD_VERSION, which dpkg leaves empty for a Replaces:-
    triggered rename even with a fully working install already in place —
    the very first rivolution→lindon install would otherwise have hit
    the fresh-install branch and dropped the production database. Now
    also checks for a pre-existing /etc/rivendell.d/rd-default.conf
    before deciding.

    New: "Make Next & Wait max"

    A fourth option in "Action If Previous Event Still Playing" (rdairplay
    Edit Event, rdlogedit, and rdlogmanager's clock/event editor), alongside
    Start Immediately / Make Next / Wait up to.

    Reserves the "next" slot immediately like Make Next — so on a busy or
    segue-chained clock, a hard-timed element (news, a legally-timed ID)
    joins the current segue chain instead of the log falling through to
    whatever else happens to be scheduled next. But it still enforces a
    bounded timeout like Wait up to, so an overrunning predecessor can't
    push it past its deadline either.

    Encoded as GRACE_TIME <= -2 (timeout_ms = -GRACE_TIME - 2) — no
    database schema change, existing 0/-1/>0 values unaffected.

    Fixed

    • A side effect in RDLogPlay::transTimerData(): makeNext() calls
      SetTransTimer() internally, which can silently reassign the
      play_trans_line member to the next upcoming hard-time line. The
      new branch now uses the function's own pre-captured local
      (trans_line) consistently instead, matching the defensive pattern
      already used elsewhere in the function. Symptom before the fix: the
      wrong log line could get force-started after the grace timeout.
    • Two independent display bugs that made a correctly-saved value look
      wrong: EventWidget::load() (rdlogmanager) always showed "Start
      Immediately" on reopen regardless of what was actually saved;
      RDEventLine::propertiesText() rendered the new negative
      GRACE_TIME range as a bogus wrapped-around time (e.g. "57:59" for
      a 2:00 timeout) in the RDLogManager event list.

    Notes

    • Includes lindon:-tagged LOG_DEBUG diagnostics around the new
      grace-timer branch, for diagnosing scheduling edge cases.
    • GitHub renames "~" to "." in uploaded asset filenames — use
      lindon_6.0.0.rc1-1_amd64.deb in install commands, not the real
      Debian version string above.
    Downloads
  • v6.0.0-rc1-6+lindon5 a173451c7d

    RudiOnTheAir released this 2026-09-08 08:06:22 +02:00 | 22 commits to main since this release

    rivolution (6.0.0~rc1-6+lindon5) unstable; urgency=medium

    • New: fourth "Action If Previous Event Still Playing" mode across
      rdairplay, rdlogedit and rdlogmanager: "Make Next & Wait max".
      Combines immediate makeNext() (like "Make Next") with a bounded
      safety timeout (like "Wait up to"), avoiding both the too-short
      interstitial problem of plain "Wait up to" on segue-chained clocks
      and the unbounded wait of plain "Make Next".
    • Encoding: GRACE_TIME <= -2 now means "Make Next & Wait max",
      timeout_ms = -GRACE_TIME - 2. No database schema change.
    • Fixed a latent side-effect bug in RDLogPlay::transTimerData():
      makeNext() internally calls SetTransTimer(), which can silently
      overwrite the play_trans_line member. The new branch now uses the
      pre-captured local trans_line consistently, matching the existing
      defensive pattern already used elsewhere in the function.
    • Fixed grace-time display bugs: EventWidget::load() (rdlogmanager)
      lost the assignment from event_event->graceTime() during a
      refactor, always showing "Start Immediately" regardless of the
      saved value; RDEventLine::propertiesText() (lib/rdevent_line.cpp)
      didn't know about the new GRACE_TIME <= -2 encoding and rendered
      it as a bogus wrapped-around QTime (e.g. "57:59" for a 2:00
      timeout) in the RDLogManager event list.
    • Added lindon: debug logging (LOG_DEBUG) around the new grace-timer
      branch for diagnosing scheduling edge cases.

    -- RudiOnTheAir newsletter@schwoon.info Mon, 08 Sep 2026 08:00:00 +0200

    Downloads
  • v6.0.0-rc1-6+lindon4 bca0596686

    lindon 6.0.0~rc1-6+lindon4
    Some checks are pending
    Build x64 .deb packages / build ( Built on Ubuntu 24.04 as a temporary accommodation for cloud providers that don't yet offer 26.04 images. Ubuntu 26.04 remains the primary supported target -- use the build above unless your host genuinely can't offer it yet., ## x64 build (Ub… (push) Waiting to run
    Stable

    RudiOnTheAir released this 2026-09-04 20:43:08 +02:00 | 24 commits to main since this release

    lindon 6.0.0~rc1-6+lindon4

    A private, trimmed fork of Rivolution — see README.md
    for the full rationale.

    Changes from upstream Rivolution

    • rivapi (web dashboard) removed entirely — not built, no
      associated systemd/sudoers hooks.

    • PipeWire switched to user-scope — rivendell.service now binds
      to the operator's own session instead of a separate system-scope
      instance.

    • icecast2, stereo-tool.service, and tailscaled dropped from
      the packaged stack — none of the three are installed or managed by
      this build.

    • Segue back-timing (upstream spec 0002) fully reverted, including
      its follow-on "second bug" fix. Upstream's own spec explicitly
      reasoned that voice tracking wouldn't interact with this feature —
      that reasoning turned out to be wrong on two separate counts:

      • Voice-tracked transitions save SEGUE_GAIN=0 as their normal,
        incidental value (full volume, no duck) — the same field the
        back-timing feature gates on — so every voice-tracked segue
        triggered it regardless of operator intent, playing out to the
        element's natural end with no audible transition instead of
        blending.
      • The follow-on fix for a related regression (Finished()/
        FinishEvent() skipping the next element's start whenever
        anything else was still running, on the assumption it would be
        re-triggered later) turned out to silently stall the log
        whenever the next line was a marker or an empty voice-track slot
        with no audio of its own to generate that re-trigger — the log
        would just sit there indefinitely, indistinguishable from a
        Stop.

      Both reverted; confirmed via diff that the affected functions are
      now byte-identical to vanilla Rivendell 4.5.0. Reported upstream
      weeks ago, unresolved as of this release.

    • libmad0/libtwolame0 added as explicit dependencies — both
      are dlopen()'d at runtime, so their absence wasn't visible via
      ldd and previously broke MP3/MPEG import silently.

    • lindon-install.sh added — a setup script for the operator
      account, desktop autologin, PipeWire sample rate, and
      standalone/server/client NFS + database configuration.

    Installation

    Download the .deb files below plus lindon-install.sh, put them in
    the same directory, then:

    sudo ./lindon-install.sh
    
    Downloads
  • v6.0.0-rc1-5 440ec996af

    v6.0.0-rc1-5
    Some checks are pending
    Build x64 .deb packages / build ( Built on Ubuntu 24.04 as a temporary accommodation for cloud providers that don't yet offer 26.04 images. Ubuntu 26.04 remains the primary supported target -- use the build above unless your host genuinely can't offer it yet., ## x64 build (Ub… (push) Waiting to run
    Build x64 .deb packages / build (, ## x64 build, ubuntu-26.04, ) (push) Waiting to run
    Stable

    RudiOnTheAir released this 2026-07-22 03:16:23 +02:00 | 78 commits to main since this release

    Fix: dead air after "Make Next & Wait max"

    If a song segued into a "Make Next & Wait max" event with a very short
    segue (under about a second), the event could be started twice. Both
    instances stopped immediately and nothing played until the next
    hard-time event. The grace timer is now cancelled as soon as the event
    has actually started.

    Affects all hard-time events using "Make Next & Wait max"
    (GRACE_TIME <= -2). Upgrade recommended.

    Downloads