API Remesh
L'API Remesh ti consente di ricreare la mesh (remesh) ed esportare modelli 3D esistenti generati da altre API di Meshy (come Immagine in 3D o Testo in 3D) in vari formati. Questa sezione fornisce i dettagli su come utilizzare l'API Remesh.
Crea un Remesh Task
Questo endpoint crea un nuovo task di remesh.
Il task viene eseguito in background. Per informazioni sui tempi di elaborazione, consulta Processing Times.
Per la conversione di formato e il ridimensionamento, utilizza le API dedicate Convert API e Resize API. I parametri deprecati riportati di seguito continueranno a funzionare, ma per le nuove integrazioni consigliamo di utilizzare i nuovi endpoint.
Parametri
È richiesto solo uno tra input_task_id o model_url. Se vengono forniti entrambi, input_task_id ha la priorità.
- Name
- input_task_id
- Type
- string
- Obbligatorio
- Description
L'ID del task Immagine in 3D o Testo in 3D completato che desideri sottoporre a remesh. Questo task deve essere uno dei seguenti: Text to 3D Preview, Text to 3D Refine, Image to 3D o Retexture. Inoltre, deve avere lo stato
SUCCEEDED.
- Name
- model_url
- Type
- string
- Obbligatorio
- Description
Fornisci a Meshy un modello 3D da sottoporre a remesh tramite un URL pubblicamente accessibile o un data URI. Formati supportati:
.glb,.gltf,.obj,.fbx,.stl.Per i Data URI, utilizza il MIME type:
application/octet-stream.Dimensione massima del file: 100 MB.
- Name
- target_formats
- Type
- string[]
- predefinito ["glb"]
- Description
Un elenco di formati di destinazione per il modello sottoposto a remesh. Se omesso, viene generato solo il GLB.
Valori disponibili:
glb,fbx,obj,usdz,blend,stl,3mf.
- Name
- topology
- Type
- string
- predefinito triangle
- Description
Specifica la topology del modello generato.
Valori disponibili:
quad: genera una mesh a dominanza di quadrilateri.triangle: genera una mesh a triangoli decimata.
- Name
- target_polycount
- Type
- integer
- predefinito 30,000
- Description
Specifica il numero target di poligoni nel modello generato. Il numero effettivo di poligoni può discostarsi dal target a seconda della complessità della geometria.
L'intervallo di valori validi varia in base al livello utente:
- da 100 a 300.000 (inclusi)
- Name
- decimation_mode
- Type
- integer
- Description
Abilita la decimazione adattiva impostando un livello di conteggio poligoni. Quando è impostato,
target_polycountviene ignorato.Valori disponibili:
1: Adattivo — conteggio poligoni ultra.2: Adattivo — conteggio poligoni alto.3: Adattivo — conteggio poligoni medio.4: Adattivo — conteggio poligoni basso.
- Name
- resize_height
- Type
- number
- ⚠ deprecato
- predefinito 0
- Description
Ridimensiona il modello a una determinata altezza misurata in metri. Consigliamo di utilizzare invece l'API dedicata Resize API.
auto_size,resize_heighteresize_longest_sidesi escludono a vicenda.
- Name
- resize_longest_side
- Type
- number
- ⚠ deprecato
- predefinito 0
- Description
Ridimensiona il modello in modo che la dimensione più lunga del bounding box sia pari al valore specificato in metri. Consigliamo di utilizzare invece l'API dedicata Resize API.
auto_size,resize_heighteresize_longest_sidesi escludono a vicenda.
- Name
- auto_size
- Type
- boolean
- ⚠ deprecato
- predefinito false
- Description
Quando è impostato su
true, il servizio utilizza la visione artificiale AI per stimare automaticamente l'altezza reale dell'oggetto e ridimensionare il modello di conseguenza. Consigliamo di utilizzare invece l'API dedicata Resize API.auto_size,resize_heighteresize_longest_sidesi escludono a vicenda.
auto_size = true- Name
- origin_at
- Type
- string
- ⚠ deprecato
- predefinito bottom
- Description
Posizione dell'origine. Consigliamo di utilizzare invece l'API dedicata Resize API.
Valori disponibili:
bottom,center.
- Name
- convert_format_only
- Type
- boolean
- ⚠ deprecato
- Description
Se
true, il servizio modificherà solo il formato del file del modello di input, ignorando altri input cometopology,resize_heightetarget_polycount. Consigliamo di utilizzare invece l'API dedicata Convert API.target_formatsdeve essere fornito seconvert_format_onlyè impostato sutrue.
- Name
- alpha_thumbnail
- Type
- boolean
- predefinito false
- Description
Quando è impostato su
true, il task genera inoltre una versione con sfondo trasparente (RGBA) dell'anteprima e la restituisce comealpha_thumbnail_urlnella risposta GET. Il campo esistentethumbnail_urlrimane invariato.
Valori restituiti
La proprietà result della risposta contiene l'id del task di remesh appena creato.
Modalità di errore
- Name
400 - Bad Request- Description
La richiesta non è stata accettata. Cause comuni:
- Parametro mancante: deve essere fornito
model_urloppureinput_task_id. - Task di input non valido:
input_task_iddeve fare riferimento a un task completato con successo da un modello supportato. - Formato del modello non valido:
model_urlpunta a un file con un'estensione non supportata. - URL non raggiungibile: non è stato possibile scaricare
model_url. - File del modello troppo grande: il file di
model_urlsupera i 100 MB. - Topology non valida: il parametro
topologynon è valido. - Parametri reciprocamente esclusivi:
auto_sizeeresize_heightnon possono essere entrambi impostati.
- Parametro mancante: deve essere fornito
- Name
401 - Unauthorized- Description
Autenticazione non riuscita. Controlla la tua chiave API.
- Name
402 - Payment Required- Description
Crediti insufficienti per eseguire questo task.
- Name
429 - Too Many Requests- Description
Hai superato il limite di frequenza.
Request
# Basic remesh with custom formats and resize
curl https://api.meshy.ai/openapi/v1/remesh \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
"target_formats": ["glb", "fbx"],
"topology": "quad",
"target_polycount": 50000,
"resize_height": 1.0,
"origin_at": "bottom"
}'
# Quad remesh with auto-size
curl https://api.meshy.ai/openapi/v1/remesh \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
"target_formats": ["glb", "fbx"],
"topology": "quad",
"target_polycount": 50000,
"auto_size": true
}'
Response
{
"result": "0193bfc5-ee4f-73f8-8525-44b398884ce9"
}
Recupera un'attività di Remesh
Questo endpoint recupera un'attività di remesh tramite il suo ID.
Parametri
- Name
- id
- Type
- path
- Description
L'ID dell'attività di remesh da recuperare.
Restituisce
L'oggetto Remesh Task.
Request
curl https://api.meshy.ai/openapi/v1/remesh/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null,
}
Elimina un'attività di Remesh
Questo endpoint elimina definitivamente un'attività di remesh, inclusi tutti i modelli e i dati associati. Questa azione è irreversibile.
Parametri del percorso
- Name
- id
- Type
- path
- Description
L'ID dell'attività di remesh da eliminare.
Stato dell'attività
Un'attività ancora in stato PENDING viene eliminata e i crediti consumati
al momento della creazione vengono rimborsati.
Un'attività già IN_PROGRESS non può essere eliminata: la richiesta viene
rifiutata con 409 Conflict e l'attività continua a essere eseguita. I crediti
per un'attività che il worker ha già iniziato non sono rimborsabili, quindi
eliminarla a metà esecuzione ti farebbe perdere sia i crediti che il risultato.
Attendi che raggiunga lo stato SUCCEEDED, FAILED o CANCELED, quindi eliminala.
Un'attività in uno stato finale (SUCCEEDED, FAILED o CANCELED) viene
eliminata senza rimborso.
Restituisce
Restituisce 200 OK in caso di successo, oppure 409 Conflict quando l'attività
è IN_PROGRESS.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/v1/remesh/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
// 200 OK on success, with an empty body.
//
// 409 Conflict when the task is IN_PROGRESS — the task is left running:
{
"message": "Task is IN_PROGRESS and cannot be deleted. Credits for a task the worker has already started are not refundable; wait for it to reach SUCCEEDED, FAILED or CANCELED, then delete it."
}
Elenco delle attività di Remesh
Questo endpoint consente di recuperare un elenco di attività di Remesh.
Parametri
- Name
- page_num
- Type
- integer
- predefinito 1
- Description
Numero di pagina per la paginazione.
- Name
- page_size
- Type
- integer
- predefinito 10
- Description
Limite della dimensione della pagina. Il massimo consentito è
100elementi.
- Name
- sort_by
- Type
- string
- Description
Campo su cui ordinare.
Valori disponibili:
+created_at: Ordina per data di creazione in ordine crescente.-created_at: Ordina per data di creazione in ordine decrescente.
Restituisce
Restituisce un elenco paginato di Oggetti Attività di Remesh.
Request
curl https://api.meshy.ai/openapi/v1/remesh?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
[
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null
}
]
Esegui lo streaming di un task di Remesh
Questo endpoint trasmette in streaming gli aggiornamenti in tempo reale di un task di Remesh utilizzando Server-Sent Events (SSE).
Parametri
- Name
- id
- Type
- path
- Description
Identificatore univoco del task di Remesh da trasmettere in streaming.
Risultati restituiti
Restituisce uno stream di The Remesh Task Objects come Server-Sent Events.
Per i task PENDING o IN_PROGRESS, lo stream di risposta includerà solo i campi necessari progress e status.
Request
curl -N https://api.meshy.ai/openapi/v1/remesh/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response Stream
// Error event example
event: error
data: {
"status_code": 404,
"message": "Task not found"
}
// Message event examples illustrate task progress.
// For PENDING or IN_PROGRESS tasks, the response stream will not include all fields.
event: message
data: {
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"progress": 0,
"status": "PENDING"
}
event: message
data: {
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null,
}
L'oggetto Remesh Task
L'oggetto Remesh Task rappresenta un'unità di lavoro che Meshy utilizza per rieseguire il remesh ed esportare un modello 3D esistente in vari formati. L'oggetto ha le seguenti proprietà:
Proprietà
- Name
- id
- Type
- string
- Description
Identificatore univoco per il task. Sebbene utilizziamo un UUID k-sortable per gli id dei task come dettaglio implementativo, non dovresti fare alcuna assunzione sul formato dell'id.
- Name
- type
- Type
- string
- Description
Tipo del task Remesh. Il valore è
remesh.
- Name
- model_urls
- Type
- object
- Description
URL scaricabile del file del modello 3D texturizzato generato da Meshy. La proprietà per un formato sarà omessa se il formato non viene generato, invece di restituire una stringa vuota.
- Name
glb- Type
- string
- Description
URL scaricabile del file GLB.
- Name
fbx- Type
- string
- Description
URL scaricabile del file FBX.
- Name
obj- Type
- string
- Description
URL scaricabile del file OBJ.
- Name
usdz- Type
- string
- Description
URL scaricabile del file USDZ.
- Name
blend- Type
- string
- Description
URL scaricabile del file Blender.
- Name
stl- Type
- string
- Description
URL scaricabile del file STL.
- Name
3mf- Type
- string
- Description
URL scaricabile del file 3MF. Presente solo quando
3mfè stato richiesto tramitetarget_formats.
- Name
- thumbnail_url
- Type
- string
- Description
URL scaricabile di un'immagine di anteprima renderizzata dal modello sottoposto a remesh.
- Name
- alpha_thumbnail_url
- Type
- string
- Description
URL scaricabile di una versione con sfondo trasparente (RGBA) di
thumbnail_url. Presente solo quando il task è stato creato conalpha_thumbnail: truee l'anteprima trasparente è stata renderizzata con successo; altrimenti questo campo viene omesso.
- Name
- progress
- Type
- integer
- Description
Avanzamento del task. Se il task non è ancora iniziato, questa proprietà sarà
0. Una volta che il task è riuscito, diventerà100.
- Name
- status
- Type
- string
- Description
Stato del task. I valori possibili sono uno tra
PENDING,IN_PROGRESS,SUCCEEDED,FAILED.
- Name
- preceding_tasks
- Type
- integer
- Description
Il conteggio dei task precedenti.
Il valore di questo campo è significativo solo se lo stato del task è
PENDING.
- Name
- created_at
- Type
- timestamp
- Description
Timestamp di quando il task è stato creato, in millisecondi.
- Name
- started_at
- Type
- timestamp
- Description
Timestamp di quando il task è stato avviato, in millisecondi. Se il task non è ancora stato avviato, questa proprietà sarà
0.
- Name
- finished_at
- Type
- timestamp
- Description
Timestamp di quando il task è stato completato, in millisecondi. Se il task non è ancora stato completato, questa proprietà sarà
0.
- Name
- task_error
- Type
- object
- Description
Dettagli dell'errore per i task falliti. Consulta Errori per il riferimento completo dell'oggetto
task_error.
- Name
- consumed_credits
- Type
- integer
- Description
Il numero di crediti consumati da questo task. Presente quando lo stato del task è
PENDING,IN_PROGRESSoSUCCEEDED. Restituisce0per i taskFAILED(i crediti vengono rimborsati in caso di fallimento).
Example Remesh Task Object
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"preceding_tasks": 0,
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": {
"message": ""
},
"consumed_credits": 5
}