agentleFS
jwkchungjwkchung/claude-skills/skills/transcribe-audio/SKILL.md

transcribe-audio

Skill0 starsChanged 48 days agoMITView on GitHub

Transcribe an audio file (m4a, mp3, wav, etc.) to text locally using whisper.cpp (Metal-accelerated on Apple Silicon). Use when the user asks to transcribe audio, get a text version of a recording/voice memo, or extract spoken content from an audio/video file. Free, runs entirely on-device — no upload, no API key. Also covers the automatic "drop a file in the folder" watch pipeline — use when the user asks about the transcribe inbox, watch folder, or auto-transcribe setup.

  • Installs packages

7 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions7 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 7

    1. barefootford/buttercut★ 598same name
    2. montezuma-p/harken★ 12same name
    3. zedxter/utility-belt★ 4same name
    4. caiopizzol/skills★ 3same name
    5. valtterimelkko/agent-workflow-skills★ 2same name
    6. andfrancot-alt/claude-skills★ 0same name
    7. umakhanpro/vocalingo-mcp★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

The file

We split this skill into the rules it gives an agent

5 rules. 0 are common, 4 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 5 edited versions we read keep these.

  • 4

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before enabling the watcher, set your own values:

    line 44
  2. Very specific:

    If ffmpeg is missing: brew install ffmpeg

    line 69
  3. Distinctive:

    If model weights are missing, download to a fixed cache dir:

    line 71
  4. Distinctive:

    After that, transcription itself is fast — often close to or faster than realtime on an M-series Mac thanks to Metal.

    line 109
  5. Distinctive:

    Never upload the audio to a third-party API unless you explicitly want that route instead of the local one.

    line 113

“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Transcribe audio (local, free, Metal-accelerated)

Automatic pipeline (watch folder)

There is also a fully automated path, for when you just want to drop a file somewhere and get an email back — no need to invoke this skill manually for those files.

  • Root folder: ~/Documents/Transcribe Inbox/ (override with TRANSCRIBE_INBOX_DIR)
    • inbox/ — drop audio/video files here
    • processing/ — transient, in-flight (don't touch)
    • processed/ — done: audio file + its .txt transcript, side by side
    • failed/ — errored: audio file + a .err log explaining why
  • Supported extensions: .m4a .mp3 .wav .mp4 .mov .aac .flac .ogg (case-insensitive)
  • A LaunchAgent (label com.example.transcribe-watch — rename to your own reverse-DNS identifier, e.g. com.<yourname>.transcribe-watch; ~/Library/LaunchAgents/com.example.transcribe-watch.plist) watches inbox/ and runs ~/.claude/skills/transcribe-audio/scripts/watch_and_transcribe.sh on any change. That script: waits for the file's size to stabilize (skips files still mid-copy), moves it into processing/, runs ffmpeg + whisper-cli directly (same steps as the manual flow below), then moves the result into processed/ (or failed/ on error) and shells out to claude -p once to send an email alert via the Gmail MCP connector to whatever address is set in NOTIFY_EMAIL (see Setup below) — notification-only (file paths, not the transcript text) on success; failure emails include the error log.
  • Logs: ~/.claude/skills/transcribe-audio/logs/watch.{out,err}.log
  • Lock: ~/.claude/skills/transcribe-audio/state/watch.lock (a directory; serializes overlapping launchd triggers — safe to rmdir if a run ever gets stuck and the log confirms nothing is actually running)
  • To pause/resume the watcher:
    launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.example.transcribe-watch.plist   # pause
    launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.transcribe-watch.plist  # resume

Setup

Before enabling the watcher, set your own values:

  • NOTIFY_EMAIL — the address success/failure alerts get sent to. Set this as an env var, or edit it directly in watch_and_transcribe.sh.
  • Rename the LaunchAgent label and plist filename from com.example.* to your own reverse-DNS identifier, and update the Label key inside the plist to match.
  • Requires the Gmail MCP connector (or swap in whatever mail-sending tool you use) to be configured for the account you want alerts sent from/to.

Manual, one-off transcription

Runs Whisper locally via whisper.cpp (Homebrew formula whisper-cpp, binary whisper-cli), which uses Metal GPU acceleration on Apple Silicon. Much faster than the plain openai-whisper Python package on Mac hardware. No network upload of the audio — everything happens on your own machine.

Steps

  1. Check dependencies (do this every time, cheap):
    command -v ffmpeg >/dev/null || echo "MISSING: ffmpeg"
    command -v whisper-cli >/dev/null || echo "MISSING: whisper-cli"
    ls ~/whisper-models/ggml-medium.bin >/dev/null 2>&1 || echo "MISSING: model weights"
    • If ffmpeg is missing: brew install ffmpeg
    • If whisper-cli is missing: brew install whisper-cpp
    • If model weights are missing, download to a fixed cache dir:
      mkdir -p ~/whisper-models
      curl -L -o ~/whisper-models/ggml-medium.bin \
        https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-medium.bin
      (Use ggml-small.bin for a faster/lower-accuracy model, or ggml-large-v3.bin for max accuracy — swap the URL filename accordingly.)
  2. Confirm the input file path with the user if not already given. Verify it exists before running anything.
  3. Convert to 16kHz mono WAV. whisper.cpp requires this input format — most source files (m4a, mp3, etc.) need conversion first:
    ffmpeg -y -i "/path/to/input.m4a" -ar 16000 -ac 1 -c:a pcm_s16le "/path/to/input.wav"
  4. Run the transcription. Output goes next to the source file:
    whisper-cli -m ~/whisper-models/ggml-medium.bin -f "/path/to/input.wav" \
      -otxt -of "/path/to/input"
    • -otxt writes plain text (.txt); use -osrt or -ovtt for subtitle formats if the user wants timestamps.
    • For long or sensitive files, run this in the background and check back — it can still take several minutes even with Metal acceleration.
    • Long-running: run in the background (background shell / run_in_background) rather than blocking, and report back when it completes.
  5. Report the output file path(s) back to the user rather than dumping the full transcript inline, unless it's short or they ask to see it directly.

Notes

  • Model weights are cached in ~/whisper-models/ (fixed path, not ~/.cache/whisper — that's the old openai-whisper cache location).
  • First run needs brew install whisper-cpp (compiles/installs several binaries, can take a few minutes) plus the one-time model download (~1.5GB for medium). After that, transcription itself is fast — often close to or faster than realtime on an M-series Mac thanks to Metal.
  • The intermediate WAV file is not cleaned up automatically; leave it unless you want to delete it (may be large for long recordings).
  • Never upload the audio to a third-party API unless you explicitly want that route instead of the local one.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.