Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
5ee1ac2
chore: clear the now-empty history path allowlists
DavutAkca Jul 26, 2026
c6744d7
fix: soften Meeting-mode consent dialog wording (tr/en)
DavutAkca Jul 26, 2026
eae1790
fix: restrict google_login CORS reflection to voxislive.com
DavutAkca Jul 26, 2026
2fe21fe
ci: bump actions/checkout, setup-python, setup-node to Node 24-native…
DavutAkca Jul 26, 2026
a745220
docs: update GitHub references to the VoxisLive organization
DavutAkca Jul 27, 2026
7c175c7
ci: add Dependabot config for pip and github-actions updates
DavutAkca Jul 27, 2026
483a9ae
chore(deps): bump onnxruntime from 1.27.0 to 1.28.0 (#5)
dependabot[bot] Jul 27, 2026
9a630cc
chore(deps): bump google-genai from 2.8.0 to 2.14.0 (#7)
dependabot[bot] Jul 27, 2026
2dda5df
chore(deps): bump scipy from 1.17.1 to 1.18.0 (#8)
dependabot[bot] Jul 27, 2026
8d5073a
chore(deps): bump numpy from 2.4.6 to 2.5.1
DavutAkca Jul 27, 2026
6ffbc31
chore(deps): regenerate requirements.lock for the 4 pending bumps
DavutAkca Jul 27, 2026
4f3ca31
fix: revert numpy/scipy bumps that broke the Python 3.11 CI matrix
DavutAkca Jul 27, 2026
3668c76
chore: trigger contributors graph refresh
DavutAkca Jul 28, 2026
54d804c
fix: keep the minutes-left counter live when the server's token cache…
DavutAkca Jul 28, 2026
af7e953
feat(diagnostics): log the translator session lifecycle
DavutAkca Jul 28, 2026
1c88160
fix(captions): keep the separator at Qwen sentence boundaries
DavutAkca Jul 28, 2026
2b58f7c
fix(export): wrap subtitle cues and record the engine lifecycle
DavutAkca Jul 28, 2026
92554d1
fix(meeting): keep the two translation directions apart
DavutAkca Jul 28, 2026
72f53b2
style(tests): avoid ruff's ambiguous variable name in the new assertions
DavutAkca Jul 28, 2026
ba45b46
feat(billing): stop the meter when nobody is speaking
DavutAkca Jul 28, 2026
2cd4b72
feat(settings): let users pin the terms the engine keeps misspelling
DavutAkca Jul 28, 2026
d33ca67
feat(transcript): record the source stream with its arrival times
DavutAkca Jul 28, 2026
1878a50
feat(transcript): record how much translated speech the engine produced
DavutAkca Jul 28, 2026
fdd73c7
fix(captions): drop the engine re-speak that repeats inside one line
DavutAkca Jul 28, 2026
3381858
feat(diagnostics): pair Qwen's audio and caption streams per response
DavutAkca Jul 28, 2026
440cab6
v1.0.48: clean up captions, subtitle exports, and Meeting-mode direct…
DavutAkca Jul 29, 2026
98824cd
v1.0.49: stop Meeting mode from re-translating its own outgoing voice
DavutAkca Jul 29, 2026
68c0355
fix(tests): drop the unused types import that failed the lint gate
DavutAkca Jul 29, 2026
e4d67f6
bench: carry the server's model with its key, and make clone A/B-able
DavutAkca Jul 29, 2026
a8530a9
revert(billing): keep the meter running through silence
DavutAkca Jul 29, 2026
67186d2
feat(voice): let the user pick the translated voice's gender, per leg
DavutAkca Jul 30, 2026
8db0697
v1.0.50: keep the voice-gender picker in Settings, where a meeting se…
DavutAkca Jul 30, 2026
53445de
v1.0.51: recover the session when the translation service stops answe…
DavutAkca Jul 31, 2026
df0bd8a
test(release): fail the build when the shipped version has no release…
DavutAkca Jul 31, 2026
30a7996
v1.0.52: say something when nothing is playing, and stop losing skipp…
DavutAkca Jul 31, 2026
e7ee7a3
v1.0.53: hand a dead engine off to a backup instead of retrying it fo…
DavutAkca Aug 1, 2026
2c39df3
fix(qwen): stop retrying a saturated pool, fall back to the sibling p…
DavutAkca Aug 3, 2026
b578391
v1.0.54: retry the sibling Qwen pool once before failover, and fix a …
DavutAkca Aug 4, 2026
2c9233c
fix(lint): rename ambiguous loop variable in palabra_bench
DavutAkca Aug 4, 2026
394f2fa
feat(update-check): show the running version and flag a newer one via…
DavutAkca Aug 4, 2026
9ecedce
docs(whatsnew): add the update-check feature to 1.0.54's release notes
DavutAkca Aug 4, 2026
f49d9ce
chore(deps): bump cryptography in the pip group across 1 directory
dependabot[bot] Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ an individual is officially representing the community in public spaces.

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the project maintainer through **<https://voxislive.com>** or via a
private [GitHub security advisory](https://github.com/DavutAkca/voxislive/security/advisories/new).
private [GitHub security advisory](https://github.com/VoxisLive/voxislive/security/advisories/new).
All complaints will be reviewed and investigated promptly and fairly. Maintainers
are obligated to respect the privacy and security of the reporter of any incident.

Expand Down
2 changes: 1 addition & 1 deletion .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ and may be incorporated with attribution in the project history.
## Development setup (BYOK / developer build)

```powershell
git clone https://github.com/DavutAkca/voxislive.git
git clone https://github.com/VoxisLive/voxislive.git
cd voxislive
python -m venv .venv # Python 3.11-3.13, 64-bit (3.14 not supported yet)
.\.venv\Scripts\Activate.ps1
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ contact_links:
url: https://voxislive.com/licensing
about: Commercial use, white-label, or the official SaaS build.
- name: Report a security vulnerability
url: https://github.com/DavutAkca/voxislive/security/advisories/new
url: https://github.com/VoxisLive/voxislive/security/advisories/new
about: Please report security issues privately, not as a public issue.
2 changes: 1 addition & 1 deletion .github/SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
Please **do not** open a public issue for security problems.

Report privately through GitHub's
[**Report a vulnerability**](https://github.com/DavutAkca/voxislive/security/advisories/new)
[**Report a vulnerability**](https://github.com/VoxisLive/voxislive/security/advisories/new)
form (the repository's **Security → Advisories** tab). We aim to acknowledge a
valid report within a few days and will coordinate a fix and disclosure with you.

Expand Down
11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
10 changes: 5 additions & 5 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ jobs:
matrix:
python-version: ["3.11", "3.13"]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- uses: actions/setup-python@v5
- uses: actions/setup-python@v7
with:
python-version: ${{ matrix.python-version }}
cache: pip
cache-dependency-path: requirements.lock

- uses: actions/setup-node@v4
- uses: actions/setup-node@v7
with:
node-version: "22"

Expand All @@ -56,9 +56,9 @@ jobs:
needs: test
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- uses: actions/setup-python@v5
- uses: actions/setup-python@v7
with:
python-version: "3.13"
cache: pip
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-hygiene.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ jobs:
hygiene:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7
with:
fetch-depth: 0 # full history so the --history scan is meaningful
- uses: actions/setup-python@v5
- uses: actions/setup-python@v7
with:
python-version: "3.12"
- name: Scan tracked tree and history for leaks
Expand Down
100 changes: 98 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,99 @@ Notable changes to Voxis. Version bumps are tagged in commit messages
## Unreleased

### Fixed
- A Qwen capacity error ("thread pool exhausted") that used to be retried up
to 8 times with fast backoff is now recognized as terminal instead of
generic-transient — it was hammering an already-saturated shared rate limit
and prolonging the very outage it was reacting to. A terminal error now
gets one immediate retry on a server-provided sibling connection pool
before falling back to the alternate engine.
- On VB-CABLE setups, the volume mirror assumed the physical playback device
sat at 0 dB. If it didn't — the common case — that device's own level
silently capped the output under whatever the mirror computed: the display
showed full volume with nothing left to raise while the actual level was
quieter. Voxis now raises the physical device to full for the session and
restores it on stop.

### Added
- The top bar now shows which version you're running, and flags it when a
newer one is available — checked in the background against a small public
manifest (`voxislive.com/app.json`) that also carries language coverage for
the website. The check is unauthenticated and sends no user data, so it
runs on the OSS/BYOK build too, not just the official release.
- Voxis says something when it cannot hear anything. If no sound reaches it in
the first seconds of a Video session, it now tells you — and names the two
things that actually cause it: nothing is playing, or you are speaking into
your microphone, which Video mode does not translate. Until now the app stayed
completely silent in that state; measurement across every recorded session
showed 40% of them ended inside 30 seconds, with another attempt following a
median 14 seconds later, i.e. people were retrying, not losing interest.
- The gap between pressing Start and the first translated word is no longer a
blank screen: the stream shows that it is connecting, escalates if the
handshake drags past ten seconds, and sets the expectation that the first
translation lands a few seconds after someone speaks. The line explaining that
delay used to appear only with the first caption — after the wait it was meant
to explain, and never at all for anyone who gave up first.
- Release notes now cover every version you skipped, not just the running one.
Store updates land in the background and can jump several versions at once,
which is how 1.0.50's notes reached nobody who went from 1.0.49 to 1.0.51 in a
single update. The card also links to the full changelog on the website.
- Translated-voice gender, chosen per direction: "Translation voice" (what you
hear) and "My voice" (what the other person hears you as, in Meeting mode).
Both live in Settings › Translation — it is set once for a meeting, not
adjusted per session, so it does not belong on the main screen. Available
on the 31 targets served by the Qwen engine — measurement showed the Gemini
translate model ignores voice selection entirely, so on the remaining targets
the picker says so instead of silently doing nothing. Until now every session
used one server-default voice, which is female.
- Release notes in the app: after an update you see what changed once, in your
own UI language, instead of having to find the Microsoft Store listing. A
fresh install is not shown a changelog — it gets the onboarding tour.
- A ready-made list of ~31 proper nouns ships with the term box, so brand and
product names are spelled right before anyone types anything. It can be
switched off, and your own terms always win over a shipped one.

### Changed
- The term box moved out of General into its own Settings › Translation tab and
is no longer called "Meeting terms": it has always applied to Video mode too.

### Fixed
- A translator session that connected but never produced any output no longer
looped retrying the same dead connection forever: the retry counter was
reset by time-alive alone, so a connection that stayed open past 5 seconds
before dying with zero output kept "proving the path works" and never
reached the threshold that hands the session to a backup engine. It now
also requires that the session actually produced output before resetting.
Paid plans additionally fail over to the backup engine on the very first
dropped connection instead of riding out several retries.
- A session no longer goes permanently silent when the translation service
starts rejecting the audio it is sent. Those rejections still count as
"the engine is hearing us", so both self-heal watchdogs stayed disarmed: the
session kept its connection, showed as active, produced nothing, and never
reconnected. One field meeting lost its last 13 minutes that way. Voxis now
treats a rejected utterance as input and reconnects itself.
- The close button of the translation-history window sits at the top right,
like every other window, instead of next to the title.
- Meeting mode no longer translates its own outgoing voice back at you. On a PC
with VB-Cable installed, both directions shared the one cable, so the
translation Voxis had just sent into the call came back in as if the other
party had said it — a third, phantom voice in your own language.
- Captions no longer run words together at a sentence boundary
("bekleyelim.Bu arada," instead of "bekleyelim. Bu arada,") — it affected
a quarter of all caption lines on the Qwen engine.
- Repeated caption text is removed: both a whole line re-spoken as the next
turn, and a clause the engine emits twice inside one line. The translated
speech only ever said it once.
- A caption line no longer swallows 20+ seconds of speech; past a length or
time budget it splits at the next sentence end.
- Subtitle exports (SRT/VTT) are wrapped to a readable line width — cues used
to run off the frame, the longest being a single 548-character line.
- Subtitle timings now start from the session, not from the first translated
word, so an export lines up with its own audio recording. A session that
began before anyone spoke shifted every cue.
- Meeting mode keeps its two directions apart. Both translators fed one caption
line and one transcript, so the other party's words and your own interleaved
with no way to tell them apart. Each side is now labelled, on screen and in
the saved transcript.
- The "Original audio (while speaking)" control on VB-CABLE setups now ducks
the original speaker, not the background music — a same-day regression had
it scaling the whole ambient mix uniformly instead.
Expand Down Expand Up @@ -34,6 +127,9 @@ Notable changes to Voxis. Version bumps are tagged in commit messages
could interrupt a Meeting session.

### Added
- Settings > **General**: a **Meeting terms** box. Names your meetings use —
companies, products, people — can be listed one per line so the translator
spells them correctly instead of guessing.
- Settings > **Saving** tab: transcript folder, audio recording, and
automatic TXT/SRT/VTT export formats (generated alongside the JSON on
every save) are now grouped in one place; quick TXT/SRT/VTT export
Expand Down Expand Up @@ -64,7 +160,7 @@ Notable changes to Voxis. Version bumps are tagged in commit messages
- A language-swap control to exchange the two translation targets in one step.

*Thanks to [Vladimir Vorobyov (@uladzemer)](https://github.com/uladzemer) for
this contribution — [audio diagnostics fix](https://github.com/DavutAkca/voxislive/commit/9ee5e50c637dd8435402248777f8b959ea0c81cb).*
this contribution — [audio diagnostics fix](https://github.com/VoxisLive/voxislive/commit/9ee5e50c637dd8435402248777f8b959ea0c81cb).*

### Fixed
- A crash partway through starting a Video/Game or Meeting session could leak
Expand Down Expand Up @@ -92,4 +188,4 @@ this contribution — [audio diagnostics fix](https://github.com/DavutAkca/voxis
push and pull request against `main` (Python 3.11 and 3.13, Windows).

*Thanks to [Vladimir Vorobyov (@uladzemer)](https://github.com/uladzemer) for
this contribution too — [runtime/storage hardening](https://github.com/DavutAkca/voxislive/commit/8cdc51eee8e68726d4c21410fa17332a1ccbf892).*
this contribution too — [runtime/storage hardening](https://github.com/VoxisLive/voxislive/commit/8cdc51eee8e68726d4c21410fa17332a1ccbf892).*
12 changes: 6 additions & 6 deletions README.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
![Platform](https://img.shields.io/badge/platform-Windows%2010%20%7C%2011-0078D6?logo=windows&logoColor=white)
![Python](https://img.shields.io/badge/python-3.11--3.13-3776AB?logo=python&logoColor=white)
![License](https://img.shields.io/badge/license-PolyForm%20Noncommercial%201.0.0-blue)
[![GitHub stars](https://img.shields.io/github/stars/DavutAkca/voxislive?style=social)](https://github.com/DavutAkca/voxislive/stargazers)
[![GitHub stars](https://img.shields.io/github/stars/VoxisLive/voxislive?style=social)](https://github.com/VoxisLive/voxislive/stargazers)

> Echtzeit-Sprachübersetzung für Windows — übersetze jedes Video, Spiel oder Meeting und höre es live in deiner eigenen Sprache.
>
Expand All @@ -19,7 +19,7 @@
**📖 Anleitung:** [Entwickler / BYOK-Setup](docs/INSTALL_BYOK.md) — die Endnutzer-App wird über den **Microsoft Store** ausgeliefert; Setup-Doku unter [voxislive.com](https://voxislive.com).

> [!WARNING]
> **Laden Sie nur von [voxislive.com](https://voxislive.com), dem Microsoft-Store-Eintrag oder diesem Repository (`github.com/DavutAkca/voxislive`) herunter.** Kopien dieses Repositorys wurden auf anderen GitHub-Konten gefunden, einige leiten zu Installern auf fremden Seiten weiter — diese sind **nicht offiziell** und können schädlich sein. Dieses Projekt verteilt niemals einen Installer über eine Drittanbieter-Seite oder ein anderes GitHub-Konto. Wenn Sie eine verdächtige Kopie finden, melden Sie sie bitte: [support@voxislive.com](mailto:support@voxislive.com).
> **Laden Sie nur von [voxislive.com](https://voxislive.com), dem Microsoft-Store-Eintrag oder diesem Repository (`github.com/VoxisLive/voxislive`) herunter.** Kopien dieses Repositorys wurden auf anderen GitHub-Konten gefunden, einige leiten zu Installern auf fremden Seiten weiter — diese sind **nicht offiziell** und können schädlich sein. Dieses Projekt verteilt niemals einen Installer über eine Drittanbieter-Seite oder ein anderes GitHub-Konto. Wenn Sie eine verdächtige Kopie finden, melden Sie sie bitte: [support@voxislive.com](mailto:support@voxislive.com).

---

Expand Down Expand Up @@ -60,7 +60,7 @@ Windows audio ──► Capture ──► Silero VAD gate ──► Gemini Live
## Schnellstart (Entwickler-Build)

```powershell
git clone https://github.com/DavutAkca/voxislive.git
git clone https://github.com/VoxisLive/voxislive.git
cd voxislive
python -m venv .venv
.\.venv\Scripts\Activate.ps1
Expand Down Expand Up @@ -114,7 +114,7 @@ Die beiden Richtungen haben unterschiedliche Anforderungen:
| **Eingehend** (du hörst sie in deiner Sprache) | Hört das Systemaudio ab, übersetzt es und gibt es auf deinen Kopfhörern wieder | **Keine zusätzliche Installation** |
| **Ausgehend** (deine Stimme geht übersetzt hinaus) | Übersetzt dein Mikrofon und speist ein virtuelles Mikrofon | **Ein virtuelles Mikrofon (VB-CABLE) ist erforderlich** |

> Unter Windows ist die einzige Möglichkeit, ein „Mikrofon" bereitzustellen, das eine Meeting-App (Teams/Zoom/Meet) auswählen kann, ein virtueller Audiotreiber — deshalb benötigt die ausgehende Richtung VB-CABLE. Ohne einen solchen laufen Meetings automatisch im **Nur-Zuhören**-Modus (du verstehst sie; deine Stimme geht unübersetzt hinaus).
> Unter Windows ist die einzige Möglichkeit, ein „Mikrofon" bereitzustellen, das eine Meeting-App (Teams/Zoom/Meet) auswählen kann, ein virtueller Audiotreiber — deshalb benötigt die ausgehende Richtung VB-CABLE. Ohne einen solchen Treiber laufen Meetings automatisch im **Nur-Zuhören**-Modus (Sie hören die Gegenseite übersetzt; Ihre eigene Stimme wird unübersetzt übertragen).

### 1. VB-CABLE installieren (einmalig, kostenlos)
1. Lade es von <https://vb-audio.com/Cable/> herunter.
Expand All @@ -124,7 +124,7 @@ Die beiden Richtungen haben unterschiedliche Anforderungen:
### 2. Voxis konfigurieren
- Stelle die Sprachen im Panel ein: **Ich höre: Türkisch**, **Für andere: Englisch**.
- Einstellungen → **Ausgabegerät**: deine echten Kopfhörer · **Mikrofon**: dein echtes Mikrofon — das, in das du sprichst; Voxis hört hier zu.
- **Das virtuelle Kabel wird automatisch erkannt.** Beim Start findet Voxis ein installiertes Kabel (VB-CABLE / VB-Audio / VoiceMeeter) und richtet das Meeting-Routing selbst ein — kein Bearbeiten von `config.json`.
- **Das virtuelle Kabel wird automatisch erkannt.** Beim Start erkennt Voxis ein installiertes Kabel (VB-CABLE / VB-Audio / VoiceMeeter) automatisch und konfiguriert das Routing selbstständig — eine manuelle Anpassung der `config.json` ist nicht erforderlich.

### 3. Die Meeting-App konfigurieren (Teams / Zoom / Meet)
- Stelle das **Mikrofon** auf **„CABLE Output (VB-Audio Virtual Cable)"** ein — die *Aufnahme*-Seite des Kabels (`CABLE Output`, **nicht** `CABLE Input`). Das ist das Mikrofon der Meeting-App, nicht das in Voxis gewählte echte Mikrofon: Voxis schreibt dein übersetztes Englisch in das Kabel, und die Meeting-App liest es hier zurück.
Expand Down Expand Up @@ -215,7 +215,7 @@ Beiträge sind willkommen — indem du einen Pull Request öffnest, erklärst du

## Support

- **Issues:** [GitHub Issues](https://github.com/DavutAkca/voxislive/issues)
- **Issues:** [GitHub Issues](https://github.com/VoxisLive/voxislive/issues)
- **Kommerzielle Anfragen:** <https://voxislive.com/licensing>

*Voxis Live — Echtzeit-Sprachübersetzung, simultan.*
Loading