• v1.0.7 75d3f57c62

    kiwerkepro released this 2026-07-28 18:36:36 +00:00 | 0 commits to main since this release

    Was ist neu in dieser Version:

    • Drei neue Spracherkennungs-Anbieter zur Auswahl (Einstellungen, Seite Spracherkennung): Mistral direkt in Frankreich (Cloud, ohne Zwischenstation über OpenRouter, die DSGVO-freundlichere Cloud-Variante), Qwen3-ASR und Parakeet TDT v3 von NVIDIA (beide komplett lokal, das Diktat verlässt den Rechner nie).
    • Offline-Modus: ein einzelner Schalter in den Einstellungen sperrt zuverlässig jede Cloud-Verbindung, unabhängig davon, welcher Anbieter bei Spracherkennung und Textveredelung eingestellt ist.
    • Automatischer Stopp der Aufnahme (Auto-Stop) korrigiert: Der Standardwert für die Stille-Erkennung war fälschlich auf 2,5 statt 5 Sekunden gesetzt. Zusätzlich griff eine geänderte Einstellung vorher erst nach einem kompletten Neustart von NovaFlow, jetzt gilt eine gespeicherte Änderung bereits ab der nächsten Aufnahme.
    • Bei längeren Diktaten (JJ, 2026-08-10) brach die Aufnahme manchmal mitten im Satz ab, obwohl die Aufnahmetaste noch gehalten wurde und keine Sprechpause vorlag - ausdrücklich nicht die gewünschte Stille-Erkennung, die weiterhin nach 6-7 Sekunden Pause stoppen soll. Vermutete Ursache: bei länger gehaltenen Tastenkombinationen mit der Windows-Taste meldet Windows auf manchen Systemen gelegentlich kurzzeitig ein Loslassen, obwohl die Taste physisch weiter gedrückt bleibt. Ein Loslassen der Aufnahmetaste führt jetzt erst nach einer kurzen Gnadenfrist (0,2 Sekunden) wirklich zum Stopp - wird die Kombination innerhalb dieser Zeit wieder vollständig gehalten, läuft die Aufnahme nahtlos weiter. Noch nicht auf dem echten Rechner bestätigt, nur eine begründete Vermutung anhand der Beschreibung.
    • Initialen oder buchstabierte Kürzel wie "JJ" wurden von der Textbereinigung fälschlich zu einem einzelnen Buchstaben zusammengestrichen (z. B. "JJ" wurde zu "J"). Ursache: die Erkennung von versehentlich doppelt transkribierten Wörtern (z. B. "das das") kannte keine Ausnahme für einzelne Buchstaben - zwei aufeinanderfolgende, identische Ein-Zeichen-Wörter sind so gut wie nie eine echte Dopplung, sondern eine bewusst buchstabierte Folge. Einzelbuchstaben sind davon jetzt ausgenommen, echte Wort-Dopplungen werden weiterhin erkannt und entfernt.
    • Versionsnummern oder ähnliche Ziffernfolgen, die einzeln diktiert werden (z. B. "eins null sieben"), wurden bisher nicht zuverlässig in Ziffern-Schreibweise umgewandelt, sondern blieben ausgeschrieben stehen. Die KI-Textveredelung bekommt jetzt eine ausdrückliche Regel dafür (inklusive Beispiel), erkennbare Versionsnummern in Ziffern mit Punkten zu schreiben (z. B. "1.0.7"), ohne dabei normale Zahlwörter im Fließtext (z. B. "drei Kinder") anzutasten. Da das weiterhin von der KI-Veredelung übernommen wird (kein fest programmierter Mechanismus), ist die Zuverlässigkeit vom jeweils gewählten Sprachmodell abhängig.
    • Automatische Absatzbildung nach 5 bis 6 Sätzen komplett neu gebaut: Vorher stieg die Funktion bei jedem eingefügten Zeilenumbruch komplett aus (alles oder nichts), das führte in der Praxis dazu, dass mal die Absätze, mal die Leerzeichen um Zeilenumbrüche und mal beides nicht stimmten. Die Aufräumarbeit läuft jetzt immer, unabhängig davon, ob und wo Zeilenumbrüche vorkommen, und NovaFlow unterscheidet zuverlässiger zwischen selbst gesprochenen Umbrüchen ("neue Zeile"/"neuer Absatz") und welchen, die nur von der Spracherkennung oder der KI-Veredelung stammen.
    • Fehlendes Leerzeichen nach Satzende behoben: Bei längeren Diktaten lieferte die KI-Veredelung gelegentlich zwei Sätze ohne Leerzeichen dazwischen zurück, das wird jetzt korrigiert, ohne Abkürzungen wie "z.B." oder Zahlen wie "1.000" fälschlich auseinanderzureißen.
    • Kleinschreibung nach Denkpausen (ohne Satzzeichen): Regel in der KI-Veredelung deutlicher formuliert, damit das nächste Wort nach einer reinen Sprechpause zuverlässiger klein bleibt.
    • Gesprochene Satzzeichen um englische Begriffe erweitert (slash, backslash, comma, new line und weitere), für den Fall, dass beim Diktieren mitten im deutschen Satz ins Englische gewechselt wird.
    • Wörterbuch und eingebaute Korrekturen erkennen jetzt auch Schreibweisen mit Bindestrich statt Leerzeichen (z. B. "Ghost-Font" zusätzlich zu "Ghost Font").
    • Protokollierung erweitert: Rohtext und Ergebnis eines Diktats werden jetzt vollständig geloggt statt nur die ersten 100 Zeichen, das erleichtert künftig die Fehlersuche. Die Logs landen außerdem zuverlässig immer am selben, festen Ort, unabhängig davon, wie NovaFlow gestartet wurde.
    • Textveredelung über Ollama wartete bisher oft 20 bis 30 Sekunden, weil Ollama das Sprachmodell schon nach 5 Minuten Leerlauf wieder aus dem Speicher entfernte. NovaFlow hält es jetzt aktiv, solange NovaFlow selbst läuft.
    • Zwei verschiedene Abstürze beim Laden von Parakeet behoben, die beide nur in der fertig installierten Version auftraten, nicht im Entwicklungsbetrieb: eine interne Fortschrittsanzeige versuchte in eine nicht vorhandene Konsole zu schreiben, und der Modell-Speicherort lag im Windows-Benutzerprofil, wo er mit Cloud-Synchronisierungs-Software kollidieren konnte. Der Modell-Speicherort liegt jetzt im NovaFlow-eigenen Ordner.
    • Die Einrichtung der lokalen Spracherkennung (Qwen3-ASR, Parakeet) räumt jetzt vor jeder Neueinrichtung zuverlässig auf, statt Reste früherer, möglicherweise fehlgeschlagener Versuche liegen zu lassen.
    • build_installer.bat findet die benötigte Python-3.12-Version jetzt zuverlässiger, statt im Zweifel stillschweigend eine falsche installierte Version zu verwenden. publish_release.ps1 verlangt jetzt dieselbe Python-3.12-Version wie der Build, statt eine andere, installierte Version zu bevorzugen und dadurch Tests unter der falschen Umgebung laufen zu lassen.
    • Intern: die komplette Spracherkennungs-Anbindung wurde neu strukturiert (ein eigenes, kleines Paket je Anbieter statt einer gemeinsamen Datei), das erleichtert künftige Erweiterungen. Ein Absturz eines einzelnen Anbieters beim Start von NovaFlow wird jetzt zuverlässig abgefangen, NovaFlow startet dann trotzdem, nur eben mit Whisper.
    • Bauen und Veröffentlichen sind jetzt strikt getrennt: build_installer.bat baut nur noch die Setup-Datei, das Veröffentlichen als GitHub-Release ist ein bewusster, separater Schritt über publish_release.bat.
    • Veröffentlichen läuft jetzt automatisch zuerst die komplette Testsuite durch und bricht ab, sobald auch nur ein einziger Test fehlschlägt, statt mit unbestätigten Änderungen zu veröffentlichen. publish_release.ps1 lief bisher mit einer eigenen, veralteten Python-Erkennung, die im Zweifel eine falsche installierte Version nahm und dadurch Tests unter der falschen Umgebung fehlschlagen liess - jetzt an dieselbe strenge Python-3.12-Pflicht wie build_installer.bat angeglichen. Der von Hand benutzte Testlauf (tests/run_all.py) führte ausserdem drei bereits länger bestehende Testdateien gar nicht mit aus (test_stt_provider.py, test_flow_spacing.py, test_silence_autostop.py) - ein Fehlschlag dort wäre bei einem normalen Testlauf nie aufgefallen, obwohl das Veröffentlichen selbst ihn zuverlässig gestoppt hätte. Jetzt führt run_all.py alle Testdateien mit aus.
    • Veröffentlichen zeigt vor dem Hochladen den echten Commit-Verlauf seit dem letzten Release neben dieser Beschreibung an und verlangt eine ausdrückliche Bestätigung, damit Release-Beschreibung und tatsächliche Änderungen nicht mehr auseinanderlaufen.
    • Qwen3-ASR und Parakeet laufen jetzt jeweils als eigener, dauerhaft laufender Hintergrundprozess statt im selben Prozess wie NovaFlow selbst. Grund: ein Programmteil, den sich beide Seiten teilten (Paket "tokenizers"), liess sich nicht zuverlässig auf eine passende Version bringen, weil beide im selben Prozess liefen - das ist jetzt strukturell ausgeschlossen, weil beide Prozesse komplett getrennt sind und sich nichts mehr teilen. Das Modell bleibt dabei weiterhin geladen, solange NovaFlow läuft, kein erneutes Laden bei jedem Diktat. Stürzt der Hintergrundprozess ab, startet NovaFlow ihn automatisch neu und weicht erst nach mehreren erfolglosen Versuchen auf Whisper aus, ganz ohne dass NovaFlow selbst betroffen ist.
    • Direkt nach der Umstellung auf den Hintergrundprozess ist bei einem ersten Test aufgefallen: wurde NovaFlow während eines laufenden Modell-Downloads hart beendet (z. B. über den Task-Manager), lief der Hintergrundprozess als Waise unbemerkt weiter und hat spürbar Netzwerk-Bandbreite belegt, was auch völlig unbeteiligte Cloud-Anbieter wie Voxtral über OpenRouter langsam wirken liess. Dagegen hängt der Hintergrundprozess jetzt an einem Windows-Sicherheitsmechanismus (Job-Objekt), der ihn zuverlässig mitbeendet, egal wie NovaFlow selbst endet.
    • Neuer Knopf "NovaFlow neu starten" direkt im Einstellungsfenster (neben Speichern/Schließen, auf jeder Seite sichtbar): startet eine neue NovaFlow-Instanz und beendet die alte sauber, ohne Umweg über Tray-Menü oder Task-Manager.
    • Der Neustart-Knopf warf beim ersten echten Test die gerade gespeicherten Einstellungen weg und zeigte wieder den alten Stand: die neu gestartete Instanz erbte die komplette Umgebung der alten, und da .env-Werte dort schon als Umgebungsvariablen standen, wurden sie beim Neustart nicht durch den frisch gespeicherten Inhalt ersetzt. Behoben, die neue Instanz liest jetzt garantiert frisch von der Platte.
    • Qwen3-ASR lud das Modell zwar erfolgreich, brach dann aber bei jeder Transkription mit einer zunächst unklaren, leeren Fehlermeldung ab. Ursache war eine fehlende Abhängigkeit (librosa) zum Einlesen der Audiodatei, nicht mehr in requirements.txt (dort bewusst nicht, siehe Erklärung im Quellcode), sondern jetzt Teil der Qwen3-ASR-Laufzeitumgebung im Installer. Fehlermeldungen bei einem Absturz im Hintergrundprozess zeigen ausserdem jetzt immer mindestens die Fehlerart und den vollständigen technischen Verlauf im Log, statt im schlimmsten Fall komplett leer zu bleiben. Direkt danach ein zweiter, ähnlicher Fall: librosa selbst zieht "numba" mit, das sich mit zu neuem NumPy nicht verträgt, die NumPy-Version für Qwen3-ASR ist deshalb enger gefasst.
    • Parakeet lief im ersten echten Test bereits zuverlässig und spürbar schnell.
    • Ein laufender Modell-Download (falls beim Setup nicht erfolgreich, siehe unten) wirkte im Log komplett eingefroren, obwohl er im Hintergrund tatsächlich weiterlief: die Fortschrittsanzeige des Downloads aktualisiert sich technisch bedingt in derselben Zeile statt mit Zeilenumbrüchen, das wurde bisher gar nicht mitgeloggt. Jetzt erscheint der Downloadfortschritt laufend im Log.
    • Qwen3-ASR prüfte bisher bei JEDEM Start online nach, ob es eine neuere Modell-Version gibt, selbst wenn das Modell längst vollständig heruntergeladen war. Das machte jeden Start unnötig langsam und konnte bei einer Netzwerkstörung sogar komplett hängen bleiben. Qwen3-ASR versucht das Modell jetzt zuerst rein lokal zu laden (kein Netzwerk nötig, wenn es schon da ist) und lädt nur bei Bedarf online nach.
    • Schlug der Modell-Download beim Setup fehl (z. B. wegen einer Netzwerkstörung), wurde das bisher nicht gemeldet, die Installation lief einfach normal weiter, und das fehlende Modell fiel erst beim ersten Diktatversuch auf. Ein fehlgeschlagener Download wird jetzt direkt im Setup-Fenster gemeldet.
    • Das Setup-Fenster wirkte während der Einrichtung der lokalen Spracherkennung (Qwen3-ASR, Parakeet) über mehrere Minuten wie eingefroren: eine einzige, unveränderte Statuszeile stand während mehrerer ganz unterschiedlicher Installationsschritte (Python-Umgebung, torch, transformers, librosa, numpy, Modell-Download) da, ohne erkennbaren Fortschritt. Jeder einzelne Teilschritt zeigt jetzt seine eigene, konkrete Statuszeile (inklusive Größenangabe bei größeren Downloads), zusätzlich läuft der Fortschrittsbalken währenddessen als wandernder Balken statt als starrer Strich. Die längeren, zweizeiligen Statuszeilen wurden dabei zunächst selbst fehlerhaft mitten im Wort abgeschnitten dargestellt, das ist ebenfalls behoben.
    • Diese Punkte (Hintergrundprozess-Umstellung, Job-Objekt-Absicherung, Neustart-Knopf, Qwen3-Abhängigkeit, Download-Fortschritt im Log, Qwen3-Startverzögerung durch unnötige Online-Prüfung, Download-Fehlermeldung im Setup, Setup-Fortschrittsanzeige) sind neu, Parakeet ist bereits mit echten Diktaten bestätigt, Qwen3-ASR und die Job-Objekt-Absicherung stehen noch aus.
    • Einstellungsfenster: umfassende Überarbeitung von Aufbau und Bezeichnungen, nach eigener Rückmeldung waren die vorherigen Menüpunkte ("Spracherkennung", "Sprachmodell", "API-Schlüssel", "Sprache & System", "Update", "Ausschnitte") zu unklar benannt und zu ähnlich, um auf Anhieb zu erkennen, was wohin gehört.
      • Fenster hatte bisher nur einen Schließen-Knopf (X), jetzt zusätzlich zum Minimieren.
      • "Einstellungen" und "Hilfe" sitzen jetzt fest unten links in der Seitenleiste, getrennt von Wörterbuch/Textbausteine/Schreibstil/Notizbuch/Verlauf. Ein Klick auf "Einstellungen" öffnet ein kompaktes Popup mit den technischen Unterpunkten direkt über dem Knopf (nicht mehr als feste, fensterhohe zweite Spalte, das war ein erster, zu bequemer Zwischenstand), schließt sich automatisch bei einem Klick daneben oder sobald ein Unterpunkt ausgewählt wird.
      • "Spracherkennung", "Sprachmodell" und "API-Schlüssel" sind zu einer einzigen Seite "Sprachverarbeitung" zusammengelegt (dreigeteilt: Spracherkennung oben links, Sprachveredelung oben rechts, API-Schlüssel unten durchgehend). Es werden jetzt nur noch die Felder angezeigt, die zum jeweils gewählten Anbieter gehören (z. B. verschwinden bei Parakeet alle Whisper- und Qwen3-Felder), statt immer alle Felder aller Anbieter gleichzeitig zu zeigen.
      • "Sprache & System" und "Update" sind zu einer Seite "System und Update" zusammengelegt.
      • "Ausschnitte" heißt jetzt "Textbausteine" (traf die eigentliche Funktion besser).
      • Buttons (z. B. "Speichern", "NovaFlow neu starten", "Schließen", "Motor starten"/"Motor stoppen") hatten zu wenig Abstand zueinander und zum Fensterrand. Ein erster Versuch (nur mehr Abstand zwischen den Buttons selbst) reichte nicht, die Knopf-Zeile klebte weiterhin am unteren Fensterrand. Jetzt sitzt sie in einer eigenen, klar mit Trennlinie abgesetzten Fußzeile mit spürbarem Innenabstand, unabhängig von der Fensterhöhe. Derselbe Puffer unten gilt jetzt auch für "Einstellungen"/"Hilfe" in der Seitenleiste.
      • Die Statistik (Anzahl Diktate, Wörter insgesamt, Durchschnitt, heute/letzte 7 Tage, längstes/kürzestes Diktat, Effekt der KI-Veredelung) stand bisher als reiner Fließtext auf der Verlauf-Seite, sitzt jetzt als eigene Kachel-Übersicht auf der Startseite (Übersicht), die vorher ungenutzten Platz hatte.
      • Schreibstil-Seite: die beiden Dropdowns (Kategorie, Ton) sind durch anklickbare, kurz beschriebene Kacheln ersetzt, der bisher sehr breite, auffällige "Schreibstil speichern"-Knopf ist jetzt ein normal großer Knopf wie auf den anderen Seiten.
      • Neuer, einheitlicher Karten-Stil (Bento-Grid: dunkler Hintergrund, dezenter Rahmen, einheitlich 12px abgerundete Ecken, Cyan-Akzent, eigene Markenfarben) jetzt durchgängig auf JEDER Seite angewendet, nicht nur auf Übersicht und Schreibstil: Diktat, Sprachverarbeitung (alle drei Bereiche), System und Update (beide Bereiche), Wörterbuch, Textbausteine, Notizbuch, Verlauf und Hilfe stecken ihren jeweiligen Hauptinhalt jetzt in einer solchen Karte statt lose auf dunklem Hintergrund zu stehen. Der Eckenradius ist dabei app-weit auf einheitlich 12px vereinheitlicht (vorher uneinheitlich zwischen 6 und 14px je nach Stelle).
      • Neue, lokal mitgelieferte Schriftarten (Inter für Fließtext, Space Grotesk für Überschriften), statt der bisherigen Windows-Standardschrift. Bewusst NICHT über Google Fonts/eine Internetverbindung geladen (das würde dem eigenen Offline-Grundsatz widersprechen), sondern als Schriftdateien fest in die Anwendung eingebaut. JetBrains Mono liegt ebenfalls schon bereit, ist aktuell aber an keiner Stelle der Oberfläche fest verdrahtet.
      • Diese Oberflächen-Überarbeitung konnte in dieser Entwicklungsumgebung nicht durch einen eigenen Bildschirmtest geprüft werden (keine grafische Anzeige verfügbar), sondern nur über automatische Tests und sorgfältige Code-Durchsicht. Beim ersten echten Test auf dem eigenen Rechner kamen dadurch zwei Fehler zum Vorschein:
        • Jede Überschrift und Beschriftung in den neuen Karten hatte einen eigenen, unerwünschten Rahmen um sich herum. Ursache: ein Textfeld ist in Qt technisch dieselbe Grund-Klasse wie eine Rahmen-Karte, die Gestaltungsregel für die Karten war zu allgemein formuliert und hat sich dadurch auch auf jedes einzelne Textfeld darin übertragen, nicht nur auf die Karte selbst. Jetzt eng genug gefasst, betrifft nur noch die Karte selbst. Auf dem eigenen Rechner bestätigt behoben.
        • Das Fenster landete teils außerhalb des sichtbaren Bildschirmbereichs, sowohl gleich beim ganz normalen Öffnen als auch nach Minimieren über den neuen "-"-Knopf und anschließendem Wiederherstellen – "Hilfe" und die Fußzeilen-Knöpfe (Speichern/NovaFlow neu starten/Schließen) waren dadurch praktisch unsichtbar. Das brauchte mehrere Anläufe, bis es wirklich zuverlässig saß: zunächst wurde nur die reine Innenfläche des Fensters auf die verfügbare Bildschirmgröße gesetzt, ohne die vom Betriebssystem erst beim tatsächlichen Anzeigen hinzugefügte Titelleiste zu berücksichtigen; danach reichte ein einzelner, sofortiger Korrekturversuch nicht aus, weil der Zeitpunkt, zu dem Windows die Fensterdekoration tatsächlich fertig angeheftet hat, spürbar schwankt. Die Korrektur versucht die Anpassung deshalb jetzt mehrfach kurz hintereinander (bis zu 800 Millisekunden nach dem Öffnen bzw. Wiederherstellen), sowohl beim normalen Öffnen als auch nach Minimieren/Wiederherstellen. Auf dem eigenen Rechner bestätigt: beide Fälle funktionieren jetzt zuverlässig.
        • Das Einstellungen-Popup war mit 320 Pixeln knapp zu schmal, "System und Update" lief am rechten Rand ab, jetzt 340 Pixel breit.
      • Eine erste Fassung des Overlays (Klick auf "Einstellungen") war zunächst noch als feste, fensterhohe zweite Spalte umgesetzt statt als kompaktes Popup, das direkt über dem Knopf erscheint, wie ursprünglich besprochen. Ebenso reichte ein erster Versuch bei den Rändern unten nicht aus. Beides wurde noch in derselben Runde nachgebessert, siehe oben.

    WICHTIG, bitte vor jedem Release beachten (dieser Hinweis wurde im Commit
    "Version 1.0.4" versehentlich mitgelöscht und stand seither nirgends mehr,
    das darf nicht wieder passieren):

    Diese Datei ist die einzige Quelle für die Beschreibung des GitHub-Release.
    publish_release.ps1 liest ihren Inhalt automatisch aus und verwendet ihn
    unveraendert als Beschreibungstext des veröffentlichten Release.

    Deshalb gilt zwingend: vor jedem inhaltlich relevanten Release muss der
    Inhalt oben durch den tatsächlichen Commit-Diff/die Commit-Message der
    Version geprüft und bei Bedarf komplett neu geschrieben werden. Alte
    Stichpunkte aus einer früheren Version dürfen NICHT einfach stehen bleiben
    oder in eine neue Version übernommen werden, nur weil die Datei schon
    existiert - das hat schon einmal zu einer komplett falschen
    Release-Beschreibung geführt (Version 1.0.4: hier standen Punkte einer
    älteren Version, während der tatsächliche Commit ganz andere Themen
    enthielt: Hilfefunktionen, Flowbar, Stille-Erkennung, Undo-Hotkey, sensible
    Daten im Verlauf, Absatzbildung).

    Downloads