Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
earthtojake avatar

Implicit Cad

  • 3.4k installs
  • 11k repo stars
  • Updated July 11, 2026
  • earthtojake/text-to-cad

implicit-cad authors browser-native .implicit.js CAD models with GLSL signed-distance fields and CAD Viewer verification.

About

The implicit-cad skill authors browser-native implicit CAD models as .implicit.js or .implicit.mjs modules exporting implicit.js/0.1.0 schema with GLSL sdf and optional color functions. It is experimental and prefers conventional STEP-first CAD unless the user explicitly wants implicit models. Modules may declare params becoming GLSL uniforms, animations with update callbacks, optional bounds and render settings, and procedural color via vec3 color. Authoring uses scripts/lib/implicit-cad.mjs helpers for primitives, smooth booleans, TPMS fields, and lattices without copying bundled files into outputs. Visual verification runs scripts/snapshot.mjs for single PNG or multi-camera job packets and optional animation GIFs. Export uses node scripts/export.mjs for GLB mesh handoff. After vault writes, handoff to $cad-viewer is mandatory when installed, returning live viewer links. Bounds auto-estimate from SDF unless animated or thin geometry needs explicit framing. Handoff to $cad-viewer is mandatory when that skill is installed.

  • ES module exports implicit.js/0.1.0 with GLSL sdf and optional color.
  • Params become GLSL uniforms; no separate uniforms object.
  • snapshot.mjs job packets verify iso, front, top, and right views.
  • export.mjs produces GLB for slicers and downstream viewers.
  • Mandatory $cad-viewer handoff with live links when skill is installed.

Implicit Cad by the numbers

  • 3,396 all-time installs (skills.sh)
  • +641 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #128 of 1,340 Generative Media skills by installs in the Skillselion catalog
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

implicit-cad capabilities & compatibility

Capabilities
implicit.js/0.1.0 module authoring with glsl sdf · helper library for primitives, booleans, tpms, a · snapshot.mjs visual verification packets and ani · glb export via scripts/export.mjs · cad viewer handoff with live file links
Use cases
ui design · image generation
From the docs

What implicit-cad says it does

ALWAYS prefer conventional STEP-first CAD workflows unless the user explicitly asks
SKILL.md
Number, boolean, color, and button params automatically become GLSL uniforms
SKILL.md
npx skills add https://github.com/earthtojake/text-to-cad --skill implicit-cad

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs3.4k
repo stars11k
Last updatedJuly 11, 2026
Repositoryearthtojake/text-to-cad

How do I create and verify an implicit CAD model that runs in CAD Viewer?

Create and verify browser-native implicit CAD .implicit.js models with GLSL SDFs, params, animations, and CAD Viewer snapshots.

Who is it for?

Users explicitly requesting implicit.js models, TPMS lattices, or procedural SDF geometry.

Skip if: Skip when conventional STEP-first CAD workflows suffice unless user asks for implicit models.

When should I use this skill?

User works with .implicit.js, GLSL SDF, implicit CAD, or CAD Viewer raymarch models.

What you get

Valid implicit module, verification snapshots, optional GLB export, and CAD Viewer links.

  • .implicit.js CAD files
  • Browser-rendered 3D snapshots

Files

SKILL.mdMarkdownGitHub ↗

Implicit CAD

Use this skill for implicit CAD models that should run directly in CAD Viewer as browser JS modules. The primary artifact is a .implicit.js or .implicit.mjs.

This skill is experimental. ALWAYS prefer conventional STEP-first CAD workflows unless the user explicitly asks for an implicit model.

File Format

An implicit CAD file is an ES module exporting an implicit.js/0.1.0 object. The schema source of truth lives in the bundled package at scripts/packages/implicitjs/src/lib/implicitCad/schema.js; scripts/lib/implicit-cad.mjs re-exports it as SCHEMA for helper-authored modules.

export default {
  schema: "implicit.js/0.1.0",
  name: "rounded capsule block",
  glsl: `
float sdf(vec3 p) {
  float sphere = implicit_sphere(p, vec3(0.0), 22.0);
  float block = implicit_box_centered(p, vec3(34.0, 18.0, 18.0), vec3(0.0));
  return implicit_union_round(sphere, block, 3.0);
}

vec3 color(vec3 p, vec3 normal) {
  return mix(vec3(0.20, 0.55, 0.95), vec3(0.95, 0.45, 0.20), smoothstep(-15.0, 20.0, p.z));
}
`,
};

