Walk-around showcase of image-blaster: one photograph → photorealistic 3D scene + animated character, playable in Unity 6 and three.js.
| Unity 6 (URP 17 + Aras splat) | three.js + Rapier3D + Spark |
|---|---|
![]() |
![]() |
Editor Play mode — My project/ |
bun run dev in web-demo/ → http://localhost:5180 |
Same source assets in both engines. Walls, floor, windows, and snow-forest backdrop = a single Gaussian splat from World Labs Marble. Zombie + skeleton warrior are auto-rigged and pre-animated by Meshy AI from one-line text prompts via the image-blast-character skill. Furniture = [Hunyuan3D].
For a hero GIF, record ~6s walking through the web demo via Cmd+Shift+5 and drop it at docs/hero.gif.
| Web demo | three.js + Rapier3D + @sparkjsdev/spark splat renderer · runs in any modern browser |
| Unity demo | Unity 6.x + URP 17 + UnityGaussianSplatting + glTFast · auto-builds scene on Play |
| Pipeline | image-blaster does the heavy lifting — Marble (env splat) + Hunyuan3D (props) + Meshy AI (rigged character) via FAL |
| Input | a single ~768×1024 reference image |
| Cost per scene | ~$5 in FAL + World Labs credits |
┌─ 1 photo of an interior ────────┐
│ │
▼ │
╭──────────────────╮ │
│ image-blaster │ Claude skills that orchestrate
│ pipeline │ World Labs + Tencent Hunyuan3D + Meshy + FAL
╰──────────────────╯
│ │ │
│ │ └─→ Meshy auto-rigged + animated humanoid (zombie)
│ └────→ 5 Hunyuan static GLB props (door, daybed, …)
└───────→ Marble Gaussian splat (.spz) + collider GLB + panorama
│
▼
╭───────────────────────╮
│ winter-cabin scene │
│ │
│ Unity 6 ◀──┬──▶ Web │
│ │ │
│ same GLBs / splat │
╰───────────────────────╯
git clone https://github.com/aignoblin/image-blaster-unity
cd image-blaster-unity/web-demo
bun install
bun run dev # → http://localhost:5180Click into the canvas to lock pointer. WASD to move, mouse to look, Shift to sprint, Space to jump, LMB to kick a prop, R to reset props, Esc to release cursor.
- Install Unity Hub and Unity 6000.2.10f1 or newer
- Open
My project/in the Hub (URP 17, glTFast, UnityGaussianSplatting will pull from registries automatically; first import takes a few minutes) - Open
Assets/ImageBlaster/Scenes/WinterCabin.unity - Press Play —
AutoSetupOnPlayrebuilds the scene the first time. Once it's assembled, subsequent Plays keep your edits.
Controls match the web demo (WASD + mouse + LMB to kick + R to reset).
web-demo/ three.js + Rapier + Spark splat renderer
src/main.js ~450 LOC — scene + physics + FPS + zombie + splat
public/spz/ Marble Gaussian splat (.spz) served as a static asset
public/winter-cabin/ symlink → ../My project/Assets/ImageBlaster/winter-cabin
(shared GLB meshes between Unity and web)
My project/ Unity 6 project (the space in the name is a Unity Hub default;
leaving it as-is keeps Unity import paths stable)
Assets/ImageBlaster/
Editor/ scene assembly + auto-Setup-on-Play + URP toggles
Runtime/ SimpleFpsController, KickInteraction, ZombieAI, AutoKickOnStart
winter-cabin/ Marble panorama + collider GLB + Gaussian splat asset + props + zombie
Scenes/ WinterCabin.unity
tools/
spz_to_ply.py Marble .spz → 3DGS .ply
(workaround for the SPZFileReader OOB crash in
UnityGaussianSplatting when SH level == 0)
glb_to_fbx.py Blender headless GLB → FBX for Mixamo/Unreal pipelines
The image-blast-character skill (lives in this project's image-blaster fork at .claude/skills/image-blast-character/) takes a text prompt or a T-pose reference photo and returns an auto-rigged, auto-animated character. Tested end-to-end on two very different characters with the same skill, same prompt scaffold, ~$1 each in FAL credits:
| Reference (flux-schnell T-pose) | Auto-rigged 3D (Meshy v6) |
|---|---|
![]() |
![]() |
![]() |
![]() |
Each character ships with rigged_character.glb (skinned mesh), walking.glb (skinned + walk clip), and running.glb (skinned + run clip). The Unity scene wires Walk/Run into an AnimatorController with a Speed parameter; the runtime ZombieAI script flips between states based on distance to the player.
The committed assets (world-500k.ply, mesh GLBs, zombie animations) were generated through image-blaster. To regenerate or remix:
git clone https://github.com/neilsonnn/image-blaster && cd image-blaster && bun install- Drop your source photo into
image-blaster/input/ - Set
WORLD_LABS_API_KEY+FAL_KEYenv vars claudeand run/image-blast-project <world-name>followed by/image-blast-uncover,/image-blast-world,/image-blast-3d- For an animated character, use the
image-blast-characterskill — PR pending upstream; lives atimage-blaster/.claude/skills/image-blast-character/in this project's pipeline - Copy outputs from
image-blaster/worlds/<world>/output/intoMy project/Assets/ImageBlaster/winter-cabin/and let Unity / web re-import - For
.spz→.ply(needed for the Unity splat pipeline), runpython3 tools/spz_to_ply.py input.spz output.ply
Approximate FAL spend for the bundled scene: $5 total (Marble world + 5 Hunyuan props + Meshy rigged character + a few nano-banana edits).
This is a showcase repo — every interesting thing here belongs to one of the upstream projects below. Please star them if you find this useful:
- image-blaster by @neilsonnn — the asset-generation pipeline this whole demo sits on
- World Labs Marble — Gaussian splat + collider mesh from a single image
- Tencent Hunyuan3D — image-to-3D meshes (via FAL)
- Meshy AI — auto-rigged + animated humanoid characters (via FAL)
- Black Forest Labs FLUX — flux-schnell text-to-image for T-pose character references
- UnityGaussianSplatting by Aras Pranckevičius — splat rendering in Unity. Huge thanks — this is the package that makes the entire Unity side possible.
- Spark (
@sparkjsdev/spark) — splat rendering in three.js - three.js + Rapier3D — the web demo runtime
- glTFast — GLB import for Unity
MIT — see LICENSE. Generated assets are subject to the original providers' terms (World Labs, FAL, Meshy).





