agentleFS
xingfanxiaxingfanxia/AX-skills/transcribe/SKILL.md

transcribe

Skill4 starsChanged 54 days agoMITView on GitHub

This skill should be used when the user wants to "transcribe audio", "transcribe video", "speech to text", "convert audio to text", "transcription", or needs to extract text from audio/video files. Default engine is 妙记 (Volcano Lark Minutes ASR) for best speaker diarization; Gemini/OpenAI available as fallbacks. Supports files up to ~8.4 hours with speaker diarization.

  • Reads credentials
  • Installs packages

47 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use spreadsheet, think and 9 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • JetBrainsSkill

    spreadsheet

    Use when tasks involve creating, editing, analyzing, or formatting spreadsheets (`.xlsx`, `.csv`, `.tsv`) with formula-aware workflows, cached recalculation, and visual review.

    Also in 3 projects that use this

  • vltingSkill

    think

    Lightweight plan-to-execution pipeline. Explores codebase, runs council deliberation, presents plan for approval, then executes via /run.

    Also in 3 projects that use this

  • robzolkosSkill

    done

    Reset the working directory for the next task by ensuring no uncommitted changes exist, then switching to the main branch and pulling latest.

    Also in 3 projects that use this

  • JaimeGBASkill

    ingest

    Digest an external source (article, paper, transcript, URL, book chapter) and integrate its content into the knowledge base

    Also in 3 projects that use this

  • AnthropicSkill

    onboarding

    Generate an onboarding checklist and first-week plan for a new hire. Use when someone has a start date coming up, building the pre-start task list (accounts, equipment, buddy), scheduling Day 1 and Week 1, or setting 30/60/90-day goals for a new team member.

    Also in 3 projects that use this

  • MicrosoftSkill

    diagnose

    Use to systematically diagnose why scenarios fail — identifies root causes by analyzing agent traces, codebase, and behavioral patterns

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 40 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If the speaker count isn't obvious, ask the user.

    line 74
  2. Very specific:

    妙记 provider unavailable / missing creds: ensure tos requests are installed in the venv and VOLC_API_KEY + VOLC_TOS_* are in .env.

    line 138

“Common” is measured: kept by at least 6 in 10 of the 40 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

Audio Transcription Skill (妙记 / Gemini / OpenAI)

Overview

Transcribe audio and video files. Three providers, default 妙记 (Volcano Lark Minutes ASR, volc.lark.minutes):

ProviderWhenDiarization
lark (默认 妙记)Default — best speaker accuracy, single callServer-side, most accurate
geminiFallback — no Volcano creds, or non-diarized notesChunk-stitched + Senko/pyannote
openaiFallback — granular turn detectiongpt-4o-transcribe-diarize

Why 妙记 is the default: verified across 5 real recordings (2026-06-17), 妙记 returned the exact speaker count on every 2-person conversation (2/2/2/2) while Gemini-chunk-stitch, OpenAI, and the raw Doubao auc models all over-counted (3–5 speakers). 妙记 does server-side diarization in a single call (no chunking, no cross-chunk speaker reconcile) and handled a 3.45-hour file in one pass.

⚠️ Ask the user how many speakers (for lark)

Before transcribing with 妙记, ask the user how many speakers are in the audio if it isn't obvious. Pass it via --speakers N. Use --speakers 0 (auto-detect) only when the count is unknown — auto is good but a known count improves accuracy. Example prompt: "How many people are speaking in this recording? (I'll auto-detect if you're not sure.)"

Capabilities

  • Speaker diarization: SPEAKER_1, SPEAKER_2, … (妙记 server-side; best accuracy)
  • Audio length: single-call up to several hours (妙记 handled 3.45h); Gemini/OpenAI auto-chunk
  • Auto language detection + code-switching: Chinese + English mixed handled cleanly
  • Formats: MP3, WAV, M4A, MP4, OGG, FLAC, WebM, AAC (auto-converted to 16kHz mono mp3 before upload)

Setup (one-time)

cd <skill-dir>           # e.g. ~/.claude/plugins/transcribe
python3 -m venv venv
./venv/bin/pip install tos requests          # 妙记 (default): TOS hosting + API
./venv/bin/pip install google-genai openai   # optional, for --provider gemini/openai
brew install ffmpeg                           # required (audio conversion + chunking)

# Credentials in the skill's .env (gitignored):
#   妙记 (default):
echo 'VOLC_API_KEY=...'           >> .env     # 妙记 x-api-key
echo 'VOLC_TOS_ACCESS_KEY=...'    >> .env     # Volcano TOS (hosts audio for 妙记 to fetch)
echo 'VOLC_TOS_SECRET_KEY=...'    >> .env
echo 'VOLC_TOS_BUCKET=...'        >> .env
echo 'VOLC_TOS_REGION=...'        >> .env     # e.g. cn-shanghai
echo 'VOLC_TOS_ENDPOINT=...'      >> .env     # e.g. tos-cn-shanghai.volces.com
#   fallbacks (optional):
echo 'GEMINI_API_KEY=...'         >> .env
echo 'OPENAI_API_KEY=...'         >> .env

