Skip to content

Releases: silasmariusz/TuneThatHue

TuneThatHue 0.9.11

Choose a tag to compare

@silasmariusz silasmariusz released this 22 Oct 07:46

TuneThatHue is freeware from this release on, under the TuneThatHue Freeware Licence 1.0 (LICENSE). Releases up to and including 0.9.10 were published under the Apache License 2.0 and stay under it. The effects engine in effects/ is Music Assistant's code and keeps the Apache License 2.0 (effects/LICENSE); qnap/build_ffmpeg.sh is under the GPL (COPYING).

  • The author is written "Silas, Mariusz Grzybacz" in the QNAP package, the web page's footer, the DLNA renderer and Music Assistant player details, and the Windows plug-ins and installers.
  • The QNAP package carries the licence files in app/ and works as in 0.9.10: upgrading keeps the settings and the bridge pairing.

x86_64 models, QTS 6.0 / QuTS hero 6.0 and newer. Details: CHANGELOG.md, docs/decisions.md (D2).

TuneThatHue 0.9.10

Choose a tag to compare

@silasmariusz silasmariusz released this 22 Oct 07:21

A fix release of the QNAP package. The app itself is unchanged; the service script that QTS runs is rewritten.

App Center's Open shows the panel again

After the app was switched on in App Center, QTS wrote its own proxy rule for /TuneThatHue above the package's own, and that rule sent every request under /TuneThatHue/ to the app as //.... The app answered "Not Found" until the next plain start. The package's panel path is now /TuneThatHue/, so QTS's rule and the package's rule lead to the same place in either order.

Switched off means off

  • The app starts only while it is switched on in App Center (Enable = TRUE in /etc/config/qpkg.conf). The two-minute watchdog and restart used to start it when it was switched off.
  • Stopping ends only this package's own daemon.
  • Uninstalling leaves nothing outside the package folder: no proxy rule, no cron line, no run marker.

