Imagem para GLB com curl
Um pequeno fluxo Bash envia a imagem, acompanha a mesma tarefa até terminar e baixa o GLB. Não é preciso um CLI da TO3D; geração e rigging são tarefas separadas.
Verificado em 27 de setembro de 2026
Antes de começar
Crie uma chave de API no painel e guarde-a em uma variável de ambiente. A URL da imagem precisa ser acessível pelo serviço; image-to-3d aceita URL ou base64 de PNG, JPEG e GIF até 128 MB.
- Use o cabeçalho x-api-key em todas as requisições.
- Uma tarefa de geração retorna 202 e passa de pending para processing e depois para succeeded, failed ou canceled.
- Uma tarefa failed ou canceled é reembolsada automaticamente quando o provedor não a conclui.
export TO3D_KEY='your_api_key'
export TO3D_IMAGE_URL='https://example.com/photo.png'
BASE='https://api.to3d.app'Envie uma imagem
Envie a URL da imagem para Trellis e guarde o id retornado. A consulta e o download usam esse id e não criam outra tarefa paga.
- Envie task_type image-to-3d.
- Coloque a URL da imagem em input.image.
- Trate o id da resposta como opaco e mantenha-o exatamente como foi retornado.
TASK_JSON=$(curl -sS --fail-with-body "$BASE/api/trellis/tasks" \
-H "x-api-key: $TO3D_KEY" -H 'Content-Type: application/json' \
-d "$(jq -cn --arg image "$TO3D_IMAGE_URL" '{task_type: "image-to-3d", input: {image: $image}}')")
TASK_ID=$(jq -er '.id' <<<"$TASK_JSON")
printf 'Task: %s\n' "$TASK_ID"Consulte e baixe o GLB
Consulte o endpoint com o mesmo id. Uma resposta bem-sucedida contém output.model_file, uma URL durável que pode ser baixada sem a chave.
- Aguarde cinco segundos entre as verificações e limite o loop de acordo com o seu trabalho.
- Não envie novamente quando o loop atingir o tempo limite; consulte depois o id da tarefa original.
- Verifique os quatro primeiros bytes do arquivo para glTF antes de entregá-lo a um visualizador ou motor.
MODEL_URL=''
for ((attempt = 0; attempt < 120; attempt++)); do
STATUS_JSON=$(curl -sS --fail-with-body "$BASE/api/trellis/tasks/$TASK_ID" -H "x-api-key: $TO3D_KEY")
STATUS=$(jq -er '.status' <<<"$STATUS_JSON")
case "$STATUS" in
succeeded) MODEL_URL=$(jq -er '.output.model_file' <<<"$STATUS_JSON"); break ;;
failed|canceled) jq '{id,status,error}' <<<"$STATUS_JSON" >&2; exit 1 ;;
pending|processing) sleep 5 ;;
esac
done
[ -n "$MODEL_URL" ] || { echo "Timed out; keep the task id" >&2; exit 1; }
curl -fsSL "$MODEL_URL" -o model.glb
[ "$(head -c 4 model.glb)" = glTF ]Faça rigging opcionalmente
Rigging é uma segunda requisição para o GLB baixado. Crie uma tarefa Skin Tokens apenas quando precisar de um esqueleto humanoide e consulte-a do mesmo modo.
- Envie task_type rig para /api/skin_tokens/tasks.
- Defina input.model como a URL do GLB ou um GLB em base64 e escolha os nomes de ossos original, mixamo ou ue5.
- O endpoint de rigging retorna output.model_file quando sua própria tarefa termina.
curl -sS --fail-with-body "$BASE/api/skin_tokens/tasks" \
-H "x-api-key: $TO3D_KEY" -H 'Content-Type: application/json' \
-d '{"task_type":"rig","input":{"model":"https://storage.to3d.app/tasks/example/model.glb","bone_names":"mixamo"}}'Falhas e timeouts
Um 503 transitório ou um timeout local não justificam uma segunda tarefa. Consulte primeiro o id original e leia seu estado e erro.
- Tente novamente as requisições HTTP transitórias com backoff, mantendo o mesmo id da tarefa.
- 400 significa que o formato da requisição ou a entrada é inválida; 401 significa que a chave está ausente ou inválida.
- Uma resposta 404 de tarefa é limitada à conta que criou a tarefa.
curl -sS "$BASE/api/trellis/tasks/$TASK_ID" -H "x-api-key: $TO3D_KEY" | jq '{id,status,output,error}'