Skip to content

Releases: luongndcoder/Scribble

v1.2.7

Choose a tag to compare

@github-actions github-actions released this 15 May 11:02
a105017

🔐 macOS — permissions now persist across updates

Stop being asked for mic + system-audio permissions every time you update. The fix is on the build side: every macOS release is now signed with a stable code-signing identity, so macOS TCC recognises each update as "the same app" and keeps prior grants alive.

What changed

  • .github/workflows/build-macos.yml imports a code-signing cert from secrets and uses it as signingIdentity instead of ad-hoc (-). Falls back to ad-hoc when the secret is absent, so non-mac builds aren't affected.
  • Identity extraction tolerates self-signed certs (the strict codesigning policy filter rejects them, but codesign itself accepts them by name).

Heads-up — one last permission prompt

Upgrading from v1.2.6 → v1.2.7 will still trigger the macOS permission dialog one more time (mic, system audio), because v1.2.6 was ad-hoc-signed and v1.2.7 has a real identity — different designated requirement = different "app" to TCC.

From v1.2.7 onward, every future update will keep your permissions. No more annoying prompts.

Verification

codesign -dvv /Applications/Scribble.app 2>&1 | grep Authority
# Expected: Authority=Scribble Code Signing  (NOT: Authority=(ad-hoc))

v1.2.6

Choose a tag to compare

@github-actions github-actions released this 15 May 08:33
f20817e

🔐 Soniox realtime — round two (the actual fix)

v1.2.4 fixed the websockets.sync bundle gap. The Soniox realtime WebSocket then progressed further but immediately died on TLS handshake:

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed: unable to get local issuer certificate

Root cause

Python's stdlib ssl module uses compile-time hardcoded CA paths (/System/Library/OpenSSL/cert.pem etc) that don't exist in a PyInstaller bundle. The file-upload path was never affected because httpx ships certifi's CA bundle internally — but websockets.sync falls back to the raw stdlib and broke.

Fix

  • main.py: at the very top of boot (before uvicorn, websockets, or anything caches an SSL context), set SSL_CERT_FILE / SSL_CERT_DIR / REQUESTS_CA_BUNDLE to certifi.where(). Guard with sys.frozen so dev runs still use the system trust store.
  • scribble-sidecar.spec: collect_all('certifi') so cacert.pem is actually present in the bundle. Previously certifi was only there incidentally via httpx; now it's explicitly required and load-bearing.

After this update

Settings → STT Provider = Soniox → "Cuộc họp mới" → start recording → transcript appears in real time, with built-in speaker diarization.

📦 Downloads

  • Scribble_1.2.6_aarch64.dmg — macOS Apple Silicon
  • Scribble_1.2.6_x64-setup.exe — Windows x64
  • Scribble_1.2.6_amd64.AppImage — Linux x64 (AppImage)
  • scribble_1.2.6_amd64.deb — Linux x64 (Debian/Ubuntu)

v1.2.5

Choose a tag to compare

@github-actions github-actions released this 15 May 07:52
5b9b44e

🪟 Sticky meeting-list header

Tiny UX fix on top of v1.2.4.

What changed

  • Meeting history title + search bar now stay pinned at the top while you scroll the meeting cards
  • Previously the whole .view was the scroll container — scrolling past the first screen lost the title, the "Upload file" / "Cuộc họp mới" buttons, AND the search field together
  • The .meetings-grid is now the only scrolling region inside the list view; detail view is unaffected (uses its own layout)

📦 Downloads

  • Scribble_1.2.5_aarch64.dmg — macOS Apple Silicon
  • Scribble_1.2.5_x64-setup.exe — Windows x64
  • Scribble_1.2.5_amd64.AppImage — Linux x64 (AppImage)
  • scribble_1.2.5_amd64.deb — Linux x64 (Debian/Ubuntu)

🔗 Quick recap of v1.2.x changes

Version Highlight
1.2.5 Sticky meeting-list header + search (this release)
1.2.4 Soniox realtime fix + draggable window + clickable links
1.2.3 Clickable markdown links in update modal
1.2.2 Real markdown renderer + bottom-right banner + drop "Ready" toast
1.2.1 Auto-update infra (signing + manifest + Settings controls)
1.2.0 Audio upload + reference materials + UX redesign

