Model or dataset
Moyf/moys-asr-workflow avatar
Moyf/moys-asr-workflow

Moyf/moys-asr-workflow (MAW): a desktop front end for cloud ASR plus a local subtitle editor

Moy 的 ASR 字幕生成工作流及编辑器,简称 MAW

455 stars42 forksPythonAGPL-3.0

At a glance

What is it?
MAW turns local media into SRT and .mosp projects through cloud ASR APIs, then hands them to a local editor. It is a workflow tool for people who already pay for a transcription service, not an offline transcriber.
Who is it for?
Adopt MAW if you already have a Qwen, Fun-ASR, Soniox, Tencent Cloud, Doubao or OpenAI-compatible key and want a local editing surface for the results, especially if you need a second subtitle track for bilingual delivery. Skip it if your material cannot leave the machine, since the README states that cloud transcription uploads the media directly to the provider, and skip it if you need a stable release: the current line is v1.6.0-beta.4.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 17, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What MAW actually does with your media

The README describes the pipeline in one line: local media goes to AI transcription, which produces SRT plus a .mosp project, which MAWE edits, which then exports. That ordering matters. MAW is not an ASR engine. It is the glue between a media file on your disk and a transcription API you already have credentials for, plus an editor that runs on your own machine.

The target user is someone producing subtitles for video who is willing to pay per minute of audio rather than run a model locally. The README lists Qwen, Fun-ASR, Soniox, Tencent Cloud recording file recognition, Doubao (Volcano Engine), and OpenAI or compatible endpoints. Local Qwen3-ASR, FunASR and Faster-Whisper exist, but the README files them under experimental entry points and says they are only suitable for trying out. That is an unusually direct statement about scope, and it should be read literally.

There is no MAW server. The README says the project has no cloud of its own and does not hold API keys on your behalf. Editing and project storage stay local.

The .mosp project as the source of truth

The most consequential design decision is that SRT is treated as an output, not as the working format. The README states that the .mosp project is the source of truth for subtitles. SRT suits ordinary delivery; ASS uses the default output scheme and linked styles configured under Manage ASS Styles in the editor, with script coordinates set from the source video resolution recorded in the project.

This has a cost that the README states plainly: neither SRT nor ASS preserves all word-level timestamps, the waveform, or the other project data. If you edit in MAWE and then export, you keep the project. If you export and delete it, you lose the ability to revise without re-transcribing. Whether that matters depends on how often your cuts change.

Style handling splits further than most people expect. The localhost editor and the Launcher share a user-level style library, while the portable file:// editor uses a browser-local copy. Launcher burning of SRT uses a separate SRT default style. Two people on the same machine using the portable editor are not looking at the same styles.

Installing MAW and running a first transcription

MAW ships as a download rather than as a package you install from a registry. The README points to the releases page and describes two Windows archives: MAW-Windows-x64-v*.zip, which bundles FFmpeg, and the smaller MAW-lite-Windows-x64-v*.zip for machines that already have ffmpeg and ffprobe. macOS gets the corresponding MAW.app or MAW-lite.app.

After unzipping, you start MAW.exe or MAW.app. The README does not give a command-line install step for the GUI, so there is nothing to paste for that part. The first real use is configuration, then selection, then generation: set the transcription service API key in the Launcher, choose the media, and click generate. The README directs first-time users to docs/WORKFLOW.md for API configuration and troubleshooting.

If you would rather drive the pipeline from a script, the repository carries per-provider entry points at the top level, including generate_subtitle_qwen_api.py and generate_subtitle_openai_api.py. The Qwen script reads a .env file, and .env.example documents the keys. Copy the example file and fill in the key:

bash
cp .env.example .env

Then set the key and region in that file. The example shows DASHSCOPE_API_KEY as empty and DASHSCOPE_REGION defaulting to beijing, with singapore as the other value. DASHSCOPE_WORKSPACE_ID is described as optional in the Beijing region and required in Singapore.

bash
DASHSCOPE_API_KEY=your-key-here
DASHSCOPE_REGION=beijing
DASHSCOPE_WORKSPACE_ID=

The CLI itself is documented separately in docs/CLI.md, which the README says covers the full parameter list, examples, Server management and exit codes. It also states the CLI is intended for batch processing and automation. The README does not reproduce those flags, so read that file before writing a wrapper script.

Where MAW stops being the right tool

Confidentiality is the hard boundary. The README says that when you choose a cloud service, the media is uploaded directly to that provider. There is no local-only path that the README endorses for production use, because the local ASR entry points are labelled experimental. If your footage cannot leave your network, MAW in its documented configuration is the wrong choice, and the experimental local models are not a substitute you should plan around.

Cost and retention are outside the project's control. The README defers fees, data retention and service availability to the provider's current policy and points at docs/PROVIDERS.md. That means MAW cannot tell you what a job will cost, and a provider changing its terms changes your pipeline.

