GUIDES / API-ABLAUF

Bild mit curl zu GLB

Ein kleiner Bash-Ablauf reicht: Bild senden, dieselbe Aufgabe bis zum Ende verfolgen und das GLB laden. Es gibt kein spezielles TO3D-CLI; Erzeugung und Rigging sind getrennte Aufgaben.

Geprüft am 27. September 2026

Vorbereitung

Erstelle im Dashboard einen API-Key und speichere ihn in einer Umgebungsvariable. Die Bild-URL muss erreichbar sein; image-to-3d akzeptiert URL oder base64 für PNG, JPEG und GIF bis 128 MB.

  • Verwende für jede Anfrage den Header x-api-key.
  • Eine Generierungsaufgabe gibt 202 zurück und wechselt von pending über processing zu succeeded, failed oder canceled.
  • Eine fehlgeschlagene oder abgebrochene Aufgabe wird automatisch erstattet, wenn der Anbieter sie nicht abschließt.
export TO3D_KEY='your_api_key'
export TO3D_IMAGE_URL='https://example.com/photo.png'
BASE='https://api.to3d.app'

Ein Bild senden

Sende die Bild-URL an Trellis und speichere die zurückgegebene id. Abfragen und Download verwenden diese id und erzeugen keine weitere kostenpflichtige Aufgabe.

  • Sende task_type image-to-3d.
  • Setze die Bild-URL unter input.image.
  • Behandle die Antwort-id als opak und übernimm sie exakt wie zurückgegeben.
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"

Abfragen und GLB laden

Frage den Endpoint mit derselben id ab. Bei Erfolg enthält output.model_file eine dauerhafte URL, die ohne API-Key geladen werden kann.

  • Warte zwischen den Prüfungen fünf Sekunden und begrenze die Schleife passend zu deinem Auftrag.
  • Sende bei einem Schleifen-Timeout nicht erneut; prüfe später die ursprüngliche Task-ID.
  • Prüfe die ersten vier Bytes der Datei auf glTF, bevor du sie an einen Viewer oder eine Engine übergibst.
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 ]

Ergebnis optional riggen

Rigging ist eine zweite Anfrage für das geladene GLB. Erzeuge nur bei einem benötigten Humanoid-Skelett eine Skin-Tokens-Aufgabe und frage sie gleich ab.

  • Sende task_type rig an /api/skin_tokens/tasks.
  • Setze input.model auf die GLB-URL oder ein Base64-GLB und wähle die Knochennamen original, mixamo oder ue5.
  • Der Rig-Endpunkt liefert output.model_file, sobald seine eigene Aufgabe abgeschlossen ist.
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"}}'

Fehler und Zeitüberschreitung

Ein vorübergehender 503 oder ein lokales Timeout ist kein Grund für eine zweite Aufgabe. Zuerst die ursprüngliche id abfragen und Status und Fehler lesen.

  • Wiederhole vorübergehende HTTP-Anfragen mit Backoff und behalte dieselbe Task-ID.
  • 400 bedeutet, dass Anfrageform oder Eingabe ungültig ist; 401 bedeutet, dass der Schlüssel fehlt oder ungültig ist.
  • Eine 404-Antwort für eine Aufgabe gilt nur für das Konto, das sie erstellt hat.
curl -sS "$BASE/api/trellis/tasks/$TASK_ID" -H "x-api-key: $TO3D_KEY" | jq '{id,status,output,error}'