feat(workflows): make the whisper-to-notes template real - #2502
Open
Hoang130203 wants to merge 1 commit into
Open
feat(workflows): make the whisper-to-notes template real#2502Hoang130203 wants to merge 1 commit into
Hoang130203 wants to merge 1 commit into
Conversation
config/n8n/whisper-to-notes.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 and summarize voice notes".
Now: POST a recording -> whisper transcribes -> llama-server turns the
transcript into structured notes -> JSON with summary, decisions,
action_items and open_questions, plus the full transcript so nothing is
lost to summarisation.
curl -X POST http://localhost:5678/webhook/ods-notes \
-F 'file=@standup.m4a' -F 'title=Monday standup'
The model is asked for JSON, and a Code node parses it defensively: it
strips a ``` fence if one is there, slices from the first { to the last
}, and falls back to returning the raw reply with parsed=false. A model
that answers in prose costs you the structure, not the transcription —
which is the expensive half.
The system prompt pins the exact schema, tells the model to use only
what the transcript says, and to write "unassigned" rather than invent an
owner for an action item.
Transcript is clamped to 24000 characters before the summarisation call
so a long recording cannot overrun the context window.
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/whisper-to-notes.jsonwas a placeholder —manualTrigger+ stickynote +
"connections": {}— behind a catalog card advertising "Transcribe andsummarize voice notes".
Returns
summary,decisions,action_items({owner, task}),open_questions— plus the fulltranscript, so nothing is lost tosummarisation.
The part worth reviewing: JSON from a model is not JSON
The system prompt pins an exact schema and forbids code fences, but local
models at Tier 0–2 do not always comply. The Code node therefore parses
defensively rather than trusting it:
and on failure returns
parsed: falsewithraw_replyalongside thetranscript. A model that answers in prose costs you the structure, not the
transcription — which is the expensive half and the part that cannot be
redone without the audio.
Other choices:
"unassigned"rather than invent an owner for an action item.so a long recording cannot overrun the context window and lose the whole run.
gets 300s.
whisper:8000,llama-server:8080), soneither the audio nor the transcript leaves
ods-network.AI Assistance
AI assisted with drafting the node graph, the schema prompt, and this
description. I verified both endpoints against their manifests, checked the
Code node body parses as JavaScript, and validated the file against the real
node package before pushing.
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 post a real
recording through the two-hop chain. Static validation proves the file imports
and every parameter and version is real. The fragile part — the model's JSON
compliance — is precisely what the defensive parser handles, and that parser is
plain JavaScript I checked separately. Happy to get a live run before merge.
Operational Change Check
An import payload for n8n. Nothing in the installer, compose stack,
ods-cli,or dashboard-api executes it. No existing install changes until a user imports
it.
Notes For Reviewers
parsed: falseis a returned field, not an error. I chose to return 200with the transcript and the raw reply rather than 500, on the grounds that the
caller wants their transcript either way. If you would rather it be a 422 so
callers can retry the structuring step, that is a one-node change.
STT model default is
Systran/faster-whisper-base, matchingscripts/validate-models.py. On an NVIDIA install the tier map pinsdeepdml/faster-whisper-large-v3-turbo-ct2; the caller can override with-F 'stt_model=...'. Wiring the configured value in would needAUDIO_STT_MODELin n8n's environment, whichcompose.yamldoes not pass —same note as #2498.
Part of the series making the 18 stub templates real: #2496, #2497, #2498,
#2499, #2500, #2501.