← Back to DejaViewed
emergent_capability

Natural Language → 3D Scenes: The Pipeline That Didn't Exist 6 Months Ago

MCP + Blender + Tripo + Claude Code together create a natural language 3D scene builder — describe what you want, get a full 3D scene. This was impossible before MCP existed.
Blender · Claude · Claude Code · Higgsfield · Hunyuan3D · Hunyuan3D-2 · MCP · MediaPipe · Playwright · Tencent · TouchDesigner · Tripo · Unity · Unreal Engine

Try It — Action Sketch

Set up Blender MCP server → connect to Claude Code → use Tripo/Hunyuan3D for mesh gen → describe scenes in plain English → get rigged, lit 3D environments. Add TouchDesigner for live interaction.

Connected Posts (4)

Prompt system — run this yourself

Pasteable into Claude Code, Claude, or any agent. One-shot for the whole result, step prompts when you want to steer. Every step carries its own audit; the gap audit makes the agent find and fill what it missed.

Mission. Produce a working text-or-image-to-3D-scene pipeline: Claude Code drives Blender through the Blender MCP server, Tripo and Hunyuan3D-2 generate the meshes, and the result is a saved .blend plus a headless render that matches a written brief or a 2D reference image. Built for a solo creator who wants to test whether language really is the modeling tool. Done means: three different briefs each produce a scene that opens and renders headless in Blender 4.x without errors, every generated mesh passes a geometry check, and a side-by-side against the reference is scored by someone other than the agent.

1 · Deeper, not bigger

Rewritten prompt — ask for exactly that:

You are a technical artist building a reproducible language-to-3D pipeline. Use Blender 4.2 LTS with the ahujasid/blender-mcp server, the Tripo API for text/image-to-model, and Hunyuan3D-2 (local or web) as a second generator. First write a pipeline contract: meters, Z-up, naming scheme, triangle budget per asset (hero 50k, props 10k), Principled BSDF materials, a JSON scene graph that records every object, transform, generator, prompt and prompt hash. Then for three briefs (one text, one 2D reference image, one interior with lighting), decompose the scene into assets, generate each asset once and cache it by prompt hash, import and place via MCP, light and frame it, and save .blend plus a Cycles render at a fixed seed. Run a control: build brief 1 with a plain bpy script and no MCP. Verify every asset with bmesh non-manifold checks and glTF-Validator, verify every scene opens and renders with `blender -b`. Return the scene graphs, renders, a cost and time table per brief per arm, and a list of what failed and why. Do not claim rigging or animation works unless you exported it and played it back.

2 · One-shot prompt

ROLE: You are a technical artist and pipeline engineer. Your stance: language is an interface to Blender, not magic; every claim gets a render and a geometry check.

CONTEXT: The source posts claim that Blender MCP plus Tripo turns a 2D reference image into a full 3D scene (bilawal.ai: 'LLM deconstructs the scene, figures out what 3D assets are needed, generates them using Tripo, and arranges them to match'), that Tencent Hunyuan3D-2 turns an image into a textured model in seconds via Generate Shape then Generate Textured Shape, and that this 'was impossible before MCP'. Tools available: Claude Code, Blender 4.2 LTS, github.com/ahujasid/blender-mcp (addon.py socket server plus `uvx blender-mcp`), Tripo API (TRIPO_API_KEY from env, never printed), Hunyuan3D-2 (local GPU or the Hugging Face Space), Python with trimesh, KhronosGroup glTF-Validator. Optional extension: TouchDesigner with torinmb's MediaPipe plugin for live hand-driven camera.

HARD CONSTRAINTS: Never print or log API keys. Cache every generated asset under assets/<generator>/<sha1(prompt)>.glb and never regenerate a cached hash. Cap paid generation at 20 Tripo calls total; stop and report if hit. Meters, Z-up, triangle budget 50k hero / 10k prop. Every scene must open and render headless. Read the Hunyuan3D-2 license and record any territory or commercial-use restrictions before using its outputs.

DELIVERABLES, in order:
1. pipeline/CONTRACT.md: units, axes, naming, budgets, material standard, scene-graph JSON schema.
2. MCP setup verified: list the tools the Blender MCP server exposes and run one round trip (create a cube, read its location back).
3. Three scenes: (a) text brief 'a cozy cabin in snow with warm interior lighting', (b) a 2D reference image you are given or pick from Poly Haven, (c) a tabletop of 5 props. For each: scene_graph.json, scene.blend, render.png (Cycles, 128 samples, seed 0, 1280x720).
4. Control arm: scene (a) rebuilt by a plain bpy script run with `blender -b --python` and no MCP. Record wall time, tokens and paid calls for both arms.
5. Asset QA table: per asset, generator, triangles, non-manifold edges, watertight yes/no, glTF-Validator errors, scale in meters.
6. If Tripo rigging is available on your plan, rig one character and play 24 frames; otherwise mark rigging UNVERIFIED.

