Overview
dsh-yuanbao-t2i
README / EN
Package documentation
Registry summary
dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.
Read the full README on GitHubLIMITATIONS
Known limitations
- 文生图一次固定 4 张图,尺寸由 `imageRatio`/`imageResolution` 决定(实测 16:9+1.5K → 1680×928、16:9+2K → 2240×1248、3:4+1.5K → 1088×1440;不指定则由元宝服务端决定),单张 3MB 左右;**图生图实测只返回 1 张**。 - **同一提示词不可复现(`seed` 已移除)**:2026-10-21 全量扫描(98 个前端 bundle + 全部请求体 + SSE)证实元宝协议层没有 seed 落点,`extra.image_gen_param` 结构上只有 `model`/`ratio`/`resolution` 三个键。既然做不到,v0.9.0 干脆把 `seed` 参数**删掉**——与其留一个只回显、永不起作用的参数让人误以为能锁种子,不如让「不能复现」这件事在调用时就看得见。 - **比例/分辨率依赖「AI 生图」模式存在**:若元宝改版或该账号没有这个模式,插件会退化为「不设比例」(日志会写「未指定比例/分辨率/模型 → 走默认对话生图路径」),不会崩。 - 水印 ROI 按 2026-10 的版面量得(默认 `x 0.710–0.992, y 0.878–0.996`,只包住文字本体);元宝改版面后需重新量,或用环境变量 `DSH_WM_ROI` 覆盖。 - 掩膜默认走**内部自适应**(`auto`:先紧贴字形检,不可信才整块),但**极端画面仍可能失效**:水印与背景亮度差小于 3 个灰度级时无法分离。`auto` 的降级判据是**命中率可信区间**:检出命中率不在 `[0.5%, 25%]` 内 ⇒ 自动降级 `rect`(重修面积变大);修完还有**残痕自检**(残留 ≥ `max(0.4%, 35%×原始命中)` 就用 `rect` 重修)。排障时可用环境变量 `DSH_WM_MASK=rect` 强制整块重绘,或调 `DSH_WM_ROI`。 - **去水印失败不会再被静默吞掉**(v0.8.1):v0.8.0 及更早,工具入口漏传日志回调 ⇒ 去水印报错被 catch 吞掉,调用仍返回 `ok: true` + **带水印的原图**。现在返回 `watermarkError`(非空=没成功,`files` 是原图)并在界面提示里写明。 - **水彩 / 中灰背景图上 `tight` 可能漏字**(2026-10-20 实测):元宝水印是半透明灰字,在中灰水彩底上与背景亮度差 < 15 灰度级且分布几乎完全重叠 ⇒ 逐像素阈值原理上不可分,掩膜可能整块落在背景纸纹上而水印文字残留。已试过 blackhat / 局部差 / adaptiveThreshold / 行投影+列峰等结构先验方案,16 张样本上均不能可靠定位文字行(暗底图文字区反差能量仅为背景的 1.5–2.3 倍,信号弱于纸纹)⇒ 未接入。遇到这类图请用环境变量 `DSH_WM_MASK=rect`(整块重绘,不会漏字但重修面积大)。 - ⚠️ **v0.10.0 更新**:检测器已换成 v2 口径(位置先验 + 局部中值背景 + MAD,见「内部自适应掩膜」一节),上述「逐像素固定阈值不可分」的结论**不再直接适用于当前实现**——v0.10.0 的 20 张真样本里水彩/木纹/带鸟的水彩都走通了 `auto`(无一张降级)。上文 2026-10-20 的读数保留为旧口径下的历史记录;若在新口径下仍遇到残影,同样用 `DSH_WM_MASK=rect` 兜底。 - **图生图已实测打通**(2026-10-20):参考图走**元宝前端原生上传通道**(点「添加」→「上传图片」→ 前端动态创建的 `input[type=file]`),前端自己完成 `genUploadInfo` → COS PUT → `asyncFileParse`,发送时自动把 `multimedia[]` 填进 `/api/chat/` 请求体 ⇒ **不需要自己做签名**。实测产物与参考图灰度 NCC = **0.79–0.88**(同提示词纯文生图对照组仅 0.01–0.18)⇒ 参考图确实被采用。 - ⛔ 曾尝试自研上传(`genUploadInfo` + HMAC-SHA1 + COS PUT + `TIMImageElem`)⇒ **失败**:元宝不认 `X-Token`/`X-ID`(那是 hermes-agent 的旧协议),实际要 `x-hy92`/`x-hy93`/`x-id` + 前端侧签名,逆无可逆。 - ✅ **v0.6.2 修复:上传时不再弹系统「打开」文件框**(2026-10-21)。前端那一步是真实的 `input.click()`,浏览器会弹 Windows 原生文件对话框;patchright 只有在存在 `filechooser` 监听器时才下发 `Page.setInterceptFileChooserDialog`(见 `patchright-core/lib/coreBundle.js` 的 `fileChooserIntercepted()`),没监听 ⇒ 不拦截 ⇒ 系统框弹出后无人关闭,会一直压在桌面上。现改为**先注册 `filechooser` 监听、再点「上传图片」、用 `chooser.setFiles()` 灌文件**(不再用 `locator.setInputFiles`,那是 CDP 直灌、关不掉已弹出的原生框)。实测对照:旧写法会弹 `title='打开'` 的系统框,新写法全程无系统框。 - **临时会话轮次上限会自动重试**(2026-10-20):元宝的 `chatMode=temp` 临时对话累积轮次后会返回 `code 21003`「当前对话已达到对话次数上限」。插件捕获该错误后**自动重新载入临时会话**(实测重新加载 `chatMode=temp` 会拿到新的 `conversationId` 且仍是临时对话,不落历史)并重发一次(参考图会重新上传)。连续两次都撞上限才报错。 - **批量出图请用 `lib/session.js`(v0.10.7)**:一次 `launchPersistentContext`、同一个窗口连续出图——`openSession({ profileDir })` 拿到会话后反复 `session.generate({...})`,或用 `generateMany(session, jobs, { gapMs })` 自带间隔抖动与「连续失败即刹车」。2026-10-22 主号在 3 小时内批量出 45 张图生图后被元宝冻结(页面提示「账号已冻结 · 申诉处理中」),复盘第一嫌疑是**每张图都开关一次浏览器窗口**(旧实现每调一次 `generate()` 就 launch 一次、close 一次)⇒ 批量务必复用会话,并把节奏控制在每天 ≤40 张。 - **画风预设只接受 `image2image` 类模板**(v0.8.0):`text2image` 类(电商海报等成品场景模板)当画风用会和你自己的画面描述打架,插件会直接报错并提示换模板。 - **画风模板库是官方快照**:缓存 `~/.dsh/yuanbao-t2i-templates.json`,一周刷新一次;元宝改版后可能要手动删缓存重拉。首次拉取需要联网(走元宝自己的登录态)。 - LaMa 修复在白色背景 + 细纸纹图上仍可能留下轻微平滑痕——这也是「默认不去水印」的原因。
