github aethersdr/AetherSDR v26.7.4.1
AetherSDR v26.7.4.1 — TCI Rig Control Hotfix

4 hours ago

Hotfix release. This is v26.7.4 plus one fix and nothing else. If you are on v26.7.4 and use TCI, update. If you are on v26.7.3 or earlier, this is your upgrade target — the full v26.7.4 notes follow below.

The fix

TCI rig control is restored for WSJT-X and control surfaces. (#4500, #4493 — fixed in #4501)

v26.7.4 broke WSJT-X rig control over TCI. Band changes failed, the reported dial frequency was wrong, and transmissions could go out of band — which is why this is a same-day hotfix rather than something held for the next release.

The v26.7.4 TCI refactor replaced the model-driven tune with a raw slice tune written straight at the radio connection, then read the frequency back out of the slice model when the radio's reply arrived. Two things defeated that: the raw command bypasses the slice model, so nothing updated it — and the radio does not answer a tune with a frequency status either. The read-back could only ever observe the pre-tune value, so every vfo: confirmation echoed the frequency the slice had already left.

WSJT-X waits on that echo. It concluded the radio had not moved and reported a rig-control failure on every band change, while the radio was in fact sitting on the new band. Any client that accumulates a relative change — a Stream Deck tuning encoder, a band stepper — had its position reset by the stale echo and oscillated around one frequency instead of walking.

A second short-circuit in the same refactor confirmed a frequency without commanding the radio whenever the request matched what the model held. Once the model and the radio had diverged, that silently dropped real tunes and acknowledged them as successful.

Tuning now goes back through the slice model on every command plane. That setter is the command path — it sends the identical wire command, and additionally updates the model, honours a locked slice, and passes the transmit-inhibit guard the raw command bypassed. Confirmations now carry the frequency the radio actually reached.

Reported independently by @rah501xx (WSJT-X) and @milenjb (Stream Deck tuning encoder), whose packet captures pinned the missing status echo.


Everything in v26.7.4

94 commits across 14 contributors since v26.7.3. Full detail in CHANGELOG.md.

Headlines

Copy Assist — on-device speech-to-text, new in this release.

  • AetherSDR now transcribes received voice locally via whisper.cpp, docked under the waterfall with confidence colour-coding. CPU or GPU (Vulkan / Metal, auto-detected), download-on-demand models, and an optional remote OpenAI-compatible endpoint if you would rather run it elsewhere. Nothing leaves the machine unless you point it somewhere. (#4338)
  • Pick the transcription language rather than relying on auto-detection — a real difference on weak or accented signals. (#4399)
  • Copy Assist settings now live under a single configuration key, so they default, migrate, and save as one unit. (#4420)
  • The settings window honours frameless mode like the rest of the app. (#4417)

Copy Assist and NR2 now work properly together.

  • Copy Assist was fed from a visualization signal that drops any block arriving within 8 ms of the previous one — and it discards the whole block rather than merely skipping a repaint. With NR2 engaged, blocks arrive 5.33 ms apart, so roughly half the speech samples were being thrown away and the remainder spliced together with a discontinuity at every join. The resampler and voice-activity detector assume contiguous audio and had no way to see the gaps. Copy Assist now reads the unconditional presentation tap instead. No audio processing changed — the speaker path was never affected, which is exactly why this read as an NR2 speech-quality problem rather than a dropped-samples one. (#4486, #4488)
  • The same fix follows a single receiver: a station running a KiwiSDR alongside a Flex was previously feeding two receivers interleaved into one transcript.
  • NR2 itself gets better suppression quality and more reliable settings behaviour. (#4400)

Demo mode — run the full UI with no radio attached.

  • A synthetic backend generates its own receive audio and a matching panadapter, so you can explore AetherSDR, learn the interface, or develop against it with no hardware at all. Ten independently-enabled noise and signal channels make it a genuine test bench for the noise-reduction engines. It synthesizes receive audio only and cannot transmit. (#4473, #4490)

The 3D spectrum gets its largest polish pass yet.

  • Slice shadows are now surface-mapped onto the 3D FFT, with cached elevation shadows on slice flags. (#4439, #4442)
  • History is preserved across smooth-scroll boundaries, the rear edge stays stable when rows arrive late, and the floor resynchronizes after a bandwidth zoom. (#4432, #4476, #4477)
  • Waterfall and 3D motion are smoother for both Flex and KiwiSDR sources; the DC-edge comb, the wide right-edge artifact, and flat traces after a dBm scale change are all fixed. (#4425, #4413, #4371, #4279)
  • Panadapter Center Lock survives band changes, overlay wheel events stay contained, and the FFT trace line colour is now independent of the fill. (#4327, #4463, #4239)

Time, location, and station awareness.

  • AetherClock decodes NIST time signals and shows an alignment display, so you can see your clock's offset against the broadcast standard. (#4336, #4337)
  • A new GPS and station-location dashboard brings position and timing together in one place. (#4290)

Automation, TCI, and spotting.

  • The automation bridge gains an operator-controlled observe-only mode, phaseful pointer gestures, cross-platform subsystem memory telemetry, and a secured fresh-build MCP auth handoff. (#4188, #4355, #4293, #4356)
  • The bridge tune verb takes an optional slice id, so scripts can drive a non-active slice directly. (#4325)
  • TCI now broadcasts which slice has GUI focus, plus DSP, squelch, RIT/XIT and TX power on model change. (#4160, #4430)
  • Slice Link lets you right-click a panadapter to link two slices so tuning either retunes the other — across panadapters, including Kiwi-sourced slices. (#4326)
  • SpotHub gains a column-visibility menu and shrinkable width, and PSK Reporter gains a one-shot WSPR beacon transmitter. (#4157, #4435)

Operating polish and hardware support.

  • ACOM S-series amplifier support over serial / ser2net. (#4298)
  • Keyboard shortcuts can be exported and imported as backups, and an animated community credits experience joins the About dialog. (#4226, #4250)
  • Profile Manager Save now names its target and reports the result, deferred pan writes during profile loads are fixed, and container dock transitions persist immediately. (#4396, #4224, #4427)
  • TX power sliders stay stable during a drag, the status-bar TX timer is gated during tune carriers, and stale CW / RTTY panels after pan routing are fixed. (#4351, #4422, #4410)
  • macOS gets fixes for native Metal backing-store growth, waveform resize geometry, and clean failure without GUI services. (#4352, #4386, #4238)

Build and packaging.

  • CI now verifies that system libraries build, superseded workflow runs auto-cancel, and compiler and linker warnings are cleaned up. (#4256, #4346, #4369)
  • Windows local-build prerequisites are documented and fixed, and the RtMidi system dependency propagates correctly. (#4378, #4255)

Contributors

Big thanks to @rfoust (33 commits — the 3D FFT and waterfall pass, macOS fixes, automation gestures and MCP auth, NR2, and a long run of GUI polish), @jensenpat (15 commits — GPS dashboard, WDSP vendoring, WSPR beacon, TCI and controller work), @ten9876 (maintainer, 10 commits — Copy Assist and its audio-tap fix, observe-only bridge mode, CI and documentation), @nigelfenton (7 commits — demo mode, reconnect state, band-name aliases, waterfall split), @Ozy311 (6 commits — AetherClock engine and applet, Profile Manager Save, SWR guide memoization, Windows build prerequisites), @aethersdr-agent (the AetherClaude orchestrator, 6 commits — FFT trace colour, dock persistence, DAX nudge gating, amp-handle guard, spot feedback, redacted issue-report logs), @dawkagaming (3 commits — system-library CI, RtMidi, udev rules), @quelleck (2 commits — Slice Link, bridge tune slice id), @K5PTB (2 commits — Copy Assist language selector, toggle labels), @milenjb (2 commits — TCI broadcasts), @NF0T (1 commit — ACOM S-series amplifiers), @wa2n-code (1 commit — Kiwi diversity volume), @M7HNF-Ian (1 commit — SpotHub columns), and @skerker (1 commit — MIDI VFO self-heal). Dependabot contributed 4 dependency bumps.

73, Jeremy KK7GWY & Claude (AI dev partner)


Downloads

Linux AppImage (x86_64 / aarch64), macOS DMG (Apple Silicon + Intel, signed + notarized), Windows installer (setup.exe) + portable ZIP, and the Stream Deck plugin are attached below — built and signed by CI workflows on this tag.

Full diff: v26.7.4...v26.7.4.1 (this hotfix) · v26.7.3...v26.7.4.1 (since the last full release)

Verifying releases: see docs/VERIFYING-RELEASES.md. Signing key: docs/RELEASE-SIGNING-KEY.pub.asc.

Don't miss a new AetherSDR release

NewReleases is sending notifications on new releases.