Repository navigation
Releases: iksteen/kahawai
Release list
Kahawai v0.0.22-rc.1
This release candidate tells subtitle tracks apart by kind, so a language preference picks the full dialogue track instead of a forced or commentary one, and moves the bundled GStreamer to 1.28.8.
Subtitles
- Subtitle tracks are classified as forced, hearing-impaired (SDH) or commentary. The classification comes from the Matroska track flags, from track names such as "English [SDH]" or "Signs/Songs", and from sidecar file names such as ".en.forced.srt".
- When subtitles are picked automatically by language, a full track is preferred over an SDH track, and an SDH track over a forced one. Commentary tracks are never picked automatically. Track lists show an embedded track's name, or its kind.
- After upgrading, the mediahost re-probes every file with embedded subtitles on its next scan so existing files gain the classification. This only refreshes metadata: extracted subtitles and other derived data are kept, and subtitle jobs are not reset.
Web app
- The Permissions Policy covers the three features Chrome 155 adds. Digital credential creation and speaker selection are denied. Media playback while not visible is allowed for the app itself, because Chrome 155 otherwise stops direct play from starting.
Packaging
- The container image and the Homebrew formula build GStreamer 1.28.8 and the matching gst-plugins-rs release. Every Kahawai GStreamer patch is still required and applies unchanged.
- On macOS, rebuild the patched GStreamer from the updated tap before building this release:
brew update && brew upgrade --build-from-source iksteen/kahawai/kahawai-gstreamer.
Operations
- Exported metrics have a reviewed label policy that keeps user, item, session and file identities out of label dimensions.
scripts/kahawai-metrics-check.shruns the policy checks and can validate a captured/metricsresponse. Metrics output is unchanged. - The README documents installing from the AUR on Arch Linux.
The satellite protocol is unchanged.
Changes since v0.0.21-rc.2: v0.0.21-rc.2...v0.0.22-rc.1
Reproducible source branch: refs/heads/v0.0.22-rc.1
Release source commit: c49e093c79bdd06a72bc2aa34f2c3122d9e60b06
The attached bare binaries require a compatible Ubuntu 26.04 media stack; the container image is the supported artifact.
Kahawai v0.0.21-rc.2
This release candidate fixes GStreamer plugin verification stalling when run from a terminal. The server itself is unchanged.
Packaging
kahawai-gst-plugins.sh verifyruns the patch reproducers with standard input detached from the terminal. The patch 0004 reproducer's ffmpeg reference decoder used to put the terminal into raw mode from a background process group, which stopped it until the 120-second timeout failed the patch, so building kahawai-gstreamer with makepkg or an AUR helper in a terminal failed its checks. CI and the container build were unaffected.- The reproducers' ffmpeg invocations pass -nostdin, so they are also safe to run by hand in the background.
The server, web app and satellite protocol are unchanged from v0.0.21-rc.1. The GStreamer patches are identical; the container image rebuilds GStreamer only because the reproducers copied alongside them changed.
Changes since v0.0.21-rc.1: v0.0.21-rc.1...v0.0.21-rc.2
Reproducible source branch: refs/heads/v0.0.21-rc.2
Release source commit: 7b998b295f7ab081cf6b059d82e69dd5bb83a1c8
The attached bare binaries require a compatible Ubuntu 26.04 media stack; the container image is the supported artifact.
Kahawai v0.0.21-rc.1
This release candidate improves transcoder visibility and controls, fixes headless HDR and audio conversion, and introduces the Kahawai branding in the web app.
Transcoding
- The all-in-one server's built-in video transcoder now appears in the admin fleet with its benchmarked capabilities and observed session pace. It cannot be deleted.
- The built-in video transcoder can be disabled through the admin fleet. This setting persists across restarts; remuxing and audio-only conversion still run locally, and existing video sessions retain their executor across seeks and track changes.
- macOS HDR-to-SDR workers and benchmarks now create their own offscreen OpenGL contexts, so they work as system daemons without a desktop login.
- Eight-bit HDR-to-SDR conversion pins an encoder-compatible raw format, retaining NV12 for NVIDIA and compatible hardware encoders and I420 where required by software encoders. Unsupported tone mapping fails explicitly instead of silently passing HDR through.
Audio
- Verified AAC and Opus encoders are advertised independently of video benchmarks. Remote video transcoding no longer loses its accompanying audio because an audio encoder has no video benchmark result.
- AAC conversion tries a validated six-channel side-to-rear surround conversion before falling back to stereo. Native layouts remain preferred, client channel ceilings still apply, and the source-aware MPEG-TS round-trip checks remain in place.
- AAC qualification results are cached per encoder. Loudness analysis measures the exact 5.1 conversion matrix, and playback uses only its matching measured gain; it does not substitute the native six-channel gain.
Web app
-
Navigation and authentication screens use the supplied Kahawai logo and wordmark. The mark also supplies the favicon and missing-artwork placeholder, and the authentication form fits narrow screens. The outlined wordmarks require no external font download.
-
Fleet measurement captions use a readable text color and are covered by the real browser accessibility check.
The satellite protocol is unchanged. Existing loudness measurements remain valid; files whose stored measurements lack the converted 5.1 layout receive no substituted normalization gain for that layout. This release does not schedule a library-wide loudness rebuild.
Changes since v0.0.20-rc.1: v0.0.20-rc.1...v0.0.21-rc.1
Reproducible source branch: refs/heads/v0.0.21-rc.1
Release source commit: 16a62c03f01ae48161e0bb49b75488e27008eb1a
The attached bare binaries require a compatible Ubuntu 26.04 media stack; the container image is the supported artifact.
Kahawai v0.0.20-rc.1
This release candidate makes subtitle caches survive metadata corrections, fixes VideoToolbox rate control, and smooths out navigation in the web app.
Subtitles
- Subtitle extraction and OCR caches are now keyed by the source file's bytes rather than its probe metadata, so probe corrections such as the v0.0.19 bit-depth migration no longer orphan extracted tracks or recognized OCR text. Existing caches and OCR answers are migrated once, resumably, on startup; unverifiable legacy entries are retained.
- The subtitle work queue keeps only outstanding jobs and reconciles cache presence at startup, after deletions or lost filesystem events, and on playback misses.
- Several media files sharing one VobSub sidecar now each complete their own extraction instead of repeatedly re-extracting after every lease expiry.
Transcoding
- VideoToolbox H.264 and HEVC no longer let the fixed quality setting override the negotiated bitrate. Bitrate-controlled sessions use ABR or CBR, automatic-rate sessions keep quality control, and mode changes recreate the encoder session cleanly (GStreamer patch 0011, macOS only).
- The GStreamer rebuild helper creates its temporary files correctly on Linux again.
Web app
- Admin sections have their own addresses (for example /app/admin/work) and survive reloads.
- Returning from an item page with Back restores the browse position in deep library, artist and album grids, and the Library button returns to the previous entry instead of starting over at the top.
- A poster that failed to load is replaced as soon as manual matching gives the item new artwork.
The hub runs its one-time subtitle cache migration on first start. The satellite protocol is unchanged. Mac transcoders built from source pick up the VideoToolbox fix only after kahawai-gstreamer is rebuilt with patch 0011.
Changes since v0.0.19-rc.2: v0.0.19-rc.2...v0.0.20-rc.1
Reproducible source branch: refs/heads/v0.0.20-rc.1
Release source commit: bce5773a7916d66b91cea9cb6df18d6432ee25f2
The attached bare binaries require a compatible Ubuntu 26.04 media stack; the container image is the supported artifact.
Kahawai v0.0.19-rc.2
This release candidate corrects video bit-depth metadata used for playback negotiation.
- Paletted Microsoft RLE and RGB8P video now reports the expanded 8-bit colour precision rather than palette-index or packed-entry widths, avoiding unnecessary transcoding.
- A one-time mediahost catalogue migration converts legacy aggregate depths 24/30/36 to 8/10/12 bits per component.
- Ambiguous legacy values, including 16 and 48, trigger a persistent, targeted re-probe during normal scanning. Failed probes remain retryable; uncertain depths stay unknown rather than being guessed.
- Corrected metadata reaches hubs through normal catalogue replication. Read-time compatibility mappings have been removed from deserialization, playback negotiation and the web app.
For split deployments, update the mediahosts as well as the hub. Mediahosts own the migration and re-probing; corrections synchronize automatically, including when a disconnected hub reconnects. No manual full-library re-scan is needed, and media files are not modified.
Changes since v0.0.19-rc.1: v0.0.19-rc.1...v0.0.19-rc.2
Reproducible source branch: refs/heads/v0.0.19-rc.2
Release source commit: f4270a847f079267a12a4c43198a6857af2cc011
The attached bare binaries require a compatible Ubuntu 26.04 media stack; the container image is the supported artifact.
Kahawai v0.0.19-rc.1
Video bit-depth negotiation
- Negotiate per-codec component-depth limits so a known 10-bit source is transcoded when the client only supports 8-bit decoding.
- Enforce the selected output depth in the encoder pipeline and verify the encoded stream before muxing.
- Normalize legacy catalogue depths of 24 and 30 to 8 and 10 on read; no library rescan is required.
- Probe browser capabilities by codec, profile and bit depth, and add a bit-depth ceiling to the web capability mask.
- Require satellite protocol 4.6 for depth-constrained encodes. Older workers remain eligible for other playback; older clients without depth limits retain their previous behavior. Unknown source depth remains permissive, and HDR handling remains separate.
Web player fixes
- Bound the playback information panel and make long subtitle lists scrollable so the player controls remain accessible.
- Keep audio, video, subtitle and capability menus stable during unrelated playback updates, while preserving track changes, rollback and restart disabling.
Reproducible source branch: refs/heads/v0.0.19-rc.1
Release source commit: 4a3ab573092a7a2110e6156e137602a3aaecfba3
The attached bare binaries require a compatible Ubuntu 26.04 media stack; the container image is the supported artifact.
Release v0.0.18-rc.1
This prerelease reduces catalogue write contention during media scans, fixes playback-session cleanup, and improves deployment and diagnostic tooling.
Changes since v0.0.17-rc.1
- Less database work during rescans. Scan progress counters now live in memory, avoiding repeated database commits just to update the admin progress display. Unchanged files are no longer rewritten merely to mark them present. This reduces write-lock contention and WAL traffic while retaining durable scan state and missing-file detection.
- Reliable session cancellation and cleanup. Ending a playback session now cancels an in-flight seek's readiness wait and fallback work. An HTTP disconnect alone still allows an accepted seek to complete. Cancelled or failed startup also releases pending source-lease and remote-start registrations.
- Safer Mac and NAS deployments. Deployment scripts can stage binaries before activation, retain executable backups, verify process replacement and reconnection, and check that patched GStreamer is used.
- Offline interleaving diagnostic. A read-only scanner helps identify media whose audio/video layout may cause playback stalls. Its scores are diagnostic heuristics, not guarantees that a file will stall.
Compatibility
Playback retains the push-appsrc implementation and wire protocol 4.5. The experimental pull-source implementation and protocol 5/6 changes are not included in this release.
Reproducible source branch: refs/heads/v0.0.18-rc.1
Release source commit: be1ea68cf7238d80e492fed9f3a29d6da917750d
The attached bare binaries require a compatible Ubuntu 26.04 media stack; the container image is the supported artifact.
Kahawai v0.0.17-rc.1
Extract the playback mechanics every process that runs a pipeline used to carry a copy of into a new kahawai-playback crate: one typed job with its argv and StartSession codecs, one supervised executor shared by the hub's local remux and the transcoder's dispatched sessions, playlist readiness, the diagnostics bundle, the pure placement ranker and the seek helpers. The hub's remux.rs and sessions.rs are split into module directories with no behaviour change.
Protocol 4.5 adds StartSession.target_duration_secs so a transcoder's readiness runway follows the hub's declared target duration; older peers keep the flat floor. Sessions run in per-run directories on the hub as they already did on transcoders, a worker that dies mid-session leaves its bundle and an error line on the session header, and the hub's own worker now feeds pace samples into transcoder_pace under module local.
A start still prerolling when its end, a replacement or a link teardown arrives is cancelled rather than left to register afterwards; a dropped run kills its worker. The hub's byte plane moves out of the session manager into hub/bytes.rs.
Reproducible source branch: refs/heads/v0.0.17-rc.1
Release source commit: d108bb0d46248f73d8545c1a54c8517fa0b8cf31
The attached bare binaries require a compatible Ubuntu 26.04 media stack; the container image is the supported artifact.
Kahawai v0.0.16-rc.1
Drive background enrichment and subtitle work through durable queues and expose queue status. Limit subtitle dispatch to 16 outstanding files per kind per mediahost, refilling at eight, so the backlog stays on the hub.
Keep catalogue snapshots off the serialized database writer to avoid blocking mediahost writes. Serialize initial Matroska seeks and avoid duplicate seek delivery, including GStreamer patch 0010.
Restore builds without default features by guarding OCR-only helpers.
Reproducible source branch: refs/heads/v0.0.16-rc.1
Release source commit: f2b8498a0819ef26694b45c73a5dbb32096b5642
The attached bare binaries require a compatible Ubuntu 26.04 media stack; the container image is the supported artifact.
Kahawai v0.0.15-rc.1
Restore background subtitle prewarming, prioritize ongoing viewing, and bind extraction replies to source revisions. Separate image extraction from OCR scheduling and share background capacity fairly between connected hubs.
Reproducible source branch: refs/heads/v0.0.15-rc.1
Release source commit: 6f875e63912510517844fa02d8d9a93c6561ced8
The attached bare binaries require a compatible Ubuntu 26.04 media stack; the container image is the supported artifact.