一张图进去,3D 模型出来——这个开源桌面应用全程跑在本地 GPU

图片转 3D 模型通常有两条路:用 Blender / ZBrush 手动建,或者上传到在线 AI 服务处理。Modly 是第三条——本地桌面应用,GPU 跑推理,不联网,代码完全开源。

技术栈是 Electron + React + TypeScript 做前端界面,Python FastAPI 做推理后端,C++ 和 CUDA 负责 GPU 加速。目前支持 Windows 和 Linux,macOS 尚未发布。

图片转 3D 的完整流水线

上传一张图片后,后端会依次经过 5 个阶段,前端通过轮询 /generate/status/{job_id} 获取进度:

阶段进度处理内容
背景移除5%rembg(ONNX 加速)抠图,得到透明背景 RGBA 图
形状生成12–70%Hunyuan3DDiTFlowMatchingPipeline 生成 3D 网格
纹理生成72–83%可选,Hunyuan3D Paint 模型为网格上色
网格优化85%Quadric Edge Collapse 四边形坍缩,减少顶点数
导出96%输出 GLB(二进制 glTF 2.0)格式

前端用 multipart/form-data 发起请求:

POST /generate/from-image
image: <binary>
model_id: "hunyuan3d-mini"
num_inference_steps: 30
octree_resolution: 380
guidance_scale: 5.5
seed: -1
enable_texture: false
vertex_count: 10000

生成完成后前端用 Three.js + @react-three/fiber 直接预览 GLB,不需要打开外部软件。

核心参数说明

生成质量主要由以下参数控制:

参数范围默认作用
num_inference_steps10–5030扩散步数,越高质量越好、耗时越长
octree_resolution256–512380网格分辨率,越高细节越多
guidance_scale1.0–10.05.5图像保真度,越高越贴近输入图片
seed-1 或正整数-1-1 随机,指定数值可复现结果
vertex_count10000网格简化目标顶点数

官方扩展中 num_inference_steps 提供三档预设:Fast (10步)、Balanced (30步)、High (50步),这些选项由扩展的 params_schema 定义,前端动态渲染成 UI 控件。

扩展系统:如何接入自定义模型

Modly 的模型层完全插件化,每个扩展是一个 GitHub 仓库,包含两个核心文件:

manifest.json:声明模型元数据、变体列表和参数定义

{
  "id": "hunyuan3d-mini",
  "generator_class": "Hunyuan3DMiniGenerator",
  "hf_repo": "tencent/Hunyuan3D-2mini",
  "models": [
    { "id": "hunyuan3d-mini",       "name": "Standard" },
    { "id": "hunyuan3d-mini-turbo", "name": "Turbo"    },
    { "id": "hunyuan3d-mini-fast",  "name": "Fast"     }
  ],
  "params_schema": [
    {
      "id": "num_inference_steps",
      "type": "select",
      "default": 30,
      "options": [
        { "value": 10, "label": "Fast (10 steps)" },
        { "value": 30, "label": "Balanced (30 steps)" },
        { "value": 50, "label": "High (50 steps)" }
      ]
    }
  ]
}

generator.py:继承 BaseGenerator 抽象基类,实现核心方法

class BaseGenerator(ABC):
    MODEL_ID: str = ""
    VRAM_GB: int = 0          # 最低显存需求(GB)
 
    def is_downloaded(self) -> bool: ...   # 检查权重文件是否存在
    def load(self) -> None: ...            # 加载模型到 GPU/CPU
    def generate(
        self,
        image_bytes: bytes,
        params: dict,
        progress_cb: Callable[[int, str], None] = None
    ) -> Path: ...                         # 返回生成的 .glb 路径
    def unload(self) -> None: ...          # 释放显存

扩展被克隆到 ~/.modly/extensions/ 后,应用启动时自动扫描并加载。官方扩展带有 RSA-256 签名验证,第三方扩展加载时会显示未签名警告,被篡改的扩展直接拒绝加载。

模型权重从 Hugging Face 下载,存储在 ~/.modly/models/,生成的 GLB 文件保存在 ~/.modly/workspace/

硬件要求

Modly 使用 CUDA 加速,主要针对 NVIDIA 显卡。以 Hunyuan3D 2 Mini 为例:

  • 最低显存:6GB
  • 推理精度:float16(CUDA)/ float32(CPU 回退)
  • 模型参数量:0.6B(轻量级)

Standard / Turbo / Fast 三个变体对应不同的生成速度和显存占用,可以根据硬件情况选择。

安装

直接下载(推荐)

Releases 页面 (opens in a new tab) 下载安装包,Windows 用 .exe,Linux 运行 ./launcher.sh

从源码启动

npm install
 
cd api
python -m venv .venv
# Windows: .venv\Scripts\activate / Linux: source .venv/bin/activate
pip install -r requirements.txt
 
npm run dev

启动后在 Models 页面安装扩展(输入 GitHub 仓库地址),下载模型权重后即可使用。

写在最后

Modly 目前还处于早期,官方只有 Hunyuan3D 2 Mini 这一个扩展,macOS 也还没支持。

架构上有两个地方值得关注:一是 Electron + FastAPI 的进程通信模式(localhost:8765)——这是在桌面端把 Python AI 推理和前端界面解耦的常见做法;二是扩展系统的设计,BaseGenerator 的抽象接口定义清晰,如果想把 TripoSR、InstantMesh 这类其他开源 3D 生成模型接进来,按规范实现一个 generator.py 就够了。

GitHub:https://github.com/lightningpixel/modly (opens in a new tab)