Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 3 additions & 1 deletion .github/workflows/quality-gates.yml
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ jobs:
Frontend/src-tauri/target/debug/build
Frontend/src-tauri/target/debug/deps
Frontend/src-tauri/target/debug/incremental
key: scriber-rust-quality-v1-${{ runner.os }}-${{ runner.arch }}-${{ steps.rust-quality-environment.outputs.identity }}-${{ hashFiles('.node-version', 'Frontend/src-tauri/Cargo.toml', 'Frontend/src-tauri/Cargo.lock', 'Frontend/src-tauri/build.rs', 'Frontend/src-tauri/tauri.conf.json', 'Frontend/src-tauri/capabilities/**', '.cargo/config', '.cargo/config.toml', 'Frontend/src-tauri/.cargo/config', 'Frontend/src-tauri/.cargo/config.toml', 'native/scriber-audio-sidecar/Cargo.toml', 'native/scriber-audio-sidecar/Cargo.lock', 'native/scriber-audio-sidecar/build.rs', 'native/scriber-audio-sidecar/windows-app-manifest.xml', 'scripts/stage_audio_worker.mjs', '.github/workflows/quality-gates.yml') }}
key: scriber-rust-quality-v1-${{ runner.os }}-${{ runner.arch }}-${{ steps.rust-quality-environment.outputs.identity }}-${{ hashFiles('.node-version', 'Frontend/src-tauri/Cargo.toml', 'Frontend/src-tauri/Cargo.lock', 'Frontend/src-tauri/build.rs', 'Frontend/src-tauri/tauri.conf.json', 'Frontend/src-tauri/capabilities/**', '.cargo/config', '.cargo/config.toml', 'Frontend/src-tauri/.cargo/config', 'Frontend/src-tauri/.cargo/config.toml', 'native/scriber-localvqe/**', 'native/scriber-audio-sidecar/Cargo.toml', 'native/scriber-audio-sidecar/Cargo.lock', 'native/scriber-audio-sidecar/build.rs', 'native/scriber-audio-sidecar/windows-app-manifest.xml', 'scripts/stage_audio_worker.mjs', '.github/workflows/quality-gates.yml') }}
- name: Check Rust formatting
working-directory: Frontend/src-tauri
run: cargo fmt --all -- --check
Expand All @@ -153,6 +153,8 @@ jobs:
run: cargo clippy --locked --manifest-path native/scriber-audio-sidecar/Cargo.toml --target-dir Frontend/src-tauri/target --all-targets -- -D warnings
- name: Run standalone audio tests
run: cargo test --locked --manifest-path native/scriber-audio-sidecar/Cargo.toml --target-dir Frontend/src-tauri/target
- name: Verify LocalVQE against pinned upstream reference
run: cargo test --locked --manifest-path native/scriber-audio-sidecar/Cargo.toml --target-dir Frontend/src-tauri/target -p scriber-localvqe
- name: Save trusted Rust quality compilation cache
if: >-
success() &&
Expand Down
10 changes: 8 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,13 @@ Frontend and shell:
bounded 16 kHz mono signed-16 PCM fixture; it has the same play-once and
test-only constraints.
Meeting capture uses one sidecar process for 48 kHz microphone plus loopback,
pinned AEC3 processing, and shared-timeline raw mic/system/clean mic pipes.
pinned LocalVQE v1.3 processing, and shared-timeline raw mic/system/clean mic pipes.
`native/scriber-localvqe` owns the single embedded 4.8M F32 model and static
GGML bridge; source/model revisions and hashes live in its `inputs.json`.
x64 enhancement requires AVX2/FMA/F16C, checked before native inference.
Preserve the 16 kHz 256-sample hop adapter, one-hop delay compensation,
bounded shared-timeline queue, and Stop/Pause/EOF tail flush. Model construction
must emit no stdout because that channel carries the sidecar JSON protocol.
The token-protected Meeting device test must reuse this path, remain explicit
and local-only, return only bounded level/activity statistics, and always stop
its ephemeral sidecar capture without persisting or uploading PCM. Product
Expand Down Expand Up @@ -1694,7 +1700,7 @@ Packaging and scripts:
and `paused` become resumable `interrupted` capture. `stopping` and
`finalizing` become `finalization_failed`, and `analyzing` becomes
`analysis_failed`; never offer capture resume for a post-capture crash.
- Keep audio format layers separate. AEC3, Silero, Smart Turn, live STT, and
- Keep audio format layers separate. LocalVQE v1.3, Silero, Smart Turn, live STT, and
checkpoint capture use PCM. The verified long-lived archive is lossless
Matroska/FLAC; timeline-aligned mix, clean-microphone, and system Opus files
are playback derivatives, not canonical inference input. Persist and validate
Expand Down
4 changes: 2 additions & 2 deletions Frontend/client/src/i18n/i18n.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ test("localizes legacy relative date labels", () => {
test("dynamic interface labels have complete German translations", () => {
assert.equal(translate("de", "Your voice"), "Deine Stimme");
assert.equal(translate("de", "Other participants"), "Andere Teilnehmende");
assert.equal(translate("de", "Echo control"), "Echounterdrückung");
assert.equal(translate("de", "Reduces speaker echo"), "Reduziert Lautsprecherechos");
assert.equal(translate("de", "Audio cleanup"), "Audiobereinigung");
assert.equal(translate("de", "Reduces echo, noise, and reverberation"), "Reduziert Echo, Rauschen und Hall");
assert.equal(translate("de", "Preparing audio"), "Audio wird vorbereitet");
assert.equal(translate("de", "Preparing audio download..."), "Audiodownload wird vorbereitet …");
assert.equal(
Expand Down
4 changes: 2 additions & 2 deletions Frontend/client/src/i18n/translations/de/meetings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -491,8 +491,8 @@ export const meetingsTranslations = {
"System audio": "Systemaudio",
"Your voice": "Deine Stimme",
"Other participants": "Andere Teilnehmende",
"Echo control": "Echounterdrückung",
"Reduces speaker echo": "Reduziert Lautsprecherechos",
"Audio cleanup": "Audiobereinigung",
"Reduces echo, noise, and reverberation": "Reduziert Echo, Rauschen und Hall",
"Audio playback could not start.": "Die Audiowiedergabe konnte nicht gestartet werden.",
"Saved audio is not available for this meeting.": "Für dieses Meeting ist kein gespeichertes Audio verfügbar.",
"No saved voice sample is available for this speaker.":
Expand Down
7 changes: 3 additions & 4 deletions Frontend/client/src/i18n/translations/de/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -568,10 +568,9 @@ export const settingsTranslations = {
"Why Scriber does not upload one-minute pieces": "Warum Scriber keine einminütigen Abschnitte hochlädt",
"Small cloud requests do not reduce the audio duration you pay for and can reset speaker labels or cut words at the boundary. Scriber instead protects audio locally every 30 seconds, then gives the final service the longest supported context.":
"Kleine Cloud-Anfragen verringern nicht die berechnete Audiodauer und können Sprecherbezeichnungen zurücksetzen oder Wörter an Abschnittsgrenzen abschneiden. Scriber sichert das Audio stattdessen alle 30 Sekunden lokal und übergibt dem finalen Dienst anschließend den längsten unterstützten Kontext.",
"Reduce speaker echo": "Lautsprecherecho reduzieren",
"Helps prevent voices from your speakers being recorded again through your microphone.":
"Verhindert, dass Stimmen aus deinen Lautsprechern erneut über dein Mikrofon aufgenommen werden.",
"Reduce speaker echo in meetings": "Lautsprecherecho in Meetings reduzieren",
"Clean up meeting audio": "Meeting-Audio bereinigen",
"Reduces speaker echo, background noise, and reverberation locally on your computer.":
"Reduziert Lautsprecherechos, Hintergrundgeräusche und Hall lokal auf deinem Computer.",
"Summaries and storage": "Zusammenfassungen und Speicherung",
"Choose how Scriber creates the meeting brief and how long it keeps local audio.":
"Lege fest, wie Scriber die Meeting-Zusammenfassung erstellt und wie lange lokales Audio aufbewahrt wird.",
Expand Down
4 changes: 2 additions & 2 deletions Frontend/client/src/pages/Meetings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3069,7 +3069,7 @@ export default function Meetings({ params }: { params?: { id?: string } }) {
{[
{ icon: Mic2, label: "Microphone", detail: "Your voice" },
{ icon: Headphones, label: "System audio", detail: "Other participants" },
{ icon: Waves, label: "Echo control", detail: "Reduces speaker echo" },
{ icon: Waves, label: "Audio cleanup", detail: "Reduces echo, noise, and reverberation" },
].map(({ icon: Icon, label, detail }) => (
<div key={label} className="flex min-w-0 items-center gap-2.5">
<span className="flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-primary/10">
Expand Down Expand Up @@ -3425,7 +3425,7 @@ export default function Meetings({ params }: { params?: { id?: string } }) {
{deviceTestMutation.data.testTonePlayed
? t("Speaker sound played")
: t("Speaker sound unavailable")}{" "}
· {t("Echo reduction")} {deviceTestMutation.data.aecActive ? t("ready") : t("unavailable")}
· {t("Audio cleanup")} {deviceTestMutation.data.aecActive ? t("ready") : t("unavailable")}
</p>
</div>
)}
Expand Down
6 changes: 3 additions & 3 deletions Frontend/client/src/pages/Settings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6019,15 +6019,15 @@ export default function Settings() {
</InfoTooltip>
</div>
<SettingLine
label={t("Reduce speaker echo")}
label={t("Clean up meeting audio")}
description={t(
"Helps prevent voices from your speakers being recorded again through your microphone.",
"Reduces speaker echo, background noise, and reverberation locally on your computer.",
)}
>
<Switch
checked={meetingAecEnabled}
onCheckedChange={(enabled) => void updateMeetingPreferences({ meetingAecEnabled: enabled })}
aria-label={t("Reduce speaker echo in meetings")}
aria-label={t("Clean up meeting audio")}
/>
</SettingLine>
</div>
Expand Down
4 changes: 2 additions & 2 deletions Frontend/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Frontend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "scriber",
"version": "0.5.125",
"version": "0.5.126",
"type": "module",
"license": "MIT",
"engines": {
Expand Down
Loading
Loading