Skip to content

Releases: Necrosiak/BoneCast

v0.3.4

Choose a tag to compare

@github-actions github-actions released this 25 Aug 16:59

Fixed

The active Steam account could no longer be identified, because Steam
changed the two files it was read from.

registry.vdf stopped publishing a numeric ActiveUser — it now publishes
AutoLoginUser, which holds the account name rather than an id. And
loginusers.vdf dropped MostRecent in favour of AutoLogin and Timestamp.

Both probes therefore came back empty, and everything fell back to a generic
profile that belongs to nobody.

The account is now resolved from AutoLoginUser, matched by account name, then
from AutoLogin, then from the most recent Timestamp. The older ActiveUser
and MostRecent keys are still tried first, so an older Steam behaves exactly
as it did before.

This was found while fixing the same failure in
SkullKey, where it
made Epic, GOG and Amazon all report themselves as logged out. Every plugin that
keeps per-account state was written against the same two keys, so they all
stopped working on the same day.

v0.3.3 — the updater can actually update now

Choose a tag to compare

@github-actions github-actions released this 09 Aug 07:32

The in-plugin updater could not actually update anything on a normal install — and told you it had. Both defects were already fixed in Steamcord and had never been carried over here.

Fixed

Updates failed with Permission denied. Decky root-owns the plugin's top-level directory (and only that, plus plugin.json). The updater replaces each file by writing a temporary file next to it and renaming it into place, which needs write access to the directory — so creating that temporary file failed, even though the files being replaced belong to you and are perfectly writable.

Overwriting an existing file's contents only needs write permission on the file itself, so that is now used as a fallback when the temporary file cannot be created but the destination exists and is writable.

A failed update was reported as a success. apply() returns a dictionary, and {"ok": False, "error": …} is always truthy in Python. The boot-time auto-updater therefore treated every failure exactly like a success: it announced that the update had been installed and restarted Decky anyway — and did it again at the next boot, since the installed version had not moved. It now reads the result and logs why it gave up.

How this was found

Not from a report: the plugin failed to update itself on a real machine, logging Permission denied on its temporary file and, on the very next line, that the update had been installed. That contradiction is what exposed the second defect.

The fix was checked against the real failing scenario — an unwritable directory holding a writable destination file — with the actual code, not a reimplementation: contents replaced, permissions correct, no temporary file left behind.

v0.3.2 — controller focus in button rows

Choose a tag to compare

@github-actions github-actions released this 09 Aug 07:24

A small maintenance release, shipping a fix that had been sitting in the repository unreleased since 2026-07-23.

Fixed

Controller navigation in rows of buttons. flow-children="horizontal" is not a value the Steam client's focus engine accepts — it only takes row, row-reverse, column, column-reverse, grid and geometric. Anything else falls through to a default branch that logs Unhandled flow-children on every render and produces no focus flow at all, which can break controller navigation and even swallow state updates on rows that re-render often.

Replaced with row, the same correction already applied to Steamcord and SkullKey.


Full changelog: CHANGELOG.md

v0.3.1 — Root-owned update fix, monochrome icons

Choose a tag to compare

@github-actions github-actions released this 20 Jul 12:53

Maintenance pass, ported over from the same work on Steamcord v1.16.1.

Changed

  • Monochrome SVG icons across the QAM UI, matching the rest of the Necrosiak plugin suite. Color emoji were replaced with monochrome vector icons that inherit the surrounding text size and color.

Fixed

  • In-plugin updates failed on root-owned installs. The updater overwrote files with shutil.copy2, which ends with a chmod on the destination — something a non-root process cannot do on root-owned files even when they are world-writable. Files are now replaced via a temp file + atomic os.replace, which only needs write permission on the directory — and every replaced file becomes owned by the user, so a root-owned install heals itself as it updates.

Full Changelog: v0.3.0...v0.3.1

v0.3.0 — clips, chat, BRB, local recording, 9-language UI

Choose a tag to compare

@github-actions github-actions released this 12 Jul 11:15

⚠️ This release adds Twitch permissions (clips:edit, user:write:chat). Existing logins must reconnect once — the plugin detects it and asks.

Added

  • 🌍 Full UI localization — the interface is now translated into 9 languages (EN/FR/DE/ES/IT/PT/NL/PL/RU) and follows your SteamOS language automatically, like the rest of the suite.
  • 🎬 Instant clips — while live, one button clips the last ~30 seconds through the Twitch API (published to your dashboard ~15 s later).
  • 💬 Send chat messages — talk in your own Twitch chat straight from the QAM, next to the read-only overlay.
  • ⏸️ BRB mode — one tap replaces the game feed with a clean pause screen and mutes your microphone; one tap brings the game back. The RTMP stream never drops, so viewers stay connected.
  • ⏺️ Local recording — record your session as an MKV in ~/Videos/BoneCast/ (localized XDG folder), either alongside the live stream (single-encode tee, no extra CPU cost) or without streaming at all. The file path is shown when you stop.
  • Status badges now distinguish live / paused (BRB) / recording.

Fixed

  • Overlay settings finally apply live. Position, size and opacity changes from the QAM had no effect: in WebKitGTK a fetch() on a file:// URL returns HTTP status 0 even on success, so the overlay discarded every state update. Changes now apply within ~1 s.
  • Overlay stays visible when Big Picture has the focus — the overlay window now sits on the KDE on-screen-display layer (like the volume popup) instead of relying on keep-above.
  • The overlay no longer inherits the plugin's PyInstaller LD_LIBRARY_PATH (spurious libssl/gio warnings).
  • Leftover Steamcord naming purged from the overlay (window title, default state directory).

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 10 Jul 06:40

Fixed

  • Debian/Ubuntu compatibility: the capture feeder ran the hardcoded /usr/bin/python, which does not exist on Debian/Ubuntu. The system python is now resolved from PATH.

Added

  • libx264 probe before going live. Fedora's default ffmpeg (ffmpeg-free) ships without the H.264 software encoder — the stream now fails with a clear message pointing at the full RPM Fusion ffmpeg instead of an opaque ffmpeg crash. get_encoders also reports x264 availability.
  • GStreamer/PipeWire pre-check before starting the capture: missing python bindings or pipewiresrc (stock Arch/Fedora/Debian) now produce the exact package command for your OS in the QAM (new no_gst error).
  • openSUSE (zypper) is now covered by the OS-specific install hints; unknown stream errors now display the backend hint when available.

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 09 Jul 21:00

Update failures are now visible 🔄

When installing an update fails — for example on a root-owned local install (Permission denied) — the panel now shows the exact error under the update button instead of staying on “installing…” forever. The silent boot-time auto-update path is unchanged (failures were already logged).

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 09 Jul 20:41

Runtime dependency checks 🐧

One build for every Linux distro: going live now verifies what the machine has.

Added

  • ffmpeg presence check before starting a stream, with the exact install command for the detected package manager (pacman / rpm-ostree / dnf / apt).
  • Better v4l2loopback errors. The “no loopback” error now carries a precise hint that distinguishes “module not installed” (package + modprobe command) from “installed but not loaded” (modprobe only), shown right under the live button.

No behavior change on machines where everything is already set up.

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 16:41