diff --git a/README.md b/README.md
index 0eb135b..245f07c 100644
--- a/README.md
+++ b/README.md
@@ -34,6 +34,7 @@
## 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.
@@ -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/)
diff --git a/README_zh.md b/README_zh.md
index 4901f60..c00ba83 100644
--- a/README_zh.md
+++ b/README_zh.md
@@ -36,6 +36,7 @@
## 近期更新🚀
+- 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`来启动英文版本服务。
@@ -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/)
diff --git a/VERSION b/VERSION
index 7ec1d6d..3e3c2f1 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.1.0
+2.1.1
diff --git a/docs/releases/v2.1.1.md b/docs/releases/v2.1.1.md
new file mode 100644
index 0000000..da6c973
--- /dev/null
+++ b/docs/releases/v2.1.1.md
@@ -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 已跟踪的应用源码、文档和依赖清单,不包含运行依赖或模型权重。
diff --git a/tests/test_release_contract.py b/tests/test_release_contract.py
index 8c6ea08..fa196e7 100644
--- a/tests/test_release_contract.py
+++ b/tests/test_release_contract.py
@@ -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}"
@@ -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