How 妙记 hosting works: the skill converts the audio to a small 16kHz-mono mp3, uploads it to Volcano TOS, hands 妙记 a presigned URL, then deletes the object after transcription. 妙记 fetches from TOS intra-China (fast); the only cross-border leg is the upload, minimized by compression + parallel multipart.

Quick Start

# Default 妙记 — ask the user for speaker count first
<skill-dir>/venv/bin/python <skill-dir>/transcribe_any.py meeting.m4a --speakers 2 --out_txt transcript.md

# 妙记 auto speaker detection (count unknown)
<skill-dir>/venv/bin/python <skill-dir>/transcribe_any.py interview.m4a --out_txt transcript.md

# Fallback providers
<skill-dir>/venv/bin/python <skill-dir>/transcribe_any.py audio.mp3 --provider gemini --diarize --out_txt transcript.md
<skill-dir>/venv/bin/python <skill-dir>/transcribe_any.py audio.mp3 --provider openai --out_txt transcript.md

Replace <skill-dir> with the absolute path where the skill is installed.

Workflow

1. Ask about speaker count (for default 妙记)

If the speaker count isn't obvious, ask the user. Pass --speakers N (or omit / 0 for auto).

2. Determine output file path

ALWAYS save the transcript to a file. Replace the audio extension with _transcript.md:

  • /path/to/meeting.m4a → /path/to/meeting_transcript.md

3. Run transcription

<skill-dir>/venv/bin/python <skill-dir>/transcribe_any.py "/path/audio.m4a" --speakers N --out_txt "/path/audio_transcript.md"

CLI Arguments

ArgumentDescriptionDefault
--providerlark (妙记), gemini, or openailark
--speakersExpected speaker count for lark (0 = auto)0
--modelGemini model (ignored for lark/openai)gemini-3.5-flash
--diarizeSpeaker ID for gemini (implied for lark/openai)False
--languageISO-639-1 code (zh, en, ja) for gemini/openaiAuto-detect
--out_txtSave the markdown transcript to a file (use a .md path)None
--out_jsonSave full response to JSONNone

The skill prints (and --out_txt saves) a markdown document: a header with metadata + the diarized transcript inside a fenced code block, so it renders cleanly anywhere markdown is shown.

Tunable Env Vars

Env VarDescriptionDefault
VOLC_API_KEY, VOLC_TOS_*妙记 + TOS credentials (required for lark)—
LARK_MP3_BITRATEmp3 bitrate for upload (lower = faster upload)32k
LARK_SOURCE_LANG妙记 source languagezh_cn
LARK_UPLOAD_TASKSParallel multipart upload connections8
CHUNK_*, CHUNK_PARALLELISMGemini/OpenAI chunking knobssee code
GEMINI_API_KEY / OPENAI_API_KEYFallback providers—

Output Example

The output is a markdown document:

# meeting

> provider: lark · model: volc.lark.minutes · speakers: 2

## Transcript

```
[00:00:20 - 00:00:45] SPEAKER_1: 欢迎收听本期节目。
[00:00:45 - 00:01:05] SPEAKER_2: Thanks for having me.
```

Fallback Providers (gemini / openai)

Both auto-split long audio at silence boundaries (ffmpeg silencedetect) and transcribe chunks in parallel, then reconcile speaker labels across chunks. This was the original engine before 妙记; use it when Volcano creds aren't available.

  • gemini (default fallback): Gemini 3 Flash loops/fabricates timestamps on single-call audio > ~15 min, so chunking is what makes it usable. Good punctuation + code-switching; diarization is chunk-stitched (less accurate than 妙记).
  • openai gpt-4o-transcribe-diarize: always diarized, granular turn detection; sometimes runs sentences together and mis-handles Chinese fillers.

Troubleshooting

  • 妙记 provider unavailable / missing creds: ensure tos requests are installed in the venv and VOLC_API_KEY + VOLC_TOS_* are in .env. Fall back with --provider gemini.
  • Slow upload: cross-border upload to a China TOS region can throttle; the skill compresses + uses parallel multipart. Lower LARK_MP3_BITRATE (e.g. 16k) to shrink the upload further.
  • Unicode filename error: cp "中文名.m4a" /tmp/audio.m4a then transcribe the copy.
  • ffmpeg not found: required for audio conversion. brew install ffmpeg.

Notes

  • 妙记 wall time: ~100–150s for a 30–60 min file (single call); the 3.45h test ran in one pass.
  • Gemini API cost: ~$0.20 for a 2-hour file. OpenAI: ~$0.90 for a 2-hour file.

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.