The local ASR path carries a dependency conflict the pyproject.toml comments describe outright. The MOSS runtime depends on Transformers 5.x, while the local dependency group's qwen-asr pins Transformers 4.57.6. The project states these cannot live in the same dependency group of one uv.lock, so MOSS is declared separately in moss-requirements.in and frozen with uv pip compile. Anyone building from source should expect to manage two dependency pipelines rather than one.

There is also a versioning caveat. The current releases are v1.6.0-beta.4, v1.6.0-beta.3 and v1.6.0-beta.2, all beta tags, and pyproject.toml carries version 1.6.0-beta.4. The repository is not archived and the last push was on 2026-09-17, so work is happening, but the release channel you would download is a beta line.

MAWE's second track and the alternatives it replaces

The editor's distinguishing feature is optional multiple subtitles. The README states you can drag a second subtitle file in as a secondary track, then swap primary and secondary, bind or unbind them, edit them in a linked way, and snap across tracks, with G, Shift+G, H and B as shortcuts. Bilingual delivery is the obvious use, and most subtitle editors treat a second track as a separate document rather than a linked one.

The natural comparison is a general-purpose subtitle editor such as Subtitle Edit, which reads and writes subtitle files and does its own timing work but does not talk to transcription providers. With MAW you transcribe first and edit second; with a general editor you arrive with a file already. The difference is where the timing comes from. MAW inherits word-level timestamps from the ASR provider when the provider supports them, and .env.example exposes DASHSCOPE_ENABLE_WORDS, defaulting to true for the older Qwen models and fixed on for Qwen-Audio and Fun-ASR.

A second alternative is running Whisper locally and editing the output in whatever editor you like. That keeps audio on the machine, which MAW's documented path does not, but it moves model selection, GPU setup and queue management onto you. MAW's own local options exist but are marked experimental, so the honest framing is that MAW trades local processing for provider quality and a managed UI.

Licence, upkeep and what upgrading costs

MAW is AGPL-3.0-only, stated in the README, in pyproject.toml under license, and in the LICENSE file. The repository also carries a CLA.md and a THIRD_PARTY_NOTICES.md. For someone running the desktop build locally, the practical question is whether you modify and distribute it. If you embed MAW's code in a network service, the AGPL's network clause is the part to read with a lawyer, not this article. The project ships a Rust peaks-generation kernel, quapeaks, under MIT or Apache-2.0, described in pyproject.toml as an independent repository renamed from reapeaks-rs.

Upgrade cost is dominated by the beta cadence and the dependency split rather than by migration steps. Three beta tags landed between 2026-09-07 and 2026-09-15, which suggests interface and behaviour changes are still in flight. The CHANGELOG.md at the repository root is where those changes are recorded, and it is the file to read before moving a working install forward.

One dependency detail has an operational consequence. The quapeaks comment in pyproject.toml says the kernel is imported at the call site only when peaks are generated, and that a missing kernel logs and skips cache generation rather than blocking the transcription entry point at import time. So a build without it still transcribes; it just loses waveform cache generation, which the comment notes can be rebuilt later in an environment that has the kernel.

Editorial conclusion

Adopt MAW if you already have a Qwen, Fun-ASR, Soniox, Tencent Cloud, Doubao or OpenAI-compatible key and want a local editing surface for the results, especially if you need a second subtitle track for bilingual delivery. Skip it if your material cannot leave the machine, since the README states that cloud transcription uploads the media directly to the provider, and skip it if you need a stable release: the current line is v1.6.0-beta.4. Before committing, verify that your chosen provider is listed in docs/PROVIDERS.md, that ffmpeg and ffprobe are on PATH if you pick the lite build, and that .mosp files open correctly in MAWE on your own footage.

Frequently asked questions

Does Moyf/moys-asr-workflow upload my video to a server?

Yes, when you pick a cloud transcription service. The README states that the media is uploaded directly to the corresponding provider, and that MAW has no cloud server of its own and does not hold API keys on your behalf.

Can I run Moyf/moys-asr-workflow completely offline?

The README lists local Qwen3-ASR, FunASR and Faster-Whisper as experimental entry points that are only suitable for trying out. There is no documented production offline path, so treat local transcription as an experiment rather than a supported mode.

What is the difference between the MAW and MAW-lite downloads?

MAW-Windows-x64-v*.zip bundles FFmpeg, while MAW-lite-Windows-x64-v*.zip is smaller and is meant for machines that already have ffmpeg and ffprobe installed. macOS has matching MAW.app and MAW-lite.app downloads.

Does Moyf/moys-asr-workflow export SRT and ASS files?

Yes. The README says MAWE exports SRT, ASS and other formats, but it also warns that neither SRT nor ASS keeps all word-level timestamps, the waveform or the other project data, which is why the .mosp project is described as the source of truth.

Official sources

  1. Issues
  2. License: AGPL-3.0
  3. Moyf/moys-asr-workflow on GitHub
  4. README
  5. Releases
Community notes

Community notes