v1.2.4

Choose a tag to compare

@github-actions github-actions released this 15 May 07:27
2c5eae2

🐛 Fixes

This is a triple-bugfix release covering window controls, clickable docs links, and the broken Soniox realtime transcription that several users reported after v1.2.3.

🎤 Soniox realtime transcription works again

  • Root cause: the PyInstaller bundle was missing websockets.sync (only speedups.so got packed). The Soniox SDK imports from websockets.sync.client import connect for realtime sessions — every WebSocket attempt threw ModuleNotFoundError and was silently swallowed by an empty except. Frontend looped reconnect 2x/sec.
  • Fix: spec uses collect_all('websockets') now, pulling every submodule. The Soniox file-upload path was never affected because it uses HTTP (httpx), not WebSockets.
  • Also added: log.error(..., exc_info=True) on the soniox-stream exception path. Future failures will show a real traceback instead of going silent.

🪟 Window draggable from the topnav

  • macOS overlay title-bar mode hid the native chrome — clicking on "Scribble v1.2.x" just selected the version text. Same on Windows/Linux.
  • Fix: topnav, brand, status chip, and language label all get data-tauri-drag-region + -webkit-app-region: drag + user-select: none. Click-and-drag the topnav to move the window. Buttons opt out of drag with no-drag so their onClick still fires.

🔗 Clickable markdown links actually open

  • v1.2.3 added [text](url) rendering in the update modal but routed through @tauri-apps/plugin-shell without granting the permission. Click did nothing visible.
  • Fix: shell:allow-open added to capabilities. Click any release-notes link → opens in your system browser.

📦 Downloads

  • Scribble_1.2.4_aarch64.dmg — macOS Apple Silicon
  • Scribble_1.2.4_x64-setup.exe — Windows x64
  • Scribble_1.2.4_amd64.AppImage — Linux x64 (AppImage)
  • scribble_1.2.4_amd64.deb — Linux x64 (Debian/Ubuntu)

v1.2.3

Choose a tag to compare

@github-actions github-actions released this 15 May 05:30
b23064d

🔗 Clickable links in release notes

This is a small follow-up to v1.2.2 that adds proper hyperlink support in the update modal. v1.2.2's markdown renderer handled headings, lists, bold, and inline code — but [link](url) was rendered as plain text.

🖱 What changed

  • Links now route through @tauri-apps/plugin-shell → open in your system browser (not the Tauri webview)
  • Hover state added: underline darkens from light indigo to solid
  • The renderer falls back to window.open() in plain browser dev (still 0 deps)

🎯 Why this matters

Future release notes can now point users at proper docs:

🧪 Markdown features exercised in this release

This release deliberately uses every supported markdown feature so you can verify the renderer is solid:

  • bold text like this
  • italics aren't supported (single-asterisk would clash with bullet markers, so we skip it)
  • inline code like this
  • Headings at 3 levels: #, ##, ###
  • Bullet lists (this one!)
  • Hyperlinks (try clicking the docs link above)

📦 Downloads

  • Scribble_1.2.3_aarch64.dmg — macOS Apple Silicon
  • Scribble_1.2.3_x64-setup.exe — Windows x64
  • Scribble_1.2.3_amd64.AppImage — Linux x64 (AppImage)
  • scribble_1.2.3_amd64.deb — Linux x64 (Debian/Ubuntu)

🚦 Verify the renderer works

If you're already on v1.2.2: open Settings → App Updates → "Kiểm tra cập nhật" → click "Xem" on the banner. The modal you see should have proper headings, lists, and a working clickable link to the docs above.

v1.2.2

Choose a tag to compare

@github-actions github-actions released this 15 May 04:47
36dd988

✨ UI polish for the in-app updater

This release fixes 3 visible flaws from v1.2.1 — release notes now render properly, the update banner moves out of the topnav, and the "system ready" toast goes away.

🎨 Markdown rendering in the update modal

  • ##, ###, **bold**, `code`, [link](url), and - bullets all render correctly now
  • v1.2.1 displayed them as raw text — this release ships a 80-line in-house markdown renderer (no react-markdown bloat)

