DeepSeek Harness 插件 —— 对话式游戏本地化:跟 AI…
43.5/100
综合分
24
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Drhushi/dsh-plugin-tav2该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · vision
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 34 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/21) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-plugin-tav2(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.19.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 15:47:44
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 59 处,展示前 59 条)
- 读取本地文件src/cli/config.ts:30
if (!existsSync(configPath)) return null - 读取本地文件src/cli/config.ts:32
const raw = yaml.load(readFileSync(configPath, 'utf8')) as unknown - 读取本地文件src/cli/config.ts:92
if (!existsSync(configPath)) return notFound(configPath) - 写入本地文件src/cli/config.ts:108
writeFileSync(configPath, yaml.dump(raw), 'utf8') - 执行外部命令来自配置/变量src/cli/doctor.ts:36
const child = spawn(python, ['--version'], { windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] }) - 读取本地文件src/cli/doctor.ts:95
ok: repo !== '' && existsSync(repo), - 读取密钥环境变量src/cli/doctor.ts:106
const keySet = Boolean(process.env.TRANSLATE_API_KEY?.trim()) - 读取本地文件src/cli/main.ts:222
if (!existsSync(join(projectDir, 'config.yaml'))) { - 读取本地文件src/cli/main.ts:696
hasProjectConfig: existsSync(join(projectDir, 'config.yaml')), - 发起网络请求src/client/workspacePanel.js:497
fetch(sceneUnitsUrlOf(dir, sessionId, sceneId)) - 发起网络请求src/client/workspacePanel.js:581
fetch(url) - 发起网络请求src/client/workspacePanel.js:637
const res = await fetch(url) - 发起网络请求src/client/workspacePanel.js:779
const res = await fetch(url) - 读取本地文件src/core/fingerprint.ts:42
const buf = readFileSync(path) - 读取本地文件src/core/fingerprint.ts:53
const root = existsSync(join(gameRoot, 'game')) ? join(gameRoot, 'game') : gameRoot - 读取本地文件src/core/fingerprint.ts:60
entries = readdirSync(dir, { withFileTypes: true }).map((e) => ({ - 读取本地文件src/core/fingerprint.ts:88
const names = readdirSync(gameRoot).filter((n) => /\.exe$/i.test(n)) - 执行外部命令固定命令src/core/fingerprint.ts:100
const res = spawnSync('powershell', ['-NoProfile', '-NonInteractive', '-Command', script], { - 读取本地文件src/core/fingerprint.ts:116
if (existsSync(changelog)) { - 读取本地文件src/core/fingerprint.ts:117
const first = readFileSync(changelog, 'utf8') - 写入本地文件src/core/fingerprint.ts:217
mkdirSync(projectDir, { recursive: true }) - 写入本地文件src/core/fingerprint.ts:218
writeFileSync(join(projectDir, 'fingerprint.json'), `${JSON.stringify(fp, null, 2)}\n`, 'utf8') - 读取本地文件src/core/manifest.ts:43
const buf = readFileSync(path) - 读取本地文件src/core/manifest.ts:55
entries = readdirSync(dir, { withFileTypes: true }).map((e) => ({ - 写入本地文件src/core/manifest.ts:94
writeFileSync(readmePath, 'tav2 补丁式交付物(占位)\n', 'utf8') - 写入本地文件src/core/manifest.ts:114
writeFileSync(readmePath, `${readmeLines.join('\n')}\n`, 'utf8') - 写入本地文件src/core/manifest.ts:117
writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8') - 读取本地文件src/core/manifest.ts:124
if (!existsSync(path)) return null - 读取本地文件src/core/manifest.ts:126
const raw = JSON.parse(readFileSync(path, 'utf8')) as Tav2Manifest - 读取本地文件src/core/tav2.ts:158
return existsSync(bundled) ? bundled : '' - 执行外部命令来自配置/变量src/core/tav2.ts:283
child = spawn(config.python, pythonArgs, { - 执行外部命令来自配置/变量src/engine/bridge.ts:48
const result = spawnSync(config.python, args, { - 读取本地文件src/engine/config.ts:356
const text = readFileSync(path, 'utf8') - 读取本地文件src/engine/config.ts:450
if (!existsSync(join(legacyDir, 'db.sqlite'))) return null - 读取本地文件src/engine/config.ts:451
if (existsSync(join(projectDir, 'db.sqlite'))) return null - 写入本地文件src/engine/config.ts:453
mkdirSync(projectDir, { recursive: true }) - 写入本地文件src/engine/db.ts:275
mkdirSync(dirname(path), { recursive: true }) - 读取本地文件src/engine/discover.ts:19
const text = readFileSync(configPath, 'utf8') - 读取本地文件src/engine/discover.ts:67
if (!statSync(root).isDirectory()) return out - 读取本地文件src/engine/discover.ts:79
if (statSync(configPath).isFile() && isTav2Config(configPath)) out.push({ dir, configPath, depth }) - 读取本地文件src/engine/discover.ts:86
entries = readdirSync(dir, { withFileTypes: true }) - 发起网络请求src/engine/http.ts:51
const res = await fetch(endpoint, { - 读取密钥环境变量src/engine/memory.ts:179
|| process.env.TRANSLATE_AGENT_API_KEY - 发起网络请求src/engine/memory.ts:183
const response = await fetch(`${cfg.llm.baseUrl.replace(/ $/, '')}/embeddings`, { - 读取本地文件src/engine/panel.ts:146
if (!snapshotDir || !existsSync(snapshotDir)) return {} - 读取本地文件src/engine/panel.ts:149
const files = readdirSync(snapshotDir).filter((f) => f.toLowerCase().endsWith('.jsonl')) - 读取本地文件src/engine/panel.ts:188
if (!existsSync(file)) return [] - 读取本地文件src/engine/panel.ts:189
const raw = readFileSync(file, 'utf8').split('\n').filter(Boolean) - 读取本地文件src/engine/panel.ts:209
if (!existsSync(file)) return [] - 读取本地文件src/engine/panel.ts:210
const raw = readFileSync(file, 'utf8').split('\n').filter(Boolean) - 写入本地文件src/engine/recording.ts:34
mkdirSync(dirname(filePath), { recursive: true }) - 写入本地文件src/engine/recording.ts:36
appendFileSync(filePath, `${JSON.stringify(record)}\n`, 'utf8') - 写入本地文件src/engine/review.ts:35
mkdirSync(projectDir, { recursive: true }) - 写入本地文件src/engine/review.ts:81
writeFileSync(path, rows.map((row) => row.map(csvCell).join(',')).join('\r\n') + '\r\n', 'utf8') - 读取本地文件src/engine/review.ts:105
const text = readFileSync(path, 'utf8').replace(/^/, '') - 读取本地文件src/mode.ts:73
const raw = readFileSync(statePath, 'utf8') - 写入本地文件src/mode.ts:101
mkdirSync(dirname(statePath), { recursive: true }) - 写入本地文件src/mode.ts:102
writeFileSync(statePath, JSON.stringify(state, null, 2) + '\n', 'utf8') - 读取本地文件src/mode.ts:118
const raw = readFileSync(statePath, 'utf8')
扫描于 2026/11/3(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh-agent@deepseek-ai/dsh-code-runtime@deepseek-ai/dsh-invariants@deepseek-ai/dsh-jobs@deepseek-ai/dsh-llm@deepseek-ai/dsh-scope@deepseek-ai/dsh-session@deepseek-ai/dsh-skill@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 对话式游戏翻译
- 引擎适配器架构
- 支持Ren'Py
展开完整介绍(73 字)↓
DeepSeek Harness 插件 —— 对话式游戏本地化:跟 AI 助手说说话,完成游戏翻译全流程。引擎适配器架构,首发支持 Ren'Py。
README
由 DeepSeek 最新模型翻译生成dsh-plugin-tav2
DeepSeek Harness 插件 —— 对话式游戏本地化:跟 AI 助手说说话,从侦察、术语、翻译到打包验证一站完成
[!WARNING]
本项目已停止维护(2026-09-30)。后续以独立产品 GameTrans 继续(Windows 免安装版,不再依赖 DeepSeek Harness 插件形态);本仓库只读归档,不再接受 issue 与 PR。
装过插件的请按下方「卸载」一节彻底移除。 它对会话的提示词注入是运行时挂载的:在 cordis.patch.yml 写 disabled: true、或关掉设置里的开关,都不算卸载;普通卸载也可能留下残留,继续影响你的会话。
展开完整文档(README 剩余 1 节)
dsh-plugin-tav2 DeepSeek Harness 插件 —— 对话式游戏本地化:跟 AI 助手说说话,从侦察、术语、翻译到打包验证一站完成 [!WARNING] 本项目已停止维护(2026-09-30)。后续以独立产品 GameTrans 继续(Windows 免安装版,不再依赖 DeepSeek Harness 插件形态);本仓库只读归档,不再接受 issue 与 PR。 装过插件的请按下方「卸载」一节彻底移除。 它对会话的提示词注入是运行时挂载的:在 cordis.patch.yml 写 disabled: true、或关掉设置里的开关,都不算卸载;普通卸载也可能留下残留,继续影响你的会话。最稳妥的完整流程: powershell -ExecutionPolicy Bypass -File scripts/uninstall-plugin.ps1 -ProfileDir "$env:USERPROFILE\.dsh\profiles\web" -PurgeState -Apply 然后逐项手工确认(脚本只隔离、不代删): - 彻底重启 harness(重开会话不算)后,新会话不应再出现「游戏汉化翻译协调者」persona 与 tav2_ 工具; - ~/.dsh/.credentials.yaml 里的 TAV2_ 密钥自行删除,对应的渠道 key 建议轮换; - cordis.patch.yml 无 - id: tav2 块;settings.yaml 无 tav2: 命名空间块; - .agent-presets/tav2-translator/ 与 ~/.dsh/dsh-plugin-tav2/ 已随 -PurgeState 移入隔离目录。 这是什么 一个装进 DeepSeek Harness 的插件,把 AI 翻译流水线接进对话:翻译由模型完成,你只需要跟助手说话,从初始化、翻译到打包部署,全程由标准工作流推进。 - 对话式全流程:说一句「初始化游戏翻译」,助手探测游戏、生成配置、给出翻译计划,你确认后才动手; - 补丁式非侵入:不碰原游戏任何文件,交付物是可合并的补丁包(含 manifest 清单与版本指纹),删除清单所列文件即可完全还原; - 游戏更新不怕:按版本指纹与稳定 ID 做增量迁移,已有译文自动保留,只补译变化的部分; - 翻译质量基建:术语扫描与推敲锁定、世界书提名制(按三问判据推荐值得出卡的设定级实体)、审校队列、完整性校验、运行时三层验证(文件层 / 运行时层 / 实机确认),一站到底; - 多引擎适配器架构:一套工作流对接不同游戏引擎,新引擎以适配器形式接入;当前已落地 Ren'Py 适配器(见下方「引擎支持」)。 引擎支持 | 引擎 | 状态 | 说明 | | Ren'Py | ✅ 完整支持 | 非侵入写 tl/<lang>、CJK 字体配方、游戏内语言菜单切换 | | Unity(Yarn Spinner 等对话系统) | 布局可识别,适配器待落地 | 探测能认出 Unity 布局并明确提示「暂未适配」,不会误报成探测失败 | | 其他引擎 | 暂未适配 | 识别不到时明确提示;欢迎提 issue 讨论适配 | Ren'Py 补充说明: - 普通 .rpy 源码游戏开箱即用;遇到 .rpyc 已编译游戏需要 Ren'Py SDK,配置 renpySdk 后 prepare 走官方路线——自动反编译、模板直接写入游戏目录 game/tl/<lang>,无需切换项目,语言切换可立即进游戏验证;反编译源码参考放 <游戏根>/tav2_src/(工作材料,不进补丁包,封包时可传 clean_source=true 清理); - 交付物为 game/tl/<lang> 下的增量文件,游戏内语言菜单选中文即可生效; - CJK 字体等运行时组件属于「运行时前置条件」,需用户自行安装,不进补丁包、tav2_verify 会做存在性自检。 前置要求 - DeepSeek Harness ≥ 0.1.5-rc.1(Web 版,Node.js ≥ 22.19)。 0.1.5-rc.2 为实机验证版本;0.1.5-rc.1 经逐符号核对(本插件用到的 ToolCallId、snapshotEvents、 dsh-persona.prefix、Remote 设置通道均在该版本的包内)。更早的 dsh 上服务端工具仍可用,但设置卡会显示「Remote 通道缺失」降级提示(0.1.5 起才有 remote.settings / remote.credentials 通道); - 一个游戏(当前需为 Ren'Py 游戏,目录内含 game/;其他引擎支持情况见「引擎支持」); - 可用的 LLM 翻译通道:DeepSeek API Key,或一个本地 OpenAI 兼容端点(在「设置 → 插件 → 翻译渠道」配置)。 安装 方式 A:从 GitHub Release 安装(推荐) 每个版本在 Releases 页有一份预构建资产(.tgz,已含 dist/ 与客户端 bundle),装它不需要 clone 仓库、也不需要自己构建: $ver = '0.2.1' # 换成你要装的版本 $tgz = "https://github.com/Drhushi/dsh-plugin-tav2/releases/download/v$ver/dsh-plugin-tav2-$ver.tgz" pnpm -C "$env:USERPROFILE\.dsh\profiles\web" add $tgz 首次安装(或换 profile)后,确认 profile 的 package.json(或 pnpm-workspace.yaml)放行了原生模块构建:pnpm.onlyBuiltDependencies 含 better-sqlite3,否则启动会报 sqlite 绑定错误。 方式 B 的安装脚本会自动处理这一步。 方式 B:从仓库安装(适合改代码/跟着 main 走) 先在仓库里构建(link: 安装加载的是构建产物 dist,不构建会加载缺失/旧的 dist) pnpm install pnpm build 再把插件挂进 profile(先不加 -Apply 可预览改动,确认后再真正安装) powershell -ExecutionPolicy Bypass -File scripts/install-plugin.ps1 -ProfileDir "$env:USERPROFILE\.dsh\profiles\web" -PluginPath "<本仓库绝对路径>" -Apply 安装完成后重启 GUI(客户端 bundle 是 harness 启动时的快照,只重开聊天不生效),设置 → 插件应出现 dsh-plugin-tav2 卡片。 2. 新建工作区:把工作区文件夹设为游戏根目录(含 game/) 3. 对助手说「初始化游戏翻译」→ 生成最小配置,全套翻译工具自动就绪 4. 助手先只读侦察(tav2_detect / tav2_status),列出翻译计划等你确认 5. 翻译:助手按场景分批翻译(tav2_translate_batch),完成后自动校验 6. 打包部署:tav2_pack 生成补丁包 → 把 <游戏名> 目录合并进游戏根目录 7. 游戏内语言菜单选中文,启动游戏核对(tav2_verify 可复查) 翻译是补丁式非破坏产物,只增量写目标语言目录;卸载用 tav2_uninstall 按清单精确删除。 卸载 插件的挂载点是 profile 的 package.json(dependencies + dsh.profile.bundles)。 在 cordis.patch.yml 里写 - id: tav2 / disabled: true 只是压住加载行,插件仍留在 bundles 里;要彻底停止它对所有会话的影响,必须从 profile 摘除挂载并重启 harness。 ⚠️ 设置卡里的「翻译模式」开关不是加载门控:插件按工作区自动安装翻译作用域(游戏工作区全套 / 普通工作区轻量引导包),关掉开关不会阻止它在新会话里生效。 真正能关掉它的只有「卸载 + 重启」。 用仓库自带的卸载脚本(默认 dry-run,先预览再 -Apply): 1. 预览将做的改动(不写任何文件) powershell -ExecutionPolicy Bypass -File scripts/uninstall-plugin.ps1 2. 真正卸载,并把插件状态残留隔离到 ~/.dsh/_tav2-removed-<时间戳>/ powershell -ExecutionPolicy Bypass -File scripts/uninstall-plugin.ps1 -ProfileDir "$env:USERPROFILE\.dsh\profiles\web" -PurgeState -Apply 脚本做四件事: 1. package.json:从 dependencies 与 dsh.profile.bundles 移除 dsh-plugin-tav2(改前留 .bak-uninstall-<时间戳>); 2. cordis.patch.yml:删掉所有 - id: tav2 块(含 disabled: true 那条)及其紧邻的插件注释行,其余条目原样保留; 3. node_modules:删除插件链接——junction / 符号链接只删链接本身,不会沿链接删进插件目录; 4. -PurgeState:把插件持久状态与历史遗留移进隔离目录(可恢复,不硬删): ~/.dsh/dsh-plugin-tav2/(记着你的游戏目录、翻译渠道、Ren'Py SDK 路径)、 .agent-presets/tav2-translator/、profiles/translation.bak-、cordis.patch.yml.bak-tav2-、以及 settings.yaml 里的 tav2: 命名空间块。 它不碰 ~/.dsh/.credentials.yaml:里面 TAV2_ 密钥请自行删除,并到渠道服务商处轮换;脚本只列出凭据名,绝不代删。 脚本宁可报错也不假报成功:条目识别容忍 - id: tav2 / - id: "tav2" / - id: tav2 # 注释 三种写法,写盘后还会复查残留(仍在就报错退出,而不是打印「已就绪」)。若 tav2 条目位于嵌套列表里(例如写在 - insert: 块内),自动删除会在父条目下留下空壳、破坏 patch 语义,脚本拒绝改写并提示手工删除这些行后重跑——此时不会写任何文件。 -PurgeState 还会列出它不动的残留,供你按需处理:插件市场自己的开关记录(profiles/web/.dsh-market/state.json)、失效的 node_modules/.bin/tav2kit 垫片、 node_modules.bak- 里的旧链接、以及本次卸载产生的 .bak-uninstall- 备份。 装的是 Release 资产(方式 A)时也可以手工等价操作: pnpm -C "$env:USERPROFILE\.dsh\profiles\web" remove dsh-plugin-tav2,再删掉 cordis.patch.yml 里的 - id: tav2 块,然后重启。 最后彻底重启 harness(重开会话不算——插件是在进程启动时挂载的),确认「设置 → 插件」里不再有卡片、/tav2-mode 命令消失、新会话不再出现翻译 persona 与 tav2_* 工具。 游戏里的翻译补丁是另一回事:交付物按 manifest 精确清理(tav2_uninstall),与本节的「卸载插件」互不影响。卸载插件不会动你已交付的翻译产物。 常用工具 | 工具 | 用途 | | tav2_init | 初始化翻译项目(对话式引导,生成最小配置) | | tav2_status | 项目状态:场景 / 单元 / 待译 / 翻译通道 / 授权 | | tav2_prepare | 生成翻译模板 | | tav2_terms / tav2_deliberate | 术语管理:扫描候选、推敲并锁定译名 | | tav2_worldbook | 世界书提名制:聚合证据按三问判据推荐候选实体,确认后才生成资料卡 | | tav2_translate_batch | 分批翻译(后台任务,完成自动通知) | | tav2_check | 完整性校验(标识符 / 标签 / 说话人)+ 模板外残留对账(角色名 / 输入提示词) | | tav2_pack | 打包补丁式交付物(含 manifest 清单;打包前自动收尾对账,自动生成角色名补丁) | | tav2_verify | 运行验证(格式 / 覆盖 / 字体 / 实机核对指引) | | tav2_migrate | 游戏更新后增量迁移译文 | | tav2_uninstall | 按清单精确卸载补丁 | 常见问题 - 装完启动报 sqlite 绑定错误:profile 的 package.json 里 pnpm.onlyBuiltDependencies 需包含 better-sqlite3(方式 B 的安装脚本会自动处理)。 - 升级 dsh 后设置卡显示「Remote 通道缺失」:dsh < 0.1.5 没有 Remote 设置通道;升到 ≥ 0.1.5-rc.1 后重启 harness 即可(服务端工具不受影响)。 - 更新插件后看不到变化:客户端 bundle 是 harness 启动时的快照 —— 先确认 dist/ 是新的(方式 A 的资产自带 dist/;方式 B 要自己 pnpm build),再彻底重启 harness,然后刷新页面。 - 翻译报「LLM 调用失败」:检查翻译通道——设置 → 插件 → 翻译渠道, baseUrl 与密钥配好,或确保本地端点已启动。 - 游戏更新后:跑 tav2_migrate 增量迁移,保留未变译文、只补译变化部分。 - 版权:翻译前请确认你拥有翻译 / 发布该游戏的授权(G-1 授权记录:tav2_compliance)。 - 非侵入:插件不修改任何原游戏文件,交付物均为新增补丁,删除即还原。 - 在设置卡里关掉「翻译模式」,新会话却仍按翻译流程走:该开关不是加载门控(插件按工作区自动分级安装,开关字段已废弃),要停止影响只能卸载插件并重启 harness,见「卸载」。 - 装了插件后每个工作区都被当成翻译现场:插件对普通工作区只装轻量引导包(tav2_detect / tav2_init / tav2_select_project / tav2_status + 引导 persona),这也是它会影响所有新会话的原因;不想要就按「卸载」摘除。 许可 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Drhushi/dsh-plugin-tav2
DeepSeek Harness 插件 —— 对话式游戏本地化:跟 AI…
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,359已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,514已汉化DSH
71.8
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,289已汉化DSH
71.6
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 92,675已汉化DSH
71.2
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,522已汉化DSH
71