Files

  • config/ (the paired bridge's keys) and the log are readable by the administrator only. QTS runs package scripts with umask 0000, and 0.9.8 left them open to every user.
  • The old stop left root's /etc/config/crontab writable by every user. 0.9.10 sets it back to 0644 when it is installed.
  • The log is cut at 8 MiB; the last 1 MiB stays in tunethathue.log.1. A large log from an older version is cut at the first start.

Upgrading keeps the settings and the bridge pairing. x86_64 models, QTS 6.0 / QuTS hero 6.0 and newer.

Details: docs/qnap-service.md and docs/decisions.md (D1).

TuneThatHue 0.9.8

Choose a tag to compare

@silasmariusz silasmariusz released this 10 Sep 17:44
e0ad79c

Six weeks of work on the one thing that decides whether any of this looks good: the beat.
0.9.2 found a tempo and then drifted off it. This one holds a grid, counts bars against the
schedule it actually played, and rides through the parts of a track that have no drum in them
at all.

The beat grid

  • No duplicate beats. The tracker emits past a frontier, so a re-latch cannot replay beats
    it has already sent. Measured duplicate rate went from 25–29 % to zero, and F-measure against
    a click track from 0.45 to 0.99.
  • The downbeat stops moving. Absolute-frame phase, three-vote hysteresis and a clear-win
    margin, instead of re-deciding on every candidate.
  • Tempo traps. Metrical candidates on an interpolated comb, a median anchor, and a
    prior-gated family snap (5/4, 4/3, 3/2, 2, 3) that only ever moves toward the more probable
    dance tempo. This is what fixes a 4/3 delay reading as the tempo, and the 150→75 octave slip.
  • DJ sets. A breakdown no longer goes dark: the grid coasts for 64 bars, and a weak refine
    can confirm the living grid without being allowed to extend the coast or move the anchor.
    Over 27 sets, about nine hours, total dark time is 378 s — and the two biggest gaps are
    genuinely beatless interludes.
  • The bar counter reads the schedule, not an extrapolation, so a perfect grid replays as a
    strict 1, 2, 3, 4.

When there is no beat

New setting, When the beat disappears: ghost (keep pulsing at the last tempo, dimmed),
breathe (a slow swell) or onsets. Full silence drifts into an idle look after three seconds
and wakes on audio. A stream that never had a beat keeps the look it had before.

Two bugs that made the box look dead

  • The render clock followed the Sendspin server clock whenever a server was merely
    connected, so a local input's timestamps landed in the wrong epoch and the engine saw
    permanent silence. The server clock is now used only while Sendspin is the source.
  • One VBAN sender at a time. Two senders on the port used to interleave and reset the
    tracker on every packet. The first sender owns the port until it is quiet for two seconds.

Lights

Decaying tails now end in true black. Below about 2 % drive some bulbs mix their LEDs badly
and a dying purple flashed green; the engine stops emitting under that floor instead.

The panel

A real VU face with the needle hung from its own pivot, needles across the full width, the
meter row height pinned so the artwork stops growing the panel, and source marks that are the
right marks — Snapcast's staircase, Sendspin's wordmark, a filled WLED.

Install

QNAP — download TuneThatHue_0.9.8.qpkg, App Center → Install Manually. Configuration
survives the upgrade. The panel is on http://<nas>:58091/.

Verified on QuTS hero and on QTS 6.1. Windows, macOS and Linux packages for this version are
not in this release; build them from source with build-windows.ps1 or
install/linux/install.sh.

You need a Philips Hue bridge with an Entertainment area. Not affiliated with, endorsed by or
sponsored by Signify / Philips Hue.

TuneThatHue 0.9.2

Choose a tag to compare

@silasmariusz silasmariusz released this 31 Jul 18:15

The panel, redrawn from the feedback — and the meters carry the artwork they were meant to.

Downloads

You have File
QNAP NAS TuneThatHue_0.9.2.qpkg — App Center → Install Manually
Windows 10/11 TuneThatHue-daemon-0.9.2-setup.exe
Linux, Raspberry Pi, macOS TuneThatHue-0.9.2-unix.tar.gz
Docker docker pull silasmariusz/tunethathue:0.9.2

Player plug-ins are the separate installers below. The README has a step-by-step for
Raspberry Pi and Linux.

The panel

  • The VU meters are the supplied face: the artwork ships as drawn, and the needle
    hangs from its own pointX — the pivot the file marks below the glass. The sweep is
    read off the artwork's end ticks. The displays around the needles sit lower.
  • The bridge card is a grid: address above the room, Pair above Sync, the keys one
    fixed width. Nothing moves when a label changes.
  • A switch reads Off | On with the live side lit, and the settings header reads
    Basic | Advanced the same way. One CSS class was dressing both the switches and the
    palette swatches, which is why OFF glowed and BASIC stayed lit on the advanced view.
  • Every label on a dark plate prints in the light ink. The settings labels were
    silkscreened in the aluminium ink and vanished.
  • Sources drop the borrowed badges; the VBAN lamp moved to the module's rail; latency
    calibration takes the full width, which closes the dead space under Sources.
  • Selects, the LED-count well and the palette scrollbar are machined like the rest.
  • The footer carries the real marks — Winamp, foobar2000, Squeezebox, Sendspin, DLNA,
    QNAP, Raspberry Pi, Linux, Docker, macOS — one grey at rest, lifted on hover.

Network note

The container needs host networking (or macvlan) for discovery to work; the bridge
network cannot carry it. The image says so in its log when it finds itself on a bridge,
and the README and Docker Hub description carry the port table and the macvlan recipe.

Known limits

Unchanged from 0.9.1: 32-bit Raspberry Pi OS has no NumPy for Python 3.14, so the tempo
will not lock there; the macOS install script has not been run on a real Mac.

TuneThatHue 0.9.1

Choose a tag to compare

@silasmariusz silasmariusz released this 31 Jul 17:28

Daemon installers for every platform — the thing that was missing from the last release.

Downloads

You have File
QNAP NAS TuneThatHue_0.9.1.qpkg — App Center → Install Manually
Windows 10/11 TuneThatHue-daemon-0.9.1-setup.exe
Linux, Raspberry Pi, macOS TuneThatHue-0.9.1-unix.tar.gz
Docker docker pull silasmariusz/tunethathue

Player plug-ins are the separate installers below. The README has a step-by-step for
Raspberry Pi and Linux.

It is a service everywhere now

Windows installs a real service — automatic start, no sign-in needed — matching the
systemd unit on Linux and the launchd agent on macOS. It runs under WinSW, because
Windows expects a service to check in within thirty seconds and a Python process never
does; a plain registration produced a service Windows killed at every start.

Settings on Windows moved to ProgramData. A service runs as LocalSystem, whose AppData
no user can reach, so a bridge paired in the panel would have looked unpaired to the
daemon.

The panel

Rebuilt around one rule: the control is the state. A dark key is off, a lit key is
on, and the colour says which kind of on — blue for listening on the network, green for
linked, amber for light going out. Pressing a lit key turns that thing off. All the
labels repeating what a control already showed are gone.

  • Bridge card is four things: address, Pair, room, Sync. The address field takes an
    address and nothing else.
  • Calibration gained instruments: tempo, beat of the bar, and five lamps for what the
    engine hears — beat, bar, rise, drop, break — read from the effects engine's own
    structure detector.
  • The VU meters are a real VU scale: black glass, cream face, red from 0 VU, percentage
    scale inside, every mark computed from the movement rather than placed by hand.
  • Empty screens say what is true — No signal, No beat, No output — instead of
    showing a blank.

Also

  • WLED strips can be driven from the same frames as the bridge
  • The bundled ffmpeg is an LGPL build, and all eight decoders are checked before it ships
  • Container images for amd64 and arm64

Known limits

  • 32-bit Raspberry Pi OS: the tempo will not lock. NumPy publishes no 32-bit ARM
    build for Python 3.14 and the beat tracker needs it. Use the 64-bit image.
  • macOS: the install script has not been run on a real Mac.