You commented 3D. Here's the lot — repo, install, and the exact prompt I ran.

The gallery (every model runs live in your browser): img2threejs.github.io/img2threejs-showcase

What it actually is

It's a skill for Claude Code. You give it one reference photo of an object. It writes that object as a Three.js factory in TypeScript — built from primitives, procedural shaders and generated geometry.

Not photogrammetry. Not a mesh you download. Code. The output is diffable TypeScript plus a JSON spec, so it lives in git like the rest of your project.

It also runs under Codex and OpenCode — it uses whatever vision the host gives it.

The setup

1. Install it. Drop it in your skills folder:

git clone https://github.com/img2threejs/img2threejs.git ~/.claude/skills/img2threejs

2. Point it at an image and run this:

/img2threejs Rebuild this object as a Three.js model, keep the proportions, angles, and colours.

That's genuinely enough. It classifies the subject, runs its own detail inventory, and gates every pass itself.

Undo: rm -rf ~/.claude/skills/img2threejs. It's a folder. Nothing else is touched.

The prompt that actually changes the output

This is the bit worth having. The one-liner leaves every judgement call to the skill. The version below is buried in the docs, and each line maps onto a real gate in the pipeline — so it changes what gets enforced, not just what gets described.

/img2threejs Rebuild the subject in this image as a procedural Three.js model.

Fidelity   Hold proportions and silhouette to the reference. Enumerate the
           identity-defining details first — bevels, panel seams, fasteners,
           engraved or painted linework, gloss vs matte zones, wear — and drop
           any detail you cannot place on a real component instead of faking it.
Materials  Derive the finish class and gradient stops from the reference pixels,
           not from memory. Flag any colour that will not survive tone-mapping.
Runtime    Expose pivots and sockets for whatever should move, plus a
           userData.tick for a looping idle animation.
Gates      Run --strict-quality, and do not advance a pass until the side-by-side
           review passes. Report per-region confidence for anything the image
           cannot show.

Three more worth knowing:

  • A person or character: "Maximise likeness: fit the parametric template to the landmarks, de-light and camera-match the reference, then project it. Tell me which regions are inferred."

  • An animal: "This is a creature, not a humanoid — use the quadruped body plan."

  • Keeping the cost down: "Stay at low effort and skip the presentation composer; I only need the evaluation render."

Why it won't eat your whole session

Every image-to-3D agent loop I've tried burns context on bookkeeping. This one pushes that into plain Python and spends model tokens only where judgement is needed:

  • Scripts enforce, the model judges. Validation, gating, spec authoring and packaging are all deterministic scripts. The model's tokens go to one job — looking at a single side-by-side sheet and deciding pass or fail.

  • Zero dependencies. Pure Python 3.10+ standard library. No pip, no numpy, no Playwright. PNG read/write is done with struct and zlib.

  • Pass-gated generation. It emits only the currently unlocked build pass, so it never re-reads the whole model each iteration. A strict-quality gate also kills shallow specs before any Three.js gets generated.

The honest bit

Three things the demo reel can't show you:

  • One photo of a person won't come out perfect. It says so itself — it reports per-region confidence and asks for more angles rather than quietly guessing.

  • It's a pipeline, not a one-shot. Blockout, structure, form, materials, surface, lighting, interaction, optimisation — each pass has to clear a render-vs-reference review before the next unlocks. Good results, not instant ones.

  • The gallery leans hard on game-weapon demos. Ignore them — the bike, the earbuds and the isometric house are the honest test of what it does with an ordinary object.

Where I'd actually use it

Product pages. A spinning model on a landing page used to mean a 3D artist or a mesh you bought and hoped nobody else used — and then a heavy file your site drags around forever. This gives you a few hundred lines of TypeScript instead, and you can read every line of it.

Verified today: 5,575 stars, 429 forks, Apache-2.0, first commit 15 July. Free, and it stays free.

One ask

If you build something with it, reply and show me — I read every reply, and the good ones end up in here.

PS — if you'd rather this sort of thing just got built for you, that's what I do at optimax-ai.com.