Wanyi Watermark — 抖音 / 小红书智能无水印解析
这是一个面向抖音、小红书分享链接的媒体解析服务,提供 WebUI、HTTP API、CLI、MCP Server 和 Skill 多种使用方式。
项目的核心能力是:输入一段分享文案或链接,自动识别平台与内容类型,并返回可直接使用的无水印视频、原始图片、预览图片以及 Live Photo 动态视频。
无水印资源解析、图片提取和下载不需要任何 API 密钥。 API 密钥只用于可选的“视频转文字”功能。
核心功能
| 平台 | 支持的内容 | 主要输出 |
|---|---|---|
| 小红书 | 单图、多图、视频、单 Live Photo、多 Live Photo | 原始图片、预览图、真实 PNG、无水印视频、Live Photo MP4 |
| 抖音 | 无水印视频,兼容已有图文解析 | 无水印视频直链、图片列表、标题和文案 |
| 其他平台 | 通用解析兜底 | 页面中可识别的视频或图片资源 |
小红书全类型笔记
对于公开且分享令牌有效的小红书笔记,解析器会自动识别以下类型:
- 单张静态图片笔记。
- 多张静态图片笔记。
- 视频笔记。
- 单张 Live Photo 笔记。
- 多张 Live Photo 笔记。
普通图片笔记会按原顺序返回:
- original_url:由笔记 fileId 还原的最高保真源文件,实际格式可能是 JPEG、PNG、WebP、HEIC 或 AVIF。
- preview_url:平台提供的浏览器预览资源,通常体积更小。
- PNG 下载能力:源文件是 PNG 时原样交付;其他格式在明确请求 PNG 时才进行真实转换,并保留源文件中的透明通道。
Live Photo 不重建苹果原生容器,只交付一一对应的两份资源:
- 静态原图。
- MP4 动态视频。
只有静态图与 MP4 都存在时,才会被计入完整 Live Photo。
抖音无水印视频
抖音处理器读取页面中的 window._ROUTER_DATA,自动判断视频或图文:
- 视频笔记返回无水印播放地址。
- 图文笔记继续返回有序图片列表。
- 保留标题、文案、封面等页面中能够获取的结构化信息。
智能解析流程
一次解析请求会完成以下工作:
- 从分享文案中提取链接。
- 根据域名识别抖音、小红书或通用平台。
- 请求一次目标页面,并从页面状态中定位当前笔记。
- 自动判断视频、静态图文或 Live Photo。
- 返回统一 JSON,由 WebUI、CLI、MCP 和其他前端共同消费。
小红书页面请求默认使用桌面端 UA;遇到传输异常、空壳页面或目标笔记缺失时,会自动回退移动端 UA。解析器只接受目标笔记数据,不会误取页面中的推荐笔记。
官方资源直链与代理
接口会优先返回平台官方媒体直链。API 接入方建议采用以下策略:
- 预览优先使用 preview_url。
- 下载优先使用 original_url 或视频 url。
- 只有遇到防盗链、跨域、格式不兼容或 CDN 直连失败时,才使用服务端 /api/proxy。
这样可以减少服务端带宽占用。WebUI 自带的代理同时支持防盗链请求、视频 Range、真实格式识别和按需 PNG 转换。
统一返回结构
小红书图片或 Live Photo
{
"status": "success",
"schema_version": 2,
"platform": "xiaohongshu",
"type": "image",
"note_id": "笔记 ID",
"title": "标题",
"caption": "文案",
"image_count": 1,
"live_photo_count": 1,
"images": [
{
"index": 1,
"kind": "live_photo",
"url": "原始图片地址",
"original_url": "原始图片地址",
"preview_url": "预览图片地址",
"is_live_photo": true,
"live_video": {
"url": "MP4 地址",
"backup_urls": [],
"codec": "h264"
}
}
]
}
视频
{
"status": "success",
"schema_version": 2,
"platform": "xiaohongshu",
"type": "video",
"title": "标题",
"caption": "文案",
"url": "无水印视频地址"
}
抖音与通用平台继续使用相同的 status / platform / type / title / caption / url / images 顶层约定。消费端应先判断 type,再读取 url 或 images。
启动 WebUI
环境要求
- Python 3.10 或更高版本。
- Windows、Linux 或 macOS。
- 仅解析和下载媒体时不需要 API 密钥。
方式一:使用 uv
在项目根目录执行:
cd D:\code\uni\watermark\server\mcp-server
uv sync
uv run python web\app.py
启动成功后访问:
http://localhost:8080
方式二:使用 venv 和 pip
Windows PowerShell:
cd D:\code\uni\watermark\server\mcp-server
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -e .
python web\app.py
Linux 或 macOS:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -e .
python web/app.py
修改端口和日志级别
默认监听 0.0.0.0:8080。Windows PowerShell 示例:
$env:PORT = "8081"
$env:WANYI_WEB_LOG_LEVEL = "DEBUG"
python web\app.py
然后访问 http://localhost:8081。
WebUI 可用功能
- 单输入框自动识别抖音、小红书和通用平台。
- 展示标题、文案、无水印视频和完整图集。
- 小红书图片支持预览、原始格式下载和真实 PNG 下载。
- Live Photo 支持静态图与 MP4 配对展示、播放和下载。
- 视频代理支持 Range 请求,可正常拖动播放进度。
- 前后端使用同一个追踪 ID 输出中文耗时日志。
健康检查
GET http://localhost:8080/api/health
正常响应示例:
{
"status": "ok",
"api_key_configured": false,
"asr_backend_default": "dashscope"
}
HTTP API
智能解析
POST /api/parse
Content-Type: application/json
请求体:
{
"url": "分享链接或包含链接的分享文案"
}
PowerShell 示例:
$body = @{
url = "在这里粘贴抖音或小红书分享链接"
} | ConvertTo-Json
Invoke-RestMethod -Uri "http://localhost:8080/api/parse" -Method Post -ContentType "application/json" -Body $body
媒体代理
GET /api/proxy?url=<媒体地址>
GET /api/proxy?url=<图片地址>&format=original
GET /api/proxy?url=<图片地址>&format=png
- 不带 format:流式转发媒体,适合视频播放和普通预览。
- format=original:识别真实图片格式并使用正确扩展名交付。
- format=png:源 PNG 原样返回,其他可解码格式转换成真实 PNG。
- 图片格式处理上限为 128 MB。
在移动端或小程序接入时,应优先尝试官方直链,把代理作为失败兜底,避免所有媒体流量经过本服务。
CLI
仅解析信息:
python -m wanyi_watermark.cli -l "<分享链接>" -a info
下载并保留原始格式:
python -m wanyi_watermark.cli -l "<分享链接>" -a download -o .\output --image-format original
将静态图片保存为真实 PNG:
python -m wanyi_watermark.cli -l "<分享链接>" -a download -o .\output --image-format png
Live Photo 下载目录示例:
output/
└── 笔记标题/
├── 01_image.heic
├── 01_live.mp4
├── 02_image.png
└── 02_live.mp4
MCP Server
启动 MCP Server:
python -m wanyi_watermark
主要工具:
- parse_douyin_link:解析抖音视频或图文。
- parse_xhs_link:解析小红书视频、普通图文和 Live Photo。
- parse_generic_link:通用平台兜底解析。
- extract_douyin_text:可选的视频转文字工具,需要转写密钥。
Codex Desktop、Claude Desktop 等本地 MCP 配置示例:
{
"mcpServers": {
"wanyi-watermark": {
"command": "uv",
"args": [
"run",
"--directory",
"D:/code/uni/watermark/server/mcp-server",
"python",
"-m",
"wanyi_watermark"
]
}
}
}
仅使用资源解析工具时,不需要配置任何密钥。
可选能力:视频转文字
视频转文字是附加能力,不影响无水印资源解析。
| 后端 | 环境变量 | 特点 |
|---|---|---|
| DashScope,默认 | DASHSCOPE_API_KEY | 阿里云百炼 paraformer-v2,视频 URL 直传 |
| SiliconFlow | SILICONFLOW_API_KEY | SenseVoice,需要下载媒体并提取音频,支持大文件分段 |
后端选择优先级:
命令或请求中的显式 backend > ASR_BACKEND 环境变量 > dashscope
Windows PowerShell 配置示例:
$env:DASHSCOPE_API_KEY = "your-api-key"
$env:ASR_BACKEND = "dashscope"
python web\app.py
使用 SiliconFlow:
$env:SILICONFLOW_API_KEY = "your-api-key"
$env:ASR_BACKEND = "siliconflow"
python -m wanyi_watermark.cli -l "<视频分享链接>" -a extract -b siliconflow -o .\output
SiliconFlow 后端优先使用系统 ffmpeg;系统没有 ffmpeg 时,会使用 imageio-ffmpeg 内置二进制。超过 1 小时或 50 MB 的媒体会自动分段处理。
项目结构
wanyi_watermark/
├── resolver.py # 平台识别与统一解析门面
├── douyin_processor.py # 抖音页面解析
├── xiaohongshu_processor.py # 小红书全类型笔记解析
├── image_formats.py # 图片签名识别与真实 PNG 转换
├── media_fetch.py # 媒体请求、Referer 与重试
├── cli.py # CLI
├── server.py # MCP Server
└── transcription.py # 视频转文字统一入口
web/
├── app.py # FastAPI WebUI 与 HTTP API
├── templates/index.html
└── static/
resolver.py 是平台分发和统一返回结构的单一事实源。MCP、CLI、WebUI 和 Skill 均复用同一解析逻辑。
测试
python -m pip install pytest
python -m pytest -q
node --check web\static\app.js
测试覆盖小红书桌面端/移动端状态结构、静态图、Live Photo 配对、请求回退、真实图片格式识别、PNG 转换、CLI 下载和 Web 图片代理。
部署提示
- 生产环境建议使用 Nginx、Caddy 或其他网关反向代理 WebUI 端口。
- API 消费端应优先使用解析结果中的官方媒体直链,服务端代理仅作为防盗链或格式兼容兜底。
- /api/proxy 会消耗本机带宽和 CPU,尤其是大图 PNG 转换和视频代理。
- 私密、删除、仅自己可见、分享令牌过期或平台风控拦截的笔记无法保证解析成功。
- 不要在代码或仓库中硬编码转写 API 密钥。
版本记录
2.0.0 - 2026-08-05
- 小红书解析升级为全类型笔记支持:单图、多图、视频、单 Live Photo 和多 Live Photo。
- 图片结果升级为
schema_version: 2,统一提供原图、预览图和按需真实 PNG 转换能力。 - Live Photo 只交付一一对应的“静态原图 + MP4 动态视频”。
- 官方媒体直链优先,服务端代理仅作为防盗链、跨域和格式兼容兜底。
- WebUI、CLI、MCP、Skill 和 HTTP API 统一复用解析门面。
- 新增 Pillow、pillow-heif 依赖,支持 PNG、HEIC、AVIF 等图片格式识别与转换。
法律与使用声明
- 本项目仅用于合法的学习、研究和个人内容管理场景。
- 使用者应遵守相关平台规则、法律法规和知识产权要求。
- 禁止使用本项目获取、传播无权访问或未经授权的内容。
- 使用者应自行承担运行和使用本项目产生的责任与风险。
License
Apache License 2.0
致谢
本项目基于 douyin-mcp-server 二次开发,并在此基础上增加小红书全类型笔记、统一解析门面、WebUI、CLI、媒体代理和双 ASR 后端。
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wanyi_watermark-2.0.0.tar.gz.
File metadata
- Download URL: wanyi_watermark-2.0.0.tar.gz
- Upload date:
- Size: 197.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d36234a5e24972873a9bfaf039a7351bcbfbf676dd10ed5612f08623febc9a1d
|
|
| MD5 |
73d18e65da83aafcd8406b0f99867d2a
|
|
| BLAKE2b-256 |
93a8bd93178f9ae4f3d0a7c32dfb31c46c1ca043b9e231eea9a39be052fb9df9
|
File details
Details for the file wanyi_watermark-2.0.0-py3-none-any.whl.
File metadata
- Download URL: wanyi_watermark-2.0.0-py3-none-any.whl
- Upload date:
- Size: 49.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
afef48668eb4b07c8138cdced6d67705b8141430bfc3a751aaa4ae346327738f
|
|
| MD5 |
aef5cc8b677ffdd58e50fcfa84afd1cb
|
|
| BLAKE2b-256 |
da0beaa67a9e91948da95e30e2ce96665d9efbf97c02d3d9a92014f208407871
|