From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mail.toke.dk; dkim=pass header.d=irif.fr header.i=@irif.fr header.a=rsa-sha256 header.s=dkim-irif header.b=a4GlUo7s; arc=none (Message is not ARC signed); dmarc=none Received: from korolev.univ-paris7.fr (korolev.univ-paris7.fr [IPv6:2001:660:3301:8000::1:2]) by mail.toke.dk (Postfix) with ESMTPS id 0D04A136A7DA for ; Mon, 20 Jul 2026 14:21:46 +0200 (CEST) Received: from potemkin.univ-paris7.fr (potemkin.univ-paris7.fr [IPv6:2001:660:3301:8000::1:1]) by korolev.univ-paris7.fr (8.14.4/8.14.4/relay1/82085) with ESMTP id 66KCLjK7009687 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Mon, 20 Jul 2026 14:21:46 +0200 Received: from mailhub.math.univ-paris-diderot.fr (mailhub.math.univ-paris-diderot.fr [81.194.30.253]) by potemkin.univ-paris7.fr (8.14.4/8.14.4/relay2/82085) with ESMTP id 66KCLj1q030434 for ; Mon, 20 Jul 2026 14:21:45 +0200 Received: from mailhub.math.univ-paris-diderot.fr (unknown [127.0.0.1]) by mailhub.math.univ-paris-diderot.fr (Postfix) with ESMTP id DBADB30F0E for ; Mon, 20 Jul 2026 14:21:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=irif.fr; h= content-type:content-type:mime-version:user-agent:subject :subject:from:from:message-id:date:date:received:received; s= dkim-irif; t=1784550104; x=1785414105; bh=nEGUI3+3GjOlhum81OrqvT iQKTBqPC3XYwphMBMX5+I=; b=a4GlUo7sR8XUDH9S4UP2HgH/scfGZ5CdQ9Ff2h dpyyQyQs/NdDVVZn7ytb7ha8ASvPsDGN1s2gyduTBuv2lDyBilTO5bXxqKFR7EfQ LI/SlaJn1s+SBQep5pT9wkqBgd1nm4GDLQNeQ/2P7cviGYtfpF6muC/xYteygDLX 8XpbOuJM8LPcsruLwbbwMtcMJDCJFZmd0Z1rI4sjPzyJQt00IQWgjeuh5vqSvSuR J4h0moHv0vUaY7jACXRpAKezoe5+xZUOdpqjdxbtuRs3QyPoNeCI/OafbO7lhmz4 npK2MZp57rUdNe7Hpjy7Y9aEkTBV8oNFti0W4+8+dn9P0BPQ== X-Virus-Scanned: amavisd-new at math.univ-paris-diderot.fr Received: from mailhub.math.univ-paris-diderot.fr ([127.0.0.1]) by mailhub.math.univ-paris-diderot.fr (mailhub.math.univ-paris-diderot.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id VETqSA-JRKoE for ; Mon, 20 Jul 2026 14:21:44 +0200 (CEST) Received: from trurl.irif.fr (unknown [82.64.191.149]) (Authenticated sender: jch) by mailhub.math.univ-paris-diderot.fr (Postfix) with ESMTPSA id 4578630E32 for ; Mon, 20 Jul 2026 14:21:44 +0200 (CEST) Date: Mon, 20 Jul 2026 14:21:44 +0200 Message-ID: <874ihtzw9z.wl-jch@irif.fr> From: Juliusz Chroboczek To: galene@lists.galene.org User-Agent: Wanderlust/2.15.9 (Almost Unreal) Emacs/30.2 Mule/6.0 MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.2.7 (korolev.univ-paris7.fr [IPv6:2001:660:3301:8000::1:2]); Mon, 20 Jul 2026 14:21:46 +0200 (CEST) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.2.7 (potemkin.univ-paris7.fr [194.254.61.141]); Mon, 20 Jul 2026 14:21:45 +0200 (CEST) X-Miltered: at korolev with ID 6A5E12D9.002 by Joe's j-chkmail (http : // j-chkmail dot ensmp dot fr)! X-Miltered: at potemkin with ID 6A5E12D9.000 by Joe's j-chkmail (http : // j-chkmail dot ensmp dot fr)! X-j-chkmail-Enveloppe: 6A5E12D9.002 from potemkin.univ-paris7.fr/potemkin.univ-paris7.fr/null/potemkin.univ-paris7.fr/ X-j-chkmail-Enveloppe: 6A5E12D9.000 from mailhub.math.univ-paris-diderot.fr/mailhub.math.univ-paris-diderot.fr/null/mailhub.math.univ-paris-diderot.fr/ X-j-chkmail-Score: MSGID : 6A5E12D9.002 on korolev.univ-paris7.fr : j-chkmail score : . : R=. U=. O=. B=0.000 -> S=0.000 X-j-chkmail-Score: MSGID : 6A5E12D9.000 on potemkin.univ-paris7.fr : j-chkmail score : . : R=. U=. O=. B=0.000 -> S=0.000 X-j-chkmail-Status: Ham X-j-chkmail-Status: Ham Message-ID-Hash: AX47KGFKBAGCIYUDXUDIXRNVWQDOB73D X-Message-ID-Hash: AX47KGFKBAGCIYUDXUDIXRNVWQDOB73D X-MailFrom: jch@irif.fr X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list Subject: [Galene] Galene-stt with the Moonshine model List-Id: =?utf-8?q?Gal=C3=A8ne_videoconferencing_server_discussion_list?= Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Hi, Some of you might remember galene-stt, the Galene client for automatic subtitling. https://github.com/jech/galene-stt Galene-stt uses the whisper.cpp library, which is not really adapted to streaming: it has been trained on 30s chunks of audio. Galene-stt works around the issue by chopping the audio into chunks of at most 3s, and passing the chunks, padded with silence, to the model. This hack works surprisingly well, at least when using the larger Whisper models. I've recently been made aware of the Moonshine model, which is optimised for streaming. Since I'm currently procrastinating Real Work (sorry, Toke), I decided to see how well Moonshine works for galene-stt. The code lives in the "moonshine" branch of the galene-stt repository, feel free to experiment with it. Advantages: - the API is very nice, my code got much, much simpler; - it's a real streaming API, so previously decoded audio serves as a context to the model; - it doesn't require a GPU; - latency is in the low hundreds of milliseconds. Disadvantages: - it doesn't use the GPU, so you need a powerful CPU; - in my experiments, accuracy is much worse than the Whisper large-turbo model, with frequent hallucinations (even though the published benchmarks imply otherwise); - French is not supported (Matoken-san: Japanese is supported). Without French support, this is essentially useless for me. If people tell me that this is useful, I might find a way to merge the two versions and provide a single version that groks both models. By the way, there are two other open-weights voice recognition models, NVidia's Parakeet and Mistral's Voxtral. Unfortunately, I couldn't find any usable C or C++ libraries that use these models (the ones that I found are vibe-coded nonsense, not something I'm willing to depend on). Regards, -- Juliusz