Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@

<a name="What's New"></a>
## What's New🚀
- 2026/08/03 [FunClip v2.1.1](https://github.com/modelscope/FunClip/releases/tag/v2.1.1) fixes fresh Gradio 4 installations by constraining the incompatible Starlette 1.x runtime, keeps `--listen` container startup private unless `--share` is explicitly requested, makes transcript matching case-insensitive, and adds MiniMax M2.7 provider routes.
- 2026/07/24 [FunClip v2.1.0](https://github.com/modelscope/FunClip/releases/tag/v2.1.0) is the first versioned GitHub release. It packages the current Fun-ASR-Nano, SenseVoice, Paraformer, and LLM-assisted clipping application as checksum-protected source archives for a stable rollback point.
- 2026/05/20 FunClip now supports [Fun-ASR-Nano](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512) and [SenseVoice](https://huggingface.co/FunAudioLLM/SenseVoiceSmall) models. The `fun-asr-nano` option loads the flagship Fun-ASR-Nano-2512 checkpoint for Mandarin, English, Japanese, 7 Chinese dialect groups, and 26 regional accents; it does not load the separate 31-language Fun-ASR-MLT-Nano-2512 checkpoint. SenseVoice adds emotion recognition and audio event detection. Run `python funclip/launch.py -m fun-asr-nano` or `-m sensevoice` to try. For precise text-based clipping, use Paraformer because the released Nano checkpoint does not provide reliable character-level timestamps.
- 2024/06/12 FunClip now supports recognizing and clipping English audio files. Run `python funclip/launch.py -l en` to try.
Expand Down Expand Up @@ -75,7 +76,9 @@ cd FunClip
pip install -r ./requirements.txt
```

For a versioned snapshot, download [FunClip-2.1.0.tar.gz](https://github.com/modelscope/FunClip/releases/download/v2.1.0/FunClip-2.1.0.tar.gz) or [FunClip-2.1.0.zip](https://github.com/modelscope/FunClip/releases/download/v2.1.0/FunClip-2.1.0.zip), then verify it with the published [SHA256SUMS](https://github.com/modelscope/FunClip/releases/download/v2.1.0/SHA256SUMS). Model weights are downloaded separately when FunClip starts and are not included in these source archives.
For a versioned snapshot, download [FunClip-2.1.1.tar.gz](https://github.com/modelscope/FunClip/releases/download/v2.1.1/FunClip-2.1.1.tar.gz) or [FunClip-2.1.1.zip](https://github.com/modelscope/FunClip/releases/download/v2.1.1/FunClip-2.1.1.zip), then verify it with the published [SHA256SUMS](https://github.com/modelscope/FunClip/releases/download/v2.1.1/SHA256SUMS). Model weights are downloaded separately when FunClip starts and are not included in these source archives.

FunClip v2.1.1 supports Gradio 4 with `starlette<1.0`. Existing installations should run `pip install -U -r requirements.txt` before restarting. Container users can pass `--listen` to bind all interfaces; a public Gradio sharing tunnel is created only when `--share` is also supplied.

FunClip's Fun-ASR-Nano, SenseVoice, and subtitle compatibility paths require `funasr>=1.3.29`. This release returns every SenseVoice VAD region through `sentence_info` when token timestamps are unavailable, so clipping and subtitle clients receive segment boundaries instead of an empty timeline. It also includes the real-time final-text and short-tail fixes from 1.3.28. If you installed FunClip before this requirement was updated, run `pip install -U "funasr>=1.3.29"` before starting the Gradio service. [Release notes](https://github.com/modelscope/FunASR/releases/tag/v1.3.29) · [PyPI](https://pypi.org/project/funasr/1.3.29/)

Expand Down
5 changes: 4 additions & 1 deletion README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
<a name="近期更新"></a>
## 近期更新🚀

- 2026/08/03 [FunClip v2.1.1](https://github.com/modelscope/FunClip/releases/tag/v2.1.1) 修复 Gradio 4 新安装环境与 Starlette 1.x 的不兼容问题;容器使用 `--listen` 时不会自动创建公网分享链接;文本匹配改为大小写不敏感,并新增 MiniMax M2.7 模型路由。
- 2026/07/24 [FunClip v2.1.0](https://github.com/modelscope/FunClip/releases/tag/v2.1.0) 是首个带版本号的 GitHub Release,将当前支持 Fun-ASR-Nano、SenseVoice、Paraformer 与大模型智能剪辑的应用打包为带 SHA-256 校验的源码归档,提供稳定的下载与回退节点。
- 2026/05/20 FunClip 现在支持 [Fun-ASR-Nano](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512) 与 [SenseVoice](https://huggingface.co/FunAudioLLM/SenseVoiceSmall) 模型。`fun-asr-nano` 选项加载旗舰版 Fun-ASR-Nano-2512,支持普通话、英语、日语、7 类中文方言和 26 种地域口音;该选项不会加载独立的 31 语种 Fun-ASR-MLT-Nano-2512。SenseVoice 支持多语种识别,并额外输出情绪识别与音频事件检测标签。可通过 `python funclip/launch.py -m fun-asr-nano` 或 `python funclip/launch.py -m sensevoice` 启动体验。需要精确按文本裁剪时请使用 Paraformer,因为当前发布的 Nano checkpoint 不提供可靠的字符级时间戳。
- 2024/06/12 FunClip现在支持识别与裁剪英文视频,通过`python funclip/launch.py -l en`来启动英文版本服务。
Expand Down Expand Up @@ -76,7 +77,9 @@ cd FunClip
pip install -r ./requirements.txt
```

如需固定版本,可下载 [FunClip-2.1.0.tar.gz](https://github.com/modelscope/FunClip/releases/download/v2.1.0/FunClip-2.1.0.tar.gz) 或 [FunClip-2.1.0.zip](https://github.com/modelscope/FunClip/releases/download/v2.1.0/FunClip-2.1.0.zip),并使用发布页提供的 [SHA256SUMS](https://github.com/modelscope/FunClip/releases/download/v2.1.0/SHA256SUMS) 校验文件。模型权重会在 FunClip 启动时单独下载,不包含在源码归档中。
如需固定版本,可下载 [FunClip-2.1.1.tar.gz](https://github.com/modelscope/FunClip/releases/download/v2.1.1/FunClip-2.1.1.tar.gz) 或 [FunClip-2.1.1.zip](https://github.com/modelscope/FunClip/releases/download/v2.1.1/FunClip-2.1.1.zip),并使用发布页提供的 [SHA256SUMS](https://github.com/modelscope/FunClip/releases/download/v2.1.1/SHA256SUMS) 校验文件。模型权重会在 FunClip 启动时单独下载,不包含在源码归档中。

FunClip v2.1.1 在 Gradio 4 环境中要求 `starlette<1.0`。已有安装请在重启前执行 `pip install -U -r requirements.txt`。容器用户可用 `--listen` 监听全部网卡;只有同时显式传入 `--share` 才会创建 Gradio 公网分享链接。

FunClip 的 Fun-ASR-Nano、SenseVoice 与字幕兼容路径需要 `funasr>=1.3.29`。当 SenseVoice 没有 token 时间戳时,该版本会通过 `sentence_info` 返回每个 VAD 语音区域,让智能剪辑与字幕客户端获得分段边界,而不再收到空时间线;同时包含 1.3.28 的实时最终文本和短尾语音修复。如果你之前已经安装过 FunClip,请先执行 `pip install -U "funasr>=1.3.29"`,再启动 Gradio 服务。[发布说明](https://github.com/modelscope/FunASR/releases/tag/v1.3.29) · [PyPI](https://pypi.org/project/funasr/1.3.29/)

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.1.0
2.1.1
53 changes: 53 additions & 0 deletions docs/releases/v2.1.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# FunClip v2.1.1

FunClip v2.1.1 is a patch release for reliable fresh installs, safer container startup, and more predictable transcript-driven clipping.

## Highlights

- Keep the supported Gradio 4 runtime on `starlette<1.0`. Starlette 1.x changed `Jinja2Templates.TemplateResponse` incompatibly and caused the FunClip index route to return HTTP 500 on fresh installations.
- Allow explicit `--listen` deployments to bypass Gradio's internal localhost probe without automatically enabling `share=True`. A public Gradio tunnel is created only when the user passes `--share`.
- Match requested clipping text case-insensitively while preserving the original transcript text and timestamps in generated clips and subtitles.
- Add MiniMax M2.7 and MiniMax M2.7-highspeed to the OpenAI-compatible LLM routing used for transcript-driven clipping.
- Retain Fun-ASR-Nano, SenseVoice, Paraformer, TwelveLabs Pegasus, and the existing community API fallback paths.

## Install or upgrade

Download either source archive below, verify it with `SHA256SUMS`, extract it, and install the declared dependencies:

```bash
sha256sum -c SHA256SUMS --ignore-missing
pip install -U -r requirements.txt
python funclip/launch.py
```

For a container or remote host, bind all interfaces explicitly:

```bash
python funclip/launch.py --listen
```

Add `--share` only when you intentionally want a public Gradio sharing URL. Windows users can verify a downloaded archive with `Get-FileHash -Algorithm SHA256` and compare it with `SHA256SUMS`.

FunClip's Fun-ASR-Nano, SenseVoice, and subtitle compatibility paths continue to require `funasr>=1.3.29`.

## Assets

- `FunClip-2.1.1.tar.gz`: versioned source archive for Linux and macOS workflows.
- `FunClip-2.1.1.zip`: versioned source archive for Windows and general-purpose extraction.
- `SHA256SUMS`: SHA-256 digests for both archives.

The archives contain the tracked FunClip application source, documentation, and dependency manifest. Runtime dependencies and model weights are not bundled; model weights are not bundled because each model retains its own license and distribution terms.

## Validation

- Gradio 4.31.3 and 4.44.1 index-route smoke tests return HTTP 200 with FastAPI 0.141.1 and Starlette 0.52.1.
- The maintained repository suite passes 67 tests; the only skipped case is the live TwelveLabs test requiring an external API key.
- Release assets are built twice and compared byte-for-byte before publication.

## Changes since v2.1.0

See the [full changelog](https://github.com/modelscope/FunClip/compare/v2.1.0...v2.1.1).

---

FunClip v2.1.1 是面向新安装、容器部署与文本剪辑稳定性的补丁版本。该版本将 Gradio 4 的运行环境约束为 `starlette<1.0`,避免首页模板返回 HTTP 500;显式 `--listen` 只跳过容器内 localhost 探测,不会自动开启 `share=True`,只有用户主动传入 `--share` 才创建公网链接。同时,文本剪辑匹配改为大小写不敏感,并新增 MiniMax M2.7 与 MiniMax M2.7-highspeed 路由。下载 `tar.gz` 或 `zip` 后请先使用 `SHA256SUMS` 校验,再执行 `pip install -U -r requirements.txt`。归档包含 Git 已跟踪的应用源码、文档和依赖清单,不包含运行依赖或模型权重。
11 changes: 7 additions & 4 deletions tests/test_release_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def _create_fixture_repository(repository):

def test_release_version_and_public_download_routes_are_in_sync():
version = (ROOT / "VERSION").read_text(encoding="utf-8").strip()
assert version == "2.1.0"
assert version == "2.1.1"
assert VERSION_PATTERN.fullmatch(version)

release_url = f"https://github.com/modelscope/FunClip/releases/tag/v{version}"
Expand All @@ -65,13 +65,16 @@ def test_release_version_and_public_download_routes_are_in_sync():


def test_release_notes_define_installation_and_asset_boundaries():
notes = (ROOT / "docs/releases/v2.1.0.md").read_text(encoding="utf-8")
notes = (ROOT / "docs/releases/v2.1.1.md").read_text(encoding="utf-8")
assert "funasr>=1.3.29" in notes
assert "starlette<1.0" in notes
assert "Fun-ASR-Nano" in notes
assert "SenseVoice" in notes
assert "case-insensitive" in notes
assert "MiniMax" in notes
assert "TwelveLabs" in notes
assert "FunClip-2.1.0.tar.gz" in notes
assert "FunClip-2.1.0.zip" in notes
assert "FunClip-2.1.1.tar.gz" in notes
assert "FunClip-2.1.1.zip" in notes
assert "SHA256SUMS" in notes
assert "model weights are not bundled" in notes

Expand Down