Releases: luongndcoder/Scribble
Release list
v1.3.2
- 🐛 Sửa lỗi khiến máy mới cài không upload được file ghi âm (báo "no such column: status").
- ⚡ Nâng nhận diện giọng nói Soniox lên model v5 — chính xác hơn rõ rệt.
- 🗣️ Tách người nói (diarization) tốt hơn nhờ engine v5 mới.
- 💰 Giá sử dụng giữ nguyên, không đổi.
- ⬆️ Mở app là tự nhận bản cập nhật mới nhất.
v1.3.1
- Ghi âm offline: nhận diện giọng nói chạy trên máy, không cần API key hay kết nối mạng. Hỗ trợ nhiều ngôn ngữ (macOS Apple Silicon).
- Thay model tách người nói, tối ưu cho tiếng Việt và ngôn ngữ châu Á — giảm tình trạng nhiều người bị gộp thành một speaker.
- Upload file: mặc định chỉ phiên âm, không tự tạo biên bản. Bật "Tạo biên bản tự động" nếu cần.
- Nghe lại có đồng bộ transcript: audio phát đến đâu transcript cuộn theo, bấm mốc thời gian để tua.
- Chế độ Local (offline): tắt "Dịch cabin" (dịch cabin cần Nvidia, không có model offline).
- Sửa lỗi chọn chế độ Local vẫn yêu cầu mã Nvidia.
- Sửa lỗi Soniox gộp toàn bộ vào một speaker ở phiên ghi âm dài (trên 1 tiếng).
- Đổi kiểu biên bản mặc định sang "Phân tích chi tiết".
v1.3.0
- Ghi âm offline: nhận diện giọng nói chạy trên máy, không cần API key hay kết nối mạng. Hỗ trợ nhiều ngôn ngữ (macOS Apple Silicon).
- Thay model tách người nói, tối ưu cho tiếng Việt và ngôn ngữ châu Á — giảm tình trạng nhiều người bị gộp thành một speaker.
- Upload file: mặc định chỉ phiên âm, không tự tạo biên bản. Bật "Tạo biên bản tự động" nếu cần.
- Nghe lại có đồng bộ transcript: audio phát đến đâu transcript cuộn theo, bấm mốc thời gian để tua.
- Sửa lỗi chọn chế độ Local vẫn yêu cầu mã Nvidia.
- Sửa lỗi Soniox gộp toàn bộ vào một speaker ở phiên ghi âm dài (trên 1 tiếng).
- Đổi kiểu biên bản mặc định sang "Phân tích chi tiết".
v1.2.16
🎧 Nghe lại ghi âm ngay trong app — player play/pause + tua, hợp tông màu
🔍 Tìm trong transcript ở màn chi tiết — gõ tới đâu lọc + tô vàng tới đó
📄 Tải transcript thống nhất định dạng .txt ở mọi nơi
🕑 Thời lượng hiển thị gọn — qua 60 phút quy ra giờ (vd 1h 36m)
🔒 Khoá đổi cấu hình + rời màn hình khi đang ghi âm, tránh lỗi
🪟 Kéo được cửa sổ kể cả khi đang mở popup upload
⚡ Khởi động nhẹ hơn — giải nén sidecar bằng zstd, đồng nhất Win/macOS/Ubuntu
v1.2.15
- ✨ Trợ lý AI giờ là tùy chọn — chỉ cần STT vẫn dùng đầy đủ
- 🌐 Phát hiện mất mạng & thông báo mượt hơn
- 🎨 Tinh gọn giao diện Cài đặt và thanh điều khiển
- ⚡ Ổn định hiển thị biên bản + một số cải thiện nhỏ
v1.2.14
- 🌐 Phát hiện mất mạng tự động + banner cảnh báo trong khi upload
- 🔁 Soniox upload tách 2 bước (upload riêng → STT riêng) an toàn hơn
- ⚡ Auto-retry chunk fail với backoff thông minh (1s → 2s → 4s)
- 📜 Transcript dài 4h+ không còn lag (sliding window + auto-load)
- 👥 Speaker IDs sequential 1-2-3-4 (hết cảnh nhảy 3 → 101)
- 💾 Crash giữa upload không mất tiến trình — có nút "Thử lại"
- ⏱ Hiển thị stage rõ: "Đang tải file" vs "Soniox đang xử lý"
v1.2.11
- 🎬 Tự động cài ffmpeg — không cần
brew install/choco installnữa - 🪟 Sửa lỗi không kéo được cửa sổ app trên Mac
- 📝 Transcript luôn được lưu kể cả khi tạo biên bản AI lỗi (chưa cấu hình API Key) — không còn cảnh "công cốc"
- 🧹 Auto-xóa cuộc họp rỗng khi upload lỗi (hết bug "đã tồn tại" giả)
- 🔄 Soniox tự reconnect khi session timeout (~1h) + transcript dài 4h không còn lag
v1.2.10
Scribble v1.2.10 — Soniox Auto-Reconnect & Transcript Load-More
🐛 Bug Fixes
STT realtime ổn định cho meeting dài (Soniox)
- Trước: Soniox real-time WebSocket có session cap server-side (~1h tùy plan). Khi vượt, server đóng kết nối nhưng app không biết — transcript dừng đột ngột trong khi timer vẫn chạy, audio thread chết âm thầm.
- Giờ: app tự reconnect tới 8 lần với exponential backoff (cap 5s). Timeline
start_ms/end_msđược giữ liên tục qua các session bằng cumulative offset. Frontend hiện badge🔄 Soniox session reconnecting...trong ~1s khi đang nối lại. Lỗi rõ ràng nếu hết quota / sai API key (không còn nuốt âm thầm).
Transcript dài 4h không còn lag
- Trước: render full
transcriptParts(500+ đoạn × split-sentence × translation) làm DOM lag kinh khủng khi cuộc họp dài. - Giờ: pagination — chỉ render 200 đoạn cuối, nút "↑ Tải thêm 200 đoạn cũ hơn" ở đầu, scroll position được preserve. Export / Copy / Tạo biên bản vẫn lấy TOÀN BỘ transcript (pagination chỉ ảnh hưởng render).
Auto-scroll không yank user nữa
- Trước: cứ có transcript mới là kéo scroll xuống bottom → khó đọc đoạn cũ khi đang ghi âm.
- Giờ: chỉ auto-scroll khi user đang trong 80px cuối list. Cuộn lên đọc thoải mái.
📦 Downloads
- macOS (Apple Silicon):
.dmghoặc auto-update - Windows (x64):
.exeinstaller - Linux (amd64):
.AppImagehoặc.deb
v1.2.9
🎙️ Soniox realtime — speaker attribution + timestamps (the actual fix)
User report: dùng Soniox STT realtime, text đúng nhưng speaker labels bị lẫn lộn và timestamps stuck ở 0:00 – 0:00 đặc biệt trong session dài.
Root cause
-
Speaker jumbling.
SonioxRealtimeStreamer.results()chỉ updatecurrent_speakerở cuối loop event. Khi 1 event Soniox trả[S1, S2, S1]tokens trong cùng batch, guard "speaker change" checkaccumulated_final = [](chưa merge) nên không flush — tất cả tokens collapsed vào speaker cuối cùng. -
Timestamps = 0:00. Backend không forward
start_ms/end_mscủa Soniox tokens cho realtime. Frontend fall backstate.secondstừ recording timer, race với WS open → events đầu arrive lúcseconds=0→ cảstartTimelẫnendTimepin về"0".
Fix
- Rewrite token loop trong
src-python/stt.py: flush speaker change INLINE,current_speakeradvance per-token. Tracksegment_start_ms/segment_end_mstừ token offsets thực, gửi trong mọi event. - Frontend (
use-streaming-stt.ts) prefer ms offsets từ backend khi có, fallbackstate.secondscho Nvidia/STT khác.
Verify
Long session với 3+ speakers: speaker labels stable, timestamps grow đều (vd: 2:34 – 3:12). Log sẽ thấy [stt:soniox-stream] Speaker change mid-event: S1 -> S2, flushing: '...' khi đổi giọng giữa event.
v1.2.8
🖱️ Drag window from the topnav (the actual fix)
Previous attempts wired data-tauri-drag-region everywhere, but the attribute is silently ignored on Tauri 2 + macOS Overlay-titlebar — confirmed via user testing. Switched to Tauri's recommended manual approach: an onMouseDown handler that imperatively calls getCurrentWindow().startDragging().
What changed
- Click-drag anywhere in the topnav (other than buttons / language toggle / settings cog) moves the window
- Double-click the topnav background triggers
toggleMaximize()— mirrors native title-bar behavior - Interactive elements (buttons, links, inputs) still get their onClick — drag handler bails out when the target is one of those
macOS — first "silent update" test
This is the first release after v1.2.7's stable-cert work, so it's the proof point for the TCC permissions fix. Updating from v1.2.7 → v1.2.8 should NOT trigger a macOS permission dialog (mic, system audio). Both releases are signed with the same Scribble Code Signing identity, so TCC sees them as the same app.
If you DO still get prompted, something in the cert chain changed between builds — open an issue.