@@ -87,20 +87,6 @@ if not isinstance(text, str) or not text.strip():
raise RuntimeError("Empty transcript; inspect audio, silence and VAD output")
print(text)
这里明确使用 CPU,按 VAD 片段逐个处理;batch_size_s 不是 CPU 并行参数,也不是速度推荐。空结果需要检查:可能是静音、VAD 未选中语音、输入问题或推理异常,不能一律当成成功或模型错误。示例故意停止并要求人工检查,不提供伪造的转写输出。
-
一次调用背后的资源路径
-
-
这条离线路径会读取完整音频波形到 CPU 内存,再使用 VAD 区域组织 ASR 输入;它不是只从磁盘读取当前片段的有界内存流式处理。分段可以改变某一批推理的工作量,但整段波形、解码缓冲、分段信息、输出和并发请求仍占用资源。
When adding speech recognition to a Hugging Face application, a common failure is treating one model family as one interchangeable checkpoint format. Fun-ASR-Nano is now on the Transformers main branch. Here is how to connect the new native path to an application, from model selection to decoding the generated result.
-
Check the package, not just the merge
-
PR #46180 merged on 2026-09-09. The stable 5.16.1 package checked that day did not contain native fun_asr_nano files. The source build's 5.17.0.dev0 label is not a promise of the next stable version or release date. Use the explicit source commit in the pinned setup guide; an unversioned upgrade alone is not evidence of compatibility.
-
This distinction changes troubleshooting: an unknown model type may mean that the installed package lacks the implementation, not that the checkpoint is corrupt. A successful model download does not prove that the selected runtime can load it.
+
If you are adding speech recognition to an existing Transformers application, choose the checkpoint for that interface first. A shared model name does not make toolkit, serving and native Python weights interchangeable.
+
For example, a checkpoint may download successfully while the application reports an unknown model type. Check both the installed implementation and the selected artifact before assuming the weights are damaged. The native path here uses the official -hf checkpoint.
+
This is a text-generation interface, not a ready-made service. It does not supply word timestamps, speaker separation or streaming simply because loading succeeds.
+
+The official Chinese sample: approximately 5.62 seconds, mono, originally 48 kHz. Explicitly resample it to 16 kHz before the guide's input step. A waveform is not an accuracy or performance result.
One family, four different paths
-
Your application interface
Artifact
Important distinction
-
FunASR AutoModel
Fun-ASR-Nano-2512
Original toolkit path; split-engine has its own guide.
-
Transformers processor / generate
Fun-ASR-Nano-2512-hf
The native path described here, not a vLLM conversion.
-
Native vLLM HTTP service
Fun-ASR-Nano-2512-vllm
Separate runtime, checkpoint format and service options.
-
C++ / GGML runtime
Matching converted GGUF files
Not a renamed Transformers directory.
-
+
+
FunASR AutoModel: Fun-ASR-Nano-2512. Original toolkit path; split-engine has its own guide.
+
Transformers processor / generate: Fun-ASR-Nano-2512-hf. The native path described here, not a vLLM conversion.
+
Native vLLM HTTP service: Fun-ASR-Nano-2512-vllm. Separate runtime, checkpoint format and service options.
+
C++ / GGML runtime: Matching converted GGUF files. Not a renamed Transformers directory.
+
The official model repositories are under FunAudioLLM. Native Transformers loads the official -hf checkpoint, while the model and processor code come from the pinned Transformers installation. It does not need to execute checkpoint-provided remote Python code. That removes one integration dependency; it does not supply authentication, queues or service monitoring.
For concurrent clients, inspect the native vLLM deployment. For offline C++, inspect llama.cpp deployment. A composable Python interface is not a replacement for every serving stack.
-
What happens between audio and text?
-
Audio samples. Sample rate and channel layout are part of the data's meaning. Labeling a 48 kHz array as 16 kHz changes the time scale seen by the model. The guide requires an explicitly prepared mono 16 kHz WAV.
-
Audio features. The native extractor computes Kaldi fbank through torchaudio, then applies low-frame-rate stacking and subsampling. Matching torchaudio is required here, regardless of the toolkit's optional-dependency policy.
-
The transcription request.apply_transcription_request prepares the checkpoint's chat template from audio, language, context and keywords, aligning audio placeholder tokens with features.
-
Generation and decoding.AutoModelForSpeechSeq2Seq returns tokens. Remove the input prompt width before decoding to avoid mixing template framing into recognized speech.
-The official Chinese sample: approximately 5.62 seconds, mono, originally 48 kHz. Explicitly resample it to 16 kHz before the guide's input step. A waveform is not an accuracy or performance result.
-
A synthetic-silence preprocessing check separates dependency and template failures from weight loading. It does not run the generation model, so it cannot establish successful speech recognition.
-
Where does application context belong?
-
Pass a vocabulary through native keywords and relevant background through prompt. These are not the toolkit's hotword argument or HTTP fields. For separate recording contexts, language, prompt and nested keyword lists must match the number of audio inputs. Map results back to the same input manifest in order.
-
Customer-service recordings may benefit from candidate product or person names. But “the template includes this keyword” and “the recognizer recovered it in noise” are different tests. Do not present a spelling correction or summary rewrite as raw ASR output.
-
The pinned checkpoint defaults to left padding; explicit padding still makes a batch example easier to inspect. Remove the full input tensor width from generated sequences, not each row's valid attention-mask length. Reject empty recordings and empty batches at your application boundary.
+
+
What did the short-recording check establish?
With pinned source, official -hf revision and CPU float32, we ran a Chinese recording, an English recording, a mixed Chinese/English batch and a Chinese keyword request. All four requests returned text and EOS before the limit, with the batch in input order. These are functional checks on two public short recordings, not an accuracy ranking.
The same Chinese audio
Raw output
@@ -49,9 +42,25 @@
Resources. A CPU example is not a CUDA, concurrent-serving or vLLM performance test. Measure download, model loading and generation separately. One short file is not capacity planning.
Quality and privacy. Review important numbers, negation and the recording's end in authorized audio. Preserve fixed versions and raw output. Never attach customer recordings, tokens or identity data to a public report.
For segment timestamps and anonymous speakers, compare the third-party OpenMOSS MOSS unified transcription and diarization path. Anonymous labels are not known-person identities. Choose the output the application actually needs.
PR #46180 merged on 2026-09-09. The stable 5.16.1 package checked that day did not contain native fun_asr_nano files. The source build's 5.17.0.dev0 label is not a promise of the next stable version or release date. Use the explicit source commit in the pinned setup guide; an unversioned upgrade alone is not evidence of compatibility.
+
This distinction changes troubleshooting: an unknown model type may mean that the installed package lacks the implementation, not that the checkpoint is corrupt. A successful model download does not prove that the selected runtime can load it.
+
What happens between audio and text?
+
Audio samples. Sample rate and channel layout are part of the data's meaning. Labeling a 48 kHz array as 16 kHz changes the time scale seen by the model. The guide requires an explicitly prepared mono 16 kHz WAV.
+
Audio features. The native extractor computes Kaldi fbank through torchaudio, then applies low-frame-rate stacking and subsampling. Matching torchaudio is required here, regardless of the toolkit's optional-dependency policy.
+
The transcription request.apply_transcription_request prepares the checkpoint's chat template from audio, language, context and keywords, aligning audio placeholder tokens with features.
+
Generation and decoding.AutoModelForSpeechSeq2Seq returns tokens. Remove the input prompt width before decoding to avoid mixing template framing into recognized speech.
+
+
A synthetic-silence preprocessing check separates dependency and template failures from weight loading. It does not run the generation model, so it cannot establish successful speech recognition.
+
Where does application context belong?
+
Pass a vocabulary through native keywords and relevant background through prompt. These are not the toolkit's hotword argument or HTTP fields. For separate recording contexts, language, prompt and nested keyword lists must match the number of audio inputs. Map results back to the same input manifest in order.
+
Customer-service recordings may benefit from candidate product or person names. But “the template includes this keyword” and “the recognizer recovered it in noise” are different tests. Do not present a spelling correction or summary rewrite as raw ASR output.
+
The pinned checkpoint defaults to left padding; explicit padding still makes a batch example easier to inspect. Remove the full input tensor width from generated sequences, not each row's valid attention-mask length. Reject empty recordings and empty batches at your application boundary.
Open the pinned native Transformers guide and complete its short-recording check in a separate environment. Keep the raw result and verify that the output matches your application before expanding the workload.
diff --git a/web-pages/product-site/legacy/en/blog/funasr-transcribe-long-audio.html b/web-pages/product-site/legacy/en/blog/funasr-transcribe-long-audio.html
index 2826b1153..2ea26c3b1 100644
--- a/web-pages/product-site/legacy/en/blog/funasr-transcribe-long-audio.html
+++ b/web-pages/product-site/legacy/en/blog/funasr-transcribe-long-audio.html
@@ -1,13 +1,11 @@
-Long-File Transcription: VAD Segmentation, Batching and Acceptance | FunASR
-
+Why can a long transcript miss the ending? | FunASR
+
-
+
+footer a{color:#94a3b8}article p a,article li a{color:#006a57;text-decoration:underline;text-underline-offset:.15em}
+
-
Long-File Transcription: VAD Segmentation, Batching and Acceptance
+
Why can a long transcript miss the ending?
FunASR Blog · 2026-06-17 · Updated 2026-09-09
-
Podcasts, courses and meeting recordings require more than passing a file to a model: resource budgets, pauses, overlapping speech and missing tail speech all matter. This guide uses the offline SenseVoice + FSMN-VAD path in FunASR 1.4.15 to explain what happens inside a file-level call and what to check before rollout.
-
+
If your team has a transcript but cannot find the final sentence, do not begin by increasing a batch parameter. Trace the recording, the selected speech regions and the returned result first. A nonempty response does not prove complete coverage.
+
Consider an interview whose last remark is audible in the original file but absent from the transcript. That observation alone does not identify a model defect: establish whether the loaded audio includes the end, whether segmentation retains it and whether the client saves the full response.
+
The example below is one offline SenseVoice configuration with an external speech detector, not a fix for every missing tail. Silence, segmentation and inference or client failures need different evidence.
+
+
Three places to look before changing parameters
+
The input: listen to the end of the same decoded file, not another copy with a similar name.
The boundary: inspect cuts near the missing sentence. Speech detection chooses regions; it does not verify the words.
The result: distinguish an empty record, incomplete response and saved text. Retain errors rather than filling a missing sentence by guesswork.
Start with one explicit offline configuration
Use an already prepared, separate FunASR 1.4.15 environment with PyTorch, working audio-decoding dependencies and access to model weights. Follow the installation and environment guide for platform preparation, then check the Python SDK guide. The version check below inspects installed package metadata; it is not proof of a complete installation or acoustic inference.
@@ -87,20 +87,6 @@ if not isinstance(text, str) or not text.strip():
raise RuntimeError("Empty transcript; inspect audio, silence and VAD output")
print(text)
This explicit CPU path handles VAD regions individually; batch_size_s is not a CPU parallelism control or a speed recommendation. Empty output needs inspection: silence, VAD selection, input problems or inference errors are possible causes. It is not automatically success or a model defect. The example deliberately stops for inspection and supplies no fabricated transcript output.
-
The resource path inside a file call
-
-
This offline path loads the complete audio waveform into CPU memory, then organizes ASR inputs using VAD regions. It is not a bounded-memory stream that reads only the current segment from disk. Segmentation can change the work in one inference batch, but the full waveform, decoding buffers, segment metadata, outputs and concurrent requests still consume resources.
-
For a 16 kHz, mono, float32 waveform alone, one hour is about 230 MB. This is a data-size estimate, not measured peak process RAM or GPU memory, and excludes decoder copies and model state. It cannot establish support for every file or equal GPU memory for one-hour and one-minute inputs. Validate acceptable durations on the chosen hardware, model, audio format and concurrency.
An FSMN-VAD endpoint threshold in milliseconds (ms), used in frame-level speech segmentation decisions.
It is not a file-duration limit or a guarantee of exactly equal segments or cuts at word and sentence boundaries.
-
batch_size_s=300
A VAD-wrapper batch budget in seconds (s), converted to milliseconds internally. Grouping considers the longest segment duration multiplied by the number of segments.
It is not simply the sum of segment durations or a hard memory cap; a longer segment may still be processed alone.
-
-
CPU exception: the current wrapper disables that grouping budget for device="cpu" and handles segments individually. Changing batch_size_s in this example is therefore not evidence of CPU batch-throughput optimization. A prepared and validated GPU setup needs new measurements, not inherited memory or speed conclusions. See budget units and the CPU branch and grouping rule.
-
Acceptance before admitting long recordings
@@ -111,6 +97,26 @@ print(text)
See the meeting-transcript acceptance checklist and reproducible performance guide. The former's MOSS sentence_info audit script has a specific input contract, not an adapter for arbitrary SenseVoice results. Structural checks do not prove text accuracy or complete speech coverage.
+
Appendix: windows, resources and parameter units
+
+
The resource path inside a file call
+
+
This offline path loads the complete audio waveform into CPU memory, then organizes ASR inputs using VAD regions. It is not a bounded-memory stream that reads only the current segment from disk. Segmentation can change the work in one inference batch, but the full waveform, decoding buffers, segment metadata, outputs and concurrent requests still consume resources.
+
For a 16 kHz, mono, float32 waveform alone, one hour is about 230 MB. This is a data-size estimate, not measured peak process RAM or GPU memory, and excludes decoder copies and model state. It cannot establish support for every file or equal GPU memory for one-hour and one-minute inputs. Validate acceptable durations on the chosen hardware, model, audio format and concurrency.
max_single_segment_time=30000: An FSMN-VAD endpoint threshold in milliseconds (ms), used in frame-level speech segmentation decisions. It is not a file-duration limit or a guarantee of exactly equal segments or cuts at word and sentence boundaries.
+
batch_size_s=300: A VAD-wrapper batch budget in seconds (s), converted to milliseconds internally. Grouping considers the longest segment duration multiplied by the number of segments. It is not simply the sum of segment durations or a hard memory cap; a longer segment may still be processed alone.
+
+
CPU exception: the current wrapper disables that grouping budget for device="cpu" and handles segments individually. Changing batch_size_s in this example is therefore not evidence of CPU batch-throughput optimization. A prepared and validated GPU setup needs new measurements, not inherited memory or speed conclusions. See budget units and the CPU branch and grouping rule.
+
+
Choose models and services separately
This is an offline SenseVoice example with explicitly configured external FSMN-VAD. Check Paraformer configuration and outputs separately. SenseVoice rich-text tags are not verified emotion accuracy.
@@ -118,32 +124,8 @@ print(text)
For realtime microphone transcription, select an explicitly supported streaming model and service using the deployment matrix. Smaller offline batches do not create a streaming protocol. See model selection for capability differences.
This article explains pinned source behavior, not new long-recording performance or accuracy measurements. The previous page's timing and full-coverage promotion lacked complete reproduction conditions and has been removed. Repository history preserves that text; it is not a current deployment promise.
Next, use the meeting-transcript checklist to choose what to listen for at the end of a representative recording. Its downloadable MOSS checker has a different input contract from this SenseVoice recipe.
FunClip v2.2.0: Long-Form Speaker-Aware Video Clipping with MOSS
-
August 31, 2026 · FunClip Release
-
-
FunClip v2.2.0 adds an opt-in MOSS path: send long audio to a vLLM service, normalize text, anonymous speaker labels, and time ranges through FunASR, then generate SRT or clip by spkS01, spkS02, and later speaker labels.
-
MOSS-Transcribe-Diarize is a third-party model maintained by OpenMOSS, not a FunASR or FunClip-owned checkpoint. The integration pins OpenMOSS-Team/MOSS-Transcribe-Diarize revision e8681d68e7042738ffca8ac8212bc8fcb1131ab8 and keeps ownership and support boundaries explicit.
-
spkS01 and spkS02 distinguish anonymous speakers within the current recording. The model does not identify a known person, verify an enrolled voiceprint, or promise that labels match across separate recordings.
-
-
Data path
-
Stage
Responsibility
-
vLLM
Loads the pinned MOSS revision and serves timestamped speaker markup through /v1/audio/transcriptions.
-
FunASR 1.4.9+
Parses the response into common text, timestamp, and sentence_info fields.
-
FunClip 2.2.0
Renders speaker-labeled SRT and sends selected speaker ranges into the existing audio/video clipping workflow.
-
-
-
1. Start vLLM at the pinned revision
+
Turn a conversation into editable subtitles
+
August 31, 2026 · Applications · Updated September 9, 2026
+
If you need one guest's remarks from an interview, subtitles that lead back to the sound are more useful than a page of fluent text. FunClip can select ranges by recording-local speaker labels; you still need to listen before accepting the cut.
+
An existing FunClip v2.2.0 two-speaker example completed that sequence: obtain S01/S02 labels, produce subtitles, then cut the S02 ranges. This historical functional case anchors the article; it does not prove that every interview will be edited correctly.
+
A recording-local label does not identify a known person. spkS01 and spkS02 belong to this recording, with no promise of the same person behind a label in another file. Segment subtitles are not precise word alignment.
+ An existing FunClip v2.1.0 workspace shows video, subtitles and selection. It is not a screenshot of the MOSS example described above.
+
Find the remark before choosing the cut
+
MOSS-Transcribe-Diarize is a third-party model maintained by OpenMOSS. It supplies transcription and anonymous speaker time ranges; FunASR normalizes the result, and FunClip connects the ranges to subtitles and media editing.
+
Keep the recording context. This path uses no external VAD or speaker model. Splitting it into independent requests first can lose the context needed for consistent recording-local labels.
+
Check the target remarks in the subtitles. Labels locate candidate passages. Listen to names, numbers, interruptions and transitions rather than treating a label count as acceptance.
+
Export one cut before scaling up. Replay its start, end and subtitles. A successful editing command is not enough.
+
Which edits fit this path?
+
Whole-segment or speaker-based cuts: MOSS provides segment-level timestamps, and FunClip also supports valid speaker turns shorter than a second.
+
Precise arbitrary character-level text edits: keep the Paraformer path and check its language and timing support. Dividing a sentence evenly does not create word alignment.
+
A final segment without its end timestamp: the documented FunClip release reports truncation and suggests increasing --moss-max-tokens, instead of silently discarding that segment. Check the tail again; a larger limit does not guarantee complete recall.
+
For a new deployment, use the maintained MOSS guide to check runtime, memory and response format. The old commands below explain this release, not current environment preparation. Do not expose the backend directly to the public network.
+
Appendix: the historical v2.2.0 release
+
The original commands, archive hashes and verification scope follow. They are not a current installation recipe. In particular, the unpinned pip install -U vllm is not a compatibility guarantee today; do not copy it as an upgrade instruction. Recheck dependencies, served model names and formats in the maintained guide. Relative FunClip commands assume the corresponding repository root.
+
The historical integration used OpenMOSS-Team/MOSS-Transcribe-Diarize revision e8681d68e7042738ffca8ac8212bc8fcb1131ab8. Its FunASR 1.4.9+ integration normalized text, timestamp and sentence_info; FunClip 2.2.0 rendered SRT and performed the cuts. This is not a compatibility promise for every future version.
For an authenticated remote service, put the bearer credential in the MOSS_API_KEY environment variable. FunClip does not require putting the token in the command line or repository.
-
-
Capabilities and boundaries
-
-
Long-form ASR, anonymous speaker labeling, SRT, and speaker-based clipping are supported, including valid speaker turns shorter than one second.
-
MOSS provides segment-level timestamps. Use it for whole-segment or speaker clipping; keep Paraformer for precise arbitrary character-level text clipping.
-
Consistent speaker assignment within one recording depends on continuous context, so the MOSS path attaches no external VAD or speaker model that would pre-chunk the recording.
-
If the final segment is missing its ending timestamp after token exhaustion, FunClip raises an explicit truncation error and asks for a higher --moss-max-tokens value instead of silently dropping the tail.
Release content resolves to commit c205bf32a8b11226ff5e8acb9a3c7a1f00cd3b06. The repository suite completed with 84 passed and 1 skipped. A live H100 + vLLM two-speaker run returned S01/S02, valid SRT, and the expected S02 clip. This verifies the release path, not every language, audio condition, or production concurrency level.
-
Run one real two-speaker recording through the production guide, then bring the same service into FunClip.
Archives and SHA256SUMS are in the FunClip v2.2.0 release. Commit c205bf32a8b11226ff5e8acb9a3c7a1f00cd3b06 had 84 passed and 1 skipped repository tests; the H100 + vLLM two-speaker case returned S01/S02, valid SRT and an S02 cut. These are historical results, not reruns for this edit or evidence for every language, recording condition or concurrency level.
+
+
Next, use one short interview you are authorized to process. Follow the MOSS deployment guide through the same path, then replay the first exported cut.
diff --git a/web-pages/product-site/legacy/en/blog/meeting-transcript-acceptance.html b/web-pages/product-site/legacy/en/blog/meeting-transcript-acceptance.html
index 6d202db53..a54ff3997 100644
--- a/web-pages/product-site/legacy/en/blog/meeting-transcript-acceptance.html
+++ b/web-pages/product-site/legacy/en/blog/meeting-transcript-acceptance.html
@@ -1,18 +1,21 @@
-HTTP 200 is not a usable transcript: a meeting-audio acceptance checklist | FunASR
-
-
+When is a meeting transcript ready to use? | FunASR
+
+
-
-
+
+
-
HTTP 200 is not a usable transcript: a meeting-audio acceptance checklist
A transcription request returned text. Is it ready for meeting notes, subtitles or speaker-based editing? Treat transport, words, speakers and timing as separate acceptance questions. This article uses a FunASR MOSS result and a small standard-library Python checker to show what can be automated, and what still needs listening.
+
Before your team shares meeting notes or subtitles, check whether readers can trust the names, decisions and links back to the sound. A successful request is only the start; structure checks and listening answer different questions.
+
In the synthetic example below, a 12-second recording has segments ending at second 8. The four-second tail is a reason to inspect the audio, not proof of four seconds of missing speech: it may contain silence.
+
A checker cannot hear the recording. Neither two speaker labels nor a timestamp at the end establishes a correct transcript, and recording-local labels do not identify known people.
An existing FunClip workspace illustrates the downstream application. This is not a screenshot of the synthetic example below.
Four questions, four kinds of evidence
Layer
Question
Not a substitute
@@ -53,18 +56,21 @@
Freeze input and configuration. Retain the audio hash, duration, sample rate/channels, model revision, server version, response format and generation limit. Record resampling, channel mixing and trimming. Removing silence requires an offset map if timestamps must locate the original video.
Listen at high-risk positions. Check the start and end, both sides of long silence, speaker changes, interruptions, quiet speech and critical numbers. Sampling can reveal problems; a successful sample is not proof of whole-recording accuracy.
-
Evaluate text and speakers separately. With a human reference transcript, measure CER/WER under consistent punctuation, case and tokenization rules. With human speaker/time annotations, evaluate diarization. The number of distinct output labels is not a diarization acceptance test.
-
Freeze the diarization scoring policy.pyannote.metrics provides speaker metrics. Boundary collars and whether overlapping speech is scored affect results. Compare systems on the same reference and configuration, not detached numbers.
+
+
Diagnose incomplete output before tuning. Inspect termination due to generation limits, structural completeness and whether the client consumed the whole response. Raising a token limit may address some truncations, but cannot guarantee recall. A successful request is not grounds to close an unresolved user issue.
What should travel with the result?
Follow consent and retention requirements, store only necessary data, and restrict access to audio and speaker annotations. Retain the source-audio identifier, fixed configuration, original output, structural report and human acceptance notes. Link summaries back to transcript passages. Check subtitle readability, positioning and privacy. Replay edited clips instead of only checking interval lengths. Known-person identification needs a separate consent, enrollment and verification design; renaming anonymous cluster labels does not provide it.
-
This checker is an entry point into acceptance, not a leaderboard or a substitute for listening and annotation. Start a real workload through the deployment centre, then use the FunASR repository for implementation details or a minimal reproducible issue.
-
Sources and reproduction
+
+
Appendix: scoring policy and sources
+
Evaluate text and speakers separately. With a human reference transcript, measure CER/WER under consistent punctuation, case and tokenization rules. With human speaker/time annotations, evaluate diarization. The number of distinct output labels is not a diarization acceptance test.
Freeze the diarization scoring policy.pyannote.metrics provides speaker metrics. Boundary collars and whether overlapping speech is scored affect results. Compare systems on the same reference and configuration, not detached numbers.
Next, download the read-only structural checker and run the labeled synthetic example first. Use its report to plan listening checks, not to mark a meeting transcript as quality-verified.
diff --git a/web-pages/product-site/legacy/en/blog/self-hosted-openai-whisper-api-alternative.html b/web-pages/product-site/legacy/en/blog/self-hosted-openai-whisper-api-alternative.html
index b09619456..03a230117 100644
--- a/web-pages/product-site/legacy/en/blog/self-hosted-openai-whisper-api-alternative.html
+++ b/web-pages/product-site/legacy/en/blog/self-hosted-openai-whisper-api-alternative.html
@@ -1,13 +1,11 @@
-Self-Hosted OpenAI Whisper API Alternative: Integration and Security | FunASR Blog
-
+Add transcription to your own API | FunASR
+
-
+
-
Self-Hosted OpenAI Whisper API Alternative: FunASR Integration and Security
+
Add transcription to your own API
FunASR Blog · 2026-06-18 · Updated 2026-09-09
-
Self-hosting lets a team choose its speech models, capacity and data-handling policy. This guide covers the packaged funasr-server in FunASR 1.4.15 and a basic JSON request to POST /v1/audio/transcriptions. It implements part of the OpenAI transcription interface, not the complete hosted service or every SDK and application contract.
+
If your application needs to upload a recording and receive its text, start with that single round trip. A local transcription endpoint lets your team check the request and response before adding real traffic or a public gateway.
+
The example uses an authorized audio.wav: a client uploads the file to a local SenseVoice service, then reads the JSON text field. It supplies a callable path, not a fabricated transcript or a speed comparison.
+
This article covers the packaged funasr-server in FunASR 1.4.15. It offers part of the OpenAI transcription interface, not every hosted feature or response format; a working URL alone does not complete a migration.