feat(workflows): make the voice transcription template real - #2498
Open
Hoang130203 wants to merge 1 commit into
Open
feat(workflows): make the voice transcription template real#2498Hoang130203 wants to merge 1 commit into
Hoang130203 wants to merge 1 commit into
Conversation
config/n8n/03-voice-transcription.json was a manualTrigger plus a sticky
note saying "Customize the nodes below to match your setup", with
"connections": {} — an empty canvas behind a catalog card advertising
"Transcribe audio files to text".
Now: POST /webhook/ods-transcribe with a multipart audio file ->
whisper /v1/audio/transcriptions -> JSON {text, duration, language}.
curl -X POST http://localhost:5678/webhook/ods-transcribe \
-F 'file=@meeting.wav'
The file is streamed to Whisper as multipart rather than base64'd through
JSON, and the request goes to whisper:8000 on ods-network, so the audio
never leaves the box.
An upload with no file answers 400 with the curl form to use, instead of
failing inside the HTTP node with a multipart error.
Note on the binary property name: n8n's webhook names a multipart upload
after the form field key, so the file arrives as `file`, not `data`.
Setting options.binaryPropertyName does not rename it to `data` — the
node appends a counter and produces `data0`. The workflow therefore
leaves that option unset and refers to `file` throughout, matching the
curl in the sticky note.
This was referenced Aug 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
config/n8n/03-voice-transcription.jsonwas a placeholder — amanualTrigger,a sticky note reading "Customize the nodes below to match your setup", and
"connections": {}— behind a catalog card advertising "Transcribe audiofiles to text" with
"setupTime": "1 minute".curl -X POST http://localhost:5678/webhook/ods-transcribe \ -F 'file=@meeting.wav'Optional form fields:
model(defaultSystran/faster-whisper-base, themodel
validate-models.pytreats as the STT default).JSON, so a long recording does not get inflated by a third in memory.
http://whisper:8000— the manifest's in-networkport,not the published
9000— so the audio stays onods-network.failing inside the HTTP node with an opaque multipart error.
The subtle part, and why it is worth a look
n8n's webhook does not name a multipart upload
data.handleFormData()in
Webhook/utils.jsnames the binary property after the form field key:So setting
options.binaryPropertyName: "data"does not rename it todata—it appends a counter and yields
data0. My first draft did exactly thatand referenced
data, which would have imported cleanly, passed every staticcheck, and then silently taken the 400 branch on every upload.
The workflow now leaves that option unset and refers to
filethroughout,matching the field name in the documented curl.
AI Assistance
AI assisted with drafting the node graph and this description. I verified the
Whisper endpoint and port against
extensions/services/whisper/, and found thebinary-naming defect by reading n8n's own
handleFormDataimplementationrather than assuming.
Release Lane
release/2.6.xmainStable hotfix reason:
Changed Surface
(One JSON file under
config/n8n/. An import payload for n8n; no ODS codeexecutes it. The catalog entry is unchanged.)
Risk And Validation
git diff --checkrelease/2.6.xCommands/results:
Caveat: Docker is not running on my dev host, so I could not stand up
n8n + whisper and post a real recording. The validation above is static against
the real node definitions plus a read of n8n's multipart handler.
Return Transcriptreads$json.text, which is the OpenAI-compatible transcriptionshape speaches returns and the field
scripts/ods-test-functional.shassertson. Happy to get a live run on a machine with Docker before you merge.
Operational Change Check
An import payload for n8n. Nothing in the installer, compose stack,
ods-cli,or dashboard-api executes it — dashboard-api reads only
catalog.jsonfor theWorkflows listing. No existing install changes until a user imports it.
Notes For Reviewers
Model default. The form defaults to
Systran/faster-whisper-base, matchingscripts/validate-models.py's STT default. On an NVIDIA install the tier mappins
deepdml/faster-whisper-large-v3-turbo-ct2instead, and this workflowwill not know that — the caller can pass
-F 'model=...'. Wiring theconfigured value in would need n8n to have
AUDIO_STT_MODELin itsenvironment, which
compose.yamldoes not pass today. Tell me if you want thatplumbing and I will send it separately.
Webhook path.
ods-transcribe. No other catalog workflow claims it.Part of the series making the 18 stub templates real: #2496 (chat,
code-assistant), #2497 (summarizer). Independent files, no overlapping lines —
any order is fine.