+9
-2
@@ -86,3 +86,3 @@ #!/usr/bin/env node | ||
| .description('GLBForge — make AI-generated 3D assets web-ready: analyze, optimize, extrude, scaffold.') | ||
| .version('0.2.0'); | ||
| .version('0.3.0'); | ||
| program | ||
@@ -145,2 +145,6 @@ .command('analyze') | ||
| .option('--bevel <m>', 'bevel radius on both rims (signage look)', parseFloat, 0) | ||
| .option('--layers <n>', 'layered color extrusion: quantize into N color layers (2-6)', (v) => parseInt(v, 10)) | ||
| .option('--layer-step <m>', 'extra depth per layer in meters', parseFloat) | ||
| .option('--pillow <m>', 'puffy-sticker dome height in meters (supersedes bevel)', parseFloat) | ||
| .option('--preset <name>', 'material preset: enamel | chrome | neon | acrylic | rubber') | ||
| .option('--bevel-segments <n>', 'bevel roundness: 1=chamfer, 3=rounded', (v) => parseInt(v, 10), 3) | ||
@@ -164,2 +168,4 @@ .option('--width <m>', 'world width in meters', parseFloat, 1) | ||
| bevel: opts.bevel, bevelSegments: opts.bevelSegments, | ||
| layers: opts.layers, layerStep: opts.layerStep, | ||
| pillow: opts.pillow, preset: opts.preset, | ||
| width: opts.width, simplify: opts.simplify, | ||
@@ -175,4 +181,5 @@ texture: opts.texture, color, metallic: opts.metallic, roughness: opts.roughness, | ||
| else { | ||
| const layerNote = stats.layerInfo ? `, ${stats.layerInfo.length} layers` : ''; | ||
| console.log(` ${outPath} (${(outBytes.byteLength / 1048576).toFixed(1)}MB) ` + | ||
| `${stats.outerLoops} shape(s), ${stats.holes} hole(s), ` + | ||
| `${stats.outerLoops} shape(s), ${stats.holes} hole(s)${layerNote}, ` + | ||
| `${stats.triangles.toLocaleString()} tris [mode=${stats.mode}]`); | ||
@@ -179,0 +186,0 @@ } |
@@ -117,3 +117,6 @@ import { createServer } from 'node:http'; | ||
| const depth = req.query.depth ? Number(req.query.depth) : undefined; | ||
| const { doc } = await extrudeImage(new Uint8Array(req.body), { bevel, depth }); | ||
| const layers = req.query.layers ? Number(req.query.layers) : undefined; | ||
| const pillow = req.query.pillow ? Number(req.query.pillow) : undefined; | ||
| const preset = req.query.preset ? String(req.query.preset) : undefined; | ||
| const { doc } = await extrudeImage(new Uint8Array(req.body), { bevel, depth, layers, pillow, preset }); | ||
| const io = await createNodeIO(); | ||
@@ -120,0 +123,0 @@ const outBytes = await io.writeBinary(doc); |
+4
-4
| { | ||
| "name": "glbforge", | ||
| "version": "0.2.0", | ||
| "version": "0.3.0", | ||
| "type": "module", | ||
@@ -15,5 +15,5 @@ "bin": { | ||
| "picocolors": "^1.1.0", | ||
| "@glbforge/meshy": "^0.2.0", | ||
| "@glbforge/studio": "^0.2.0", | ||
| "@glbforge/core": "^0.2.0" | ||
| "@glbforge/core": "^0.3.0", | ||
| "@glbforge/studio": "^0.3.0", | ||
| "@glbforge/meshy": "^0.3.0" | ||
| }, | ||
@@ -20,0 +20,0 @@ "devDependencies": { |
49460
1.78%985
1.03%+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
Updated
Updated
Updated