Models may also declare params and animations. Parameter definitions use the implicitjs control schema: number, boolean, enum/select, color, string, and button. Number, boolean, color, and button params automatically become GLSL uniforms with the same name; do not add a separate uniforms object. bounds is optional and is estimated from the SDF when omitted; add explicit bounds only when the auto estimate is too broad, too slow, or misses an unusual field. bounds and render may be JavaScript functions that receive { ...params, params, animation, animationState, elapsedSec, progress, t }.

Built-in GLSL helpers use the implicit_* namespace, for example implicit_sphere, implicit_box_centered, and implicit_union_round.

export default {
  schema: "implicit.js/0.1.0",
  name: "breathing orb",
  params: {
    radius: {
      type: "number",
      label: "Radius",
      min: 12,
      max: 34,
      default: 22,
      unit: "mm",
    },
  },
  animations: {
    breathe: {
      label: "Breathe",
      duration: 3,
      update({ progress, set }) {
        set("radius", 18 + Math.sin(progress * Math.PI) * 10);
      },
    },
  },
  render: { steps: 224, epsilon: 0.004 },
  glsl: `
float sdf(vec3 p) {
  return length(p) - radius;
}

vec3 color(vec3 p, vec3 normal) {
  return mix(vec3(0.10, 0.58, 0.95), vec3(1.0, 0.34, 0.12), smoothstep(-18.0, 18.0, p.z));
}
`,
};

Do not copy bundled helper files out of this skill. If helper functions are useful, use scripts/lib/implicit-cad.mjs during authoring or emit standalone GLSL into the final .implicit.js/.implicit.mjs module.

Authoring Workflow

1. Write a natural-language modeling brief with dimensions, coordinate assumptions, procedural color intent, and visual checks. 2. Create or edit the user-specified .implicit.js/.implicit.mjs module. 3. Use scripts/lib/implicit-cad.mjs helpers for primitives and field composition when useful:

  • primitives: sphere, circle, boxCentered, plane, lineSegment, torus, axis, cylinder, cylinderCapped, capsule, cone, coneCapped, coneCapsule
  • booleans/blends: unionSharp, intersectSharp, unionRound, intersectRound, unionChamfer, intersectChamfer, unionExp, intersectExp, unionLpNorm, intersectLpNorm, unionRvachev, intersectRvachev, difference
  • modifiers/lattices: shell, rotateAxis, repeatCentered, remapCylindrical, cubicGrid, squareHoneycomb, squareHoneycombReinforced, squareDiagonalHoneycomb, octetHoneycomb, hexagonalHoneycomb, triangularHoneycomb
  • TPMS fields: tpmsGyroid, tpmsSchwarz, tpmsDiamond, tpmsLidinoid, tpmsNeovius, tpmsSplitP, tpmsIwp
  • shader wrappers: distanceFunction emits float sdf(vec3 p), colorFunction emits vec3 color(vec3 p, vec3 normal)

4. Add optional params and animations for dimensions, toggles, palettes, mode switches, and animated exploration. Use param names directly in GLSL; the runtime declares matching uniforms. 5. Add optional procedural color with vec3 color(vec3 p, vec3 normal) when the model benefits from local material variation. Keep color values in 0..1 RGB. 6. Rely on automatic SDF bounds first. Add explicit bounds when an animated, periodic, translated, or very thin model needs tighter or more reliable framing/export sampling. 7. Run the lightweight visual verification flow below after visible geometry, color, params, animation, bounds, render, or export-affecting changes. 8. Run node scripts/export.mjs --input <model.implicit.js> --format glb when a mesh artifact is needed for downstream viewers, slicers, or file handoff.

Visual Verification

Use this skill's snapshot tool as a fast visual check, not as a substitute for deterministic import/export validation. Keep the packet small and purposeful.

For simple static edits, one image is enough:

node scripts/snapshot.mjs --input models/implicit-cad/<model>.implicit.js --output /tmp/implicit-review/<model>.png

For topology, periodicity, thin features, Boolean blends, object identity, color, or suspected framing issues, render a small packet in one CLI call so the browser, module, and runtime model are reused:

node scripts/snapshot.mjs --job - <<'JSON'
{
  "input": "models/implicit-cad/<model>.implicit.js",
  "mode": "view",
  "render": { "sizeProfile": "simple", "frameMargin": 1.55 },
  "graphics": { "modelColors": true, "detail": 1.2, "shadows": true, "ambientOcclusion": true },
  "outputs": [
    { "path": "/tmp/implicit-review/<model>-iso.png", "camera": "iso" },
    { "path": "/tmp/implicit-review/<model>-front.png", "camera": "front" },
    { "path": "/tmp/implicit-review/<model>-top.png", "camera": "top" },
    { "path": "/tmp/implicit-review/<model>-right.png", "camera": "right" }
  ]
}
JSON

Add implicitParameters at the job level for one parameter state, or on individual outputs when the point of the review is comparing parameter variants. Use render.frameMargin around 1.5 when a model is close to the edge; if a snapshot still appears clipped, first check whether the source bounds is cutting the raymarch itself.

For animations, create a short GIF only when motion is part of the request:

node scripts/snapshot.mjs --job - <<'JSON'
{
  "input": "models/implicit-cad/<model>.implicit.js",
  "mode": "animate",
  "outputs": [{ "path": "/tmp/implicit-review/<model>-animation.gif" }],
  "implicitAnimation": { "activeId": "<animation-id>", "durationSeconds": 3, "fps": 12 }
}
JSON

Review the resulting PNG/GIF for centered framing, no top/bottom/side clipping, expected silhouette and topology, visible parameter differences, GLSL-defined colors, no unexpected holes/gaps, and smooth enough edges for the requested graphics settings. If the snapshot reveals a mismatch, fix the implicit source or bounds and rerun only the relevant packet.

Handoff

After completing implicit CAD work that creates or modifies .implicit.js, .implicit.mjs, .glb, .stl, or .3mf artifacts, you must ALWAYS hand the explicit file path(s) to $cad-viewer when that skill is installed. $cad-viewer must start CAD Viewer if it is not already running and return link(s) to the relevant created or updated file(s); include those live viewer link(s) in the final response. If $cad-viewer is unavailable or startup fails, report that instead of silently omitting the handoff.

When verification snapshots are generated, also include the saved PNG/GIF snapshot(s) in the final response. If no snapshot applies, or if snapshot generation fails, say why and report the deterministic validation that still ran.

Snapshot Tool

From this skill directory:

node scripts/snapshot.mjs --input <model.implicit.js> --output <snapshot.png>
node scripts/snapshot.mjs --input <model.implicit.js> --output <orbit.gif> --mode orbit
node scripts/snapshot.mjs --job <render-job.json>
node scripts/snapshot.mjs --job - --json
node scripts/snapshot.mjs --help

Use node scripts/snapshot.mjs --help for the complete current command interface. The tool appends a UTC timestamp before the output extension. JSON jobs may be a single job, one job with multiple outputs, a raw array of jobs, or { "jobs": [...] }; prefer a multi-output job for review packets because it avoids rebuilding the same artifact for each camera.

Export Tool

From this skill directory:

node scripts/export.mjs --input <model.implicit.js> --format glb
node scripts/export.mjs --input <model.implicit.js> --output <mesh.stl> --resolution <resolution>
node scripts/export.mjs --input <model.implicit.js> --format 3mf --params '<parameter-json>' --json
node scripts/export.mjs --help

Supported export formats are glb, stl, and 3mf. The exporter samples the implicit SDF inside the declared bounds and extracts a triangle mesh. If --output is omitted, the mesh is written next to the source file using the same stem, such as <model>.glb for <model>.implicit.js. Use node scripts/export.mjs --help for the complete current command interface.

Related skills

How it compares

Pick implicit-cad for shader-based browser solids; use mesh CAD or CNC skills when you need STEP, STL, or machine shop outputs.

FAQ

When should I use implicit CAD versus STEP?

Only when the user explicitly wants implicit models; otherwise prefer conventional STEP-first CAD.

How are parameters declared?

In params with implicitjs control schema; they auto-become GLSL uniforms with matching names.

What verification is required?

Run snapshot.mjs after geometry or bounds changes; hand off paths to $cad-viewer when installed.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.