BUILT-IN GAP ANALYSIS: Before finishing, write GAPS.md with three lists. Unverified: every claim from the posts you could not test, with the reason. Missing: anything the brief needed that the pipeline could not produce (e.g. snow material, interior light leaks, glass). Filled: gaps you closed during the run and how. Then fix the top two missing items if fixable in under 30 minutes each.

SELF-QUESTIONS you must answer in GAPS.md: Did MCP actually do something a bpy script could not? Are generated meshes at sane real-world scale, or did I scale by eye? Did I check the license before using Hunyuan3D outputs? Does the render match the reference in layout, or only in vibe? Which step costs the most time and money, and is it cacheable? Did any asset come back with baked lighting in its texture that fights the scene lights?

STOP CONDITIONS: Stop when all three scenes render headless and GAPS.md is written, or when 20 paid calls are spent, or when the MCP socket fails three reconnects in a row (report the error text).

RETURN FORMAT: A markdown summary with: a table of scenes (brief, arm, wall time, paid calls, tokens, render path), the asset QA table, the GAPS.md contents, and one paragraph verdict on whether the 'impossible before MCP' claim holds, citing the control arm numbers.

3 · Step-by-step prompts

Step 1 — Ground truth: read the sources and lock the contract

Goal: Know exactly what Blender MCP, Tripo and Hunyuan3D-2 can do before generating anything.

Read the raw sources, not blog posts. 1) Clone github.com/ahujasid/blender-mcp and read addon.py and the server module: list every tool it exposes (scene info, object ops, execute code, Poly Haven, Hyper3D, Sketchfab, any Hunyuan3D hook), the socket port, and what happens on errors. 2) Read the Tripo API docs: endpoints for text_to_model and image_to_model, task status polling, output formats, rigging and animation endpoints, pricing per call, rate limits. 3) Read the Tencent Hunyuan3D-2 README and model card: the two stages (shape, texture), VRAM required, inference time, and the full license text, especially territory and commercial-use clauses. 4) Read docs.blender.org/api/current for import_scene.gltf and headless command-line flags. Write pipeline/SOURCES.md with a capability table (tool, capability, verified-in-docs yes/no, cost, limit) and pipeline/CONTRACT.md with units = meters, Z-up, naming '<scene>_<asset>_<nn>', triangle budgets 50k hero / 10k prop, Principled BSDF only, and a scene_graph.json schema (id, asset_path, generator, prompt, prompt_sha1, location, rotation, scale, material_notes). Note the creators' claims you will test: scene decomposition from a 2D image, 'seconds' generation time, and 'impossible before MCP'.

Expect: pipeline/SOURCES.md with a 10-25 row capability table and pipeline/CONTRACT.md with the schema; a claims list of at least 4 items to test.

Audit before moving on: Every capability row must cite a file path or doc URL. Any capability you only saw in a social post is marked unverified. If the Hunyuan3D-2 license blocks your use case or territory, mark it and switch the second generator to Hyper3D or Poly Haven assets before continuing.

Step 2 — Wire Claude Code to Blender and prove a round trip

Goal: A working, tested MCP connection with a known tool surface.

Install Blender 4.2 LTS. Install the blender-mcp addon from the cloned addon.py, enable it, start the socket server from the sidebar. Register the server with Claude Code (`claude mcp add blender -- uvx blender-mcp`) and restart. Load TRIPO_API_KEY from the environment only; never echo it. Then run a smoke test through MCP: get scene info, create a 1 m cube at (0,0,0.5), read back its location and dimensions, assign a Principled BSDF material, save to scenes/smoke/smoke.blend. Close Blender. Re-open the file headless with `blender -b scenes/smoke/smoke.blend --python-expr "import bpy; print([(o.name, tuple(o.dimensions)) for o in bpy.data.objects])"` and confirm the cube exists at 1 m. Record in pipeline/MCP_LOG.md: tool names called, latency per call, any errors and their exact text, and whether the execute-code tool is enabled (it runs arbitrary Python inside Blender; note that as a risk and keep it for your own machine only).

