Transcribe on the device, so you can see what is being transmitted #55
Labels
No labels
needs-info
needs-triage
ready-for-agent
ready-for-human
v2
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:research
wayfinder:task
wayfinder:ticket
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
aiko/denpa#55
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Transcribe on the device, so the operator sees what was actually heard before it is acted on.
Raised 2026-07-30 as a long-term want, with a specific reason: there is currently no way to see what your voice became.
Where transcription happens today
Nowhere local.
#21stripped the go-between to TTS and Live2D — there is nosrc/open_llm_vtuber/asr. The client captures audio and sends it up asdenpa.voice;hermes_plugin/denpa/adapter.py:432dispatches it to Hermes as aMessageType.VOICE.wav. Hermes owns the ASR.The transcript only returns by accident.
hermes_plugin/denpa/protocol.py:175runs a regex over her reply text looking for an echoed transcript, and promotes a match toFRAME_TRANSCRIPTION:So whether you can see what you said depends on whether she happened to repeat it back in prose. That is the same "read something load-bearing out of her prose" pattern ADR-0011 removed from pairing, surviving in a different corner. Worth recording even if on-device ASR never happens.
Two separable pieces
1. A real transcription frame (cheap, and useful on its own). The transcript travels as its own frame rather than being parsed out of her sentences. No model, no new dependency — a wire change plus somewhere in the log or the transmission band to show it. This alone answers "what is being transmitted", and it removes the prose-parsing.
2. Whisper on the device (the actual ask). Capture already lives in Rust (
src-tauri/src/audio), andortis already a dependency for silero, so an ONNX whisper has a path in-tree. Consequences worth deciding before building:denpa.textrather thandenpa.voice, and Hermes stops doing ASR. That is a real shift in where the work happens, and it means her upstream never receives the audio — which may be a feature (privacy) or a loss (her ASR may be better, and prosody is gone).#44already found the ONNX Runtime binary is 27 MB and dominates the app; whisper would dominate the runtime in turn.ort's Android prebuilt is arm64-only and needs NDK r28 (#44), and a phone transcribing in real time is a battery and thermal question nobody has measured.Suggested shape
Do piece 1 regardless; it is small, it kills a prose-parse, and it gives the visibility that prompted this. Treat piece 2 as its own decision with the model choice, the frame question, and the Android cost settled first.
Related
#35— capture in Rust, which is what makes local ASR reachable at all#44— ort on Android, arm64-only, NDK r28#17/#34— the log, where a transcript would most naturally showdenpa/docs/adr/0011-devices-pair-to-the-go-between.md— the decision that removed the other prose-parseThe cheap half is split out as #56 and is going ahead now. Operator's call, 2026-07-30: do the transcription frame regardless, and leave on-device whisper as its own decision.
This issue keeps the whisper question — the frame change (text instead of voice, or both), the model size against ONNX Runtime's already-dominant 27 MB, the Android battery and thermal cost, and whether the transcript becomes a preview the operator can correct before sending rather than a record of what already went.