tokenlab-image-to-3d-asset
Turn a product photo, a concept image, or a text description into a downloadable 3D model (GLB and other formats) with TokenLab 3D models. Use when the user says "make a 3D model of this", "turn this
SKILL.mdskills/tokenlab-image-to-3d-asset/SKILL.md
GitHubImage to 3D Asset
Make one downloadable 3D object from an image or a short description. 3D jobs are async and paid per request, so the main levers are a clean input and the right model for the use (web preview, game, AR, or print).
Inputs to collect
- Source: an image (public
httpsURL or a TokenLab result URL) or a text description. - The object: what it is, and what is not part of it (table, background, hands).
- Use: web or AR preview, game asset, or 3D print. This decides file format and how heavy the mesh may be.
- Format:
glbfor web and most tools;fbx,obj, orusdzonly when the model returns them.
Models
<!-- tokenlab:models:start --> <!-- Generated from the live catalog by scripts/sync_models.py. Do not edit; change preferredModels in catalog.json. -->| Operation | Model | Pick | Use |
|---|---|---|---|
image-to-3d |
tripo-h3.1 |
default | Photo or text to a 3D object |
image-to-3d |
rodin-gen-2 |
alternative | Lighter mesh for games or the web |
image-to-3d |
seed3d-2.0 |
alternative | Photo to 3D, alternative (not live-tested) |
image-to-3d |
tripo-p1.0 |
alternative | Alternative (not live-tested) |
image-to-3d |
meshy-6 |
alternative | Alternative (not live-tested) |
text-to-3d |
tripo-h3.1 |
default | Photo or text to a 3D object |
text-to-3d |
rodin-gen-2 |
alternative | Lighter mesh for games or the web |
text-to-3d |
tripo-3d-v3-1 |
alternative | Text to 3D, alternative (not live-tested) |
text-to-3d |
tripo-p1.0 |
alternative | Alternative (not live-tested) |
text-to-3d |
meshy-6 |
alternative | Alternative (not live-tested) |
This list refreshes daily from the live catalog. Preferred models come first; otherwise models are ranked by their 24-hour success rate. Before a call, confirm the model with GET /v1/models/{model} and read its price from GET /v1/models/{model}/pricing.
How to choose:
- Photo or text to one 3D object: Tripo (H3.1). It gives a detailed, heavy mesh.
- Lighter mesh for games or the web: Rodin.
- Alternatives: Seed3D for photo to 3D, an earlier Tripo tier for text to 3D, Tripo P1.0, and Meshy. Confirm the operation in the contract.
Exact fields, operations, and output formats come from the model contract.
In a 2026-10-12 check on the same mug photo, Tripo (H3.1) returned a 43 MB GLB with about 755k vertices, and Rodin returned a 7 MB GLB with about 17k vertices. Check size before you ship a model to a web page or a game.
Workflow
Run each call with tokenlab-run (contract → estimate → call → poll → result). Commands below use its helper, ../tokenlab-run/scripts/tokenlab_run.py, a path relative to this skill's folder. If you installed this skill without tokenlab-run, send the same requests with curl. --wait stops after 100 s; a longer task keeps running, so continue with the resume command it prints.
- Read the contract:
python ../tokenlab-run/scripts/tokenlab_run.py contract MODEL_ID --operation image-to-3d. TakeMODEL_IDfrom the Models list above. Confirm the model publishes the operation you need (image-to-3dortext-to-3d). Send only fields insupported_parameters. - Do not send
operation./v1/3d/generationsinfers it:promptalone is text-to-3d;imageorimage_urlmakes it image-to-3d. Some contracts listoperation; requests without it still work. - Estimate with
GET /v1/models/{model}/pricing. Prices are per request and can differ by operation and option. Read the entry that matches your operation and thedefault_selection. Example: for Tripo (H3.1) image-to-3d, read the entry for the defaulttexture: noneselection; that is the price per model. Tell the user before you start. - Check the input URL opens without login. Then call and wait:
python ../tokenlab-run/scripts/tokenlab_run.py run /v1/3d/generations --json @body.json --wait --interval 8. Save the taskidfirst. Jobs took about 2–4 minutes in testing. On a timeout, resume withpoll TASK_ID. - Read the result:
model_urlalways;glb_url,fbx_url,obj_url,usdz_urlwhen the model returns them. Some models also return a preview render inoutput. URLs stay valid for 30 days. - Download the file. Check it is a real model file (a GLB starts with the bytes
glTF), its size, and a preview. Return the URLs, model, and task ID.
Body examples (take MODEL_ID from the Models list above):
{"model": "MODEL_ID", "prompt": "A white ceramic mug with a bare tan clay base and a rounded handle. Only the mug, no table or background.", "image_url": "https://..."}
{"model": "MODEL_ID", "prompt": "a stylized low-poly robot mascot, rounded body, short antenna"}
Technique
- One object, full view. Use an image where the whole object is in frame, not cut off, and not covered by other things. A product photo on a plain background works best.
- Name the object and exclude the rest. With an image, the
promptshould say what the object is and what is not part of it: "only the mug, no table or background". In testing this kept the table out of the mesh. - Clean the photo first when the background is busy: cut it out with
tokenlab-product-photography(background removal) and send that result URL. - Text prompts: object, shape, material, style, and level of detail. "a weathered wooden treasure chest with iron bands, game-ready, stylized". Leave out scenes and lighting.
- Keep the user's product true. Compare the preview with the photo: shape, proportions, handle, colors, and labels.
- Format by use:
glbfor web and most engines;usdzfor Apple AR;fbxorobjfor DCC tools. If the format you need is missing, usemodel_urland convert, or pick a model that returns it. - Retries cost. Each new task is a new charge. Fix the input before you retry.
Quality bar
- The model is the requested object only, with no table, floor, or background stuck to it.
- Shape, proportions, and colors match the source image.
- The file opens as a valid model, in the requested format, with a size that fits the use.
- The final answer has the model URL(s), model ID, task ID, and the estimate the user saw.
Related skills
tokenlab-run: the call, poll, and result mechanics.tokenlab-world-generation: an explorable scene instead of one object.tokenlab-product-photography: a clean product shot to use as input.tokenlab-edit-image: remove a background or extra objects first.