Expect: scenes/smoke/smoke.blend, a headless printout showing a 1x1x1 m cube, pipeline/MCP_LOG.md with per-call latency.

Audit before moving on: Fail if the headless read disagrees with the MCP read-back, or if any key appears in logs (grep the repo for the first 6 chars of the key length pattern, never the key itself). On socket failure retry three times, then record the error and stop.

Step 3 — Asset generation with cache and QA

Goal: Generate every needed mesh once, cached and checked.

Write tools/gen_asset.py: input generator (tripo|hunyuan), prompt or image path; output assets/<generator>/<sha1>.glb plus a sidecar .json (prompt, generator, seconds, cost estimate, triangles). Skip generation if the hash exists. Hard cap 20 Tripo calls per run, counted in assets/budget.json. Then write tools/qa_asset.py using trimesh and a Blender bmesh pass: triangles, watertight, non-manifold edge count, loose verts, bounding box in meters, texture resolution, and glTF-Validator error count. For the cabin brief decompose into assets yourself first (cabin, door, window, chimney, pine trees x3, lantern, snow ground plane - the ground plane and snow should be procedural, not generated). Generate the hero cabin with both Tripo and Hunyuan3D-2 from the same prompt and compare. Time each call to test the 'seconds' claim. Rescale every asset to real-world size from a size table you write (door 2.0 m tall, tree 6-10 m) rather than by eye.

Expect: assets/ folder with cached .glb files and sidecars, assets/QA.csv with one row per asset, a timing table comparing Tripo and Hunyuan3D-2.

Audit before moving on: Any asset with glTF-Validator errors, triangles over budget, or bbox off by more than 2x from the size table is decimated, rescaled or regenerated once; on a second failure it is replaced by a Poly Haven asset or primitive and logged. Fail the step if budget.json exceeds 20.

Step 4 — Scene assembly from text and from a 2D reference

Goal: Build the three scenes through MCP from the scene graph, not from freehand calls.

For each scene write scene_graph.json first, then have Claude apply it through MCP: import each cached asset, set transform, assign or fix materials, add lights and camera. Scene A: 'a cozy cabin in snow with warm interior lighting' - warm 2700K point or area lights inside, cool sky (Nishita sky or Poly Haven HDRI), emissive windows, procedural snow on the ground. Scene B: reproduce a 2D reference image the bilawal.ai way - ask the model to list objects, their approximate positions, sizes and camera angle from the image, write that as the scene graph, generate missing assets, place them, then match camera focal length and height. Scene C: tabletop with 5 props from a text list. Save scene.blend and render.png per scene (Cycles, 128 samples, seed 0, 1280x720, denoise on). Log every MCP call to scenes/<id>/calls.jsonl.

Expect: Three scene folders, each with scene_graph.json, scene.blend, render.png, calls.jsonl.

Audit before moving on: Re-open each .blend headless and diff object names and transforms against scene_graph.json; any mismatch over 1 cm or 1 degree fails. For scene B compute image similarity (CLIP or DINOv2 cosine) between reference and render and record it; if the camera is clearly wrong, re-estimate focal length and re-render once.

Step 5 — Control arm: the same scene with no MCP

Goal: Measure what MCP actually adds over plain bpy scripting.

Rebuild Scene A without MCP. Ask Claude Code to write a single scripts/build_cabin.py that reads scenes/A/scene_graph.json, imports the same cached assets, builds the same lights, camera and snow, and renders - executed only with `blender -b --python scripts/build_cabin.py`. Do not reuse MCP logs; start from the scene graph. Record wall time, number of agent turns, tokens, and number of render iterations for both arms. Then do a blind comparison: put the two renders side by side with random left/right order and have a person who did not build them rate layout, lighting and believability 1-5. If no person is available, mark the comparison UNVERIFIED and use image similarity only. Write CONTROL.md with the numbers and a two-sentence finding: where MCP helped (live iteration, visual feedback, scene inspection) and where the script was equal or better (reproducibility, CI, version control).

Expect: scripts/build_cabin.py that renders headless, CONTROL.md with a two-arm table and the blind rating or UNVERIFIED flag.

Audit before moving on: The script must run from a clean Blender with only the cached assets present; run it twice and confirm identical object counts. If the script arm fails, fix it until it runs - an unfinished control is not a result.

Step 6 — Optional live layer: MediaPipe hands drive the camera

Goal: Prove the TouchDesigner extension or mark it out of scope.

