-
v0.3.0 — new drop 🔥
Stablereleased this
2026-06-27 22:27:22 +00:00 | 27 commits to master since this releaseAdded
- Headless render-to-video (
soundy-bits render …, native-only). The same binary renders a
clip to an MP4 (H.264 video + Opus audio, in sync) or a PNG frame sequence with no window or
display — deterministic and reproducible, runnable on a headless server. Reuses the real
visualization/post-process plugins via an offscreenRenderTarget::Image+gpu_readback, a
fixed-step clock, and a frame-indexed offline audio pump. Encoding is a pluggable
VideoSink/VideoEncoderseam (src/headless/) so AV1 can drop in. Requireslibopus-devat
build time andlibopus.soat runtime.- Hardware H.264 via NVENC (
--features nvenc, NVIDIA) — auto-selected by default with the
software encoder as fallback; capped-VBR with a configurable--bitrate. The crate vendors its
headers and dlopens the driver at runtime, so it builds with no CUDA toolkit (but hard-links the
NVIDIA encode lib, so thenvencbinary only runs on NVIDIA hosts — hence an opt-in feature, not
default). Reuses a pooled, pipelined set of NVENC buffers, so a full song renders at ~7× real
time at 1080p60 (≈420 fps on a 4090) and exits cleanly. - Software encoder (fallback) is multi-threaded: encode/mux on a worker thread overlapping GPU
rendering, constant-QP + multi-slice so it parallelizes across cores, parallel RGBA→I420. - Flags:
--encoder auto|hw|sw,--bitrate <Mbps>(NVENC),--quality <QP>(software CQP,
default 22),--speed(faster software),--software(render on Mesa lavapipe for GPU-less hosts).
- Hardware H.264 via NVENC (
Changed
- Upgraded to Bevy 0.19. The custom 3-pass post-process chain (Tilemap → Combined effects →
Vector SDF/filters) and theColoredMesh2dpipeline were ported from the removed render-graph
node API to the new schedule-based renderer (passes are render-world systems on theCore2d
schedule, ordered after tonemapping inCore2dSystems::PostProcess). UI scaling moved from
EguiContextSettings::scale_factorto theEguiZoomFactorcomponent, and egui/Bevy deprecations
were cleared. - Refreshed all dependencies to their latest compatible versions.
cpalis intentionally held at
0.17 to stay aligned withrodio0.22 (which pinscpal0.17), avoiding a duplicate native audio
backend in the tree; it will follow once rodio bumps. - Releases are now automated via release-plz: a "Release PR" carries the
version bump + changelog, and merging it tags + publishes. CI runs on pull requests only.
Fixed
- Release archives now extract into a single top-level
soundy-bits-<ver>-<target>/folder instead of
scattering the binary + assets into the current directory (no more "tarbombs").
🌐 Live WASM demo (latest build): https://public.pages.ssy.dk/soundy-bits/
This release's exact browser build is thesoundy-bits-0.3.0-wasm.zipasset.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Headless render-to-video (