
StepFun ASR
FreeTranscribe long audio files efficiently with StepFun.
Free · Opens the source repo
What StepFun ASR does
StepFun ASR provides a streamlined solution for transcribing audio files using the stepaudio-2.5-asr model. This skill is particularly useful for developers and designers working with long-form audio recordings, as it allows for transcriptions of audio lengths ranging from 5 to 30 minutes in a single request, eliminating the need for client-side chunking. The skill is designed to work seamlessly with the correct endpoint, ensuring that users do not encounter misleading error messages that can waste valuable time. By utilizing a single-call approach with a 32K context window, StepFun ASR significantly enhances transcription efficiency compared to older models.
The skill is especially relevant for those transcribing audio in Chinese or English, making it a versatile tool for multilingual projects. Users can easily set up the skill by configuring their API key and executing a simple command to obtain the transcription output. The included script handles the necessary encoding and API interactions, allowing users to focus on their audio content rather than the technical details of the transcription process. Additionally, the skill provides options for machine-readable output, enabling further integration into workflows that require usage statistics or billing data.
However, it is essential for users to be aware of specific requirements, such as using a 'Normal' API key rather than a 'Plan' key, which cannot access audio endpoints. This skill also addresses common pitfalls, such as sending requests to the wrong endpoint, which can lead to frustrating error messages. By following the guidelines provided, users can effectively leverage StepFun ASR to enhance their audio transcription capabilities without unnecessary complications.
When to use it
Use this skill when you need to transcribe long audio recordings (5-30 minutes) in Chinese or English without chunking.
When not to use it
This skill is not suitable for transcribing audio shorter than 5 minutes or for audio longer than 30 minutes without pre-splitting the files.
What you can build with it
Transcribing a 20-minute podcast episode
Use StepFun ASR to transcribe a 20-minute podcast in one go, ensuring accurate text output without the hassle of chunking.
Migrating from an older ASR model
If you are transitioning from step-asr or step-asr-1.1, StepFun ASR provides a straightforward upgrade path with improved performance.
Handling multilingual audio recordings
Leverage StepFun ASR for transcribing audio in both Chinese and English, making it a versatile tool for diverse projects.
How to install StepFun ASR
View source1. Install with the skills CLI
npx skills add daymade/claude-code-skills/stepfun-asr --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by daymadeStepFun stepaudio-2.5-asr
Transcribe audio with StepFun's stepaudio-2.5-asr (released 2026-04, verified 2026-04-23). Long audio in one call, no chunking — but only if the request hits the right endpoint with the right body shape. The wrong endpoint returns an error that looks identical to "model doesn't exist", which is the #1 reason this skill exists.
Companion: for TTS with
stepaudio-2.5-tts(the sibling model), use thestepfun-ttsskill — they share an API key but live on different endpoints with different body shapes.
Why this skill exists — three traps that cost hours
-
Wrong endpoint, wrong error.
stepaudio-2.5-asrdoes not live on/v1/audio/transcriptions(that endpoint serves the olderstep-asrfamily). It lives on/v1/audio/asr/sse— SSE streaming, JSON body, base64 audio. Sending it to the wrong endpoint returns{"error":{"message":"model stepaudio-2.5-asr not supported"}}, which is identical in structure to a genuinely nonexistent model name. People waste hours filing whitelist tickets. -
Plan key vs Normal key, silent failure. StepFun's "Plan" subscription keys (cheap, text-only) cannot call audio endpoints, but the failure manifests as a 4xx with no auth-shaped error message. If your account has a Plan subscription, you need a separate "Normal" key from the same console.
-
SSE error events are real. Censorship can fire on the ASR side too (rarely). Don't assume only
transcript.text.deltaandtranscript.text.doneevents arrive — handletype: errorevents in the stream or you'll silently drop them.
Config and auth
API key resolves in this order (fail-fast, no defaults):
$STEPFUN_API_KEYenvironment variable${CLAUDE_PLUGIN_DATA}/config.jsonwith{"api_key": "..."}(cross-session persistence)
First-time setup:
mkdir -p "${CLAUDE_PLUGIN_DATA}" && cat > "${CLAUDE_PLUGIN_DATA}/config.json" <<EOF
{"api_key": "<paste Normal key here>"}
EOF
If the user has not set a key, ask them to paste it — do not guess or use a placeholder. Get keys at https://platform.stepfun.com/ → API Keys. Use a Normal key, not a Plan key.
Quick start — single file
python3 scripts/asr_transcribe.py /path/to/audio.mp3
Output: plain text transcription on stdout.
For machine-readable output with usage / timing:
python3 scripts/asr_transcribe.py /path/to/audio.mp3 --json
For non-Chinese audio:
python3 scripts/asr_transcribe.py /path/to/audio.mp3 --language en
The script handles base64 encoding, the nested {audio: {data, input: {transcription, format}}} body, SSE parsing, and the misleading-endpoint pitfall. Prefer it over hand-rolled HTTP calls unless integrating into a larger pipeline.
Decision table
| Scenario | Action |
|---|---|
| Short clip (< 5 min), Chinese or English, mp3/wav/ogg/opus | python3 scripts/asr_transcribe.py audio.mp3 |
| Long audio (5-30 min) | Same script — 32K context handles it in a single call, no chunking needed |
| Audio > 30 min | Split with ffmpeg before sending; the API rejects oversized payloads |
| Need usage/billing data | Add --json to capture usage.input_tokens / usage.total_tokens from transcript.text.done |
| Highly repetitive content (same phrase 5+ times, > 90s) | Cross-validate with step-asr-1.1 — see repetition hallucination in references/known_issues.md |
Hit model stepaudio-2.5-asr not supported | Wrong endpoint. Switch from /v1/audio/transcriptions to /v1/audio/asr/sse |
| Hit silent 4xx auth failure | Verify your key is "Normal" not "Plan" — Plan keys cannot call audio endpoints |
| Need to write raw HTTP (no Python) | Read references/api_reference.md for exact JSON body and SSE event shapes |
Supported audio formats
The script auto-detects from extension; pass --format to override:
| Extension | Format flag | Notes |
|---|---|---|
.mp3 | mp3 | Most common, default |
.wav | wav | Lossless |
.ogg | ogg | OGG container |
.opus | ogg | Opus codec in OGG container — pass through unchanged |
.pcm | pcm | Raw PCM — also requires format.rate, format.channel, format.bits (see API reference) |
For mp4/m4a/webm/etc., transcode to one of the above first via ffmpeg. Production pipelines often pre-transcode everything to OGG/Opus 16kHz mono to minimize base64 payload size.
Capacity and performance (verified 2026-04-23)
- 32K context window — single-call upper limit, no chunking needed for ≤ 30 min audio
- ~85-101× RTF on long audio (17.4 min audio → 10.4s wall clock)
- ~5.3× speedup vs step-asr-1.1 at the 100s+ length range
- Only ~2× speedup at the 5-15s range — the LLM spin-up cost dominates short clips. If your workload is many short clips, the migration ROI is modest
Common error patterns
| Error response | Actual cause | Fix |
|---|---|---|
"model stepaudio-2.5-asr not supported" on /v1/audio/transcriptions | Wrong endpoint | Switch to /v1/audio/asr/sse (script does this) |
| Silent 4xx with no auth message | Using a "Plan" key on audio endpoint | Get a "Normal" key from the StepFun console |
| ASR returns 3-4× expected character count | Repetition hallucination on highly-repetitive audio | Cross-validate with step-asr-1.1; see references/known_issues.md |
data: {"type":"error","message":"content blocked..."} mid-stream | Censorship fired on user-uploaded content | Handle SSE error event explicitly; don't assume only delta/done arrive |
More edge cases in references/known_issues.md.
Design invariants (do not break)
- Always pass through SSE — don't try to buffer the response with a non-streaming client. The model emits
transcript.text.deltafor long audio;transcript.text.donecarries the authoritative full text andusage. Reject the SSE format entirely and you'll get nothing. - Take final text from
transcript.text.done.text— concatenated deltas can drift on edge cases. Deltas are for progressive UI; thedoneevent is the source of truth. - Handle
errorevents in the stream — don't treat the SSE stream as if only success events arrive. A blocked-content event mid-stream returnstype: errorwith nodoneevent. - Fail-fast on missing API key — never default to a placeholder or empty string. The script does this; preserve the behavior in any wrapper.
When to read references
references/api_reference.md— exact JSON request body, all fields, all SSE event types, response examples. Read when writing raw HTTP calls instead of using the bundled script.references/known_issues.md— repetition hallucination details, the wrong-endpoint diagnostic trail, Plan-vs-Normal key gotcha, ASR-side censorship handling, pricing opacity. Read when debugging anomalous output or evaluating whether to migrate fromstep-asr-1.1.
Pricing (verified 2026-04-23, volatile)
stepaudio-2.5-asr is in invitation beta as of 2026-04-23 — no public per-minute rate. The step-asr-1.1 baseline is 2.2 元/小时. The invitation PDF mentions "成本直降 80%" implying ~0.4 元/小时, but this is not yet on the pricing page. Re-verify at https://platform.stepfun.com/docs/zh/guides/pricing/details before quoting to stakeholders.
Next Step
ASR transcripts almost always benefit from one of two downstream steps. After producing the transcript, suggest the natural next skill:
Transcription complete. The output is raw text from the model — common next steps:
Options:
A) transcript-fixer — clean up ASR errors (homophones, segmentation, filler words). Recommended if the recording is a real-world conversation, podcast, or interview rather than read-aloud text
B) meeting-minutes-taker — turn the transcript into structured minutes with decisions, action items, and speaker attribution. Recommended if the recording is a meeting
C) No thanks — the raw transcript is what I needed
Skip the suggestion when the user has already specified the downstream tool, or when the transcription was clearly a one-off lookup (e.g., "what does this 15-second clip say?").
Frequently asked questions about StepFun ASR
Similar skills
WinMD API Search
Easily find and explore Windows desktop APIs.
WebMCPify
Transform any web app into an agent-ready platform.
Phoenix Tracing
Instrument LLM applications with OpenInference tracing.
Foundry Hosted Agent CopilotKit
Guidance for developing agentic web apps on Azure.
Power Automate Foundation
Connect AI agents to Power Automate seamlessly.
Power Automate Flow Builder
Efficiently build and deploy Power Automate flows programmatically.