📍 Banner repositioned

  • Was: top: 12px; left: 50% — sandwiched between brand chip and right-side controls
  • Now: bottom: 24px; right: 24px toast pattern — out of the topnav scan path, slide-up animation

🤫 Removed redundant "system ready" toast

  • The status chip in the topnav already flips from "Đang khởi động" → "✓ Sẵn sàng" when the sidecar comes online
  • The bottom startup strip also disappears at the same moment
  • Toast was a third signal — dropped per user feedback

📦 Downloads

  • Scribble_1.2.2_aarch64.dmg — macOS Apple Silicon
  • Scribble_1.2.2_x64-setup.exe — Windows x64
  • Scribble_1.2.2_amd64.AppImage — Linux x64 (AppImage)
  • scribble_1.2.2_amd64.deb — Linux x64 (Debian/Ubuntu)

🚦 Auto-update flow

v1.2.0 users see a banner within 30 minutes of launching the app, or can click Settings → App Updates → "Kiểm tra cập nhật" to check immediately.

v1.2.1 — Auto-update release pipeline

Choose a tag to compare

@luongndcoder luongndcoder released this 15 May 04:07
605ad7f

🚀 What's new — Auto-update is now functional

This release lights up the auto-updater that's been wired up but inert since v1.1.x. Going forward, every release will reach v1.2.0+ users automatically — no more manual reinstall.

🔄 Auto-update

  • In-app banner when a new version drops, with full release notes modal (no more 100-char truncation)
  • Download progress with MB / total / ETA in both the banner and modal
  • One-click update — downloads in background, verifies cryptographic signature, relaunches into the new version
  • Skip this version if you want to stay on a release
  • Auto-check toggle + manual "Check for updates" button in Settings → App Updates

🛠 Under the hood

  • All 3 platforms (Windows, macOS aarch64, Linux AppImage) now ship with minisign signatures
  • New latest.json manifest published per release describes available platforms + signatures + URLs
  • Tauri client downloads + verifies signature against the embedded pubkey before applying — releases that don't verify are rejected
  • New build-macos.yml workflow (macOS aarch64 ad-hoc signed, runs on macos-14 runner)
  • New release-manifest.yml workflow auto-generates latest.json after all 3 platform builds upload signatures

📝 Note for existing users

  • v1.2.0 users will see an update banner within 30 minutes of opening the app (or click Settings → App Updates → "Kiểm tra cập nhật" to check immediately)
  • Linux .deb users: auto-update is AppImage-only; please switch to AppImage or upgrade manually with apt/dpkg
  • macOS Gatekeeper: this is ad-hoc signed (not notarized), so first-time install requires right-click → Open. The auto-update itself is independently signed and verifies cleanly.

📦 Downloads

  • Scribble_1.2.1_aarch64.dmg — macOS Apple Silicon
  • Scribble_1.2.1_x64-setup.exe — Windows x64
  • Scribble_1.2.1_amd64.AppImage — Linux x64 (AppImage)
  • scribble_1.2.1_amd64.deb — Linux x64 (Debian/Ubuntu)

See docs/auto-update.md for the full operator guide.

v1.2.0 — Upload audio + Reference materials + UX redesign

Choose a tag to compare

@luongndcoder luongndcoder released this 14 May 11:27
ea2d8cb

✨ What's new in v1.2.0

New features

  • 📤 Upload audio file — drop in mp3/m4a/wav/mp4/mkv/webm (up to 2 GB) and let the pipeline run: normalize → silence-aligned chunking → parallel STT (3 concurrent) → diarize → LLM summary. Resumable across app restarts (per-chunk save). Idempotent by SHA-256 — re-uploading the same file redirects to the existing meeting.
  • 📎 Reference materials — attach .md / .txt docs to a meeting as LLM context. 1 MB/file, 2 MB/meeting, 10 files. AI corrects mistranscribed names, cross-references the agenda, and lists used files at the end of the minutes.
  • 🎯 Soniox STT backend alongside Nvidia Riva — premium quality + multi-language mixed audio + built-in diarization. Upload path sends the whole file in one async call (stt-async-v4), so speaker IDs are globally consistent across the entire meeting.
  • ⏱ Per-chunk transcript timestamps — every ~22s gets its own time badge instead of one big block.

