APP v0.9.0

step2glb — STEP → GLB converter (color-preserving)

Thin Rust CLI that converts STEP (.step/.stp) CAD files to GLB with per-face colors preserved, via the shared service-step2glb container (OCCT XCAF). Requires X-Client and X-Job-Name identity headers on all requests. Includes async job queue, content dedup, per-client rate limits, and live worker stats.

step2glb — STEP → GLB converter (color-preserving)
💬 Sample prompts Paste any of these into Claude Code to use this app
Convert this STEP file to GLB step2glb convert my-chip.step
Preview a STEP file in 3D step2glb preview my-chip.step
Check service health and worker load step2glb health
Generate thumbnails for a chip step2glb thumbnail my-chip.step --pose iso
Extract geometric features from a STEP step2glb features my-chip.step
Install this app

Paste this into Claude Code (VS Code panel, Adom editor, or terminal) to install:

I want to install the "step2glb — STEP → GLB converter (color-preserving)" app from the Adom Wiki (https://wiki-ufypy5dpx93o.adom.cloud/wiki/apps/step2glb). For the Docker CLI: curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/step2glb/step2glb -o /tmp/step2glb && chmod +x /tmp/step2glb && sudo install -m 0755 /tmp/step2glb /usr/local/bin/step2glb && step2glb install && step2glb health Then verify the install works.

Download v0.9.0

Windows coming soon
macOS coming soon
🐧 Linux coming soon
🐳 Adom Docker CLI step2glb ·

See all releases on GitHub

step2glb

Thin CLI for converting STEP CAD files to GLB with colors preserved from the source file.

The CLI is ~3 MB and ships no CAD runtime. Conversion happens on the shared service-step2glb container via OCCT's XCAF pipeline (STEPCAFControl_ReaderBRepMesh_IncrementalMeshRWGltf_CafWriter), which preserves per-face colors that cadquery.save('GLTF'), assimp, and kicad-cli pcb export glb all lose.

Quick use

# Local file
step2glb convert foo.step -o foo.glb

# KiCad library part (service-kicad fetches the STEP for you)
step2glb from-library Package_TO_SOT_SMD/SOT-89-3
step2glb from-library Package_QFP/LQFP-100_14x14mm_P0.5mm

# Convert + open a Hydrogen webview with a materials HUD
step2glb preview Package_QFP/LQFP-100_14x14mm_P0.5mm

Every command prints an OK: / ERROR: summary line (with a Hint: on errors), followed by a JSON companion line so AI callers can parse the result programmatically.

Identity headers (v0.9.0+)

Every POST to service-step2glb requires two headers:

HeaderPurposeExample
X-ClientWho is calling (tool + user)adom-tsci/john-dev
X-Job-NameDescriptive slug for this jobconvert-usbc-connector-type-c-31-m-12-to-glb

The CLI sends both automatically. If you're calling the service directly, include them or you'll get a 400 with instructions.

Building a good X-Job-Name: <endpoint>-<what>-<part-or-file>-<context>. Use lowercase, hyphens, no spaces. Include the MPN or filename so the job is identifiable in /health stats. Examples:

  • convert-usbc-connector-type-c-31-m-12-to-glb
  • thumbnail-iso-vl53l8cx-for-chip-fetcher-library
  • features-extract-bme688-pin-detection
  • batch-thumbnails-6orient-3size-rp2040

Abuse protection

  • Content dedup: Submitting the same STEP file that's already queued/processing returns the existing job ID with "deduplicated": true instead of spawning a new job.
  • Per-client cap: Max 8 active jobs per client. Returns 429 if exceeded.
  • Per-file cap: Max 2 active jobs for the same content hash.

Async job queue (files >30MB)

Large files are converted asynchronously:

  1. POST /convert → returns {"job_id": "...", "poll": "/jobs/<id>"}
  2. Poll GET /jobs/<id> until status is complete or failed
  3. Fetch GET /jobs/<id>/result for the GLB bytes

Workers run at nice 15 so the health check and SSH always stay responsive. Max 4 concurrent workers; excess jobs queue.

Worker health stats

GET /health returns live worker pool stats:

{
  "workers": {
    "max_workers": 4,
    "active_workers": 2,
    "jobs_queued": 1,
    "jobs_processing": 2,
    "jobs_complete": 15,
    "jobs_failed": 3,
    "active_by_client": {
      "adom-tsci/john-dev": 2,
      "chip-fetcher/ray-main": 1
    }
  }
}

When active_workers == max_workers and jobs_queued is climbing, that's the signal to scale to additional containers.

Install

Paste this into Claude Code:

Install the latest step2glb CLI from the Adom Wiki (app/step2glb). It sends the required X-Client and X-Job-Name headers automatically.

Or manually:

curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/step2glb/step2glb -o /tmp/step2glb \
  && chmod +x /tmp/step2glb \
  && sudo install -m 0755 /tmp/step2glb /usr/local/bin/step2glb \
  && step2glb install \
  && step2glb health

step2glb install fetches the latest SKILL.md from the wiki and installs bash completions. No venv, no pip, no OCCT locally.

Environment variables

VariablePurposeDefault
STEP2GLB_SERVICE_APIOverride service URLshared Adom container
STEP2GLB_CLIENTOverride X-Client identitystep2glb-cli/<version>

HTTP API (service side)

MethodPathNotes
GET/healthversion + uptime + worker stats + active_by_client
POST/convertbody=STEP bytes → GLB bytes (sync <30MB, async >30MB)
POST/convert?upAxis=ysame, with up-axis rotation baked into the GLB
GET/convert?library=L&name=None-call: service-kicad fetch + convert
POST/featuresSTEP → geometric features JSON
POST/step-metaSTEP → full B-rep metadata
POST/create-chipchip_3d JSON → parametric STEP
POST/create-footprintpads[] JSON → copper footprint STEP
POST/bakeSTEP + bake.json → signed .chipsmith.step
POST/thumbnailSTEP/GLB → PNG
POST/thumbnail-batchSTEP → N orientations × M sizes
GET/jobs/<id>poll async job status
GET/jobs/<id>/resultfetch completed GLB

All POST endpoints require X-Client and X-Job-Name headers. Response headers include X-Meshes, X-Nodes, X-Materials, X-Size-Bytes, X-Duration-Ms, and X-Materials-Json.

Architecture

  • Client (this app)adom-inc/step2glb, public repo, 3 MB Rust binary, Tier B auto-discovery.
  • Serviceadom-inc/service-step2glb, private repo, default-light container (step2glb-gmdoncpxdwx0.adom.cloud:8782) with OCCT + Python + cadquery-ocp (~1.1 GB on-disk). Watchdog: cron every 2 min + external service-watcher with SSH auto-remediation.
  • Upstream dataservice-kicad (4.7 GB of STEP/WRL/symbols/footprints) supplies library parts for from-library.
STEP
step2glb 12 days ago
step2glb v0.10.1 — gzip uploads + async polling
v0.10.1: gzip large uploads, 300s timeout, async job queueRay · 12 days ago
3.2 MB
MD
SKILL.md 20 days ago
step2glb 0.8.0 SKILL.md - documents thumbnail-batch + playground.
0.8.0 SKILL.md - batch + playground.John Lauer · 20 days ago
5.8 KB

Install notes

Adom Docker CLI install steps
curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/step2glb/step2glb -o /tmp/step2glb && chmod +x /tmp/step2glb && sudo install -m 0755 /tmp/step2glb /usr/local/bin/step2glb && step2glb install && step2glb health

Screenshots

Sub-Skills
?
What are Sub-Skills?

Sub-skills are community-contributed AI skill extensions for this component. They teach AI assistants about specific tools, configurators, or workflows.

Examples:

  • A manufacturer’s configuration tool for a motor controller
  • A community-written design guide for an amplifier circuit
  • An automated test/validation script for a sensor module

How to add one: Click Add Sub-Skill, provide the URL to your skill and a brief description. Submissions are reviewed by the Adom team before going live.

No sub-skills yet. Be the first to contribute one!

🔎 How Claude finds this page (discovery snippet)

This page opts into Adom Wiki auto-discovery. When a user working in Claude Code mentions any of the trigger phrases below, Claude can proactively suggest this page. The pitch is exactly what Claude will say.

Pitch
"Convert a STEP (.step/.stp) file to a GLB with colors + materials preserved, via the shared service-step2glb container (OCCT XCAF pipeline). Local install is ~3 MB, no Python, no CAD runtime needed."
Triggers
"step to glb", "step2glb", "convert step", "convert .step", "cad to glb", "kicad step to glb", "step file to glb", "occt gltf", "step preview", "chip 3d preview", "component 3d viewer", "regenerate chip glb", "white glb", "all-white glb", "missing materials glb", "3d model color not working", "step file no colors", "fix 3d component colors"

Recent activity

17 commits