把手机本地生图接进对话,出图放大重绘全在本地
31.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 133563825as-ai/dsh-localdream该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · vision
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 32 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-localdream(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=18.17 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/10 15:48:50
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 20 处,展示前 20 条)
- 发起网络请求client/client.js:171
const response = await fetch(url, init) - 读取本地文件src/http.js:103
data = await readFile(path) - 写入本地文件src/output.js:113
await mkdir(dir, { recursive: true }) - 写入本地文件src/output.js:117
await writeFile(path, decoded.data) - 写入本地文件src/output.js:142
await mkdir(dir, { recursive: true }) - 写入本地文件src/output.js:145
await writeFile(path, data) - 读取本地文件src/store.js:138
const text = await readFile(path, 'utf-8') - 写入本地文件src/store.js:150
await mkdir(dirname(path), { recursive: true }) - 写入本地文件src/store.js:152
await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, 'utf-8') - 写入本地文件src/store.js:153
await rename(temporary, path) - 删除本地文件src/store.js:216
await unlink(this.paths.settings).catch(() => {}) - 删除本地文件src/store.js:264
await unlink(this.paths.models).catch(() => {}) - 删除本地文件src/store.js:269
if (Object.keys(presets).length === 0) await unlink(this.paths.models).catch(() => {}) - 读取本地文件src/store.js:281
entries = await readdir(this.paths.prompts) - 写入本地文件src/store.js:347
await mkdir(this.paths.prompts, { recursive: true }) - 删除本地文件src/store.js:360
await unlink(join(this.paths.prompts, `${safe}.json`)) - 读取本地文件src/tools/enhance.js:189
buffer = await readFile(imagePath) - 读取本地文件src/gallery.js:54
entries = await readdir(dir) - 读取本地文件src/gallery.js:65
const info = await stat(path) - 读取本地文件src/draw-core.js:112
buffer = await readFile(path)
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 本地NPU生图接入对话
- 文生图与图生图
- 四倍放大与分块重绘
DeepSeek Harness 插件:将手机端 Local Dream 的本地 NPU 生图接入对话,含文生图、图生图、四倍放大与分块重绘。
README
由 DeepSeek 最新模型翻译生成dsh-localdream
开源(MIT)的 DeepSeek Harness 专用插件:把手机端 Local Dream 的本地 NPU 生图接进对话 —— 一句话出图、图生图、放大与分块重绘,全程只跟本机 loopback 说话,不走云端、不计费、无内容审查。
插件不内置任何模型清单、不预设任何画风偏好:基准尺寸与默认步数 / CFG / 采样器全部从 Local Dream 后端现读,换模型、换机器都照样能用。属于你自己那台机器的偏好(默认负面词、比例、per-model 参数、提示词模板)都放在容器里的普通 JSON 文件里,随时可查可改。
运行期零依赖:dependencies 与 peerDependencies 都是空的,不需要软链、不需要 npm install,装它不会动你现有的任何东西。详见安装一节。
前置条件
1. 手机上装了 Local Dream(3.0.0-alpha.3 及以上实测通过,更低版本未验证)。
2. 在 App 里手动打开受控模式 —— 这一步只能手点:
Local Dream → 模型列表右上角 ⋮ → 设备互联 → 受控模式区块 → 「进入受控模式」
受控模式的服务在 AndroidManifest.xml 里是 exported="false",外部唤起不了,插件也不会替你去点。
展开完整文档(README 剩余 1 节)
dsh-localdream
开源(MIT)的 DeepSeek Harness 专用插件:把手机端 Local Dream 的本地 NPU 生图接进对话 —— 一句话出图、图生图、放大与分块重绘,全程只跟本机 loopback 说话,不走云端、不计费、无内容审查。
插件不内置任何模型清单、不预设任何画风偏好:基准尺寸与默认步数 / CFG / 采样器全部从 Local Dream 后端现读,换模型、换机器都照样能用。属于你自己那台机器的偏好(默认负面词、比例、per-model 参数、提示词模板)都放在容器里的普通 JSON 文件里,随时可查可改。
运行期零依赖:dependencies 与 peerDependencies 都是空的,不需要软链、不需要 npm install,装它不会动你现有的任何东西。详见安装一节。
前置条件
1. 手机上装了 Local Dream(3.0.0-alpha.3 及以上实测通过,更低版本未验证)。
2. 在 App 里手动打开受控模式 —— 这一步只能手点:
Local Dream → 模型列表右上角 ⋮ → 设备互联 → 受控模式区块 → 「进入受控模式」
受控模式的服务在 AndroidManifest.xml 里是 exported="false",外部唤起不了,插件也不会替你去点。
打开后会暴露两个端口,插件就用这两个:
| 端口 | 性质 | 用到的端点 |
| 127.0.0.1:8808 | 控制口(JSON API) | GET /info /models /status,POST /select /stop |
| 127.0.0.1:8081 | 生成口(native 后端) | POST /generate(SSE)、POST /upscale(raw body) |
自检:
curl -s --max-time 6 http://127.0.0.1:8808/info
{"app":"localdream","protocol":1,"version":"3.0.0-alpha.3","device":"..."}
没有响应就是受控模式没开或被系统回收了,回 App 里重点一次 —— 重试不会让它自己起来。
安装
git clone https://github.com/133563825as-ai/dsh-localdream.git ~/dsh-localdream
dsh plugin --profile web add link:~/dsh-localdream
装完重启 dsh 才生效。验证装上了:
dsh --profile web --dump-config | grep -A3 dsh-localdream
不需要装依赖,也不会碰你的环境
插件运行期零依赖:它只 import Node 内置模块,dependencies 和 peerDependencies 都是空的。
所以不要往插件目录里放 node_modules,也不要在那里跑 npm install —— 不需要。这一点是刻意的:
- 如果插件目录里有一条 node_modules -> <宿主>/node_modules 的软链,任何人误在插件目录跑一次 npm install,都会顺着链接把包写进宿主的 node_modules,污染整个 dsh 安装。这个插件从设计上不留这个口子。
- 插件不注册全局命令、不改宿主文件、不写 profile 之外的路径。它只做三件事:注册工具、在 <DSH_HOME>/localdream/ 下读写自己的 JSON、往 webServer 挂一组 /localdream/ 接口。
- 卸载就是 dsh plugin --profile web remove dsh-localdream,删掉目录即可;<DSH_HOME>/localdream/ 留着不影响任何东西,想一起清掉就删它。
这一条是给别人用的前提。 一台机器上装几十个插件时,最怕的不是功能少,而是某个插件在你没注意的时候动了别人的东西。
六个工具
| 工具 | 作用 |
| ld_status | 受控模式在不在线、当前挂着哪个模型、后端状态、生成口是否可连、已装模型与放大器清单。出图前先跑它。 |
| ld_select | 显式挂载模型并等到可出图。ld_draw 的 model 只在后端被回收时才重挂,想主动换模型得用它。 |
| ld_draw | 文生图 / 图生图。 |
| ld_enhance | mode="upscale" ×4 放大;mode="ultrafix" 分块重绘。 |
| ld_config | 查看与修改容器里的使用偏好、per-model 参数预设。 |
| ld_prompt | 提示词模板库:存、列、看、删。 |
典型对话:
帮我画一张在雨里撑伞的少女,竖版 → ld_draw({ prompt: '...', aspectRatio: '3:4' })
把这张图放大四倍再重绘成高清的 → ld_enhance({ mode: 'upscale', image: '...' }) → ld_enhance({ mode: 'ultrafix', image: '...', prompt: '...' })
出图与后处理流程
ld_status → ld_draw → ld_enhance(upscale) → ld_enhance(ultrafix)
1024 图 ×4 放大 分块重绘
一个容易搞混的点:UltraFix 本身不放大。它吃一张已经是目标尺寸的大图,按 tile 切开做分块 img2img 再混合重叠区。所以顺序永远是先放大、再 UltraFix。
upscale 的请求体是 raw RGB24,所以输入必须是 PNG(ld_draw 的默认输出格式就是 PNG,可以直接喂)。UltraFix 的输入走 base64,PNG / JPEG 都行。
UltraFix 只被 SD1.5 QNN 与 SDXL QNN 后端支持,MNN / Anima / DiT 后端会直接报 ultrafix not supported by this backend。
容器里的配置与提示词
都落在 <DSH_HOME>/localdream/(通常是 /root/.dsh/localdream/),全是普通 JSON,可以直接编辑:
localdream/
├── settings.json 使用偏好 ├── models.json per-model 参数预设 ├── prompts/ 提示词模板,一个模板一个 JSON └── out/ 出图输出
用工具改(推荐,会做校验):
ld_config({ action: 'show' })
ld_config({ action: 'set', key: 'defaultAspectRatio', value: '3:4' })
ld_config({ action: 'set', key: 'models.<模型id>.cfg', value: '6' })
ld_config({ action: 'reset', key: '' })
ld_prompt({ action: 'save', name: '雨夜少女', prompt: '...', aspectRatio: '3:4', steps: 30 })
ld_prompt({ action: 'list' })
然后出图时带模板名即可套用:
ld_draw({ template: '雨夜少女' })
每次调用都重新读盘,改完立即生效,不需要重启宿主。
settings.json 的键
| 键 | 说明 | 默认 |
| defaultNegativePrompt | 默认负面提示词(cfg > 1 时生效) | 内置通用质量词表 |
| defaultAspectRatio | 默认宽高比 | 1:1 |
| defaultCount | 默认连出张数 | 1 |
| defaultOutputFormat | 默认落盘格式 | png |
| defaultModel | 后端被回收时默认重挂哪个模型 | 空(必须显式指定) |
| maxBatch | 单次连出张数上限 | 2 |
maxBatch 默认 2 是有意的:手机 NPU 一次连出更多会持续高负载、发热甚至顶掉内存。想要更多张,优先分多次调用。
参数从哪来
同一个数字可能在四个地方被定义,优先级从高到低:
1. 调用方显式传参 —— 这次出图的入参
2. 提示词模板 —— ld_prompt 存的模板里带的 steps / cfg / scheduler
3. 容器预设 —— models.json 里为该模型存的值
4. 后端模型默认值 —— /models 报出的该模型自己的 defaults
5. 全局兜底 —— 20 步 / CFG 7 / dpm
第 4 层是整个插件通用性的关键:它让插件适配任意模型,而不是绑定某一台机器上装了什么。工具返回里会有一个 参数来源 告诉你这次用的是哪一层。
已知限制与常见坑
- width / height 是无效字段。 真正决定成图尺寸的是 aspect_ratio:长边固定为该模型的基准尺寸(generation_size),短边按比例换算后向 8 的倍数取整(3:2 → 682.7 → 680,不是 683)。
- 后端对不认识的字段一律静默忽略。 图生图的输入图字段只有 image 一个;写成 init_image / input_image / image_base64 会照常返回一张 txt2img 的图,且不报任何错。
- cfg = 1.0 等于关掉负面提示词分支,此时 negativePrompt 写了也没用。要让它生效就把 cfg 提到 5~7。
- 图生图的输入图尺寸必须等于 aspectRatio 的换算值,否则后端报 Img size mismatch。先用 convert in.png -resize 576x768^ -gravity center -extent 576x768 out.png 标准化。
- /select 的宽高只改状态回显,不影响成图。
- 避开 _turbo 模型:吃内存,在 12G 机器上容易把后台进程一起挤掉。
排障
| 症状 | 原因 | 对策 |
| ld_status 报未在线 | 受控模式被回收或没开 | 回 App 里重点「进入受控模式」 |
| 状态 idle、8081 无监听 | native 后端被系统回收 | ld_draw 已内置自愈,会自动重挂(代价是一次冷启动) |
| 出图报「没有收到 complete 事件」 | 后端在生成中途被回收 | 重跑一次;仍失败先 ld_select 再重试 |
| gen 出来的却是上一个模型 | 后端还热着旧模型 | 用 ld_select 显式切换,别指望 ld_draw 的 model 主动换 |
| HTTP Error 404 on /select | host 在 idle 切换的窗口期偶发 | 重跑一次;仍 404 就 ld_select 重来 |
| 出图很慢(> 90s) | 冷启动未预热 | 正常,第二张起回到热态速度 |
| Img size mismatch | 图生图输入图尺寸不符 | 按 aspectRatio 换算值标准化 |
| ultrafix not supported by this backend | 当前后端不支持 | 换 SD1.5 QNN / SDXL QNN 后端的模型 |
稳定性建议:App 里的 「纯黑屏幕(保持运行)」 能保持屏幕常亮、避免 doze 回收;系统设置里给 Local Dream 开电池不优化 / 后台锁定。
界面
侧边栏底部一枚胶囊(压在「导出会话日志」上面),点开是完整面板。视觉沿用这套 GUI 既有的设计语言:--dsw-* 令牌,胶囊的尺寸与描边对齐同区域的 session-log pill,图标直接用宿主原语库里的官方图标(取法与 dsh-web-mobile 一致,取不到才回落到自绘 SVG)。
| 位置 | 内容 |
| 侧边栏胶囊 | 状态灯 + 图标 +「本地生图」+ 当前状态(模型名 / 15/29 / 未连接) |
| 点开后的面板 | 出图(提示词、模板、模型、比例、步数、CFG、采样器、张数 → 出图并预览)· 历史(输出目录里的图)· 模型(设备上已下载的模型与放大器,可一键切换)· 提示词(模板增删改)· 设置 |
| 设置 → 连接地址 | 胶囊形输入框,可手填控制口 / 生成口地址,带「测试连接」与「恢复自动」 |
面板里出的图和 Agent 调 ld_draw 出的图走的是同一条链路(src/draw-core.js),参数解析规则完全一致。同一时刻只允许一个出图任务:手机 NPU 扛不住并发。
连接地址:自动还是手动?
默认自动。 Local Dream 的受控模式固定监听 127.0.0.1:8808(控制口)与 127.0.0.1:8081(生成口),插件直接连,不需要填任何东西。注意这里没有"发现"过程——端口是 Local Dream 写死的,不是扫描出来的。
需要时才手动覆盖:只有把 Local Dream 跑在别处(另一台设备、端口转发)才用得上。在面板「设置 → 连接地址」里填,两个输入框都留空就等于恢复自动。改完下一次请求就生效,不用重启宿主。
地址的合法性在写入时就校验:必须 http(s)://host:port,不接受带路径或查询串的值。
开发
npm test # node --test,96 项,离线,秒级
npm run check # 逐个文件的语法检查
测试不需要装任何东西(没有 node_modules 也能全绿)—— 这本身就是「零依赖」这条约束的回归测试。
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
133563825as-ai/dsh-localdream
把手机本地生图接进对话,出图放大重绘全在本地
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,364已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,709已汉化DSH
71.8
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,319已汉化DSH
71.5
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,533已汉化DSH
71.1
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 93,105已汉化DSH
71.1
这是你的仓库?认领条目