UX redesign

  • Startup: blocking center modal → slim bottom status strip + revealed app shell + elapsed-time indicator.
  • Meeting detail top: 3-row stack → 1-row toolbar (~80 px saved).
  • Meeting detail bottom: 2 separate bars → 1 merged band, record button 52 → 40 px.
  • Attachments panel: collapsible slim bar by default when populated.
  • Topnav + macOS title bar: macOS overlay title bar removes the duplicate "Scribble" label; topnav compacted to ~34 px.
  • Settings panel: 520 → 760 px, STT and AI as 2 side-by-side columns (no scroll), Test Connection button restyled from full-width gradient to compact outlined pill.

Backend hardening

  • Idempotent Database singleton (fixes lazy-import state reset).
  • find_ffmpeg() everywhere — fixes macOS Finder-launch PATH issue.
  • Riva streaming for vi / zh (offline_recognize unavailable on free tier).
  • Sidecar cache key = app_version + tar.gz mtime — rebuilds without version bump re-extract.
  • Upload pipeline respects stt_provider setting — was hardcoded to Nvidia, now dispatches correctly.
  • Soniox path enables built-in diarization (enable_speaker_diarization=True) and uses the single-file async API for globally consistent speakers.
  • Audio download default = MP3 96 kbps mono (~43 MB/hr vs WAV ~115 MB/hr) — 62 % smaller for sharing.

📥 Downloads

OS Architecture Installer Size
🍎 macOS Apple Silicon (M1/M2/M3/M4) Scribble_1.2.0_aarch64.dmg 109 MB
🪟 Windows x64 Scribble_1.2.0_x64-setup.exe 118 MB
🐧 Linux x64 AppImage Scribble_1.2.0_amd64.AppImage 213 MB
🐧 Linux x64 deb scribble_1.2.0_amd64.deb 138 MB

macOS Gatekeeper: If first launch shows "Scribble Not Opened", run xattr -cr /Applications/Scribble.app or use System Settings → Privacy & Security → Allow Anyway.

🤖 Release notes generated with Claude Code

v1.1.4 — Fix Windows webview stuck at sidecar connection

Choose a tag to compare

@luongndcoder luongndcoder released this 08 May 00:59

Critical Fix

  • Windows + Linux: Allow http://tauri.localhost origin for CORS. v1.1.3 only allowed https://tauri.localhost (HTTPS variant) and tauri://localhost (macOS-only scheme), so the cross-origin /health fetch from webview was blocked before reaching the sidecar. App was stuck forever at "Đang khởi động hệ thống → Kết nối tới sidecar" splash.
  • Root cause: Tauri 2 webview origin is http://tauri.localhost (HTTP, not HTTPS) on Windows + Linux. Only macOS uses tauri://localhost. The HTTPS entry in CORS allow_list never matched any real client.

Build infrastructure

  • Rewrite build-windows.bat for onedir + tar.gz layout (script was still using onefile copy from daa0747)
  • CI workflow_dispatch now uploads installer as artifact, no tag needed — useful for testing builds without creating public releases

Upgrade notes

After installing v1.1.4, delete the old sidecar cache to force re-extraction of the new tar.gz:
```powershell
Remove-Item -Recurse -Force "$env:USERPROFILE.voicescribe\sidecar"
```

Downloads

OS File
🍎 macOS (Apple Silicon) Scribble_1.1.4_aarch64.dmg
🪟 Windows (64-bit) Scribble_1.1.4_x64-setup.exe
🐧 Linux (AppImage) Scribble_1.1.4_amd64.AppImage
🐧 Linux (deb) scribble_1.1.4_amd64.deb

Carry over from v1.1.3

  • Windows: onnxruntime in PyInstaller spec for diarizer
  • Sidecar tar.gz path resolution for Windows installer / Linux deb

Carry over from v1.1.1

  • Nvidia speaker diarization (CAM++ ONNX)
  • Per-chunk translation with chunk_id targeting
  • Auto-updater via GitHub Releases
  • Hierarchical MapReduce + Deep Analysis template
  • App startup ~2-5s