Text to 3D skill
Skill hec-ovi/text-to-3D-skill
Initialize and operate a fully local text-to-3D toolkit that turns one subject description into a textured, optionally low-poly GLB using FLUX.2 klein through ComfyUI and TRELLIS.2 on Vulkan. Use for starting the local generation harness, creating static 3D models, meshes, GLBs or glTF assets from words, preparing game or three.js assets, batching several models, or opening the local preview gallery.From its SKILL.md
npx -y skills add hec-ovi/text-to-3D-skillAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 20 days oldThe repository was created 20 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.4 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it
text-to-3d
Turn one described subject into one static GLB:
prompt -> FLUX.2 klein (ComfyUI) -> PNG -> TRELLIS.2 (Vulkan) -> GLB
Choose a capability
| id | Use it for | Section |
|---|---|---|
init | Start and verify the local harness | Init |
generate | Generate one static GLB | Generate |
lowpoly | Generate to a triangle budget | Low poly |
preview | Inspect generated models | Preview |
batch | Generate several models efficiently | Batch |
Do not use Blender or attempt rigging, skeletons, humanoid movement, or animation. A character request produces a static character model.
<a id="init"></a>
Init
Run init before the first generation in a session:
python3 scripts/init.py
The bundled launcher finds the toolkit from --toolkit-dir, $TEXT_TO_3D_TOOLKIT, or the current checkout. When it is installed as a standalone skill and no checkout exists, it clones the toolkit into ~/.local/share/text-to-3d-toolkit.
Init is idempotent. It:
- Verifies the ten TRELLIS.2 GGUFs and fetches missing files.
- Starts the sibling
comfyui-strix-dockerCompose stack. - Builds and starts the resident Vulkan mesh engine.
- Starts the local preview server.
- Waits for all health checks and prints one JSON result.
The first run may build both images, download about 20 GB of weights, and load the models. Do not report success until the JSON result says every service is ready.
Useful overrides:
python3 scripts/init.py --toolkit-dir /path/to/text-to-3D-skill
python3 scripts/init.py --comfy-dir /path/to/comfyui-strix-docker
python3 scripts/init.py --no-fetch --no-build
<a id="generate"></a>
Generate
Name one complete subject, its important parts, material, and style. The image prompt already supplies centering, a plain background, and even lighting.
python3 layers/pipeline/src/pipeline.py \
--prompt "a brass diving helmet with round glass ports and copper fittings" \
--out-dir out \
--runner server
Use 1024 for full-body figures and 512 for compact props. Describe characters standing still, facing forward, with limbs visible. Do not ask for an action.
| Flag | Default | Change it when |
|---|---|---|
--res 512|1024|1536 | 512 | A full figure needs more texture detail. |
--target-faces N | 150K at 512 | The asset is for a game, web page, or real-time scene. |
--seed N | Derived from prompt | The run must reproduce a prior asset. |
--no-texture | Off | The caller will supply materials. |
--bg-removal birefnet | Auto | Reflective highlights punch holes in the default matte. |
--drop-image | Off | The intermediate PNG is not needed. |
The result is a schema-validated JSON envelope. The GLB path, checksum, byte size, triangle count, and stage timings come from the written file.
Inspect both the intermediate image and the GLB before reporting completion. A structurally valid model can still omit a requested part.
<a id="lowpoly"></a>
Low poly
Always set a triangle budget for a game, engine, or web scene:
python3 layers/pipeline/src/pipeline.py \
--prompt "a stylised red sports car" \
--target-faces 12000 \
--out-dir out \
--runner server
Starting points:
- Small prop: 2K to 6K faces.
- Stylised full-body figure: 5K to 10K.
- Vehicle or hero asset: 20K to 50K.
Decimation runs before UV unwrap, so the texture is baked onto the simplified mesh.
<a id="preview"></a>
Preview
Init starts the viewer at http://127.0.0.1:8190/. An asset id is its GLB file stem.
http://127.0.0.1:8190/?id=<asset-id>
Resolve one id before handing over its link:
curl -fsS "http://127.0.0.1:8190/api/models?id=<asset-id>"
<a id="batch"></a>
Batch
Generate every image first, then every mesh. Alternating stages can evict the image weights and make the next image reload take several minutes.
python3 layers/text2image/src/klein.py --prompt "..." --out-dir out
python3 layers/image2mesh/src/mesh.py --image out/first.png --out-dir out --runner server
The resident engine started by init avoids paying the TRELLIS model-load cost for every mesh.
Failures
Read the outer code, then cause.code when present.
| Code | Action |
|---|---|
MODELS_MISSING | Re-run init without --no-fetch. |
SERVICE_TIMEOUT | Inspect the named endpoint and its Compose logs. |
TEXT2IMAGE_FAILED plus BACKEND_UNREACHABLE | Re-run init and inspect the ComfyUI service. |
TEXT2IMAGE_FAILED plus MODEL_MISSING | Check the ComfyUI models mount. |
IMAGE2MESH_FAILED plus NO_VULKAN_DEVICE | Check /dev/dri and the render group id. |
IMAGE2MESH_FAILED plus GLB_INVALID | Keep the output and report the engine bug. |
Limits
- One subject, not a multi-object scene.
- Static meshes only. No animation, skeleton, rig, or Blender path.
- Faces hold up at gameplay distance, not as portrait assets.
- Vulkan GPU required. The engine refuses silent CPU fallback.
What ships with it: 173 files
18509.7 KB alongside SKILL.md, 51 of them executable
.agents/
.claude-plugin/
- marketplace.json1.2 KB
agents/
- openai.yaml218 B
docs/
- assets/01.gif1329.3 KB
- assets/02.gif5621.5 KB
- assets/03.gif6426.5 KB
- assets/04.gif1525.5 KB
- FEATURES.md1.6 KB
- INDEX.md3.4 KB
layers/
- comfy/CONTRACT.md4.2 KB
- comfy/docker/Dockerfile2.9 KB
- comfy/docker/supervise.shruns3.8 KB
- comfy/__init__.pyruns546 B
- comfy/README.md4.5 KB
- comfy/schema/error.json666 B
- comfy/schema/mesh_node_request.json2.1 KB
- comfy/schema/mesh_node_result.json1.5 KB
- comfy/src/client.pyruns10.7 KB
- comfy/src/node.pyruns4.6 KB
- comfy/src/schema_check.pyruns3.3 KB
- comfy/tests/test_client.pyruns16.5 KB
- comfy/tests/test_supervise.pyruns4.5 KB
- comfy/workflows/text_to_3d.json2.4 KB
- image2mesh/bench/compare.shruns2.9 KB
- image2mesh/bench/README.md2.7 KB
- image2mesh/bench/results/baseline-r512.json1.3 KB
- image2mesh/bench/results/trimmed-r512.json1.3 KB
- image2mesh/bench/run-bench.shruns6.2 KB
- image2mesh/CHANGES.md9.7 KB
- image2mesh/CONTRACT.md4.4 KB
- image2mesh/docker/Dockerfile1.8 KB
- image2mesh/docker/Dockerfile.upstream2.0 KB
- image2mesh/docker/entrypoint.shruns948 B
- image2mesh/engine/CMakeLists.txt6.0 KB
- image2mesh/engine/include/birefnet.h895 B
- docker-compose.comfy.yml1.3 KB
- docker-compose.yml2.4 KB
- .env.example649 B
- .gitignore915 B
- .gitmodules169 B
133 more files not listed here. See all 173 in the repository.