Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Transcribe local audio files or voice notes into markdown files using the legacy VoiceNote Bot workflow: local Whisper primary, OpenAI transcription fallback, and OpenRouter GPT-5 nano cleanup. Make sure to use this whenever the user wants audio files, voice recordings, dictations, interviews, or Telegram-style voice notes turned into markdown/text files without using Telegram, especially for batch folders or when they want the same cleanup behaviour as the old Telegram path.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 29% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 92% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 184% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 86% | 0% |
Use this skill when the user wants to convert one or more local audio files into cleaned markdown transcripts using the same core workflow as a legacy voice-note transcription bot path, but without Telegram, webhooks, or queues.
For each input audio file, the bundled script:
gpt-4o-mini-transcribe by default) if Whisper failsopenai/gpt-5-nano unless cleanup is explicitly skipped or the API key is unavailabletranscription_manifest.json summary into the output directoryUse this skill instead of a basic one-shot transcription skill when the user wants any of the following:
/path/to/*.m4a--recursiveSupported formats:
.oga, .ogg, .mp3, .m4a, .wav, .webm, .mp4, .mpeg, .mpgaEach transcript is saved as a .md file with a metadata header like this:
yaml--- source_file: "note-01.oga" source_path: "/absolute/path/note-01.oga" generated_at: "2026-05-28T10:00:00+00:00" workflow: "local_whisper_primary_openai_fallback_openrouter_cleanup" language_requested: "auto" transcription_provider: "whisper" transcription_model: "local-whisper" cleanup_applied: true cleanup_provider: "openrouter" cleanup_model: "openai/gpt-5-nano" warnings: [] ---
The markdown body below the header is the transcript the user should read or reuse.
Use this script:
bashpython3 ./skills/audio-transcription-workflow/scripts/transcribe_audio_to_markdown.py ...
bashpython3 ./skills/audio-transcription-workflow/scripts/transcribe_audio_to_markdown.py \ /path/to/voice-note.oga \ --output-dir /path/to/output
bashpython3 ./skills/audio-transcription-workflow/scripts/transcribe_audio_to_markdown.py \ /path/to/a.oga /path/to/b.m4a /path/to/c.wav \ --output-dir /path/to/output
bashpython3 ./skills/audio-transcription-workflow/scripts/transcribe_audio_to_markdown.py \ /path/to/audio-folder \ --output-dir /path/to/output
bashpython3 ./skills/audio-transcription-workflow/scripts/transcribe_audio_to_markdown.py \ /path/to/audio-folder \ --recursive \ --output-dir /path/to/output
bashpython3 ./skills/audio-transcription-workflow/scripts/transcribe_audio_to_markdown.py \ '/path/to/audio/*.m4a' \ --output-dir /path/to/output
If the user explicitly wants no cleanup:
bashpython3 ./skills/audio-transcription-workflow/scripts/transcribe_audio_to_markdown.py \ /path/to/audio-folder \ --output-dir /path/to/output \ --skip-cleanup
Expected environment variables:
WHISPER_URL — optional, defaults to http://localhost:9000/asrOPENAI_API_KEY — optional but needed for transcription fallbackOPENAI_TRANSCRIPTION_MODEL — optional, defaults to gpt-4o-mini-transcribeOPENROUTER_API_KEY — optional but needed for legacy-style cleanupThe bundled script tries to work for low-context agents too.
OPENROUTER_API_KEY and OPENAI_API_KEY are resolved in this order: current process environment → a shell startup file such as ~/.bashrc via the shared credential loader → an optional legacy dotenv file pointed to by AUDIO_TRANSCRIPTION_LEGACY_ENV if you deliberately enable that fallback.WHISPER_URL stays simple: current process environment first, otherwise the script uses its built-in localhost default.That means cleanup should usually work even when an agent has not been explicitly told where the OpenRouter key lives.
./transcriptions near the current task context..md files if you need to summarise results back to the user.transcription_manifest.json was savedOPENAI_API_KEY is missing, that file fails.WHISPER_URL is intentionally not pulled from any legacy dotenv fallback, because those files may contain hostnames that are wrong for direct host-side agent use.-2, -3, and so on.After running the script, give a short operational summary such as:
/path/to/meeting-notes/ and turn them into markdown transcripts.".oga files, but without Telegram.".m4a files into markdown with cleanup."Other measured skills in the registry, with their headline benchmark lift.