Skip to content

Commit 2a954d4

Browse files
authored
release: prepare FunClip v2.2.1 (#212)
Prepare the signed v2.2.1 release contract, concise bilingual release highlights, and checksum-protected source archives. Signed-off-by: LauraGPT <18321252+LauraGPT@users.noreply.github.com>
2 parents 14c9f9d + 6f0bd4e commit 2a954d4

5 files changed

Lines changed: 75 additions & 82 deletions

File tree

README.md

Lines changed: 8 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -34,26 +34,11 @@
3434

3535
<a name="What's New"></a>
3636
## What's New🚀
37-
- 2026/08/30 FunClip adds the third-party [OpenMOSS/MOSS-Transcribe-Diarize](https://github.com/OpenMOSS/MOSS-Transcribe-Diarize) model as an opt-in `moss` path. It provides long-form ASR, anonymous speaker labels, and segment timestamps without external `vad_model` or `spk_model`, through FunASR's vLLM adapter. OpenMOSS owns and maintains the model; FunClip only integrates its published contract.
38-
- 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.
39-
- 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.
40-
- 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.
41-
- 2024/06/12 FunClip now supports recognizing and clipping English audio files. Run `python funclip/launch.py -l en` to try.
42-
- 🔥2024/05/13 FunClip v2.0.0 now supports smart clipping with large language models, integrating models from the qwen series, GPT series, etc., providing default prompts. You can also explore and share tips for setting prompts, the usage is as follows:
43-
1. After the recognition, select the name of the large model and configure your own apikey;
44-
2. Click on the 'LLM Inference' button, and FunClip will automatically combine two prompts with the video's srt subtitles;
45-
3. Click on the 'AI Clip' button, and based on the output results of the large language model from the previous step, FunClip will extract the timestamps for clipping;
46-
4. You can try changing the prompt to leverage the capabilities of the large language models to get the results you want;
47-
- 2024/05/09 FunClip updated to v1.1.0, including the following updates and fixes:
48-
- Support configuration of output file directory, saving ASR intermediate results and video clipping intermediate files;
49-
- UI upgrade (see guide picture below), video and audio cropping function are on the same page now, button position adjustment;
50-
- Fixed a bug introduced due to FunASR interface upgrade, which has caused some serious clipping errors;
51-
- Support configuring different start and end time offsets for each paragraph;
52-
- Code update, etc;
53-
- 2024/03/06 Fix bugs in using FunClip with command line.
54-
- 2024/02/28 [FunASR](https://github.com/modelscope/FunASR) is updated to 1.0 version, use FunASR1.0 and SeACo-Paraformer to conduct ASR with hotword customization.
55-
- 2023/10/17 Fix bugs in multiple periods chosen, used to return video with wrong length.
56-
- 2023/10/10 FunClipper now supports recognizing with speaker diarization ability, choose 'yes' button in 'Recognize Speakers' and you will get recognition results with speaker id for each sentence. And then you can clip out the periods of one or some speakers (e.g. 'spk0' or 'spk0#spk3') using FunClipper.
37+
- 2026/09/01 [FunClip v2.2.1](https://github.com/modelscope/FunClip/releases/tag/v2.2.1) preserves selected subtitle colors with a Pillow renderer and publishes the latest MOSS speaker-label boundaries in checksum-protected source archives.
38+
- 2026/08/30 [FunClip v2.2.0](https://github.com/modelscope/FunClip/releases/tag/v2.2.0) adds the third-party [MOSS-Transcribe-Diarize](https://github.com/OpenMOSS/MOSS-Transcribe-Diarize) path for long-form ASR, timestamps, and anonymous speaker labels without external VAD or speaker models.
39+
- 2026/08/03 [FunClip v2.1.1](https://github.com/modelscope/FunClip/releases/tag/v2.1.1) improves fresh Gradio installs, private-by-default container startup, case-insensitive matching, and MiniMax routing.
40+
41+
> See [GitHub Releases](https://github.com/modelscope/FunClip/releases) for the complete history and downloadable assets.
5742
5843
<a name="On Going"></a>
5944
## On Going🌵
@@ -77,39 +62,15 @@ cd FunClip
7762
pip install -r ./requirements.txt
7863
```
7964

80-
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.
65+
For a versioned snapshot, download [FunClip-2.2.1.tar.gz](https://github.com/modelscope/FunClip/releases/download/v2.2.1/FunClip-2.2.1.tar.gz) or [FunClip-2.2.1.zip](https://github.com/modelscope/FunClip/releases/download/v2.2.1/FunClip-2.2.1.zip), then verify it with the published [SHA256SUMS](https://github.com/modelscope/FunClip/releases/download/v2.2.1/SHA256SUMS). Model weights are downloaded separately when FunClip starts and are not included in these source archives.
8166

82-
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.
67+
FunClip v2.2.1 keeps the supported Gradio 4 runtime and renders built-in subtitles with Pillow so the selected foreground color survives video encoding. Existing installations should run `pip install -U -r requirements.txt` before restarting.
8368

8469
FunClip's current model and subtitle compatibility paths require `funasr>=1.4.9`. This includes the MOSS vLLM adapter, long-audio generation controls, normalized `sentence_info` speaker segments, and the earlier SenseVoice and realtime fixes. If you installed FunClip before this requirement was updated, run `pip install -U "funasr>=1.4.9"` before starting the Gradio service. [Release notes](https://github.com/modelscope/FunASR/releases/tag/v1.4.9) · [PyPI](https://pypi.org/project/funasr/1.4.9/)
8570

8671
### imagemagick install (Optional)
8772

88-
If you want to clip video file with embedded subtitles
89-
90-
1. ffmpeg and imagemagick is required
91-
92-
- On Ubuntu
93-
```shell
94-
apt-get -y update && apt-get -y install ffmpeg imagemagick
95-
sed -i 's/none/read,write/g' /etc/ImageMagick-6/policy.xml
96-
```
97-
- On MacOS
98-
```shell
99-
brew install imagemagick
100-
sed -i '' 's/none/read,write/g' "$(brew --prefix imagemagick)/etc/ImageMagick-7/policy.xml"
101-
```
102-
- On Windows
103-
104-
Download and install imagemagick https://imagemagick.org/script/download.php#windows
105-
106-
Find your python install path and change the `IMAGEMAGICK_BINARY` to your imagemagick install path in file `site-packages\moviepy\config_defaults.py`
107-
108-
2. Download font file to funclip/font
109-
110-
```shell
111-
wget https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ClipVideo/STHeitiMedium.ttc -O font/STHeitiMedium.ttc
112-
```
73+
The built-in subtitle renderer in v2.2.1 uses Pillow and the bundled font, so standard subtitle clipping no longer requires ImageMagick. Install ImageMagick only for the legacy `funclip/test/imagemagick_test.py` example or your own MoviePy `TextClip` workflow.
11374
<a name="Usage"></a>
11475
## Use FunClip
11576

README_zh.md

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,11 @@
3636
<a name="近期更新"></a>
3737
## 近期更新🚀
3838

39-
- 2026/08/30 FunClip 新增第三方 [OpenMOSS/MOSS-Transcribe-Diarize](https://github.com/OpenMOSS/MOSS-Transcribe-Diarize) 可选路径。它通过 FunASR 的 vLLM 适配器提供长音频 ASR、匿名说话人标签和分段时间戳,不需要外部 `vad_model``spk_model`。模型归 OpenMOSS 所有并由其维护,FunClip 只集成公开接口。
40-
- 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 模型路由。
41-
- 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 校验的源码归档,提供稳定的下载与回退节点。
42-
- 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 不提供可靠的字符级时间戳。
43-
- 2024/06/12 FunClip现在支持识别与裁剪英文视频,通过`python funclip/launch.py -l en`来启动英文版本服务。
44-
- 🔥2024/05/13 FunClip v2.0.0加入大语言模型智能裁剪功能,集成qwen系列,gpt系列等模型,提供默认prompt,您也可以探索并分享prompt的设置技巧,使用方法如下:
45-
1. 在进行识别之后,选择大模型名称,配置你自己的apikey;
46-
2. 点击'LLM智能段落选择'按钮,FunClip将自动组合两个prompt与视频的srt字幕;
47-
3. 点击'LLM智能裁剪'按钮,基于前一步的大语言模型输出结果,FunClip将提取其中的时间戳进行裁剪;
48-
4. 您可以尝试改变prompt来借助大语言模型的能力来获取您想要的结果;
49-
- 2024/05/09 FunClip更新至v1.1.0,包含如下更新与修复:
50-
- 支持配置输出文件目录,保存ASR中间结果与视频裁剪中间文件;
51-
- UI升级(见下方演示图例),视频与音频裁剪功能在同一页,按钮位置调整;
52-
- 修复了由于FunASR接口升级引入的bug,该bug曾导致一些严重的剪辑错误;
53-
- 支持为每一个段落配置不同的起止时间偏移;
54-
- 代码优化等;
55-
- 2024/03/06 命令行调用方式更新与问题修复,相关功能可以正常使用。
56-
- 2024/02/28 FunClip升级到FunASR1.0模型调用方式,通过FunASR开源的SeACo-Paraformer模型在视频剪辑中进一步支持热词定制化功能。
57-
- 2024/02/28 原FunASR-APP/ClipVideo更名为FunClip。
39+
- 2026/09/01 [FunClip v2.2.1](https://github.com/modelscope/FunClip/releases/tag/v2.2.1) 支持选择字幕颜色,并明确 MOSS 匿名说话人标签的能力边界。
40+
- 2026/08/30 [FunClip v2.2.0](https://github.com/modelscope/FunClip/releases/tag/v2.2.0) 集成第三方 [OpenMOSS/MOSS-Transcribe-Diarize](https://github.com/OpenMOSS/MOSS-Transcribe-Diarize),提供长音频 ASR、匿名说话人标签和分段时间戳,无需外部 VAD 或说话人模型。
41+
- 2026/08/03 [FunClip v2.1.1](https://github.com/modelscope/FunClip/releases/tag/v2.1.1) 修复 Gradio 4 / Starlette 兼容问题,并改进容器公网分享与文本匹配行为。
42+
43+
[查看全部版本](https://github.com/modelscope/FunClip/releases)
5844

5945
<a name="施工中"></a>
6046
## 施工中🌵
@@ -78,15 +64,15 @@ cd FunClip
7864
pip install -r ./requirements.txt
7965
```
8066

81-
如需固定版本,可下载 [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 启动时单独下载,不包含在源码归档中。
67+
如需固定版本,可下载 [FunClip-2.2.1.tar.gz](https://github.com/modelscope/FunClip/releases/download/v2.2.1/FunClip-2.2.1.tar.gz)[FunClip-2.2.1.zip](https://github.com/modelscope/FunClip/releases/download/v2.2.1/FunClip-2.2.1.zip),并使用发布页提供的 [SHA256SUMS](https://github.com/modelscope/FunClip/releases/download/v2.2.1/SHA256SUMS) 校验文件。模型权重会在 FunClip 启动时单独下载,不包含在源码归档中。
8268

83-
FunClip v2.1.1 Gradio 4 环境中要求 `starlette<1.0`。已有安装请在重启前执行 `pip install -U -r requirements.txt`。容器用户可用 `--listen` 监听全部网卡;只有同时显式传入 `--share` 才会创建 Gradio 公网分享链接。
69+
FunClip v2.2.1 使用 Pillow 渲染可选字幕颜色,并继续在 Gradio 4 环境中要求 `starlette<1.0`。已有安装请在重启前执行 `pip install -U -r requirements.txt`。容器用户可用 `--listen` 监听全部网卡;只有同时显式传入 `--share` 才会创建 Gradio 公网分享链接。
8470

8571
FunClip 当前模型与字幕兼容路径需要 `funasr>=1.4.9`,其中包括 MOSS 的 vLLM 适配器、长音频生成上限、归一化的 `sentence_info` 说话人分段,以及此前的 SenseVoice 和实时修复。如果你之前已经安装过 FunClip,请先执行 `pip install -U "funasr>=1.4.9"`,再启动 Gradio 服务。[发布说明](https://github.com/modelscope/FunASR/releases/tag/v1.4.9) · [PyPI](https://pypi.org/project/funasr/1.4.9/)
8672

87-
### 安装imagemagick(可选)
73+
### 安装 ImageMagick(可选)
8874

89-
1. 如果你希望使用自动生成字幕的视频裁剪功能,需要安装imagemagick
75+
内置字幕渲染器使用 Pillow 和仓库自带字体,不要求安装 ImageMagick。只有使用旧版或自定义 MoviePy `TextClip` 工作流时才需要以下配置。
9076

9177
- Ubuntu
9278
```shell

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.1.1
1+
2.2.1

docs/releases/v2.2.1.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# FunClip v2.2.1
2+
3+
FunClip v2.2.1 makes embedded subtitle colors reliable and packages the latest MOSS deployment boundaries as a stable, checksum-protected snapshot.
4+
5+
## Highlights
6+
7+
- Preserve selected subtitle colors with a Pillow RGBA renderer and the bundled font. The standard subtitle path no longer depends on ImageMagick text rasterization.
8+
- Keep subtitle timing, bottom-center placement, `SubtitlesClip` composition, and FFmpeg video encoding unchanged.
9+
- Clarify that MOSS-Transcribe-Diarize produces anonymous speaker labels for turns within one recording. It does not identify a known person or provide voiceprint verification.
10+
- Retain the third-party MOSS path for long-form ASR, segment timestamps, speaker SRT, and speaker-based clipping without an external VAD or speaker model.
11+
12+
## Install or upgrade
13+
14+
Download either source archive below, verify it with `SHA256SUMS`, extract it, and install the declared dependencies:
15+
16+
```bash
17+
sha256sum -c SHA256SUMS --ignore-missing
18+
pip install -U -r requirements.txt
19+
python funclip/launch.py
20+
```
21+
22+
The current MOSS and subtitle integration requires `funasr>=1.4.9`. Model weights are downloaded separately when FunClip starts.
23+
24+
## Assets
25+
26+
- `FunClip-2.2.1.tar.gz`: versioned source archive for Linux and macOS workflows.
27+
- `FunClip-2.2.1.zip`: versioned source archive for Windows and general-purpose extraction.
28+
- `SHA256SUMS`: SHA-256 digests for both archives.
29+
30+
The archives contain tracked FunClip application source, documentation, fonts, and dependency manifests. Runtime dependencies and model weights are not bundled; model weights are not bundled because every model retains its own license and distribution terms.
31+
32+
## Validation
33+
34+
- Subtitle foreground regression covers black, white, green, and red pixels.
35+
- `SubtitlesClip` plus `CompositeVideoClip` verifies final-frame color composition.
36+
- A one-second encoded MP4 was decoded with 1,297 red subtitle pixels and zero white subtitle pixels.
37+
- Release archives are built twice and compared byte-for-byte before the signed tag is published.
38+
39+
## Changes since v2.2.0
40+
41+
See the [full changelog](https://github.com/modelscope/FunClip/compare/v2.2.0...v2.2.1).
42+
43+
---
44+
45+
FunClip v2.2.1 通过 Pillow RGBA 渲染器和项目自带字体可靠保留用户选择的字幕颜色,标准字幕路径不再依赖 ImageMagick 文字栅格化。该版本同时明确 MOSS-Transcribe-Diarize 只返回同一录音内的匿名说话人标签,不提供已知人物身份识别或声纹验证。下载 `tar.gz``zip` 后请先使用 `SHA256SUMS` 校验,再执行 `pip install -U -r requirements.txt`。归档包含 Git 已跟踪的应用源码、文档、字体和依赖清单,不包含运行依赖或模型权重。

tests/test_release_contract.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
ROOT = Path(__file__).resolve().parents[1]
1515
VERSION_PATTERN = re.compile(r"^[0-9]+\.[0-9]+\.[0-9]+$")
16+
CURRENT_RELEASE = "2.2.1"
1617

1718

1819
def _git(repository, *args):
@@ -52,7 +53,7 @@ def _create_fixture_repository(repository):
5253

5354
def test_release_version_and_public_download_routes_are_in_sync():
5455
version = (ROOT / "VERSION").read_text(encoding="utf-8").strip()
55-
assert version == "2.1.1"
56+
assert version == CURRENT_RELEASE
5657
assert VERSION_PATTERN.fullmatch(version)
5758

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

6667

6768
def test_release_notes_define_installation_and_asset_boundaries():
68-
notes = (ROOT / "docs/releases/v2.1.1.md").read_text(encoding="utf-8")
69-
assert "funasr>=1.3.29" in notes
70-
assert "starlette<1.0" in notes
71-
assert "Fun-ASR-Nano" in notes
72-
assert "SenseVoice" in notes
73-
assert "case-insensitive" in notes
74-
assert "MiniMax" in notes
75-
assert "TwelveLabs" in notes
76-
assert "FunClip-2.1.1.tar.gz" in notes
77-
assert "FunClip-2.1.1.zip" in notes
69+
notes = (ROOT / f"docs/releases/v{CURRENT_RELEASE}.md").read_text(
70+
encoding="utf-8"
71+
)
72+
assert "funasr>=1.4.9" in notes
73+
assert "selected subtitle colors" in notes
74+
assert "Pillow" in notes
75+
assert "MOSS-Transcribe-Diarize" in notes
76+
assert "anonymous speaker labels" in notes
77+
assert "FunClip-2.2.1.tar.gz" in notes
78+
assert "FunClip-2.2.1.zip" in notes
7879
assert "SHA256SUMS" in notes
7980
assert "model weights are not bundled" in notes
8081

0 commit comments

Comments
 (0)