Skip to content

v1.2.1

Choose a tag to compare

@beastyrabbit beastyrabbit released this 25 Sep 13:01
· 137 commits to main since this release
a22c14b

Infinitune 1.2.1: keyboard-operable oneshot sliders on Node 26

The seek and volume bars on the oneshot and reimagine pages now work with the keyboard, touch, and screen readers, and Infinitune runs on Node 26.

Real sliders for oneshot playback

  • The seek and volume bars were clickable areas: keyboard users could focus them but not move them, and screen readers announced them as buttons. Each bar is now a real slider with the same look.
  • Arrow keys, Page Up/Down, and Home/End seek or change the volume. Touch dragging works, and screen readers hear values such as "0:19 of 0:40" and "60%".
  • A click lands exactly where the bar was hit. Seeking is disabled until this song is the one playing, so clicking the bar no longer moves a different song.

Oneshot result with keyboard focus on the seek slider

Keyboard seeking and volume changes

Node 26

  • The container image now runs on Node 26 (node:26-slim), the newest release line, which becomes LTS on October 28, 2026. CI tests on Node 26 as well.
  • Node 25 and later no longer ship corepack. The image installs the pinned pnpm with npm, and CI uses pnpm/action-setup.

Development and maintenance

  • pnpm dev hydrates pages again. Since 1.2.0's dependency update, the app pinned an older TanStack Store than the router needs, and Vite's dev server served the router that older copy. Production builds were not affected.
  • Six unused player components, five icons that only they used, and the @dnd-kit packages are removed, about 3,600 lines in total.
  • The SonarQube scan skips Dependabot pull requests, which never receive the scanner token.

Oneshot result on mobile

Upgrade notes

  • The image base changes from node:22-slim to node:26-slim. The app still runs as node (uid 1000), and data and configuration stay compatible with 1.2.0.
  • Self-hosted CI runners need libatomic1 for Node 26. The CI workflow installs it when it is missing.
  • The known issue from 1.2.0 remains: a worker cancelled during a slow storage save can still overwrite its replacement's audio file.

Pull request: #55.