TEXT · PHOTO → STRUCTURED 3D

Game assets that stay alive after generation.

Assets your coding agent can talk to.

Type a sentence. Drop a photo. Get 3D objects assembled piece by piece — parts named, hierarchy real, pivots placed, UVs unwrapped.

Generate an asset
{{ fileLabel }}
{{ kartMark }} 🍌 kart {{ gunMark }} 📷 gun {{ catMark }} 🐱 cat copter
{{ viewerMark }} viewer {{ codeMark }} code
explode ↻ replay
{{ wfIcon }} {{ normalsIcon }} {{ labelsIcon }}
hover a part for its name · click to pin ittap a part to name it · drag to orbit
{{ codeFile }} · {{ codeLines }} lines · Blender Python, written by the model — this is the asset full file ↗
{{ codeText }}
░ SCENE GRAPH
▾ {{ rootName }}
{{ g.arrow }} {{ g.name }} {{ g.mark }}{{ g.count }}
hover a row to light it up in 3D · ▣ hides · click a part in 3D and its group flashes heretap a row to light it up in 3D · ▣ hides · tap a part in 3D and its group flashes here
{{ parts }} parts · {{ groupCount }} groups{{ pickedInfo }} pivots placed · UVs unwrapped {{ hierarchyNote }} poly budget: yours
HOW IT WORKS
1
Type a sentence.
2
…or drop a photo.
3
Get 3D objects, assembled piece by piece.
parts named · hierarchy real · pivots placed · UVs unwrapped
🗂 asset_tools ▁ ▢ ✕
{{ t.icon }}{{ t.label }}{{ t.soon }} 👈click a tab to try ittap a tab to try it
Every asset arrives UV-unwrapped and ready to paint — parts packed into clean, non-overlapping atlases with even texel density.
▶ spin it · 3.2 MB
banana kart232 parts → 5 atlases · 70,344 tris
▶ spin it · 1.5 MB
robot rabbit112 parts → 2 atlases
▶ spin it · 6.0 MB
cartoon Gary23 parts → 1 atlas
kart — atlas sheetper-island wireframes
rabbit — atlas sheetarea-budgeted islands
Gary — atlas sheetone dense sculpt atlas
Restyle from a prompt — full PBR up to 4K (albedo, normal, roughness, metallic, AO, height), packed with every asset. Click a card to spin the real textured GLB.
▶ spin it · 15 MB
the raygun, repainted“hand-painted, worn-off finish”
albed
norma
rough
metal
ao
heigh
▶ spin it · 12 MB
the snail, petrified“A worn, mossy stone shell”
albed
norma
rough
metal
ao
heigh
▶ spin it · 10 MB
the cheesecake, oil-painted“Procreate oil painting style”
albed
norma
rough
metal
ao
heigh
Every part is editable by name. Say what you want in plain words — only that part changes, nothing else moves.
{{ editFile }} {{ rabbitEditMark }} 🐰 rabbit {{ pigMark }} 🐷 pig car {{ cakeEditMark }} 🍰 cheesecake
✏️ you said “make her a blossom variant — heart eyes, plush ears with a mint bow, and a rose-gold collar “give it angel wings, and rename the plate to Peppa xoxo “swap the blueberries for raspberries and a strawberry, and make the glaze berry pink
⇆ drag the divider · drag the model to orbit only {{ editChanged }} changed across the split — everything else lines up
This is the downloadable file, moving. Nobody rigged it — the wheels turn because the kart already knows where its own axles are. Grab a slider and drive it.
This is the downloadable file, walking. Nobody rigged it either — the code that built it already declared every joint's axis and how far it may turn, so these sliders came for free. Move one — everything else keeps going.
Nothing about this one is keyframed. Its 25 body pieces are placed every frame by the equation on the right — change the maths and the animal changes with it.
Poke it. The dent travels out from where you touched as a damped wave through 75,490 vertices — one slider takes it from slime that oozes back to jelly that rings.
A whole room from one script — 953 named meshes, none of them orphaned, and 29 joints that still open, turn and swing. Walk in and try the door.
{{ rigRobotMark }} 🤖 eye robot {{ rigKartMark }} 🍌 kart {{ rigDragonMark }} 🐉 sushi dragon {{ rigRoomMark }} 🏠 house {{ rigJelloMark }} 🫧 alien jello
🦾 banana_kart.glb · live rig {{ rigPill }}
hover a part for its name · drag to orbittap a part to name it · drag to orbit
throttle steering 💥 whack it ↻ auto
{{ kartLogHead }}
w = glb.getObjectByName('Wheel_FL')
{{ kartLogCall }}
{{ kartLogNote }}
🤖 retro_eye_robot.glb · live rig
hover a part for its name · drag to orbittap a part to name it · drag to orbit
{{ j.label }} {{ j.txt }} ↻ auto
{{ rigLogHead }}
mixer.update(dt) // clip first
{{ rigLogCall }}
{{ rigLogNote }}
🐉 sushi_dragon.glb · 25 pieces on one equation
🫧 alien_jello.glb · one mesh, displaced on the GPU
🏠 observatory.glb · 953 meshes, 29 working joints
SHIP IT

The structural work arrives done.

Poly budget stays yours — because the asset is a program, density is a parameter, not fate. Export to your engine, keep editing in Blender, or automate the whole loop from your coding agent over MCP.

.glb Unity · Unreal · Godot Blender MCP + API
$ claude mcp add nova3d -e NOVA3D_TOKEN=n3d_… -- uvx nova3d-mcp
 connected · tools: generate_3d · regenerate_part · add_part · articulate_model

> "a banana go-kart with off-road wheels"
 generate_3d … banana_kart.glb — 232 parts · 7 groups · hierarchy intact

> "chunkier rear wheels"
 regenerate_part("Wheels_Group") — WHEEL_R_REAR 0.30 → 0.36 · the other 6 groups: untouched
WHERE IT'S USEFUL
🎮
Game dev
Drop the GLB into Unity, Unreal or Godot. Every part keeps its name, and every pivot sits where it belongs — so wheels turn on their axles and doors swing on their hinges the moment the asset loads.
🥽
XR & VR
Hierarchy makes parts grabbable; pivots make them hinge. Built in real metres, so scale is right the moment it loads.
💍
Product & jewelry
Verticals tune the same core: a ring-specialised pipeline runs in production today, with its own showcase and publish-ready materials.
🤖
Agent pipelines
Assets as code means automation can touch them: regenerate one part, restyle a batch, or wire generation into your own tools over MCP + API.
ROADMAP

One asset today; a programmable world tomorrow.

{{ vidTitle }} {{ vidDots }} ● rec
{{ vidCaption }}
Try the app → Join our Discord