Repository navigation
akou 1.1.0
1.1.0 — Home Assistant and Bazarr talk to the server, and the window behaves
The server now speaks to two more things on a home network, and the desktop window stops scrolling past the app. The 8-hour soak that 1.0.0 shipped without ran for this release, on a build with every change but the window fix, with a busy process on every core: no hole in the audio, heap growth 0.16 MB, the event loop late by at most 186 ms, and nothing unreadable in the log (docs/gates/soak-1.1.0.json).
Server
- Home Assistant's Assist can transcribe with akou over Wyoming (#395).
server.wyoming(default off,AKOU_WYOMING=truein the container) opens the Wyoming protocol onserver.wyoming_port(10300), bound where the API binds. Add akou in Home Assistant as a Wyoming integration by host and port; the first utterance after turning on a preset that is not downloaded yet waits for the download. No key and no TLS on that port: keep it on your network. CI checks the round trip with the Wyoming client at 16 kHz. server.md has the setup. - Bazarr fetches subtitles from akou (#396).
server.bazarr(default off,AKOU_BAZARR=true) answers Bazarr's Whisper provider:POST /v1/asrreturns an SRT andPOST /v1/detect-languagenames the track's language, with no key. In Bazarr set the whisper endpoint tohttp://akou:8476/v1, with the/v1. Each/asrrequest is one job onserver.default_model, deleted once the subtitle is sent; cues hold at most 42 characters, for timed and untimed segments alike./detect-languagetranscribes the first 30 s underbest, so it needs Qwen. Translation is refused with a 400 and abazarr:warning line. server.md has the details and the traps. - The Docker Hub page is filled from the README by a workflow, with absolute image paths so the banner renders there (#389, #390). The docs no longer claim Wyoming or Bazarr ahead of the code (#389).
Desktop
- The window no longer scrolls far past the app (#397). The page filled only the top of a tall window, with an empty area under it, because the shell's webview kept its old size after a display or scale change. The shell now re-fits the webview on macOS after those changes, with a settle guard, and the page itself never scrolls.
- A note or a line fix can be read whole while you edit it (#397). Both boxes were one-line inputs that scrolled sideways. They are now textareas that wrap and grow with their text, up to 12 rows; Enter still adds the note or applies the fix, and the popover has a maximum height so a long fix stays on screen.
- An answer through Claude Code starts sooner (#393). The ask box asks the app to start the harness when it gets focus (
POST /provider/warm), so the harness does its start-up while the question is typed and the answer waits only for the model. A waiting harness is sent nothing until a question, stops after 60 s without one, at quit, and on its own when akou dies.
Transcription
- The first lines of a cold call stop waiting for the helper (#394). The recognizer loads from the call's start, on
call.created, with the call's words in the decode list it is built for, and TitaNet loads as the call channel's speech starts instead of on the first line. WithAKOU_LINE_TIMING=1each load is timed. The first-line lateness of #378 is narrower, not closed: a fresh app still pays the model load on its first call. - On four x64 cores a live line commits 0.4 s sooner, 1.60 s at worst (#391, #379). A provisional re-decode on x64 now waits for new speech, so one that falls in the pause closing a segment no longer holds the decoder while the committed line waits. Six runs each way on a four-core Windows box: worst line 2.01 s to 1.60 s, 90th percentile 1.71 s to 1.37 s, every line still committed.
Behind the scenes
- The watchdog's stray-launcher test waits for the launcher instead of sleeping (#392).
- The nightly survives the AMI corpus mirror refusing one download, by asking again with growing waits, and times DC-R6's wall-clock bound on the least of three holds, so a stall on the shared runner no longer turns the night red (#399).
Signed and notarized. The app and the akou command line are signed with a Developer ID and notarized by Apple, so macOS opens them without an extra step, and the microphone and system audio grants should survive updates. Coming from 0.6.0 or older, which were not signed, macOS asks for both grants once more. The speech models are downloaded on first run. See docs/getting-started.md.
What's Changed
- docs: stop claiming Wyoming and Bazarr in server mode, fill the Docker Hub page by @GeiserX in #389
- ci(dockerhub): make the banner and screenshot show on Docker Hub, whose page cannot resolve the README's relative HTML paths by @GeiserX in #390
- test(watchdog): wait for the stray launcher instead of sleeping 500 ms, so a loaded runner cannot fail the reopen test by @GeiserX in #392
- perf(asr): commit live lines on four x64 cores 0.4 s sooner, 1.60 s at worst by @GeiserX in #391
- fix(asr): load the call's recognizer from the call's start, so the first lines stop waiting for the helper by @GeiserX in #394
- perf(ask): start the harness while the question is typed, so the answer waits only for the model by @GeiserX in #393
- feat(server): let Home Assistant Assist transcribe with akou over Wyoming by @GeiserX in #395
- feat(server): let Bazarr fetch subtitles from akou, by answering its whisper /asr and /detect-language by @GeiserX in #396
- fix: keep the window's page filling the window, and let a long note or line fix be read whole by @GeiserX in #397
- fix(nightly): survive a mirror that refuses one download and a runner stall on the timing bound by @GeiserX in #399
- release: 1.1.0, Home Assistant and Bazarr talk to the server, and the window behaves by @GeiserX in #400
Full Changelog: v1.0.0...v1.1.0