用 Google 账号权益在 DSH 里出图、做视频和音乐
30.9/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dtsummery/dsh-google-aistudio该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 57 处,展示前 46 条)
- 写入本地文件lib/index.js:166
mkdirSync(dir, { recursive: true }) - 读取本地文件lib/index.js:460
if (!existsSync(target)) return - 写入本地文件lib/index.js:461
mkdirSync(stashDir, { recursive: true }) - 读取本地文件lib/index.js:463
for (const name of readdirSync(stashDir).filter((n) => n.startsWith(`${clean}-`))) { - 删除本地文件递归lib/index.js:464
rmSync(join(stashDir, name), { recursive: true, force: true }) - 写入本地文件lib/index.js:467
renameSync(target, backup) - 读取本地文件lib/index.js:474
if (!existsSync(authDir)) return - 读取本地文件lib/index.js:475
for (const name of readdirSync(authDir)) { - 写入本地文件lib/index.js:477
mkdirSync(stashDir, { recursive: true }) - 删除本地文件递归lib/index.js:479
rmSync(target, { recursive: true, force: true }) - 写入本地文件lib/index.js:481
renameSync(join(authDir, name), target) - 读取本地文件lib/index.js:493
if (!existsSync(bin)) { - 执行外部命令来自配置/变量lib/index.js:497
execFile(bin, args, { cwd: dir, windowsHide: true, timeout: 600000 }, (error, stdout, stderr) => - 读取本地文件lib/index.js:512
].filter((entry) => entry.path && existsSync(entry.path)) - 删除本地文件lib/index.js:639
rmSync(`${kernelPath()}.part`, { force: true }) - 写入本地文件lib/index.js:718
mkdirSync(staged, { recursive: true }) - 发起网络请求lib/client.js:99
return fetch(API + path, { - 执行外部命令固定命令lib/kernel.js:176
execFile('tar', ['-xzf', archive, '-C', stage], { windowsHide: true, timeout: 120000 }, (error) => - 读取本地文件lib/kernel.js:181
if (!existsSync(found)) throw new Error('tar 包里没有找到 aistudio2api 可执行文件') - 写入本地文件lib/kernel.js:182
renameSync(found, destExe) - 删除本地文件递归lib/kernel.js:183
rmSync(stage, { recursive: true, force: true }) - 写入本地文件lib/kernel.js:193
mkdirSync(dir, { recursive: true }) - 写入本地文件lib/kernel.js:197
const out = createWriteStream(archive) - 读取本地文件lib/kernel.js:208
const exe = extractFromZip(readFileSync(archive), (name) => /aistudio2api\.exe$/i.test(name)) - 写入本地文件lib/kernel.js:209
writeFileSync(staging, exe) - 删除本地文件lib/kernel.js:213
rmSync(destExe, { force: true }) - 写入本地文件lib/kernel.js:214
renameSync(staging, destExe) - 删除本地文件lib/kernel.js:216
rmSync(staging, { force: true }) - 删除本地文件lib/kernel.js:219
rmSync(archive, { force: true }) - 读取本地文件lib/kernel.js:221
return { path: destExe, bytes: readFileSync(destExe).length, archiveBytes } - 写入本地文件lib/kernel.js:226
mkdirSync(join(path, '..'), { recursive: true }) - 读取本地文件lib/kernel.js:233
if (!existsSync(path)) return {} - 读取本地文件lib/kernel.js:235
for (const line of readFileSync(path, 'utf8').split(/ ? /)) { - 发起网络请求lib/kernel.js:267
const res = await fetch(`${this.base}${path}`, { - 发起网络请求lib/kernel.js:290
const res = await fetch(`${this.base}/health`, { signal: AbortSignal.timeout(3000) }) - 发起网络请求lib/kernel.js:299
return this.request('/api/status') - 发起网络请求lib/kernel.js:303
return this.request('/api/accounts') - 发起网络请求lib/kernel.js:307
return this.request('/api/control/start', { method: 'POST', timeout: 900000 }) - 发起网络请求lib/kernel.js:311
return this.request('/api/control/stop', { method: 'POST', timeout: 120000 }) - 读取本地文件lib/kernel.js:324
if (!binPath || !existsSync(binPath)) throw new Error(`内核不存在:${binPath}`) - 执行外部命令来自配置/变量lib/kernel.js:328
this.child = spawn(binPath, ['-open-ui=false'], { cwd: dir, stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true }) - 执行外部命令固定命令lib/kernel.js:368
execFile('taskkill', ['/PID', String(pid), '/T', '/F'], { windowsHide: true, timeout: 20000 }, () => resolve(undefined)) - 执行外部命令固定命令lib/kernel.js:399
execFile('netstat', ['-ano', '-p', 'tcp'], { windowsHide: true, timeout: 15000 }, (_error, out) => resolve(String(out ?? ''))) - 执行外部命令固定命令lib/kernel.js:406
execFile('taskkill', ['/PID', pid, '/T', '/F'], { windowsHide: true, timeout: 15000 }, () => resolve(undefined)) - 发起网络请求lib/adapter.js:202
const res = await fetch(`${this.deps.getBaseUrl()}/models`, { - 发起网络请求lib/adapter.js:312
res = await fetch(`${baseUrl}/chat/completions`, {
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-llm@deepseek-ai/dsh-settings@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-google-aistudio
把 Google AI Studio(aistudio.google.com)接进 DeepSeek Harness。插件托管 AIStudio2API 反代内核,并注册 aistudio-web provider,让你在 DSH 里直接用 AI Studio 的模型——走你的 Google 账号权益,不消耗 Gemini Developer API 配额。
支持 Nano Banana Pro 出图、Nano Banana 2、Veo 3.1 视频、Lyria 音乐、Gemini TTS,以及 Gemini 3.8 Flash / 3.1 Pro 等全系文本模型(以账户实际权益为准)。
为什么需要它
AI Studio 网页能选到 gemini-3-pro-image(Nano Banana Pro)这类模型,是因为模型的访问方式字段里含 Pro/Ultra 订阅权益;而官方 Developer API 免费层对同一批图模型限制为 limit: 0。这是两套互不相通的配额。
本插件把 AI Studio 网页协议转成 OpenAI 兼容 API 接到 DSH,于是订阅权益能直接用在 DSH 里。
展开完整文档(README 剩余 1 节)
dsh-google-aistudio 把 Google AI Studio(aistudio.google.com)接进 DeepSeek Harness。插件托管 AIStudio2API 反代内核,并注册 aistudio-web provider,让你在 DSH 里直接用 AI Studio 的模型——走你的 Google 账号权益,不消耗 Gemini Developer API 配额。 支持 Nano Banana Pro 出图、Nano Banana 2、Veo 3.1 视频、Lyria 音乐、Gemini TTS,以及 Gemini 3.8 Flash / 3.1 Pro 等全系文本模型(以账户实际权益为准)。 为什么需要它 AI Studio 网页能选到 gemini-3-pro-image(Nano Banana Pro)这类模型,是因为模型的访问方式字段里含 Pro/Ultra 订阅权益;而官方 Developer API 免费层对同一批图模型限制为 limit: 0。这是两套互不相通的配额。 本插件把 AI Studio 网页协议转成 OpenAI 兼容 API 接到 DSH,于是订阅权益能直接用在 DSH 里。 工作原理 DSH 会话 │ aistudio-web provider ▼ dsh-google-aistudio(本插件,host 侧) │ HTTP + Bearer key ▼ AIStudio2API 内核 (127.0.0.1:<port>) │ ① cookie + 三段 SAPISIDHASH 签名 ② WAA proof ▼ Camoufox 无头浏览器 ──► alkalimakersuite-pa.clients6.google.com (AI Studio 私有 RPC) 关键点:AI Studio 的 GenerateContent 要求请求里带一个 fresh WAA proof(Google BotGuard 内容证明),它只能由官方 VM 在真实浏览器页面里生成,纯 HTTP 无法伪造。所以内核会常驻一个无头 Camoufox(指纹与出口按账户固定)来产出 proof 并代发生成请求。其余管理类 RPC 走 Go 的纯 HTTP。 环境要求 - Windows 10+ / macOS / Linux - DSH 0.2.x(设置页走 0.2 的 Config / configForms 模型;0.1.x 上会因 @deepseek-ai/dsh-settings 没有 installSettingsSection 而整包加载失败) - 能访问 Google 的网络(必须配出口代理,直连会超时) - 一个已登录的 Google 账号(Pro / Ultra 权益能解锁更多模型) - 磁盘约 400 MB(内核约 30 MB + Camoufox 约 300 MB) 安装 dsh plugin --profile web add github:dtsummery/dsh-google-aistudio 装好后重启 DSH Desktop,然后打开「设置 → Google AI Studio」。 更新远端版本需要先 remove 再 add: dsh plugin --profile web remove dsh-google-aistudio dsh plugin --profile web add github:dtsummery/dsh-google-aistudio 首次配置 1. 出口代理:在设置页填 http://127.0.0.1:7897 这类可用的 HTTP 代理;留空则沿用 DSH 进程的 HTTPS_PROXY / HTTP_PROXY。 2. 下载内核:点「下载 / 更新内核」,插件会从上游 Release 拉取对应平台的包并解压到 ~/.dsh/aistudio/bin/。 3. 导入账户(三选一,推荐第一种): - 隔离登录(推荐):点「打开登录窗口」,会弹出一个独立的 Camoufox 浏览器窗口,在其中登录 Google 并进入 AI Studio。会话由内核自己的 Camoufox 持有,和生成时的 WAA 页面是同一指纹,能长期存活。 - 从浏览器导入:选一个本机已登录 AI Studio 的浏览器 User Data 目录(Chrome / Edge / Brave…),填上 Google 邮箱。这条路径尝试从浏览器里提取 DBSC 续签材料,成功的话可自动续期;但上游的导入实现是按 Chrome 写的,Edge 等派生浏览器不一定识别得到账号。 - 从文件导入:给一个 Playwright storage-state.json 路径(文件所在目录名或文件内 aistudio2api.source.email 会被当作账户标识)。⚠️ 这条路径只导入一次性 cookie,没有续签材料:Google 的 DBSC 票据(__Secure-1PSIDTS)在浏览器不活动时不会轮转,服务端几小时内就会作废,之后账户会变成「登录态已失效」,需要重新导出。适合临时试用,不适合长期使用。 4. 账户导入成功后内核会自动重启并重新载入;点「启动服务」拉起数据面(开了「自动拉起数据面」就不用管)。 重新导入会替换同名账户:点击导入前插件会先停掉内核,把已存在的 auth/<邮箱> 目录改名为 auth/.replaced-<邮箱>-<时间戳> 留档(同一邮箱只保留最近一份),再让内核写入新凭据。这一步是必需的——内核的 setup 用原子 rename 建目录,目标存在时会直接失败。 使用 在会话窗口的模型选择器里选 aistudio-web 下的模型即可。先确认设置页里已经勾选并保存了要用的模型。 设置页还能: | 操作 | 说明 | | 启动 / 停止服务 | 控制数据面。停止后生成请求返回 service_stopped | | 重启内核 | 改完配置或账户后手动重启 | | 打开内核管理页 | 进入内核自带的管理界面(日志、请求、模型、账户、配置) | | 发送测试 | 用当前选中的第一个模型跑一次真实生成,验证链路 | 配置项 | 项 | 默认 | 说明 | | enabled | true | 关闭后不启动内核、不注册 provider | | port | 0 | 内核端口,0 = 首次启动自动分配并记住 | | proxyUrl | 空 | 内核出口代理,影响下载与访问 Google | | accountEmail | 空 | 账户标识,用于导入与展示 | | browserRoot | 空 | 「从浏览器导入」的 User Data 目录 | | storageStatePath | 空 | 「从文件导入」的 storage-state 路径 | | autoStartService | true | 内核启动后自动拉起数据面 | | temporaryChat | true | WAA 预热页用临时对话,API 请求不落 AI Studio 历史 | | warmWorkers | 1 | 常驻预热账户数 | | requestTimeoutMinutes | 5 | 单次请求最大执行时间 | | kernelPath | 空 | 内核路径,留空用 ~/.dsh/aistudio/bin/ | | models | 见下 | 暴露给 DSH 的模型 id 列表 | 默认模型:gemini-3.8-flash、gemini-3.1-pro-preview、gemini-3-pro-image。 文件位置 | 路径 | 内容 | | ~/.dsh/aistudio/bin/ | 内核可执行文件 | | ~/.dsh/aistudio/.env | 内核配置(插件写入托管键,其余键保留) | | ~/.dsh/aistudio/plugin.env | 插件自有的端口与 API key | | ~/.dsh/aistudio/auth/<邮箱>/ | 账户凭据与运行时状态 | | ~/.dsh/aistudio/runtime/camoufox/ | 自动下载的 Camoufox | 排障 | 现象 | 处理 | | 「尚未下载反代内核」 | 点「下载 / 更新内核」;确认出口代理能访问 GitHub | | 内核起不来 | 看 DSH 日志里的 [dsh-google-aistudio] 行,以及内核管理页的日志 | | 账户行报「登录态已失效」 | 用「隔离登录」重新登录一次;若之前是「从文件导入」,说明 DBSC 票据已作废,那条路径本来就只有几小时寿命 | | 生成返回 service_stopped | 设置页点「启动服务」 | | 生成报 account_required | 没有可用账户,导入或重新导入账户 | | 内核启动失败且提到 Camoufox | 首次运行需要下载 Camoufox;检查网络与代理 | | 请求很慢 | 首次请求要 bootstrap WAA worker;另外 AI Studio 有分钟级配额,密集调用会被限流 | 免责声明 本插件把 AI Studio 的网页会话转换为 API。这会绕过官方 Developer API 的计费与配额路径,可能不符合 Google 的服务条款,存在账号被限制的风险。请自行评估后再用,建议低频使用、不要拿主账号做高并发。 致谢 反代内核来自 Mag1cFall/AIStudio2API(MIT),本插件只做进程托管与 DSH 接入,不含其源码。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
dtsummery/dsh-google-aistudio
用 Google 账号权益在 DSH 里出图、做视频和音乐
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1