本章复刻 ForgeCAD public kit 里的官方 benchmark 条目 3dprinter-gpt52codex,并补充视频里很有辨识度的键盘和官方可动灵巧手案例。官方 3D 打印机公开的是 README 表格、prompt 和 GIF 结果,public kit 与 assets 仓库里没有放出对应源码;灵巧手则有可运行示例 examples/mechanical/5-finger-robot-hand.forge.js。本章把官方公开动图、本地渲染和可运行脚本都放进同一条复现链路。
图 1 官方 benchmark 资产 3dprinter-gpt52codex-2026-02-13-14-36-06-v2.gif。来源是 KoStard/forgecad-public-kit README 中的 LLM Benchmarks 表格,GIF 文件托管在 KoStard/ForgeCAD-assets。
之前的小支架能说明 ForgeCAD 的基础命令,但视觉效果和官方宣传里的“复杂装配”差距比较大。3D 打印机案例更适合放在主 README:它有龙门框架、热床、X/Y/Z 运动部件、打印头、皮带、线材、料盘和控制盒,读者一眼能看懂这是一个完整的机电装配,而不是单个小零件。视频里的键盘也适合作为第二个案例:它不是机器人机构,但能展示 ForgeCAD 对密集重复结构、按键阵列、外壳倾角和局部强调色的表达能力。
这也更接近机器人教程需要强调的能力:不是只生成一个漂亮外壳,而是把结构关系写成可编辑参数。打印头 X 位置、热床 Y 位置、龙门 Z 高度、构建体积尺寸都写在脚本参数里,后续可以用同一份源码反复修改和验证。
| 字段 | 内容 |
|---|---|
| 官方仓库 | KoStard/forgecad-public-kit |
| benchmark 名称 | 3dprinter-gpt52codex |
| 时间与版本 | 2026-02-13 14-36-06 · v2 |
| 官方 prompt | Make a detailed home 3D printer, showing the internal details of how it should work. Add some params for controlling positions, etc. |
| 官方 GIF | https://raw.githubusercontent.com/KoStard/ForgeCAD-assets/main/benchmarks/3dprinter-gpt52codex-2026-02-13-14-36-06-v2.gif |
| 源码状态 | public kit 当前没有公开对应 .forge.js,本章使用本地复刻脚本演示可运行流程 |
复查命令如下:
git clone https://github.com/KoStard/forgecad-public-kit.git ..\forgecad-public-kit
git clone https://github.com/KoStard/ForgeCAD-assets.git ..\ForgeCAD-assets
rg -n "3dprinter-gpt52codex|Make a detailed home 3D printer|ForgeCADBenchmark" ..\forgecad-public-kit\README.md
rg --files ..\forgecad-public-kit | rg -i "3dprinter|gpt52|version_2|forge\.js$"
rg --files ..\ForgeCAD-assets | rg -i "3dprinter|gpt52"本机结论是:public kit 的 README 有官方表格行,ForgeCAD-assets 有 GIF,未找到公开的 3D 打印机 .forge.js 源文件。
本章保留的可复现资产如下:
图 2 本章复刻脚本生成的 3D 打印机装配。当前版本已经按官方 GIF 对齐了主要视觉特征:深色背景、黑色机架、银色导轨、蓝色热床、橙色加热板、青色构建体积框、右上红色料盘和前方控制盒。它仍然不是官方源码的逐行还原,而是围绕同一个 prompt 做的可运行教学版;如果要像素级一致,需要官方公开原始 .forge.js、相机和 scene 配置。
这个案例不需要创建新的 micromamba 环境。ForgeCAD 走 Node.js/npm CLI,渲染 PNG 时调用本机 Chrome;不涉及 PyTorch、CUDA 或机器人仿真依赖,也不吃显卡显存。
本机复现环境:
| 项目 | 本机设置 |
|---|---|
| 系统 | Windows PowerShell |
| Node.js | 22.16.0 |
| npm | 10.9.2 |
| ForgeCAD | npx --yes forgecad@0.9.14 |
| Chrome | C:\Program Files\Google\Chrome\Application\chrome.exe |
| GPU | 不需要;CLI 建模和导出主要走 CPU,渲染由 Chrome/WebGL 完成 |
安装检查:
node --version
npm --version
npx --yes forgecad@0.9.14 --version这类案例的本质是 AI-assisted CAD,而不是“图片直接变 CAD”。大模型负责把自然语言需求、参考图观察和工程结构拆解写成 .forge.js 源码;ForgeCAD CLI 再执行这份 JavaScript/TypeScript 脚本,调用自己的几何建模、布尔、装配、渲染和导出能力,生成可查看、可导出的 CAD 几何。也就是说,.forge.js 是 CAD 的源代码,不是最终 CAD 文件;最终可交换的几何结果仍然是 STEP、STL、3MF 等文件。
一个更准确的流程是:
flowchart LR
A["自然语言需求 / 官方 prompt"] --> B["大模型生成或修改<br/>.forge.js 源码"]
B --> C["ForgeCAD 执行脚本<br/>生成几何对象"]
C --> D["forgecad run<br/>参数与脚本检查"]
C --> E["forgecad render 3d<br/>截图 / GIF 帧"]
C --> F["forgecad export<br/>STEP / STL / 3MF"]
C --> G["forgecad check print<br/>制造边界检查"]
本地复刻脚本按 3D 打印机的真实功能模块拆成多个对象。这里没有把所有零件合并成一个大 union,因为官方 GIF 的可读性很依赖局部颜色:黑色框架、银色导轨、蓝色热床、橙色加热板、青色构建体积框和红色料盘都需要单独保留材质。
| 模块 | 脚本对象 | 说明 |
|---|---|---|
| 龙门框架 | frame |
立柱、上下横梁和脚垫,表达 CoreXY/盒式机架轮廓 |
| 热床 | orange heater plate / blue print bed / bed carriage and rails |
蓝色构建板、橙色加热板、Y 轴导轨和床车 |
| Z 轴 | z motion system |
Z 向光轴和丝杆 |
| 构建体积 | cyan build volume cage |
用青色细边框模拟官方图里的透明打印空间 |
| X 轴与打印头 | x gantry / print head / belts |
X 横梁、导轨、皮带轮、风扇、热端、喷嘴和散热片 |
| 料盘与耗材 | red spool / filament |
右上角红色料盘、支架和简化耗材路径 |
| 控制与细节 | front electronics / small details |
前方控制盒、屏幕、旋钮和局部导向件 |
关键参数集中在文件开头:
const headX = Param.number("Print Head X", 22, { min: -70, max: 70, unit: "mm" });
const bedY = Param.number("Print Bed Y", 12, { min: -45, max: 45, unit: "mm" });
const gantryZ = Param.number("Gantry Z", 128, { min: 70, max: 175, unit: "mm" });
const buildVolumeW = Param.number("Build Volume Width", 118, { min: 80, max: 150, unit: "mm" });
const buildVolumeD = Param.number("Build Volume Depth", 105, { min: 80, max: 135, unit: "mm" });这几个参数对应官方 prompt 中的 “params for controlling positions”。教程读者可以先只改这几个值,观察打印头、热床和构建体积如何变化。
进入本章目录:
cd 21-机械臂和机器人设计/03ForgeCAD视觉逆向工程入门运行 ForgeCAD 脚本:
npx --yes forgecad@0.9.14 run forgecad_3d_printer_demo.forge.js本机结果:
Objects: 13
Verifications: 5 pass, 0 fail
Params: Frame Width=180, Frame Depth=150, Frame Height=210,
Print Head X=22, Print Bed Y=12, Gantry Z=128,
Build Volume Width=118, Build Volume Depth=105
Time: 563ms
这里的 5 个验证包括整体宽度、深度、高度、龙门高度和打印头是否仍在机架内部。它们不是机械强度校核,只是防止参数改坏后模型明显失真。
渲染需要 Chrome 路径。本机命令如下:
$chrome = "C:\Program Files\Google\Chrome\Application\chrome.exe"
npx --yes forgecad@0.9.14 render 3d forgecad_3d_printer_demo.forge.js `
--output assets/forgecad_3d_printer_iso.png `
--camera 55:20 `
--background "#242424" `
--edges thin `
--render-style classic `
--chrome-path $chrome `
--fresh-server `
--port 5180
npx --yes forgecad@0.9.14 render 3d forgecad_3d_printer_demo.forge.js `
--output assets/forgecad_3d_printer_front.png `
--camera 70:18 `
--background "#242424" `
--edges thin `
--render-style classic `
--chrome-path $chrome `
--fresh-server `
--port 5181
npx --yes forgecad@0.9.14 render 3d forgecad_3d_printer_demo.forge.js `
--output assets/forgecad_3d_printer_top.png `
--camera 35:58 `
--background "#242424" `
--edges thin `
--render-style classic `
--chrome-path $chrome `
--fresh-server `
--port 5182如果大家想尽量接近官方 GIF 的观感,关键是这三点:使用深色背景 --background "#242424",使用 --render-style classic 保持更硬朗的 CAD 视图质感,并用 --camera 55:20 让右上角红色料盘和前方控制盒同时进入画面。官方没有公开原始 .forge.js、viewport scene、相机 JSON 和材质状态,所以无法保证像素级一模一样;要完全一致,只能拿到官方 benchmark 的源脚本和原始 viewport 配置。
图 3 前视图能更清楚地看到打印头、热床、Z 轴光轴和控制盒。
图 4 高俯视图能检查机架、料盘、皮带和热床位置关系。
本机三张图的渲染输出都报告了相同几何边界:
Size: 224.0 x 224.0 x 229.0 mm
Volume: 449408.0 mm3
Bounds: [-102.0,-108.0,-3.0] -> [122.0,116.0,226.0]
视频画面里的键盘很适合补充到本章后半部分。它和 3D 打印机的教学重点不同:3D 打印机强调复杂装配和运动部件,键盘强调规则阵列、外壳倾角、局部强调色和大量重复零件的组织方式。大家可以把它看成 ForgeCAD 的“产品外观 + 参数化阵列”练习。
键盘案例采用可复现建模脚本作为主体:forgecad_keyboard_demo.forge.js。视频画面用于帮助大家观察外观特征,教程里的结果则由本地脚本重新生成。脚本里保留了这些可调参数:
const cols = Param.number("Columns", 12, { min: 8, max: 14, unit: "keys" });
const keyPitch = Param.number("Key Pitch", 15, { min: 12, max: 18, unit: "mm" });
const caseAngle = Param.number("Case Angle", 6, { min: 0, max: 12, unit: "deg" });
const knobOffset = Param.number("Knob Offset", 0, { min: -18, max: 18, unit: "mm" });
const accentKeyX = Param.number("Accent Key X", 2, { min: -4, max: 4, unit: "keys" });运行键盘模型:
npx --yes forgecad@0.9.14 run forgecad_keyboard_demo.forge.js本机结果:
Objects: 5
Verifications: 4 pass, 0 fail
Params: Columns=12, Key Pitch=15, Case Angle=6, Knob Offset=0, Accent Key X=2
Time: 3127ms
渲染命令:
$chrome = "C:\Program Files\Google\Chrome\Application\chrome.exe"
npx --yes forgecad@0.9.14 render 3d forgecad_keyboard_demo.forge.js `
--output assets/forgecad_keyboard_iso.png `
--camera 48:31 `
--edges thin `
--render-style studio `
--chrome-path $chrome `
--fresh-server `
--port 5184
npx --yes forgecad@0.9.14 render 3d forgecad_keyboard_demo.forge.js `
--output assets/forgecad_keyboard_low_angle.png `
--camera 35:16 `
--edges thin `
--render-style studio `
--chrome-path $chrome `
--fresh-server `
--port 5185图 5 键盘等轴测图。这里重点看按键阵列、右侧旋钮、深色功能键区和红色点按键。
图 6 低视角更容易看出外壳厚度和轻微上扬的键盘角度。
键盘渲染输出的几何边界:
Size: 214.0 x 119.9 x 33.9 mm
Volume: 327930.0 mm3
Bounds: [-107.0,-58.2,-6.1] -> [107.0,61.7,27.8]
ForgeCAD public kit 顶部还有一个很吸引人的可动灵巧手 GIF。这个案例比键盘更适合机器人方向,因为它把参数、连杆、铰链、肌腱线缆和装配对象都放在同一个 .forge.js 里。我们直接复用官方示例:
Copy-Item ..\forgecad-public-kit\examples\mechanical\5-finger-robot-hand.forge.js `
.\forgecad_robot_hand_publickit.forge.js
npx --yes forgecad@0.9.14 run forgecad_robot_hand_publickit.forge.js本机结果:
Objects: 76
Params: Scale=1, Finger Curl=40, Thumb Curl=35, Finger Spread=8
Time: 530ms
“能动”的核心不是视频播放器,而是参数驱动姿态。下面 4 帧分别修改 Finger Curl、Thumb Curl 和 Finger Spread,再合成一个本地 GIF:
npx --yes forgecad@0.9.14 render 3d forgecad_robot_hand_publickit.forge.js `
--param "Finger Curl=45" `
--param "Thumb Curl=38" `
--param "Finger Spread=12" `
--output assets/forgecad_robot_hand_02.png `
--camera 42:28 `
--background "#101318" `
--edges thin `
--render-style classic `
--chrome-path $chrome图 7 本地用官方灵巧手示例渲染出的参数动作。大家可以把它理解为“低成本动画”:每一帧都是同一个 CAD 脚本在不同参数下的真实渲染,而不是手动剪视频。
官方动图也保存在本章,方便对比:
导出 STEP:
npx --yes forgecad@0.9.14 export step forgecad_3d_printer_demo.forge.js `
--output outputs/forgecad_3d_printer_demo.step导出 STL:
npx --yes forgecad@0.9.14 export stl forgecad_3d_printer_demo.forge.js `
--output outputs/forgecad_3d_printer_demo.stl导出 3MF:
npx --yes forgecad@0.9.14 export 3mf forgecad_3d_printer_demo.forge.js `
--output outputs/forgecad_3d_printer_demo.3mf键盘案例使用同样的命令,只需把脚本名和输出名换成 forgecad_keyboard_demo:
npx --yes forgecad@0.9.14 export step forgecad_keyboard_demo.forge.js `
--output outputs/forgecad_keyboard_demo.step
npx --yes forgecad@0.9.14 export stl forgecad_keyboard_demo.forge.js `
--output outputs/forgecad_keyboard_demo.stl
npx --yes forgecad@0.9.14 export 3mf forgecad_keyboard_demo.forge.js `
--output outputs/forgecad_keyboard_demo.3mf灵巧手同样可以导出:
npx --yes forgecad@0.9.14 export step forgecad_robot_hand_publickit.forge.js `
--output outputs/forgecad_robot_hand_publickit.step
npx --yes forgecad@0.9.14 export stl forgecad_robot_hand_publickit.forge.js `
--output outputs/forgecad_robot_hand_publickit.stl
npx --yes forgecad@0.9.14 export 3mf forgecad_robot_hand_publickit.forge.js `
--output outputs/forgecad_robot_hand_publickit.3mf本机输出文件大小:
| 文件 | 大小 |
|---|---|
forgecad_3d_printer_demo.step |
1.1 MB |
forgecad_3d_printer_demo.stl |
256 KB |
forgecad_3d_printer_demo.3mf |
54 KB |
forgecad_keyboard_demo.step |
3.2 MB |
forgecad_keyboard_demo.stl |
153 KB |
forgecad_keyboard_demo.3mf |
39 KB |
forgecad_robot_hand_publickit.step |
3.7 MB |
forgecad_robot_hand_publickit.stl |
717 KB |
forgecad_robot_hand_publickit.3mf |
261 KB |
STEP 更适合导入 CAD 软件继续编辑;STL/3MF 更适合切片软件预览。这个模型是教学装配,不是可直接打印的一体化零件。
命令:
npx --yes forgecad@0.9.14 check print forgecad_3d_printer_demo.forge.js本机结果是 FAIL,这不是脚本运行失败,而是检查器指出了装配展示模型不适合当作单件直接 FDM 打印:
Scene: 13 shape(s), 5128 triangle(s), bbox 224.0 x 224.0 x 229.0mm
PASS print.script.verifications: 5 script verification(s) passed.
FAIL print.geometry.collisions: 14 positive-volume collision(s) found.
FAIL print.fdm.wall-thickness: 1 object(s) have sampled wall area below 1.2mm.
WARN print.fdm.overhangs: 8 object(s) exceed 45deg unsupported overhang budget.
PASS print.mesh.validity: Meshes are closed and manifold at the sampled tolerance.
这正好是一个教学点:官方 GIF 展示的是复杂装配能力,不能把它等价成“整台打印机可一次性打印”。如果目标是制造,需要把机架、热床、导轨支座、打印头壳体等拆成单件,再分别加壁厚、倒角、螺孔、公差和支撑策略。
键盘案例也会得到类似的装配检查结论:
Scene: 5 shape(s), 3056 triangle(s), bbox 214.0 x 119.9 x 33.9mm
PASS print.script.verifications: 4 script verification(s) passed.
FAIL print.geometry.collisions: 4 positive-volume collision(s) found.
PASS print.mesh.validity: Meshes are closed and manifold at the sampled tolerance.
FAIL print.fdm.wall-thickness: 1 object(s) have sampled wall area below 1.2mm.
这里的碰撞主要来自键帽、外壳和功能区被当成同一个展示装配来检查。真实键盘外壳如果要打印,需要把键帽、底壳、上盖、旋钮和接口挡板拆成单独零件。
本机用 PowerShell 采样 cmd -> npm/npx -> node/chrome 子进程的 Working Set,得到大致峰值:
| 步骤 | 耗时 | 峰值内存 | 说明 |
|---|---|---|---|
forgecad run |
4.67 s | 262 MB | CLI 冷启动总耗时;ForgeCAD 自报建模时间约 0.5 s |
单张 render 3d |
7.77 s | 826 MB | 含 Chrome 渲染服务冷启动 |
export stl |
5.07 s | 未单独采样 | 输出 256 KB STL |
export 3mf |
5.10 s | 未单独采样 | 输出 54 KB 3MF |
export step |
19.41 s | 未单独采样 | 精确 STEP 导出更慢,输出 1.1 MB |
check print |
5.53 s | 未单独采样 | 网格检查约 5128 triangles |
键盘 run |
约 9.8 s | 未单独采样 | ForgeCAD 自报建模时间约 3.1 s |
键盘单张 render 3d |
约 15 s | 未单独采样 | 按键数量更多,冷启动渲染稍慢 |
键盘 export stl |
10.14 s | 未单独采样 | 输出 153 KB STL |
键盘 export 3mf |
8.13 s | 未单独采样 | 输出 39 KB 3MF |
键盘 export step |
30.81 s | 未单独采样 | 精确 STEP 导出 3.2 MB |
灵巧手 export stl |
3.94 s | 未单独采样 | 输出 717 KB STL |
灵巧手 export 3mf |
4.23 s | 未单独采样 | 输出 261 KB 3MF |
灵巧手 export step |
32.36 s | 未单独采样 | 精确 STEP 导出 3.7 MB |
这个量级对普通笔记本很轻,不需要 6GB 显卡。真正可能吃资源的是更复杂的曲面、布尔操作、超高分辨率网格或浏览器端动画渲染。
本章使用了两类资产。第一类是官方公开资产,例如 3dprinter-gpt52codex GIF、Robot Hand V2 GIF 和 public kit 里的灵巧手源码;这些用于帮助大家对齐官方展示效果。第二类是本地教学复刻脚本,例如 forgecad_3d_printer_demo.forge.js 和 forgecad_keyboard_demo.forge.js;这些用于让大家真正跑通“需求到源码、源码到 CAD 几何、几何到渲染和导出”的完整链路。
其中 3D 打印机 benchmark 当前公开了 GIF 和 prompt,没有公开对应 .forge.js。所以本章提供的是对齐官方视觉特征的教学版复刻;灵巧手示例则直接来自 public kit 的官方源码。
更推荐把需求写成“结构化工程任务”,而不是只说“生成一个好看的 3D 打印机”。例如:
请用 ForgeCAD 编写一个参数化 CoreXY 风格 3D 打印机 .forge.js。
要求包含:黑色方框机架、蓝色热床、橙色加热板、银色 Z 轴导轨、
X 轴横梁、打印头、皮带、右上角红色料盘、前方控制盒和青色构建体积框。
暴露参数:Print Head X、Print Bed Y、Gantry Z、Build Volume Width、Build Volume Depth。
返回对象要按模块命名,便于 render 时保留材质颜色。
最后添加 bounding box 和参数范围验证。
大模型生成初稿后,不要把结果当成最终 CAD。正确迭代方式是:运行 forgecad run 看脚本是否可执行;渲染 PNG 检查比例和视角;导出 STEP/STL/3MF 检查交换文件;必要时把错误信息或截图反馈给大模型,让它继续修改 .forge.js。
本章主线不需要。ForgeCAD 案例只依赖 Node.js/npm 和 Chrome 渲染,不涉及 PyTorch、CUDA 或机器人仿真环境。只有当大家把 ForgeCAD 和 Python CAD、仿真训练、机器人学习算法放进同一个实验工程时,才需要再考虑 micromamba 或 conda 环境隔离。
不能直接用于真实机器制造。它们是教学级参数化装配,用来演示 AI-assisted CAD、code-first CAD、复杂结构拆解、CLI 验证和文件导出。真实机械设计还要继续做强度、刚度、传动、公差、采购件、装配、材料和安全检查。
- ForgeCAD public kit:https://github.com/KoStard/forgecad-public-kit
- ForgeCAD assets:https://github.com/KoStard/ForgeCAD-assets
- ForgeCAD 文档:https://forgecad.io/docs
- ForgeCAD npm 包:https://www.npmjs.com/package/forgecad







