asr-transcribe-to-text
An agent skill by daymade, from daymade/claude-code-skills. Tags: audio, local-workflow, ml, transcription, validation.
What it does
Transcribe audio/video to speaker-labeled text — who-said-what by default, plain-text opt-out; MLX-local on Apple Silicon or remote; local files, media URLs. Use for transcribing recordings/podcasts/lectures/meetings, ASR, speech-to-text, 转录, 语音转文字, 录音转文字, speaker diarization/说话人分离/识别/谁在说话, timestamps 字幕/时间戳/音画对齐, CAM++ voiceprint ID. This skill ALSO owns audio PREPROCESSING for ASR as a first-class trigger, even without transcription: convert any audio/video into an ASR-ready file (转换成适合 ASR 的格式, 转格式, convert/prepare audio for ASR, 音频预处理), downsample to 16kHz mono 16-bit (降采样, 重采样, 单声道, 归一化), merge multi-segment recorder dumps (多段合并/拼接, DJI TX01/TX02), transcode to small M4A + pitch-preserved speedup to cut metered-ASR billed minutes (转 M4A, 压缩上传, 加速, 1.3x, 飞书妙记/Feishu Minutes). Trigger even when it looks like a trivial one-line ffmpeg — the skill owns sample-rate/bit-depth/channel, merge-order, speed-vs-WER, format choices + a blessed prepare_asr_input.py.
Install
With the skills CLI, which installs into Claude Code, Codex, Cursor and other agents:
npx skills add daymade/claude-code-skills --skill asr-transcribe-to-text
Or copy the skill folder into Claude Code's skills directory by hand (~/.claude/skills for every project, or .claude/skills inside one):
git clone --depth 1 https://github.com/daymade/claude-code-skills
cp -r claude-code-skills/daymade-audio/asr-transcribe-to-text ~/.claude/skills/asr-transcribe-to-text
Safety box score
Grade D, elevated risk: 47 of 100 risk points, rated 2026-10-20. The grade rates what the skill and its scripts can reach on the machine of whoever installs it, across eight categories from shell execution to secrets access. How the score works.
This skill transcribes audio/video, preprocesses media with ffmpeg, and can send recordings to remote ASR services or Feishu Minutes. The main risks are privacy/data egress, credential use for gated diarization, and hidden behavior in several unreadable core scripts.
| Category | Level | Why |
|---|---|---|
| Code & shell execution | 2 (moderate) | It runs many shell commands and external tools (`ffmpeg`, `ffprobe`, `curl`, `git`, `cmake`, `uv`) via `subprocess.run`, and the build helper compiles and validates binaries from a source checkout. |
| Network access | 2 (moderate) | It can fetch media and transcripts from remote hosts and upload audio to cloud services, including `curl` ASR calls, Feishu `lark-cli drive +upload` / `minutes +upload`, and public URLs in `resolve_media_input.py`. |
| Filesystem reach | 1 (low) | Writes are mostly bounded to output files and `${CLAUDE_PLUGIN_DATA}/config.json`, with temp WAVs and CSV/JSON artifacts created and deleted in user-writable locations. |
| Secrets & credentials | 2 (moderate) | Speaker diarization requires a HuggingFace token (`huggingface-cli login` or `HF_TOKEN`), so the skill touches account credentials and gated-model access. |
| Privilege & persistence | 0 (none) | There is no sudo, service installation, shell startup editing, or other OS-level privilege change; the build helper explicitly keeps output outside the skill tree. |
| Instruction hijack surface | 1 (low) | It defers some behavior to live external guidance (`lark-cli-router`, version-matched `lark-minutes` docs) and uses AskUserQuestion prompts, but I found no hidden or self-modifying prompt content. |
| Irreversible actions | 2 (moderate) | The Feishu branch can upload media, create minute URLs, and continue into project-delivery workflows (`minute_token`, `minute_url`, `meeting-ingest`) with only the documented user choice gates. |
| Transparency | 2 (moderate) | Several central scripts could not be read in this review (`scripts/align_speakers.py`, `scripts/speaker_transcribe.py`, `scripts/transcribe_local_mlx.py`, `scripts/transcribe_long_whispercpp.py`, `scripts/fuse_whispercpp_diarization.py`, `scripts/resolve_media_input.py`, `scripts/diarize_speakers.py`, `scripts/generate_audit_html.py`). |
Before installing
- Read the unreadable core scripts first if you can: `scripts/speaker_transcribe.py`, `scripts/transcribe_local_mlx.py`, `scripts/transcribe_long_whispercpp.py`, and `scripts/fuse_whispercpp_diarization.py`.
- Assume audio may leave the machine on the Feishu/remote-ASR paths; test those only with non-sensitive media first.
- Verify how you want to handle HuggingFace credentials before enabling diarization (`HF_TOKEN` / `huggingface-cli login`).
- If you plan to use the GPU build path, confirm it stays in user cache and does not touch system binaries or services.
Rated 2026-10-20 by an automated review of 24 files from the skill's repository.
Source
- Repository
- daymade/claude-code-skills (all skills from this repository)
- Path
- daymade-audio/asr-transcribe-to-text/SKILL.md
- Branch
- main
- Updated
- 2026-09-20
Related skills
- stepfun-asr — Transcribe audio with StepFun's stepaudio-3-asr-max — an SSE endpoint (NOT /v1/audio/transcriptions).
- add-dictation — Use when the user runs /add-dictation or wants speech turned into text with Grok speech-to-text: a mic button that dictates into the composer, live captions.
- debug-voice — Use when the user runs /debug-voice, says voice mode has flaws, asks to see or capture what happened in a Grok realtime voice session.
- fixing-claude-export-conversations — Fixes broken line wrapping in Claude Code exported conversation files (.txt), reconstructing tables, paragraphs, paths.
- stepfun-tts — Generate Chinese / Japanese speech with StepFun's Contextual TTS — default `stepaudio-2.5-tts` (blind-judged better on neutral/emotive preset voices).
- transcript-fixer — Corrects speech-to-text transcription errors with dictionary rules and Claude's built-in AI (no external API key required).