图像与设计
在本地用 GPU 从图片生成 3D 模型时,使用…
需要在 Windows/Linux 上以本地 GPU 将照片转成 3D mesh,并通过 Modly 的桌面应用、扩展或本地 FastAPI 集成生成流程时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在本地用 GPU 从图片生成 3D 模型特定
解决思路
- 按架构定位代码与扩展:前端是 Electron + TypeScript(src/main 主进程、src/renderer React UI、src/preload IPC 桥),后端是 Python FastAPI(api/generator.py、api/requirements.txt),扩展是含 manifest.json + generator.py 的 GitHub 仓库;启动脚本为 launcher.bat/launcher.sh,构建配置在 package.json。
- 快速启动:Windows 运行 launcher.bat;Linux 先执行 chmod +x launcher.sh,再执行 ./launcher.sh。
- 开发环境:执行 git clone https://github.com/lightningpixel/modly 并 cd modly。
- 安装 JS 依赖:执行 npm install。
- 设置 Python 后端:cd api;python -m venv .venv;Windows 激活 .venv\Scripts\activate;Linux/macOS 激活 source .venv/bin/activate;pip install -r requirements.txt;cd ..。
- 开发模式:运行 npm run dev,启动 Electron + Python 后端,支持热重载。
- 生产构建:运行 npm run build,为当前平台生成安装包,输出到 dist/。
- 使用 npm 脚本:npm run dev 开发热重载;npm run build 打包分发;npm run lint 运行 ESLint;npm run typecheck 做 TypeScript 类型检查。
- 创建扩展:扩展仓库根目录必须包含 manifest.json 和 generator.py,generator.py 实现 Modly 扩展接口。
- 编写 manifest.json:包含 name、id、description、version、author、repository、variants;每个 variant 包含 id、name、description、size_gb、vram_gb、files;每个 file 包含 url、filename、sha256。
- 实现 generator.py 的 generate 入口:签名为 generate(image_path, output_path, variant_id, models_dir, **kwargs) -> dict;从 models_dir/variant_id 加载权重;运行推理;将 mesh 导出到 output_path;成功返回 {'success': True, 'output_file': output_path},失败返回 {'success': False, 'error': str(e)}。
- 从 UI 安装扩展:打开 Modly → Models 页面 → 点击 Install from GitHub → 粘贴 HTTPS URL,例如 https://github.com/lightningpixel/modly-hunyuan3d-mini-extension → 安装后点击 Download 下载所需模型变体 → 选择已安装模型并上传图片生成。
- 使用官方扩展:modly-hunyuan3d-mini-extension,对应模型 Hunyuan3D 2 Mini。
- 调用本地 FastAPI 后端:关键路由包括 GET /extensions、GET /extensions/{id}、POST /extensions/install、POST /generate、GET /generate/status、GET /models、POST /models/download。
- 用 preload 暴露后端能力:在 src/preload/index.ts 中 import { contextBridge, ipcRenderer } from 'electron',然后 contextBridge.exposeInMainWorld('modly', { generate: (imagePath, extensionId, variantId) => ipcRenderer.invoke('generate', { imagePath, extensionId, variantId }), installExtension: (repoUrl) => ipcRenderer.invoke('install-extension', { repoUrl }), listExtensions: () => ipcRenderer.invoke('list-extensions') })。
- 在 main 进程处理 IPC:在 src/main/ipc-handlers.ts 中用 ipcMain.handle('generate', async (_event, { imagePath, extensionId, variantId }) => { const response = await fetch('http://localhost:PORT/generate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ image_path: imagePath, extension_id: extensionId, variant_id: variantId }) }); return response.json(); })。
- 在 renderer 调用:在 TypeScript 中声明 Window.modly 类型,包含 generate、installExtension、listExtensions;用 async 函数调用 window.modly.generate(imagePath, 'modly-hunyuan3d-mini-extension', 'hunyuan3d-mini-turbo'),若 result.success 则用 result.output_file 取 mesh 路径,否则用 result.error 输出错误。
- 编写自定义扩展最小结构:my-modly-extension/ 下放置 manifest.json 和 generator.py。
- 包装 HuggingFace 模型示例:generator.py 中 device = 'cuda' if torch.cuda.is_available() else 'cpu';weights_dir = Path(models_dir) / variant_id;从模型库导入 ImageTo3DPipeline;pipe = ImageTo3DPipeline.from_pretrained(str(weights_dir), torch_dtype=torch.float16).to(device);image = Image.open(image_path).convert('RGB');with torch.no_grad(): mesh = pipe(image).mesh;mesh.export(output_path);返回成功或异常错误。
- 配置与环境:Modly 完全本地运行,无需环境变量或 API key;GPU/CUDA 由 PyTorch 在扩展中自动检测;应用配置位于 package.json(Electron 元数据、构建目标)和 api/requirements.txt(Python 依赖);如需改后端端口或扩展目录,检查 Electron 主进程配置(通常 src/main/index.ts)中的 API_PORT 或 EXTENSIONS_DIR。
- 在扩展中检测 CUDA:import torch;若 torch.cuda.is_available() 为真,打印 torch.cuda.get_device_name(0) 并返回 'cuda';否则打印无 GPU、回退 CPU(慢)并返回 'cpu'。
- 从 generator.py 上报进度:定义 report_progress(percent, message) 并用 print(json.dumps({'progress': percent, 'message': message}), flush=True) 写入 stdout;在加载模型、处理图像、导出 mesh、完成等阶段分别上报,例如 0、30、90、100。
- 在 renderer 添加新页面:创建 src/renderer/pages/MyPage.tsx;用 React useEffect/useState;调用 window.modly.listExtensions().then(setExtensions);渲染扩展列表。
- 排查 npm run dev 后端未启动:确保已设置 venv:cd api && python -m venv .venv && pip install -r requirements.txt。
- 排查 CUDA out of memory:改用更小模型变体或关闭其他 GPU 进程。
- 排查扩展安装失败:验证 GitHub URL 为 HTTPS,且仓库根目录包含 manifest.json。
- 排查生成卡住:检查 GPU 驱动和 CUDA toolkit 是否与 requirements.txt 中 PyTorch 版本匹配。
- 排查 Linux 应用无法启动:chmod +x launcher.sh。
- 排查模型下载停滞:检查磁盘空间;大型模型 4–10 GB,需要足够空间。
- 排查扩展中 torch 未找到:确保 PyTorch 在 api/requirements.txt 中,而不只是扩展自身依赖。
- 验证 GPU 检测:cd api;激活 venv(source .venv/bin/activate 或 .venv\Scripts\activate);运行 python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'no GPU')"。
- 参考资源:主页 https://modly3d.app;发布版 https://github.com/lightningpixel/modly/releases/latest;官方扩展 https://github.com/lightningpixel/modly-hunyuan3d-mini-extension;Discord https://discord.gg/FjzjRgweVk;License 为 MIT,fork 中需署名 Modly + Lightning Pixel。
适用边界 · 注意事项
- 没有可用 GPU/CUDA 且不能接受 CPU 慢速推理时不宜使用。
- 需要 macOS 原生桌面应用、纯云端 API 或不想下载 4–10 GB 模型权重时不宜使用。
- 不愿安装 Electron、Python/FastAPI 本地环境或维护扩展依赖时不宜使用。