One reference photo → a ringside boxer you can orbit, punch, and watch sweat off under gravity — and every triangle, bone, and keyframe is TypeScript, not a downloaded mesh. Maintainer Nick (@NickDevFE on X) shipped img2threejs v1.5.1 as the Character Update, and the headline demo — Ringside Boxer — is the clearest proof yet that the July explainx.ai img2threejs coverage was tracking the right project, just an earlier version.
When we wrote that post, the repo sat around 633 stars under hoainho/img2threejs. By August 31, 2026, the project lives at img2threejs/img2threejs, carries ~14.5K stars, and the live gallery moved to img2threejs.io. v1.5.1 is not a README tweak — it is the first release where characters are meant to be playable, not placeholder diorama props.
Nick's August thread frames the bet plainly: "With img2threejs v1.5.1, we're pushing much closer to the original reference while keeping the result structured, editable, riggable, and controllable in Three.js." The boxing demo is the stress test — combat loops, measured impact VFX, and a rig dense enough to sell weight transfer, not a turntable spin.
TL;DR — what builders ask after seeing the demo
| Question | Direct answer |
|---|---|
| What shipped in v1.5.1? | Character pipeline: SkinnedMesh, skeleton from component tree, geodesic skinning, hair/scalp gates, GLB-measurement route for rigged heroes |
| Live demo? | Ringside Boxer — orbit/zoom, 19 combat clips, sweat + shock-ring VFX |
| Triangle / rig budget? | ~97,592 tris, 41-bone rig, 19 embedded clips (per showcase copy) |
| Runtime fetch? | Nothing — geometry, vertex colour, and keyframes are inline TypeScript |
| Blender required? | No — rig scripts derive bones; GLB is build-time measurement only |
| Neural step? | Community pipeline uses TripoAI / Hyper3D for initial 3D recon → specs → procedural rebuild |
| vs July v1.2 objects? | Objects (CS2 knives, earbuds) were the sweet spot; v1.5 makes humanoids the headline |
| Token cost? | Character builds still run ~150k–350k model tokens per TOKEN_COST.md — higher than hard-surface props |
| License? | Apache 2.0 (repo migrated from MIT since July) |
| Distribution angle? | Thread replies name Poki / Crazy Games — browser Three.js is the target stack |
The pipeline — from flat image to playable fighter
Most image-to-3D stories stop at a textured GLB you drop into a viewer. img2threejs v1.5.1 inverts the contract for characters:
2D reference image
→ neural 3D reconstruction (TripoAI / Hyper3D in community builds)
→ reference GLB + measured specs (build-time instrument — never shipped)
→ rig derivation + geodesic skinning
→ animation loops (19 combat clips in the boxer demo)
→ physics-style VFX layer (sweat, shock rings, hitstop)
→ playable Three.js scene (pure TypeScript)
The GLB character prompt docs split the work into three copy-paste agent prompts — Build, Polish, and Animation — each gated so you do not burn tokens polishing surfaces that never passed build review. The GLB carries size, proportions, band centroids, base colour, roughness, and metalness as measured values; rigging and animation are re-authored in code because most neural exports arrive with skinCount: 0.
That is the practical difference from an Anatomy Atelier–style TripoAI → GLB → Three.js loader stack, where the mesh file is the runtime asset. img2threejs treats the GLB like a calipers and contour gauge — useful once, then discarded.
What v1.5 adds over v1.2–v1.4
The README changelog names the Character Update explicitly:
- Skeleton derived from the component tree — bones cannot drift from geometry (
forge/stage5_rig/rig_spec.py). - Geodesic skinning — vertex weights from distance through the solid, keeping rigid regions out of smooth skin (
geodesic_skinning.py). - Hair as a five-stage subsystem with a hard scalp-exposure gate before any render.
- Chirality gates and interior-difference review per visual pass.
tapered-sweepprimitive and a blocking material acceptance gate.- Resumable workflow state via
forge/state.pyfor multi-session character builds.
Still not in v1.5: hairProfile compiler, IK, pose-sweep gating, clothing — check the open issues before you plan a wardrobe system.
Ringside Boxer — specs that matter for web games
Open the live viewer and the showcase copy tells you what you are looking at:
- ~97,592 triangles in one embedded surface stream — under the 100K tri band many browser portals treat as a soft ceiling for a single hero.
- 41-bone rig — enough for torso twist, glove extension, and head snap without exploding bind-pose debug time.
- 19 combat clips — Jab, Hook, Body Shot, Footwork, Victory, Defeat, and supporting loops.
- Measured-impact VFX — all 19 clips sampled at 400 frames to locate glove extension, canvas contact, and head-driven reactions; punch windup charges air tear, shock rings along the punch axis, sweat spray under gravity, rosin dust off the canvas, spiking impact light, and 45–85 ms hitstop.
Nothing is fetched at runtime. Geometry, per-vertex colour, and every keyframe live in TypeScript — the same "code is the asset pipeline" philosophy behind the Claude Opus 5 browser-game wave and Karpathy's procedural LOTR world, but with animation timing you can diff in git.
img2threejs vs neural photo-to-3D — when to use which lane
| Dimension | Neural photo-to-3D (Meshy-class, Tripo-class) | img2threejs v1.5.1 character lane |
|---|---|---|
| Output | Textured GLB mesh | TypeScript factory + ObjectSculptSpec JSON |
| Editability | Re-export from DCC or re-run gen | Patch code; strict-quality gates block shallow specs |
| Rigging | Often none or basic auto-rig | 41-bone derived skeleton + geodesic weights |
| Animation | Usually absent | Embedded AnimationClips with measured combat timing |
| Runtime load | Fetch + parse GLB | Zero external mesh fetch |
| Best for | Hero props, organic silhouettes, fast previews | Browser games, rigged fighters, diffable character code |
| Weak at | Hidden back faces, deterministic patches | Photoreal likeness from one photo; hair/clothing still early |
Nick notes in community threads that Meshy can help with rigging, but img2threejs is where mesh and deformation issues get handled before you ship — the skill's GLB character pipeline integration even documents reproducing the Dual-Sword Warrior demo's 748 cross-section rings from measured GLB data.
For world scale, pair character output with procedural environment tools — iCity for Blender city blocks on the art side, or the Hop.Earth-style driving-game guide if you need real-world road tiles plus AI props.
What people are asking — setup, cost, maturity
Do I need a GLB or just a photo?
Both routes exist. The core skill still accepts one reference photo and runs the anatomy-aware character track documented in grimoire/character/reconstruction.md. The GLB-measurement route is for when you already ran a neural recon and want img2threejs to rebuild surfaces procedurally from measured bands — the boxer demo sits in that camp.
How do I run it locally?
Same install pattern as explainx.ai's July guide, updated for the new org:
git clone https://github.com/img2threejs/img2threejs.git ~/.claude/skills/img2threejs
Then in Claude Code, Codex, or OpenCode:
/img2threejs Rebuild the subject in this image as a procedural Three.js model.
Fidelity Hold proportions and silhouette to the reference. Enumerate identity-defining
details first — bevels, panel seams, gloss vs matte zones — and drop any detail
you cannot place on a real component.
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.
For multi-session character work:
python3 forge/state.py init --reference <image> --profile character --spec object-sculpt-spec.json
python3 forge/next.py --state .img2threejs/state.json
Character-specific GLB prompts live in docs/GLB_CHARACTER_PROMPT.md — use Build when surfaces do not exist yet, Polish when build gates passed but likeness is off, Animation when the figure looks right standing still.
Is it production-ready?
Honest answer: early, improving fast. The gallery marks several character demos with ⚠︎ placeholder status — they render, but registry status is not final. v1.5.1's Dual-Sword Warrior and the boxing showcase are the proofs that combat-ready loops are the new bar; hair, clothing, and IK remain roadmap items.
Open issue #73+ territory includes rig edge cases, likeness confidence reporting, and multi-view silhouette carving — read before you promise a client photoreal likeness from one JPEG.
Poki, Crazy Games, and the web-game angle
Replies on Nick's showcase thread treat browser Three.js as the distribution target — explicitly naming portals like Poki and Crazy Games as places this class of AI-built character could land. img2threejs gives you the rigged hero layer; you still ship input, game loop, audio, and portal performance QA yourself. That is the same division of labour as the Opus 5 game-prompt roundup: agents open the map; you own the loop.
Token economics — characters cost more than crates
Per docs/TOKEN_COST.md, character reconstructions still land around ~150k–350k model tokens — roughly 2× a hard-surface prop — because hair gates, interior-difference review, and rig validation add passes. The skill stays token-efficient by pushing bookkeeping into stdlib Python and spending model tokens only on side-by-side vision review and scoped code edits.
If you are budgeting a jam weekend, start with a low-poly humanoid demo (v1.5.0) before you attempt a 97K-tri fighter with measured VFX.
Practical checklist for your next browser character
□ Pick route: photo-only vs GLB-measurement (read GLB_CHARACTER_PROMPT.md)
□ Run strict-quality gates — do not skip spec validation
□ Budget ~150k–350k tokens for a rigged character, not ~80k like a crate
□ Measure animation contacts before wiring VFX (400-sample sweep pattern in boxer demo)
□ Keep triangle count under portal soft limits (~100K hero)
□ Ship a playable link, not just a clip — traction tracks to img2threejs.io-style demos
□ Pair with environment tooling (iCity / Pascal / Hop.Earth guides on explainx.ai)
□ Read open issues for hair, clothing, IK before you promise wardrobe swaps
Closing
img2threejs v1.5.1 is the moment image-to-3D stops meaning "download a GLB" for character builders and starts meaning "here is a rigged, animated Three.js factory you own." The Ringside Boxer demo is not a tech preview — it is a playable combat loop with measured hitstop and particle timing, running entirely in the browser from code.
If you already read explainx.ai's July img2threejs + bunpav architecture post, treat v1.5.1 as the character chapter that post flagged as roadmap. If you are new: clone the skill, open the live gallery, and diff the showcase source before you assume photo-to-3D always ends in Blender.
Follow @explainx_ai for the next measured-combat or WebGL harness story.
Related on explainx.ai
- img2threejs — photo-to-procedural Three.js + bunpav lanes (July 2026 baseline)
- Claude Opus 5 games viral wave — browser Three.js as the default AI game stack
- Karpathy's Opus 5 Lord of the Rings world — procedural Three.js at 1M tokens
- How to build a Hop.Earth-style AI driving game — real roads + AI 3D assets
- Anatomy Atelier — TripoAI GLB → Three.js loader pipeline (contrast case)
- iCity Blender add-on — procedural city in ~30 seconds
- What are agent skills? Complete guide
- Loop engineering for coding agents
Specs, star counts, and demo registry status reflect img2threejs v1.5.1 and the img2threejs.io showcase as of August 31, 2026. Neural reconstruction backends (TripoAI, Hyper3D, Meshy) are community-reported integration paths — verify against your own build logs before production.
