AI 驱动的交互式 3D 模型生成、检查和演示工作台。
3D Model Studio 是一个 React + Three.js 原型,用于把上传图片或 GLB 文件变成可交互的 3D 模型工作区。它支持 WebGL 拖拽旋转、滚轮缩放、左侧模型库 / 中央 3D 舞台 / 右侧工具区、截图、GLB 导出、历史上传默认收起、Demo 演示模式、生成队列,以及通过 Hyper3D / Tripo / Fal.ai / Hunyuan3D / JS Depth / 本地模型导入生成或加载 3D 模型。
打开视频文件:演示 MP4
.env.local,不会暴露到前端包里。npm install
npm run dev
打开终端里显示的 Vite 地址即可。
默认页面会尽量减少干扰:
Model Library 固定展示当前激活的生成 / 导入资产。Saved Assets,默认折叠。Asset Source 用来选择生成模式或导入本地 .glb / .gltf。Generation Queue 可以查看上传、生成、导入状态,并对失败任务重试。Info 或 Inspect 打开详情抽屉。Library 可以查看完整资产库:预览、Provider 状态、任务 ID、GLB URL 复制、Provider 对比和删除。Demo 进入纯展示模式,适合截图、录屏、演示。常用验证命令:
npm run lint
npm run build
npm run test
npm run test:visual
npm run test:visual 会运行 Playwright 布局和截图回归,覆盖工作台、Model Library 抽屉和 Demo Mode。只有确认 UI 改动是预期变化时,才运行 npm run test:visual:update 更新截图基线。
创建 .env.local:
cp .env.example .env.local
然后设置:
TRIPO_API_KEY=your_tripo_key
FAL_API_KEY=your_fal_key
RODIN_API_KEY=your_rodin_api_key
OPENAI_API_KEY=your_openai_key
API_HOST=127.0.0.1
OPENAI_API_KEY 会启用可选的图片理解接口 /api/3d/analyze。配置后,上传图片会先被视觉模型识别为资产类型、材质重点、检查重点、展示场景、标签,并生成更适合 image-to-3D 的提示词。没配置时,应用继续使用本地文件名和元数据规则,不会影响基础上传和生成。
如需启用 Hunyuan3D 本地备用模式,先启动你的 Hunyuan3D API 服务,再设置:
HUNYUAN_API_BASE=http://127.0.0.1:8081
HUNYUAN_CREATE_PATH=/send
HUNYUAN_STATUS_PATH=/status
3D 生成后端支持这些路径:
Hyper3D 只走 Hyper3D Rodin 云端生成,默认模式
Tripo 只走 Tripo 云端生成
Fal 只走 Fal.ai 队列生成,具体模型在 Settings 里选择
Auto 先 Hyper3D,再 Tripo、Fal、Hunyuan,最后 JS Depth 兜底
Hunyuan 只走本地 Hunyuan3D
上传面板支持这些模式:
Hyper3D Hyper3D Rodin GLB 生成
Tripo Tripo 云端 GLB 生成
Fal Fal.ai 队列 GLB 生成
Hunyuan 本地 Hunyuan3D GLB 生成
JS Depth 浏览器侧图片深度浮雕,WebGL 不可用时降级到透明 PNG 分层
Auto Hyper3D -> Tripo -> Fal -> Hunyuan -> JS Depth 依次降级
Local GLB 导入已有 .glb 或自包含 .gltf
Tripo 上传使用当前 STS 对象存储流程,然后创建 image_to_model 任务。生成后的 GLB 会被 Node 后端缓存到 .generated-models/,后续展示优先使用本地副本。
Fal 上传使用官方 @fal-ai/client 的 storage 和 queue API。当前支持 Hunyuan3D v2、TRELLIS、TripoSR、Tripo3D v2.5 和 Hyper3D Rodin,具体 Fal 模型在 Settings 里选择。
Rodin 上传使用 Hyper3D 的 multipart /rodin 任务接口,然后轮询 /status 并通过 /download 下载和缓存 GLB。
前端模型库会保存到 IndexedDB,所以生成或导入成功的模型记录刷新后仍会恢复。
也可以从 New Upload 入口导入本地 .glb 或自包含 .gltf,导入后会成为自定义工作区模型。
Hunyuan3D 本地 API 预期形式:
POST /send
GET /status/:uid
状态接口可以返回远程模型 URL,也可以返回 model_base64 / glb_base64 这类 base64 GLB 字段。base64 GLB 会被缓存到 .generated-models/ 并由 Node 后端提供访问。
启动后端:
npm run dev:api
启动前端:
npm run dev
默认情况下,前端会访问本地 Node 后端 http://127.0.0.1:8787。
仓库内置了一些缓存 GLB:
public/generated-models/
这些模型可以让项目在不消耗 API credits 的情况下直接用于演示。
Library 面板内置了远程 Khronos glTF Sample Models 作为辅助参考,用于检查材质和 GLB 加载:
这些模型从 Khronos 已归档样例仓库远程加载,不打包进本仓库。
不要把真实 API Key 写进前端代码。密钥只放在 .env.local,该文件已被 git 忽略。
MIT