Export Scene A as .glb (or .fbx) and load it in TouchDesigner via a File In SOP / Geometry COMP. Install torinmb's mediapipe-touchdesigner plugin, read its README for supported trackers and frame-rate notes. Map the index-finger tip x/y to camera orbit and pinch distance to dolly. Measure frame rate on your machine with Perform CHOP at 1280x720. Record the latency from hand move to camera move by filming the screen and the hand together at 60 fps and counting frames. If TouchDesigner is not installed or the GPU cannot hold 30 fps, mark this step OUT OF SCOPE in GAPS.md with the measured numbers rather than skipping silently. Note the export format that survived (glb vs fbx), any material loss on import, and whether textures had to be re-linked by hand.

Expect: A .toe file, a short screen recording, and an fps and latency line in pipeline/LIVE.md, or an explicit out-of-scope note with numbers.

Audit before moving on: Fail if fps is reported without the Perform CHOP reading or latency without the frame count method. Imported geometry must keep its meter scale; check one known object size inside TD.

Step 7 — Validate against oracles and write the gap report

Goal: Independent proof plus an honest list of what is still missing.

Run every oracle and record pass/fail with evidence. 1) Each scene .blend renders headless with exit code 0 on a fresh Blender profile (`blender --factory-startup -b ... -f 1`). 2) glTF-Validator zero errors on every asset. 3) assets/QA.csv has no over-budget or non-manifold hero assets. 4) Scene B similarity score and blind rating recorded. 5) CONTROL.md two-arm numbers present. Then write GAPS.md: Unverified claims from the posts (e.g. 'rigged' environments, 'seconds' generation, Unity/Unreal MCP equivalents), Missing capabilities found (glass, snow accumulation on geometry, interior light leaks, texture baked lighting), Filled gaps and how. Rank the missing list by impact on the next real project and fix the top two if each takes under 30 minutes. End with a verdict paragraph on 'impossible before MCP' citing the control numbers.

Expect: pipeline/VALIDATION.md with an oracle table and GAPS.md with three ranked lists and a verdict.

Audit before moving on: Every pass must link to a file or command output. If any oracle could not run, it is FAIL-UNRUN, not pass. Re-read the verdict and delete any sentence not backed by a number in CONTROL.md.

4 · Gap analysis and audit

You did not build this pipeline. Audit it. Read pipeline/CONTRACT.md, SOURCES.md, assets/QA.csv, every scenes/*/scene_graph.json, CONTROL.md, VALIDATION.md and GAPS.md. Enumerate every factual claim the build makes (asset counts, generation times, triangle counts, 'renders headless', similarity scores, cost per scene, the MCP-vs-script verdict). For each, mark VERIFIED (you re-ran the command or re-opened the file and got the same answer), UNVERIFIED (could not re-run; say why), or FALSE (you got a different answer; show both). Re-run at minimum: `blender --factory-startup -b scenes/A/scene.blend -f 1`, glTF-Validator on three random assets, and the scene-graph-vs-blend transform diff on scene B. Check the cache: re-run gen_asset.py on one cached prompt and confirm zero paid calls. Check secrets: grep the repo and logs for anything that looks like an API key. Check the license record for Hunyuan3D-2 outputs. List missing pieces (e.g. no UV check, no LOD, no collision meshes, no Unity/Unreal export test), rank by impact on shipping a real scene, fix the top three now, and report what you could not fix and why.

Questions the agent must ask itself before it says done:

5 · What proves it right

6 · Failure modes

7 · Agent direction (unattended runs)

Reach first for the cloned blender-mcp source and the Tripo docs; cache both locally in pipeline/sources/. Run Blender headless for every verification - never trust a viewport description from the model. Keep scene_graph.json as the only source of truth; MCP calls are a way to apply it, not the record. Cache generated assets by sha1(prompt) and never regenerate a hash. Spawn a sub-agent for the control arm (step 5) so it cannot reuse MCP context; give it only scene_graph.json and the cached assets. Spawn a second sub-agent for the gap audit with no access to your notes beyond the files. Stop and ask the human when: the paid-call cap is hit, the Hunyuan3D-2 license blocks the intended use, a person is needed for the blind rating, or the MCP socket fails three times. Never print API keys. Return: pipeline/VALIDATION.md, GAPS.md, CONTROL.md, assets/QA.csv, and the three render.png paths, plus a five-line summary with the MCP-vs-script verdict.

Prompt system updated 2026-10-22 · all prompt systems · JSON

Deeper Dive generated 2026-10-22T23:23:01.115535 · Curated by Claude for Gabe (@6ab3) · dejaviewed.dev