Total Installs
43
Today's New
+30
User Rating
- / 5.0 (0)
Current Version
2.3
豆包图片/视频一键无水印下载
📖 项目简介
这是一个针对豆包(Doubao)平台的Tampermonkey用户脚本,主要功能是一键下载无水印的图片和视频。当你在豆包中生成图片或视频后,脚本会在媒体卡片右上角自动添加下载按钮,点击即可获取无水印原文件。
✨ 主要功能
| 功能模块 | 说明 |
|---|---|
| 图片下载 | 识别豆包生成的图片,提取无水印原图URL,在图片卡片右上角添加“原图”下载按钮 |
| 视频下载 | 识别视频消息,通过豆包内部API获取无水印视频链接,并提供“视频”下载按钮 |
| 资源发现面板 | 悬浮面板显示已发现的图片/视频数量,支持拖拽、最小化、关闭 |
| 网络嗅探 | 自动拦截XHR/Fetch请求,从SSE流和JSON响应中提取媒体信息 |
🎯 使用场景
- 使用豆包AI生成图片后,需要保存无水印原图
- 使用豆包生成视频后,想要下载不带水印的版本
- 需要批量管理豆包生成的媒体资源
🛠️ 技术实现
核心工作流程
flowchart TD
A[打开豆包聊天页] --> B[拦截XHR/Fetch请求]
B --> C[提取messages/patch_op数据]
C --> D[解析出图片/视频URL]
D --> E[存入缓存Map]
E --> F[DOM观察器扫描页面]
F --> G[为媒体卡片添加下载按钮]
G --> H[点击按钮获取无水印链接]
H --> I[开始下载]
关键技术点
网络拦截
- 拦截
chain/single接口的XHR请求 - 拦截
chat/completion接口的Fetch请求 - 处理SSE(Server-Sent Events)流式响应,实时解析
patch_op中的媒体数据
- 拦截
视频无水印获取(三重后备策略)
- 方法一:调用
/samantha/media/get_play_info接口,将URL参数lr=video_gen_watermark替换为lr=video_gen_no_watermark - 方法二:通过
doubaoShareSave消息获取分享ID,再调用/creativity/share/get_video_share_info接口获取无水印地址 - 方法三:失败时提示重试
- 方法一:调用
图片无水印提取
- 从
creation_block.creations[].image.image_ori_raw.url获取原图地址 - 使用文件key(
rc_gen_image/{key})作为缓存索引 - 将无水印URL与DOM中的
<img>元素关联
- 从
UI注入
- 找到图片/视频的父容器,设置为相对定位
- 在卡片右上角添加半透明下载按钮(不遮挡原有底部按钮)
- 使用
MutationObserver监听动态加载的新内容
资源管理
processedUrls:已处理的请求URL去重(Set,最多100条)videoCache:messageId → videoId 映射imageDataMap:文件key → 图片元数据
📦 安装方法
- 首先安装Tampermonkey或Violentmonkey浏览器扩展
- 点击原脚本地址页面的 “安装脚本” 按钮
- 在脚本管理页面确认安装
- 访问
https://www.doubao.com/*即可自动生效
🖱️ 使用说明
图片下载
- 当豆包生成图片后,鼠标移动到图片卡片上
- 卡片右上角会出现 “原图” 按钮
- 点击即可下载无水印PNG图片
视频下载
- 当豆包生成视频后,鼠标移动到视频卡片上
- 卡片右上角会出现 “视频” 按钮
- 点击后脚本自动获取无水印链接并开始下载
悬浮面板
- 页面左下角有一个 “发现资源” 悬浮面板
- 显示当前页面已检测到的无水印图片和可下载视频数量
- 可以拖拽面板位置,点击
−最小化,点击✕关闭 - 点击 “刷新” 按钮可重新扫描页面资源
⚠️ 注意事项
- 仅限豆包平台:脚本仅在
https://www.doubao.com/*域名下生效 - 登录状态:需要保持豆包账号登录状态才能调用API
- API变化:豆包平台更新可能导致接口失效,请关注脚本更新
- 下载限制:部分视频可能因平台限制无法获取无水印版本,会提示重试
🔧 脚本配置
脚本开头的元数据可以修改:
// @name 豆包图片/视频一键无水印下载
// @match https://www.doubao.com/* // 匹配的网站
// @grant GM_download // 授权API
// @run-at document-start // 运行时机(尽早拦截)
📊 版本历史
| 版本 | 更新内容 |
|---|---|
| 1.0 | 初始发布,支持图片/视频无水印下载,按钮位于右下角 |
| 2.x | 优化代码结构,增强数据提取,按钮移至右上角 |
🐛 常见问题
Q:点击下载按钮没有反应?
A:请检查是否保持豆包登录状态,刷新页面后重试。
Q:刷新按钮检测不到图片?
A:脚本会自动拦截网络请求,如果仍无法检测,请尝试刷新整个页面。
Q:视频下载失败?
A:脚本会自动尝试三种获取方式,如果全部失败,可能是平台限制了该视频,可稍后重试。
Q:按钮遮挡了原有功能?
A:最新版本已将按钮移至右上角,不会遮挡原有的底部操作按钮。
📝 开发说明
如果你想修改或二次开发这个脚本,主要文件结构如下:
- 网络拦截层:
setupNetworkInterceptors()函数 - 数据提取层:
extractImagesFromObject()、extractFromMessages()等 - API调用层:
callGetPlayInfo()、callDoubaoShareSave()等 - UI注入层:
injectImageButton()、injectVideoButton()等 - 面板组件:
createFloatPanel()悬浮面板
脚本内部使用 window.postMessage 在不同模块间通信,便于调试和扩展。