AI技术投降派
大厂不开放免费API倒逼开发者将客户端变为接口层,而水印本质只是CDN分发参数而非原图宿命。
AI-assisted summary of 让AI白嫖豆包画图:21秒一张2K原图 — original source. Check the original for full context.
Source published:
Key ideas
- 开源插件 dsh-doubao-painter 通过 60 行精简代码直连 Chrome 调试协议(CDP),驱动豆包桌面版实现 Agent 本地 0 成本调用,约 21 秒可全自动产出一张 2K 原图。 (0:05)
- 插件核心洞察在于豆包的水印机制:聊天窗口内的 384×216 缩略图烧录了水印,但预览弹出的 2848×1600 原图无水印,两者 CDN 链接仅模板参数不同,水印属于分发层参数而非源头生成。 (0:05)
- 相比单张约 0.2 元的商业生图 API,该方案直接利用账号每日免费额度且底层依托字节 Seedream 模型,擅长中文海报与文字渲染。 (3:49)
- 该方案也存在清醒的代价与风险:仅支持 Windows 单任务串行、运行时强行抢占窗口、面临封号与合规风险,且原图无水印状态随时可能被官方策略变更打破。 (4:52)
Detailed notes
## Background 该内容由 Bilibili UP 主“AI技术投降派”于 2026 年 10 月 28 日发布。视频简介详细介绍了 10 月 26 日上线 GitHub 的开源插件 dsh-doubao-painter,它通过 Chrome 调试协议直接驱动豆包桌面版生成无水印 2K 原图,并指出豆包的水印仅是 CDN 模板参数,从而总结出“去水印的最便宜解是根本不去”。
## TL;DR 视频深入拆解了面向 DSH 开发平台的开源插件 dsh-doubao-painter 的技术实现与架构思路。该插件通过手写 60 行极简 CDP 客户端直连豆包桌面端,绕开昂贵的商业 API 与带水印的缩略图,在模拟预览弹窗后直接抓取 CDN 上的 2848×1600 无水印原图。除了分析包括“秘密画室”归档在内的四步自动化流水线,内容还客观算清了关于原图成功率、猫鼠游戏、条款封号及单任务串行等五大维度的清醒账,最终将此类方案定性为“UI 自动化是穷人的接口层”。
## Atmosphere & style 整体语调冷静、克制而又透着黑客式的机敏与实用主义幽默。主讲人以极其精炼的行话层层剥开大厂产品的设计缝隙,既对“水印是分发参数”这一工程巧思表现出赞赏,又毫不含糊地指出依赖 UI 自动化的脆弱性与条款风险。观看体验就像在听一位技术老手拆解灰色地带的极客玩具,节奏紧凑清晰,清醒而富有启发性。
## Bulletin - [00:05](https://www.bilibili.com/video/BV1xfx56JEP2?t=5s) 开源插件 dsh-doubao-painter 通过 60 行精简代码直连 Chrome 调试协议(CDP),驱动豆包桌面版实现 Agent 本地 0 成本调用,约 21 秒可全自动产出一张 2K 原图。 - [00:05](https://www.bilibili.com/video/BV1xfx56JEP2?t=5s) 插件核心洞察在于豆包的水印机制:聊天窗口内的 384×216 缩略图烧录了水印,但预览弹出的 2848×1600 原图无水印,两者 CDN 链接仅模板参数不同,水印属于分发层参数而非源头生成。 - [03:49](https://www.bilibili.com/video/BV1xfx56JEP2?t=229s) 相比单张约 0.2 元的商业生图 API,该方案直接利用账号每日免费额度且底层依托字节 Seedream 模型,擅长中文海报与文字渲染。 - [04:52](https://www.bilibili.com/video/BV1xfx56JEP2?t=292s) 该方案也存在清醒的代价与风险:仅支持 Windows 单任务串行、运行时强行抢占窗口、面临封号与合规风险,且原图无水印状态随时可能被官方策略变更打破。
## Key takeaways - [00:05](https://www.bilibili.com/video/BV1xfx56JEP2?t=5s) DSH 中的 Agent 长期面临生图困境,接云端 API 需配 Key 且按张扣费,直接用豆包客户端保存又会附带平台水印。 - [00:05](https://www.bilibili.com/video/BV1xfx56JEP2?t=5s) 项目最精辟的洞察是“去水印的最便宜解是根本不去”:水印仅作为 CDN 分发模板参数存在于缩略图中,源头 2848×1600 原图本身并没有烧录水印。 - [01:24](https://www.bilibili.com/video/BV1xfx56JEP2?t=84s) 技术实现放弃了 Puppeteer 等重量级框架,手写约 60 行代码直连 CDP 调试协议,做到了无第三方依赖操控基于 Electron 的豆包桌面端。 - [01:24](https://www.bilibili.com/video/BV1xfx56JEP2?t=84s) 在注入提示词环节,插件选用协议层 insertText 触发编辑器真实事件,比直接修改 DOM 内容更稳定;图生图则绕过按钮直传隐藏的 input 节点。 - [01:24](https://www.bilibili.com/video/BV1xfx56JEP2?t=84s) 抓取原图通过对图片中心连发 5 种鼠标事件触发预览弹窗,拦截 2848 分辨率链接存盘,并适配了豆包实际回传 WebP 的格式特征。 - [02:44](https://www.bilibili.com/video/BV1xfx56JEP2?t=164s) 为平衡生图速度与对话混乱问题,插件设计了“秘密画室”归档机制:普通对话 20 秒出图后,自动通过像素级精确位移拖拽进专用项目归档。 - [02:44](https://www.bilibili.com/video/BV1xfx56JEP2?t=164s) 为避免 DSH 宿主环境卡死,生图脏活被剥离至独立的 Node.js 子进程执行,展现了务实的底层工程解耦思路。 - [03:49](https://www.bilibili.com/video/BV1xfx56JEP2?t=229s) 在全行业普遍走 API 路线的生态光谱下,该项目是唯一走本地客户端路线的代表,将单张 0.2 元的商业成本直接打至零。 - [03:49](https://www.bilibili.com/video/BV1xfx56JEP2?t=229s) 该方案调用的是底层 Seedream 完整能力,在中文排版与海报生成等复杂文字渲染场景下表现出色。 - [04:52](https://www.bilibili.com/video/BV1xfx56JEP2?t=292s) 该方案伴随着明显的稳定性与合规代价:模拟预览可能失败报错、存在封号风险、抢占前台窗口,且对外发布内容仍需履行标识义务。 - [04:52](https://www.bilibili.com/video/BV1xfx56JEP2?t=292s) 猫鼠游戏长期存在:平台去年曾尝试给原图加水印后又放开,无水印仅是当前的动态策略,非长久保证。 - [05:59](https://www.bilibili.com/video/BV1xfx56JEP2?t=359s) 该项目体现了 Agent 时代的实用主义法则:“UI 自动化是穷人的接口层”,在大厂未提供开放 API 时,桌面客户端被开发者逆向当成了功能接口。
## Detailed walkthrough ### [00:00](https://www.bilibili.com/video/BV1xfx56JEP2?t=0s) 双版本洞察:去水印的最便宜解是根本不去
DSH(Deep Shell / 类似开发环境平台)里的 Agent 普遍面临一个尴尬的断层现象:写代码十项全能,画一张图却极为费劲。如果走云端 API 路线,需要配置 API Key 且按张扣费;如果退而求其次利用本机安装的豆包桌面版,它确实具备绘画能力,但直接存下来的图片往往带着平台水印。2026 年 10 月 26 日上线 GitHub 的插件 `dsh-doubao-painter`,用一套构思精巧的方案同时化解了“收费”与“水印”两个痛点:通过 Chrome 调试协议(CDP)直接驱动豆包桌面版,实现 Agent 发送一句话指令、豆包后台静默出图、最后本地收回 2K 无水印原图的全自动化闭环。
```mermaid flowchart LR accTitle: 豆包 CDN 图片双版本分发架构 accDescr: 解释缩略图与大图在同一骨架下仅因模板参数不同而导致水印差异
subgraph CDN["豆包 CDN 资源"] direction TB T["聊天缩略图<br/>384×216<br/>带'豆包 AI 生成'水印"] O["预览大图<br/>2848×1600<br/>无水印原图 (WebP)"] end
A["豆包客户端展示"] -->|"聊天面板嵌入"| T A -->|"点击预览弹出"| O ```
该插件最聪明的核心洞察完全落在了平台的水印机制上。豆包在 CDN 上对同一张图片其实分发了两个版本: 1. 聊天界面内默认渲染并允许保存的,是规格为 `384×216` 的缩略图,其右下角硬编码烧录着“豆包 AI 生成”的可见水印; 2. 只有当用户在客户端中主动点击图片弹窗预览时,系统才会挂载分辨率高达 `2848×1600` 的原图,而这个大图版本完全没有水印。
经过比对,两个版本的 CDN 资源链接共享完全相同的 URL 骨架,唯一的区别仅仅在于末端携带的模板名。换言之,水印只是 CDN 图像分发管道上的一个样式模板参数,压根没有烧进生成的源头原图内部。对此,作者在项目的 README 中写下了极为精辟的总结:“去水印的最便宜解是根本不去”。整个链路既不需要 API Key,不按张计费,也省去了各种复杂的局部重绘与图像修复算法,实测出图约 21 秒一张,常态耗时稳定在 20 至 45 秒之间。
[01:24](https://www.bilibili.com/video/BV1xfx56JEP2?t=84s) 极简 CDP 驱动与四步出图流水线
在驱动实现上,豆包桌面端本质上是一个基于 Electron 框架打包的应用。该插件通过开启远程调试端口将豆包拉起,随后依靠手写的大约 60 行精简代码直连 Chrome 调试协议(CDP),全程没有引入 Puppeteer、Playwright 等任何重量级自动化框架,真正做到了“零第三方依赖”。
```mermaid flowchart TD accTitle: CDP 四步生图执行流水线 accDescr: 包含新开对话、注入提示词、定时轮询以及模拟点击抓原图的完整流程
S1["第一步:开启新对话<br/>查找'新对话'按钮 / 兜底发 Ctrl+Shift+K"] --> S2["第二步:注入提示词<br/>CDP insertText 命令触发编辑器事件<br/>图生图注入隐藏 input[type=file]"] S2 --> S3["第三步:轮询等图<br/>每 1.5 秒扫描一次生成的 CDN 标识<br/>发现新图静止 1 秒确认完成"] S3 --> S4["第四步:抓取原图存盘<br/>图片中心连发 5 种鼠标事件触发预览<br/>抓取 2848 网址并按 WebP 格式存盘"] ```
插件的整个生命周期拆解为清晰的四步流程: - **第一步:开新对话**。定位页面中文字标记为“新对话”的按钮并执行点击;若 DOM 查找失败,则执行兜底逻辑发送 `Ctrl + Shift + K` 快捷键,随后持续监控顶部地址栏 URL 的变化确认跳转。 - **第二步:输入提示词**。此处包含关键的防坑处理——直接利用 JavaScript 修改输入框内容非常脆弱,无法触发内部响应式状态更新。插件转而调用协议层的 `insertText` 原语,正如代码注释原话强调的那样:“这比改内容可靠”,能完美触发编辑器框架绑定的底层输入事件。若遇到“图生图”任务,设计更为巧妙:完全绕过界面上的上传按钮,直接定位页面中隐藏的文件输入框(`<input type="file">`),将本地图片绝对路径塞入,约 250 毫秒后豆包内部组件便自动完成上传。 - **第三步:轮询等待出图**。插件以 1.5 秒为周期循环扫描页面中的 `<img>` 标签,专门筛选匹配包含“生成图”特定标识的 URL 模式。一旦捕捉到最新生成的图片特征,额外静止等待 1 秒以确保渲染渲染完全完毕。 - **第四步:点击抓取原图**。对目标图片物理中心点连续派发 5 种不同的底层鼠标事件以模拟真实的用户点击。在预览弹窗被激活弹出的瞬间,立即拦截抓取挂载出来的 2848 分辨率原图地址并写入磁盘。源码注释特别提示,不要轻信网络 URL 上的文件后缀,豆包实际向客户端回传的二进制实体均为 WebP 格式。
[02:44](https://www.bilibili.com/video/BV1xfx56JEP2?t=164s) “秘密画室”归档机制与底层工程解耦
为了兼顾生图效率与用户体验,插件在设计层面做出了“快”与“乱”的权衡取舍。如果直接在豆包预设的“项目”空间内生成图片,系统加载慢、耗时偏长;但如果直接在普通对话流中高频画图,又会把用户的日常聊天列表彻底搞乱。为了化解这一冲突,作者设计了自动归档机制:生图依然利用普通对话在 20 秒左右疾速完成,图片落盘后,插件立即将该对话拖拽并移入一个专门自动创建的豆包项目中,该项目被命名为“DSH和豆包的秘密画室”。
这套拖拽归档逻辑的注释里写满了与前端组件库博弈踩坑的经验细节: - 鼠标按下后必须在极短时间内移动超过 5 像素,才能成功激活目标组件的拖拽判定阈值; - 移动的第一跳位移必须直接达到 16 像素,以便跨越组件库内置的判定约束; - 如果位移模拟拖得太慢,极易中途触发容器的自动滚动机制,导致放置落点整体漂移失效。
另一处严谨的工程细节在于执行环境解耦。DSH 桌面端自身的主进程同样基于 Electron 运行,如果在该主进程内直接跑这类重型自动化脚本往往会卡死。插件因此独立衍生出独立的 Node.js 子进程来处理脏活累活,甚至专门编写了一段探测脚本,用于在不同的操作系统环境里稳健定位宿主机器上真正的 Node 可执行文件路径。根据开发轨迹记录,作者在单日内连续发布了三个 DSH 插件,该画图插件是其中的第三款,当晚连发 8 个 Git Commit,版本一路从零推进到 `0.3.0`,而最初的首次提交就是一个多达 1400 行代码的完整可用工程。
[03:49](https://www.bilibili.com/video/BV1xfx56JEP2?t=229s) 本地客户端派与云端 API 的生态光谱
从生态光谱的角度来看,DSH 社区里的画图插件虽然已经存在一批,但以往所有作品无一例外走的是云端 API 路线:包括对接 OpenAI 兼容端点、对接第三方聚合服务商,或是借道 ChatGPT 订阅逆向生图。而走本地桌面客户端驱动路线的,`dsh-doubao-painter` 堪称独一份。
这里存在一笔显而易见的经济账: - **官方 API 成本**:各大商业生图 API 单张成本通常在 0.2 元左右,如果高频调用画 1000 张图,直接开销约合 200 元,相当于开通一个月高级会员服务的价格; - **客户端插件成本**:直接归零,全额消耗绑定豆包账号享有的每日免费生图额度。
更关键的是,这种白嫖方式拿到的并非阉割后的“残血模型”。豆包生图底层依托的是字节跳动自研的 Seedream 模型,其在中文文字排版、字体渲染以及东方语境理解上的表现正是其招牌长项。作者在插件的工具元数据描述中甚至直接建议:“中文海报这类活优先让它干”。由平台激进的水印策略反向倒逼出来的刚性诉求,在社区里找到了这种极客味道十足的解法。
[04:52](https://www.bilibili.com/video/BV1xfx56JEP2?t=292s) 必须清醒算清的五笔账
在展示出惊人性价比的同时,作者与评测者也对这套机制保持了极为克制的清醒态度,列出了使用该插件必须面对的“五笔账”:
| 风险 / 限制维度 | 核心表现与潜在后果 | |:--- |:--- | | **1. 原图获取成功率** | 模拟点击预览弹窗在内部有失败概率;一旦失败系统只能退回带水印的 384 缩略图,甚至抛出 `LF-EA` 错误需要完全重跑一遍。 | | **2. 平台猫鼠游戏** | 去年 11 月豆包就曾收紧策略一度给原图挂上水印,后来又放开;“原图无水印”仅是当前分发策略的短暂状态而非永久契约,一旦豆包前端界面改版或调整模板参数,插件即刻失效。 | | **3. 条款与合规风险** | 豆包用户协议明文禁止使用外挂工具干扰服务运行及模拟批量下载行为,违者平台有权在不通知的情况下直接限制功能或执行封号。此外,依据《互联网信息服务深度合成管理规定》等标识办法,AI 生成内容对外公开发布时依然负有显著标识义务。 | | **4. 本地工程限制** | 方案目前仅支持 Windows 操作系统;仅支持单任务串行队列;生图过程中由于需要操控真实 DOM,豆包客户端前台窗口会被抢占,用户在此期间不能乱动鼠标键盘。 | | **5. 开源协议严谨性** | 虽然项目宣称基于 MIT 协议,但仓库代码根目录下并没有随附完整的 LICENSE 授权许可证全文,法律严格定性上仅属于口头“声明 MIT”。 |
关于合规义务,作者特别在文档中作出了免责自留提醒,说明“这个插件解决的是素材被平台标志污染,不是让你绕过标识义务”。
[05:59](https://www.bilibili.com/video/BV1xfx56JEP2?t=359s) 终局判断:UI 自动化是穷人的接口层
该插件从零星关注到社区发酵,具象化示范了 AI Agent 时代的一种生存实用主义逻辑:当巨头大厂不开放免费、低门槛的开放接口时,开发者自然会调转方向,把本地桌面客户端直接当成 API 接口来用。
这种基于 CDP 协议的浏览器自动化路线展现出独特的生态位:“UI 自动化是穷人的接口层”。相比于不稳定的桌面级纯图像找图模拟点击,CDP 能够深入 DOM 和内部事件,稳定性高出不少;而相比于直接逆向服务端加密协议,它并不篡改任何传输数据,安全防护穿透风险低,灰色程度相对低了一档。它并没有侵入平台盗取他人数据,仅仅是在让用户自己的设备和账号代劳干活。
然而,依托免费额度、抢占真实窗口、高度耦合 DOM 结构的寄生方式,注定了其脆弱的生命周期。一旦大厂开始较真或底层前端架构重构,这条依赖 UI 自动化的通道随时面临中断。
撇开环境风险,技术实现中最具价值的核心洞察依然值得反复玩味:“水印是分发层的参数,不是源头的宿命。很多怎么去掉的问题,答案其实是根本不用去。”
后续该生态有三件事值得紧密跟踪: 1. 豆包官方是否会在 CDN 分发层统一收紧规则,对大图预览模板加盖水印; 2. 插件作者正在提交的 Skill 路线新版本,能否成功绕过脆弱的 UI 渲染直接调用豆包在本地留存的底层能力; 3. 大厂面对此类客户端外挂式自动化工具,是否会开启系统性封控与法务整治。该开源仓库可在 GitHub 检索 `dsh-doubao-painter` 查阅。
## Notable quotes > [05:59](https://www.bilibili.com/video/BV1xfx56JEP2?t=359s) UI 自动化是穷人的接口层 — AI技术投降派
> [05:59](https://www.bilibili.com/video/BV1xfx56JEP2?t=359s) 水印是分发层的参数,不是源头的宿命。很多怎么去掉的问题,答案其实是根本不用去。 — AI技术投降派
## Mentioned DSH, 豆包, dsh-doubao-painter, Chrome 调试协议 (CDP), Electron, 字节跳动, Seedream, Node.js, Puppeteer, Playwright, OpenAI, ChatGPT, GitHub, Windows
## Video description DSH 里的 agent 有个尴尬:写代码十项全能,画一张图都费劲。接 API 要 Key 按张收费;用本机豆包吧,它是会画,可存下来的图带着水印。十月二十六号上 GitHub 的这个插件叫 dsh-doubao-painter,思路一次把两个问题都解了:用 Chrome 调试协议直接驱动豆包桌面版,agent 一句话,豆包后台出图,拿回来的是无水印的 2K 原图。它最聪明的地方在水印上——豆包同一张图在 CDN 上有两个版本:聊天里能存的是 384×216 缩略图,烧着"豆包 AI 生成";点开预览才挂出 2848×1600 的原图,没有水印。两个网址同一个骨架,只差一段模板名。水印是 CDN 的模板参数,压根没烧进原图。作者 README 原话:去水印的最便宜解,是根本不去。
00:05 双版本洞察:去水印的最便宜解是根本不去 01:24 机制:手写 60 行 CDP 客户端,四步出图 02:44 加分设计:"DSH 和豆包的秘密画室" 03:49 生态光谱:API 派之外独一份的客户端派 04:52 清醒五笔账:条款、猫鼠游戏与限制 05:59 判断:穷人的接口层
它怎么驱动的?豆包桌面版是 Electron 应用,插件用调试端口把它启动,手写约六十行代码直连调试协议——零第三方依赖。四步:开新对话(点按钮,兜底发 Ctrl+Shift+K);输入提示词(用 insertText 触发编辑器事件,比直接改内容可靠;图生图直接把路径塞进隐藏文件框);等图(每 1.5 秒扫一遍,专挑网址带"生成图"标记的);点开拿原图(对图片中心连发五种鼠标事件,预览弹出抓 2848 网址,按返回类型存盘——豆包实际给的是 webp)。加分设计:"秘密画室"自动归档(普通对话 20 秒出图,出完拖进自动创建的豆包项目,拖拽注释全是踩坑:按下后立刻移动超过 5px 激活阈值、第一跳 16px 越过拖拽库约束);独立 Node 子进程绕开 Electron 限制。作者一天发三个 DSH 插件,本仓当晚 8 个提交从零到 0.3 版。
生态里画图插件全是 API 派,走本地客户端路线的独一份。经济账:官方生图 API 约 0.2 元一张,插件路线成本为零吃每日免费额度——而且白嫖的不是残血版,豆包底层是字节 Seedream,中文文字渲染恰是招牌。清醒五笔账:原图不保证每次拿到(点预览失败退回缩略图);猫鼠游戏(去年 11 月豆包一度给原图也加水印又放开,"无水印"是当前策略不是永久契约);条款风险实锤(协议禁止外挂干扰与模拟下载,可不通知封号;作者自留提醒:按标识办法,AI 生成内容对外发布仍应显著标识);仅 Windows、串行、占真实窗口;协议写着 MIT 但没放许可证全文。判断:大厂不开放免费 API,就把客户端当 API 用——UI 自动化是穷人的接口层;最值得记的洞察是:水印是分发层的参数,不是源头的宿命。仓库在 GitHub 搜 dsh-doubao-painter。
[Source](https://www.bilibili.com/video/BV1xfx56JEP2)