curl로 이미지를 GLB로 변환
작은 Bash 워크플로만으로 이미지를 제출하고 같은 작업이 끝날 때까지 확인한 다음 GLB를 다운로드할 수 있습니다. 전용 TO3D CLI는 필요하지 않으며 생성과 리깅은 별도 작업입니다.
2026년 9월 27일 확인
시작하기 전에
대시보드에서 API 키를 만들고 환경 변수에 보관하세요. 이미지 URL은 서비스에서 접근 가능해야 합니다. image-to-3d는 URL 또는 base64 PNG, JPEG, GIF를 받으며 최대 128 MB입니다.
- 모든 요청에 x-api-key 헤더를 사용하세요.
- 생성 작업은 202를 반환하고 pending에서 processing을 거쳐 succeeded, failed 또는 canceled로 이동합니다.
- 프로바이더가 작업을 완료하지 못하면 failed 또는 canceled 작업은 자동으로 환불됩니다.
export TO3D_KEY='your_api_key'
export TO3D_IMAGE_URL='https://example.com/photo.png'
BASE='https://api.to3d.app'이미지 하나 제출
이미지 URL을 Trellis에 POST합니다. 반환된 id를 먼저 저장하세요. 이후 확인과 다운로드는 같은 id를 사용하며 유료 작업을 새로 만들지 않습니다.
- task_type image-to-3d를 전송하세요.
- 이미지 URL을 input.image에 넣으세요.
- 응답 id를 불투명한 값으로 취급하고 반환된 그대로 정확히 보관하세요.
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"확인하고 GLB 다운로드
같은 작업 id로 엔드포인트를 확인하세요. 성공 응답의 output.model_file은 API 키 없이 받을 수 있는 영구 URL입니다.
- 확인 사이에 5초를 기다리고 작업에 맞는 횟수로 루프를 제한하세요.
- 루프가 시간 초과되어도 다시 제출하지 말고 나중에 원래 task id를 확인하세요.
- 뷰어 또는 엔진에 전달하기 전에 파일의 첫 네 바이트가 glTF인지 확인하세요.
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 ]선택적으로 결과 리깅
리깅은 다운로드한 GLB에 대한 두 번째 요청입니다. humanoid 골격이 필요할 때만 Skin Tokens 작업을 만들고 같은 방식으로 확인하세요.
- /api/skin_tokens/tasks에 task_type rig를 전송하세요.
- input.model에 GLB URL 또는 base64 GLB를 설정하고 original, mixamo 또는 ue5 본 이름을 선택하세요.
- 리그 엔드포인트는 자체 작업이 끝난 뒤 output.model_file을 반환합니다.
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"}}'실패와 타임아웃
일시적인 503이나 로컬 확인 타임아웃 때문에 두 번째 작업을 만들지 마세요. 원래 id를 먼저 확인해 상태와 오류 기록을 읽으세요.
- 일시적인 HTTP 요청은 백오프로 재시도하되 같은 task id를 유지하세요.
- 400은 요청 형식이나 입력이 잘못되었다는 뜻이고, 401은 키가 없거나 유효하지 않다는 뜻입니다.
- 작업의 404 응답은 해당 작업을 만든 계정으로 범위가 제한됩니다.
curl -sS "$BASE/api/trellis/tasks/$TASK_ID" -H "x-api-key: $TO3D_KEY" | jq '{id,status,output,error}'