Creative Lab Keycap API
Proměňte fotografii v plnobarevnou vlastní klávesu pro mechanickou klávesnici ve dvou fázích. Úkol prototypu vygeneruje z fotografie obrázek hotové klávesy. Úkol sestavení pak tento obrázek promění v texturovaný 3D model klávesy. Jako vstup používá ID úkolu prototypu coby input_task_id a ID kandidáta obrázku coby candidate_id.
POST /openapi/creative-lab/keycap/v1/prototypePOST /openapi/creative-lab/keycap/v1/build
Oba POST endpointy vyžadují placený plán. Požadavek z účtu s bezplatným plánem vrátí 402.
Vytvoření úlohy prototypu Keycap
Vygeneruje jeden obrázek hotové klávesy (keycap) z fotografie. Pole image_urls úlohy obsahuje obrázek a candidate_ids obsahuje jeho ID, vždy po jedné položce. Pokud se vám návrh nelíbí, vytvořte další úlohu prototypu. Meshy účtuje za každou úlohu prototypu samostatně.
Pro vytvoření 3D klávesy předejte ID této úlohy build koncovému bodu jako input_task_id, s položkou candidate_ids jako candidate_id. Popis polí úlohy najdete v Objekt úlohy prototypu Keycap.
Request
# Stage 1: generate a finished-keycap design render
curl https://api.meshy.ai/openapi/creative-lab/keycap/v1/prototype \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"image_url": "<your publicly accessible image url or base64-encoded data URI>"
}'
Response
{
"result": "019c9a4e-2b31-7f6a-8c44-5d2a87b3c1ef"
}
Parametry
- Name
- image_url
- Type
- string
- Povinné
- Description
Fotografie, která se má přeměnit na návrh klávesy, jako veřejná URL adresa nebo data URI (
data:image/jpeg;base64,<vaše base64 kódovaná obrazová data>).Obrázek musí být soubor JPG, JPEG, PNG nebo WebP o velikosti maximálně 20 MB (20 000 000 bajtů). Každá strana musí mít alespoň 32 pixelů a obrázek může mít celkem maximálně 178 956 970 pixelů. Obrázek mimo tyto limity vrátí
400.Meshy rozpozná formát z obrazových dat, nikoli z přípony souboru v URL adrese. URL adresa bez přípony funguje a Meshy sleduje HTTP přesměrování. Meshy aplikuje orientaci EXIF, takže otočená fotografie z telefonu vyjde tak, jak vypadá.
Data URI musí být kódováno pomocí base64 s typem obrázku, například
data:image/png;base64,..., a dekódovaný obrázek musí být JPEG, PNG nebo WebP. Limit 20 MB se vztahuje na dekódovaný obrázek, takže text base64 může být zhruba o třetinu větší.
- Name
- name
- Type
- string
- Description
Název úlohy, až 100 znaků. Vrátí se v poli
nameúlohy. Delší název vrátí400.
- Name
- remove_background
- Type
- boolean
- výchozí false
- Description
Zda se má z obrázku prototypu odstranit pozadí.
truevrátí průhledné RGBA PNG, takže klávesu můžete umístit na libovolné pozadí. Pokud Meshy nedokáže pozadí odstranit, vrátí obrázek s jeho pozadím a úloha přesto uspěje.Návrh hlavičky, který se při buildu přemění na 3D, si v obou případech zachová své pozadí. Build vykreslí základnu klávesy z obrázku v
image_urls, bez jeho pozadí, pokud jste odeslalitrue. Build vrátí tento obrázek jakoprocess_image_urls.composite.
Návratové hodnoty
Pole result obsahuje ID nové úlohy prototypu. Získejte úlohu nebo sledujte ji streamováním, dokud status nebude SUCCEEDED. Poté předejte ID build koncovému bodu jako input_task_id, s položkou z candidate_ids jako candidate_id.
Chybové stavy
- Name
400 - Bad Request- Description
Požadavek nelze spustit. Například:
- Chybí
image_url. - Obrázek není soubor JPG, JPEG, PNG ani WebP.
- Obrázek je příliš malý, větší než 20 MB nebo překračuje maximální počet pixelů.
- Meshy nemůže obrázek stáhnout, například protože URL adresa vrací
404nebo vyprší časový limit. - Data URI není platné base64.
- Obrázek byl označen jako NSFW.
Chybová zpráva uvádí, jaký problém byl zjištěn. Opravte požadavek a odešlete ho znovu.
- Chybí
- Name
401 - Unauthorized- Description
API klíč chybí nebo je neplatný. Zkontrolujte hlavičku
Authorization.
- Name
402 - Payment Required- Description
Platí jedno z následujícího:
- Účet nemá dostatek kreditů.
- API klíč, pracovní prostor nebo člen dosáhl svého limitu kreditů.
- Účet má neomezený plán.
Zkontrolujte své kredity a plán a zkuste to znovu.
- Name
403 - Forbidden- Description
Váš tým má zapnuté IP Filtering a Meshy obrázek označilo kvůli duševnímu vlastnictví třetí strany. Odešlete obrázek, ke kterému máte práva.
- Name
429 - Too Many Requests- Description
Byl dosažen jeden z těchto limitů:
- Odeslali jste více požadavků, než povoluje váš limit rychlosti. Počkejte několik sekund a zkuste to znovu. Viz Limity rychlosti.
- Příliš mnoho vašich úloh čeká ve frontě nebo běží. Počkejte, až se některé dokončí, a zkuste to znovu.
- Pokud máte neomezený plán bez zbývajících kreditů, dosáhli jste počtu úloh, které lze spustit bez kreditů. Počkejte na dokončení úlohy nebo přidejte kredity.
- Name
500 - Internal Server Error- Description
Meshy narazilo na chybu serveru, například protože nebylo možné spustit moderation obsahu nebo kontrolu duševního vlastnictví, nebo Meshy nemohlo obrázek uložit. Meshy úlohu nevytvoří a vrátí veškeré účtované kredity. Zkuste požadavek odeslat znovu.
Vytvoření úlohy sestavení Keycap
Vygeneruje texturovanou 3D klávesu z úspěšné úlohy prototypu a jednoho z jejích kandidátů. Popis polí najdete v části Objekt úlohy sestavení Keycap.
Jedna úloha sestavení projde všemi kroky. Vygeneruje 3D model z návrhu a obarví ho. Poté model usadí a ořízne na základně klávesy v kalibrované výchozí poloze, takže ho není třeba ručně upravovat. Nakonec klávesu sestaví a exportuje soubory. Sestavení obvykle trvá 3 až 7 minut.
Request
# Stage 2: build the chosen candidate into a 3D keycap
curl https://api.meshy.ai/openapi/creative-lab/keycap/v1/build \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "019c9a4e-2b31-7f6a-8c44-5d2a87b3c1ef",
"candidate_id": "0198c1b2-33f5-7d21-a4b7-8e9d0c1f2a3b",
"options": {
"base_model": "cherry-mx-1x1-r1",
"head_size_mm": 23,
"vertical_offset_mm": 0
}
}'
Response
{
"result": "019c9a52-7d18-7e2b-9f01-6e3b98c4d2af"
}
Parametry
- Name
- input_task_id
- Type
- string
- Povinné
- Description
ID úlohy prototypu, která se má sestavit. Musí jít o úlohu vytvořenou vaším účtem pomocí
POST /openapi/creative-lab/keycap/v1/prototype, se stavemSUCCEEDED.ID, které neodpovídá žádné z vašich úloh prototypu Keycap z API, vrátí
404, včetně prototypu vytvořeného ve webové aplikaci.
- Name
- candidate_id
- Type
- string
- Povinné
- Description
Kandidát, který se má sestavit, z pole
candidate_idsúlohy prototypu. Hodnota, která v tomto poli není obsažena, vrátí400.
- Name
- name
- Type
- string
- Description
Název úlohy, maximálně 100 znaků. Vrátí se v poli
nameúlohy. Delší název vrátí400.
options
Volitelná nastavení geometrie. Každé pole má kalibrovanou výchozí hodnotu, takže stačí odeslat pouze pole, která chcete změnit.
- Name
- base_model
- Type
- string
- výchozí cherry-mx-1x1-r1
- Description
Základna klávesy, na které se má sestavení provést. Jedinou hodnotou je
cherry-mx-1x1-r1, standardní kláves profilu Cherry MX 1u. Vlastní velikosti nejsou podporovány a jakákoli jiná hodnota vrátí400.
- Name
- head_size_mm
- Type
- number
- výchozí 23
- Description
Velikost hlavy podél její nejdelší dimenze, v milimetrech, od
10do40. Meshy hlavu zvětší nebo zmenší tak, aby její nejdelší dimenze odpovídala této hodnotě. Hodnota mimo rozsah vrátí400.Pro hodnotu nad přibližně
32.9může Meshy velikost zmenšit, aby hlava odpovídala limitu ochranné plochy základny. Hlava pak může vyjít menší, než jste požadovali. Objekt úlohy nevrací velikost, kterou Meshy aplikovalo. Pro její zjištění změřte ohraničující kvádr sítěkeycap-headv modelu.
- Name
- vertical_offset_mm
- Type
- number
- výchozí 0
- Description
Vertikální posun, který se má na hlavu aplikovat před tím, než ji Meshy usadí na základnu, v milimetrech, od
-5do5. Hodnota mimo rozsah vrátí400.
Návratové hodnoty
Pole result obsahuje ID nové úlohy sestavení. Získejte úlohu nebo streamujte ji, dokud status nebude SUCCEEDED. Poté stáhněte soubor GLB z model_urls.glb a balíček OBJ z model_urls.obj_zip.
Meshy exportuje soubor GLB a balíček OBJ ve skutečném měřítku v milimetrech. Oba používají souřadnicový systém s osou Y nahoru, přičemž přední strana klávesy směřuje k ose +Z.
Režimy selhání
- Name
400 - Bad Request- Description
Požadavek nelze spustit. Například:
input_task_idchybí nebo není platné ID úlohy.- Stav úlohy prototypu není
SUCCEEDED. Pokud stále běží, počkejte a zkuste to znovu. Pokud selhala nebo byla zrušena, vytvořte novou úlohu prototypu. - Úloha prototypu byla úspěšná, ale nemá žádné kandidáty. Vytvořte novou úlohu prototypu.
candidate_idchybí nebo není obsažen vcandidate_idsúlohy prototypu. Odešlete hodnotu z tohoto pole.- Některé pole v
optionsje mimo rozsah, nebobase_modelnení dostupná hodnota.
Chybová zpráva uvádí, jaký problém byl zjištěn.
- Name
401 - Unauthorized- Description
API klíč chybí nebo je neplatný. Zkontrolujte hlavičku
Authorization.
- Name
402 - Payment Required- Description
Platí jedno z následujícího:
- Účet nemá dostatek kreditů.
- API klíč, pracovní prostor nebo člen dosáhl svého limitu kreditů.
- Účet je na bezplatném plánu.
Zkontrolujte své kredity a plán a zkuste to znovu.
- Name
404 - Not Found- Description
input_task_idneodpovídá žádné úloze prototypu Keycap, kterou váš účet vytvořil přes API. Prototyp vytvořený ve webové aplikaci rovněž vrátí404. Odešlete IDresultz odpovědi na vytvoření prototypu.
- Name
429 - Too Many Requests- Description
Byl dosažen jeden z těchto limitů:
- Odeslali jste více požadavků, než povoluje váš limit rychlosti. Počkejte několik sekund a zkuste to znovu. Viz Limity rychlosti.
- Příliš mnoho vašich úloh čeká ve frontě nebo běží. Počkejte, až se některé dokončí, a zkuste to znovu.
- V neomezeném plánu bez zbývajících kreditů jste dosáhli počtu úloh, které mohou běžet bez kreditů. Počkejte na dokončení úlohy nebo přidejte kredity.
- Name
500 - Internal Server Error- Description
Meshy nemohlo úlohu vytvořit kvůli chybě serveru. Meshy vrátí všechny kredity, které naúčtovalo. Zopakujte požadavek.
Získání úlohy Keycap
Vrátí úlohu prototype nebo build. Cesta musí odpovídat fázi úlohy. Úloha build vyžádaná přes /prototype/:id vrátí 404, a totéž platí pro úlohu prototype vyžádanou přes /build/:id.
Popis polí najdete v Objekt úlohy Keycap prototype a Objekt úlohy Keycap build.
Request
# Prototype
curl https://api.meshy.ai/openapi/creative-lab/keycap/v1/prototype/019c9a4e-2b31-7f6a-8c44-5d2a87b3c1ef \
-H "Authorization: Bearer ${YOUR_API_KEY}"
# Build
curl https://api.meshy.ai/openapi/creative-lab/keycap/v1/build/019c9a52-7d18-7e2b-9f01-6e3b98c4d2af \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Prototype Response
{
"id": "019c9a4e-2b31-7f6a-8c44-5d2a87b3c1ef",
"type": "creative-lab-keycap-prototype",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1753142456000,
"started_at": 1753142460000,
"finished_at": 1753142516000,
"expires_at": 1753401716000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 12,
"image_urls": [
"https://assets.meshy.ai/***/design-1.png?Expires=***"
],
"candidate_ids": [
"0198c1b2-33f5-7d21-a4b7-8e9d0c1f2a3b"
]
}
Build Response
{
"id": "019c9a52-7d18-7e2b-9f01-6e3b98c4d2af",
"type": "creative-lab-keycap-build",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1753142600000,
"started_at": 1753142610000,
"finished_at": 1753143050000,
"expires_at": 1753402250000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 50,
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/019c9a52-7d18-7e2b-9f01-6e3b98c4d2af/output/model.glb?Expires=***",
"obj_zip": "https://assets.meshy.ai/***/tasks/019c9a52-7d18-7e2b-9f01-6e3b98c4d2af/output/model-obj.zip?Expires=***"
},
"process_image_urls": {
"head_design": "https://assets.meshy.ai/***/head-design.png?Expires=***",
"composite": "https://assets.meshy.ai/***/composite.png?Expires=***",
"base_canvas": "https://assets.meshy.ai/***/base-canvas.png?Expires=***"
}
}
Parametry
- Name
- id
- Type
- path
- Description
ID úlohy z odpovědi na vytvoření.
Návratová hodnota
Objekt úlohy prototype nebo objekt úlohy build, podle fáze uvedené v cestě.
Možné chyby
- Name
400 - Bad Request- Description
idnení platné ID úlohy. Odešlete IDresultz odpovědi na vytvoření.
- Name
403 - Forbidden- Description
Váš tým má zapnuté Filtrování IP a Meshy označilo obrázek úlohy prototype jako duševní vlastnictví třetí strany. U úloh build a týmů s plánem Enterprise k této chybě nedochází. Vytvořte úlohu prototype z obrázku, k jehož použití máte práva.
- Name
404 - Not Found- Description
Úloha Keycap s tímto ID nepatří k vašemu účtu, nebo fáze úlohy neodpovídá cestě. Zkontrolujte ID a použijte
/prototypenebo/buildpodle typu úlohy.
- Name
500 - Internal Server Error- Description
Meshy nemohlo provést kontrolu duševního vlastnictví. Zkuste požadavek odeslat znovu.
Smazání úlohy Keycap
Zruší úlohu Keycap. Zrušení úlohy ve stavu PENDING vrátí její kredity. Úloha ve stavu IN_PROGRESS je zrušena bez vrácení kreditů, protože ji už začal zpracovávat worker. Úlohu v konečném stavu (SUCCEEDED, FAILED nebo CANCELED) nelze zrušit.
Cesta musí odpovídat fázi úlohy. Například DELETE na /prototype/:id s ID úlohy typu build vrátí 404.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/creative-lab/keycap/v1/prototype/019c9a4e-2b31-7f6a-8c44-5d2a87b3c1ef \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
// Returns 204 No Content on success (empty body).
Parametry cesty
- Name
- id
- Type
- path
- Description
ID úlohy, kterou chcete zrušit.
Návratová hodnota
204 No Content s prázdným tělem.
Režimy selhání
- Name
400 - Bad Request- Description
Platí jedna z těchto možností:
idnení platné ID úlohy. Pošlete IDresultz odpovědi na vytvoření.- Úloha už má konečný stav (
SUCCEEDED,FAILEDneboCANCELED), takže ji nelze zrušit.
- Name
404 - Not Found- Description
K vašemu účtu nepatří žádná úloha Keycap s tímto ID, nebo fáze úlohy neodpovídá cestě. Zkontrolujte ID a použijte
/prototypenebo/buildtak, aby odpovídalo úloze.
- Name
500 - Internal Server Error- Description
Meshy narazilo na chybu serveru při rušení úlohy, takže úloha může, ale nemusí být zrušena. Před opakováním si úlohu načtěte a zkontrolujte její
status.
Streamování úlohy Keycap
Streamuje aktualizace úlohy Keycap jako Server-Sent Events (SSE). Cesta musí odpovídat fázi úlohy. Pokud neodpovídá, například ID build úlohy na /prototype/:id/stream, stream odešle jednu událost error se status_code: 404 a uzavře se.
Request
curl -N https://api.meshy.ai/openapi/creative-lab/keycap/v1/build/019c9a52-7d18-7e2b-9f01-6e3b98c4d2af/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response Stream
// Error event example (wrong stage or task not found)
event: error
data: {
"status_code": 404,
"message": "Task not found"
}
// Message event examples illustrate task progress.
// Every frame is the full task object; fields not yet populated are null / empty.
// The following PENDING frame is shortened to the fields that change.
event: message
data: {
"id": "019c9a52-7d18-7e2b-9f01-6e3b98c4d2af",
"progress": 0,
"status": "PENDING"
}
event: message
data: {
"id": "019c9a52-7d18-7e2b-9f01-6e3b98c4d2af",
"type": "creative-lab-keycap-build",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1753142600000,
"started_at": 1753142610000,
"finished_at": 1753143050000,
"expires_at": 1753402250000,
"task_error": null,
"consumed_credits": 50,
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/019c9a52-7d18-7e2b-9f01-6e3b98c4d2af/output/model.glb?Expires=***",
"obj_zip": "https://assets.meshy.ai/***/tasks/019c9a52-7d18-7e2b-9f01-6e3b98c4d2af/output/model-obj.zip?Expires=***"
},
"process_image_urls": {
"head_design": "https://assets.meshy.ai/***/head-design.png?Expires=***"
}
}
Parametry
- Name
- id
- Type
- path
- Description
ID úlohy z odpovědi na vytvoření.
Návratová hodnota
Stream objektů úlohy typu prototype nebo build. Každá událost obsahuje kompletní objekt úlohy tak, jak jej vrací Získání úlohy Keycap. Dokud je úloha ve stavu PENDING nebo IN_PROGRESS, jsou její výstupní pole stále prázdná (null, [] nebo {}) a finished_at je null.
Pokud IP Filtering zablokuje výsledek úlohy, stream místo něj odešle jednu událost error se status_code, které by vrátil get požadavek.
Výpis úloh Keycap
Vrátí vaše úlohy Keycap pro jednu fázi, vždy jednu stránku. Fázi vybírá cesta. /prototype vrátí pouze úlohy prototypu a /build vrátí pouze úlohy sestavení.
Request
# List prototype tasks
curl https://api.meshy.ai/openapi/creative-lab/keycap/v1/prototype?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
# List build tasks
curl https://api.meshy.ai/openapi/creative-lab/keycap/v1/build?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response (List Prototype Tasks)
[
{
"id": "019c9a4e-2b31-7f6a-8c44-5d2a87b3c1ef",
"type": "creative-lab-keycap-prototype",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1753142456000,
"started_at": 1753142460000,
"finished_at": 1753142516000,
"expires_at": 1753401716000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 12,
"image_urls": [
"https://assets.meshy.ai/***/design-1.png?Expires=***"
],
"candidate_ids": [
"0198c1b2-33f5-7d21-a4b7-8e9d0c1f2a3b"
]
}
]
Parametry cesty
- Name
- stage
- Type
- path
- Povinné
- Description
Fáze, kterou chcete vypsat,
prototypenebobuild.
Parametry dotazu
- Name
- page_num
- Type
- integer
- výchozí 1
- Description
Stránka, která se má vrátit, od
1do255. Hodnota0vrátí první stránku. Hodnota mimo rozsah0až255vrátí400.
- Name
- page_size
- Type
- integer
- výchozí 10
- Description
Počet úloh na stránku, maximálně
100. Hodnota v rozsahu101až255vrátí 100 úloh a hodnota0použije výchozí hodnotu. Hodnota mimo rozsah0až255vrátí400.
- Name
- sort_by
- Type
- string
- výchozí -created_at
- Description
Pořadí řazení.
Dostupné hodnoty:
-created_at: nejnovější jako první+created_at: nejstarší jako první
Návratová hodnota
Pole objektů úlohy prototypu nebo objektů úlohy sestavení, podle fáze uvedené v cestě.
Objekt prototypové úlohy Keycap
Prototypová úloha vygeneruje jeden obrázek hotové klávesy z fotografie. Pro přeměnu návrhu na 3D klávesu předejte ID úlohy do build koncového bodu jako input_task_id, s příslušnou položkou candidate_ids jako candidate_id.
Vlastnosti
Example Keycap Prototype Task Object
{
"id": "019c9a4e-2b31-7f6a-8c44-5d2a87b3c1ef",
"type": "creative-lab-keycap-prototype",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1753142456000,
"started_at": 1753142460000,
"finished_at": 1753142516000,
"expires_at": 1753401716000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 12,
"image_urls": [
"https://assets.meshy.ai/***/design-1.png?Expires=***"
],
"candidate_ids": [
"0198c1b2-33f5-7d21-a4b7-8e9d0c1f2a3b"
]
}
- Name
- id
- Type
- string
- Description
ID úlohy. Nespoléhejte na jeho formát.
- Name
- type
- Type
- string
- Description
Typ úlohy, vždy
creative-lab-keycap-prototype.
- Name
- name
- Type
- string
- Description
name, kterou jste poslali při vytvoření úlohy, nebo"", pokud jste žádnou neposlali.
- Name
- status
- Type
- string
- Description
Stav úlohy.
Dostupné hodnoty:
PENDING: čeká ve frontěIN_PROGRESS: probíhá generování výsledkuSUCCEEDED: finální, s výsledkemFAILED: finální, s důvodem vtask_errorCANCELED: finální, bez výsledku
- Name
- progress
- Type
- integer
- Description
Procento dokončené práce, od
0do100. Je0, dokud úloha nezačne, a100, když uspěje.
- Name
- created_at
- Type
- timestamp
- Description
Čas vytvoření úlohy, v milisekundách Unix.
- Name
- started_at
- Type
- timestamp
- Description
Čas, kdy worker úlohu spustil, v milisekundách Unix. Do té doby
null.
- Name
- finished_at
- Type
- timestamp
- Description
Čas, kdy úloha dosáhla finálního stavu, v milisekundách Unix. Do té doby
null.
- Name
- expires_at
- Type
- timestamp
- Description
Čas, kdy vyprší platnost výsledku úlohy, v milisekundách Unix. Jsou to 3 dny po
finished_at, nebo 3 dny pocreated_at, dokud úloha neskončí. U Enterprise účtů, které uchovávají výsledky API neomezeně, je to přibližně o 100 let později. Viz Uchování assetů.
- Name
- preceding_tasks
- Type
- integer
- Description
Pozice úlohy ve frontě, dokud je
PENDING.1znamená, že začne jako další.0poté, co úloha opustí frontu, a vždy0ve výsledcích seznamu.
- Name
- task_error
- Type
- object
- Description
Důvod selhání úlohy.
null, pokudstatusneníFAILED. Viz Chyby.
- Name
- consumed_credits
- Type
- integer
- Description
Počet kreditů účtovaných za úlohu, po případném vrácení. Požadavek, který vrátí chybu, se neúčtuje. Neúspěšná úloha má hodnotu
0, protože Meshy ji vrátí. Zrušení vrátí kredity za úlohu pouze tehdy, pokud je ve stavuPENDING. Pokud Meshy nedokáže zjistit účtovanou částku, odpověď na get nebo stream požadavek toto pole vynechá, a požadavek na seznam vrátí500. V takovém případě požadavek opakujte.
- Name
- image_urls
- Type
- array of strings
- Description
URL ke stažení obrázku hotové klávesy. Pole obsahuje jednu URL poté, co úloha uspěje, a do té doby je prázdné.
image_urls[i]zobrazuje kandidáta vcandidate_ids[i].Tyto URL jsou určené k zobrazení. Build koncový bod přijímá položku z
candidate_ids, nikoli URL. Jde o podepsané URL, takže je stahujte bez hlavičkyAuthorization. Zůstávají platné až doexpires_at, a opětovné získání úlohy vrátí stejné URL.
- Name
- candidate_ids
- Type
- array of strings
- Description
ID kandidátů, ve stejném pořadí jako
image_urls. Pro sestavení kandidáta pošlete jeho ID jakocandidate_idv požadavku na sestavení. Nespoléhejte na formát těchto ID.
Objekt úlohy sestavení Keycap
Úloha sestavení generuje texturovaný 3D keycap z úspěšné úlohy prototypu a jednoho z jejích kandidátů. Vygeneruje 3D model, obarví ho, usadí a vyřízne ho na základnu keycapu a poté keycap sestaví a exportuje.
Vlastnosti
Example Keycap Build Task Object
{
"id": "019c9a52-7d18-7e2b-9f01-6e3b98c4d2af",
"type": "creative-lab-keycap-build",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1753142600000,
"started_at": 1753142610000,
"finished_at": 1753143050000,
"expires_at": 1753402250000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 50,
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/019c9a52-7d18-7e2b-9f01-6e3b98c4d2af/output/model.glb?Expires=***",
"obj_zip": "https://assets.meshy.ai/***/tasks/019c9a52-7d18-7e2b-9f01-6e3b98c4d2af/output/model-obj.zip?Expires=***"
},
"process_image_urls": {
"head_design": "https://assets.meshy.ai/***/head-design.png?Expires=***",
"composite": "https://assets.meshy.ai/***/composite.png?Expires=***",
"base_canvas": "https://assets.meshy.ai/***/base-canvas.png?Expires=***"
}
}
- Name
- id
- Type
- string
- Description
ID úlohy. Nespoléhejte na jeho formát.
- Name
- type
- Type
- string
- Description
Typ úlohy, vždy
creative-lab-keycap-build.
- Name
- name
- Type
- string
- Description
name, který jste odeslali při vytvoření úlohy, nebo"", pokud jste žádný neodeslali.
- Name
- status
- Type
- string
- Description
Stav úlohy.
Dostupné hodnoty:
PENDING: čeká ve frontěIN_PROGRESS: generuje se výsledekSUCCEEDED: konečný stav, s výsledkemFAILED: konečný stav, s důvodem vtask_errorCANCELED: konečný stav, bez výsledku
- Name
- progress
- Type
- integer
- Description
Procento dokončené práce, od
0do100. Je0, dokud úloha nezačne, a100, když je úspěšně dokončena.
- Name
- created_at
- Type
- timestamp
- Description
Čas vytvoření úlohy, v milisekundách Unix.
- Name
- started_at
- Type
- timestamp
- Description
Čas, kdy worker úlohu zahájil, v milisekundách Unix. Do té doby
null.
- Name
- finished_at
- Type
- timestamp
- Description
Čas, kdy úloha dosáhla konečného stavu, v milisekundách Unix. Do té doby
null.
- Name
- expires_at
- Type
- timestamp
- Description
Čas, kdy vyprší platnost výsledku úlohy, v milisekundách Unix. Je to 3 dny po
finished_at, nebo 3 dny pocreated_at, dokud úloha neskončí. U Enterprise účtů, které uchovávají výsledky API neomezeně dlouho, je to přibližně o 100 let později. Viz Uchování assetů.
- Name
- preceding_tasks
- Type
- integer
- Description
Pozice úlohy ve frontě, zatímco je
PENDING.1znamená, že začne jako další.0poté, co úloha opustí frontu, a vždy0ve výsledcích seznamu.
- Name
- task_error
- Type
- object
- Description
Důvod, proč úloha selhala.
null, pokudstatusneníFAILED. Viz Chyby.
- Name
- consumed_credits
- Type
- integer
- Description
Počet kreditů účtovaných za úlohu, po případném vrácení. Za požadavek, který vrátí chybu, se neúčtuje nic. Neúspěšná úloha má hodnotu
0, protože Meshy ji vrací zpět. Zrušení vrací kredity za úlohu pouze tehdy, pokud je ve stavuPENDING. Pokud Meshy nedokáže přečíst účtovanou částku, odpověď na get nebo stream toto pole vynechá a požadavek na seznam vrátí500. V takovém případě požadavek zopakujte.
- Name
- model_urls
- Type
- object
- Description
URL ke stažení 3D modelu. Meshy exportuje soubor GLB a balíček OBJ ve skutečném měřítku v milimetrech, s osou Y nahoru, přičemž přední strana keycapu směřuje k +Z.
Model obsahuje sítě nazvané
keycap-headakeycap-base. Když Meshy přejde na záložní výplň vzorem pro základnu, model obsahuje také síťkeycap-base-interiorpro dutinu dříku. Nepředpokládejte, že model má přesně dvě sítě.Jedná se o podepsané URL, takže je stahujte bez hlavičky
Authorization. Zůstávají platné doexpires_at, a opětovné získání úlohy před tímto časem vrátí stejné URL. Platnost expirovaného URL nelze obnovit, proto si soubory stáhněte a uložte před tímto časem.- Name
glb- Type
- string
- Description
URL ke stažení texturovaného souboru GLB,
model.glb.
- Name
obj_zip- Type
- string
- Description
URL ke stažení balíčku OBJ, souboru ZIP s
model.obj,model.mtla texturami PNG, kterémodel.mtlpoužívá. U jednobarevné základny je jedinou texturoukeycap-head.png. U vzorované základny obsahuje ZIP soubor navíckeycap-base.png.
- Name
- process_image_urls
- Type
- object
- Description
URL ke stažení obrázků z jednotlivých kroků sestavení, klíčovaných podle druhu. Stejně jako
model_urlsse jedná o podepsané URL, takže je stahujte bez hlavičkyAuthorization. Zůstávají platné doexpires_ata opětovné získání úlohy vrátí stejné URL.Může obsahovat tyto klíče:
head_design: návrhový obrázek vybraného kandidáta, který sestavení převedlo do 3D. Vždy přítomen.composite: obrázek hotového keycapu pro vybraného kandidáta, podle kterého sestavení vymalovalo základnu. Může chybět.base_canvas: vymalovaná základna keycapu. Může chybět.
Meshy může přidávat další klíče, takže klíč, který nepoznáváte, ignorujte.
End-to-end example
Příklad spouští celý postup:
- Vytvoří úlohu prototypu z fotografie.
- Načítá úlohu, dokud její
statusnemá hodnotuSUCCEEDED. - Vybere kandidáta z
candidate_ids. - Vytvoří úlohu sestavení s tímto kandidátem.
- Načítá úlohu sestavení, dokud její
statusnemá hodnotuSUCCEEDED. - Stáhne soubor GLB a balíček OBJ z
model_urls.
Příklad vybere prvního kandidáta. Ve své aplikaci zobrazte uživatelům položky image_urls a nechte je vybrat. Index zvoleného obrázku v image_urls odpovídá indexu jeho ID v candidate_ids.
Complete flow
#!/usr/bin/env bash
set -euo pipefail
# Requires curl and jq. Point IMAGE_PATH at a local photo, or IMAGE_URL at a public one:
# export MESHY_API_KEY=msy_...
# export IMAGE_PATH=./portrait.jpg # or: export IMAGE_URL=https://...
: "${MESHY_API_KEY:?export MESHY_API_KEY first}"
if [[ -z "${IMAGE_PATH:-}" && -z "${IMAGE_URL:-}" ]]; then
echo "export IMAGE_PATH (local file) or IMAGE_URL (public url) first" >&2
exit 1
fi
BASE="https://api.meshy.ai/openapi/creative-lab/keycap/v1"
AUTH="Authorization: Bearer $MESHY_API_KEY"
# api METHOD URL [curl args...] -> prints the response body, non-zero on failure.
# Note we do not use -f/--fail: it discards the body, and the body is the only
# place the reason appears.
api() {
local method=$1 url=$2 out http_code body
shift 2
out=$(curl --silent --show-error --max-time 60 --write-out $'\n%{http_code}' \
-X "$method" "$url" -H "$AUTH" "$@") || return 1
http_code=${out##*$'\n'}
body=${out%$'\n'*}
if ((http_code >= 400)); then
echo "HTTP $http_code for $url: $body" >&2
return 1
fi
printf '%s' "$body"
}
# Each task gets its own 40-minute budget.
poll() {
local kind=$1 id=$2 delay=5 task_status deadline
deadline=$(($(date +%s) + 2400))
while :; do
if (($(date +%s) >= deadline)); then
echo "gave up waiting for $kind $id" >&2
return 1
fi
task_status=$(api GET "$BASE/$kind/$id" | jq -r '.status')
echo "$kind: $task_status"
case "$task_status" in
SUCCEEDED) return 0 ;;
FAILED | CANCELED) return 1 ;;
esac
sleep "$delay"
delay=$((delay * 2 > 30 ? 30 : delay * 2))
done
}
# Build the request body in a file. A base64 data URI must never go on the
# command line or into an exported variable - a photo of any real size will
# exceed the OS argument limit.
BODY=$(mktemp)
trap 'rm -f "$BODY"' EXIT
if [[ -n "${IMAGE_PATH:-}" ]]; then
# Declare the real type: the API accepts JPEG, PNG and WebP.
case "$(printf '%s' "${IMAGE_PATH##*.}" | tr 'A-Z' 'a-z')" in
png) MIME=image/png ;;
webp) MIME=image/webp ;;
*) MIME=image/jpeg ;;
esac
{
printf '{"image_url":"data:%s;base64,' "$MIME"
base64 <"$IMAGE_PATH" | tr -d '\n'
printf '"}'
} >"$BODY"
else
printf '{"image_url":"%s"}' "$IMAGE_URL" >"$BODY"
fi
# 1. Create the prototype task
PROTO_ID=$(api POST "$BASE/prototype" \
-H 'Content-Type: application/json' --data-binary @"$BODY" | jq -r '.result')
# 2. Wait for the design render
poll prototype "$PROTO_ID"
# 3. Pick a candidate (first one here; show image_urls to a user in production)
CANDIDATE_ID=$(api GET "$BASE/prototype/$PROTO_ID" | jq -r '.candidate_ids[0]')
# 4. Create the build task
jq -n --arg p "$PROTO_ID" --arg c "$CANDIDATE_ID" \
'{input_task_id: $p, candidate_id: $c}' >"$BODY"
BUILD_ID=$(api POST "$BASE/build" \
-H 'Content-Type: application/json' --data-binary @"$BODY" | jq -r '.result')
# 5. Wait for the model (a build usually takes 3-7 minutes)
poll build "$BUILD_ID"
# 6. Download the artifacts. These are signed URLs: no Authorization header,
# and they stay valid for 3 days after the task finishes.
TASK=$(api GET "$BASE/build/$BUILD_ID")
curl --silent --show-error --fail --max-time 900 \
-o keycap.glb "$(jq -r '.model_urls.glb' <<<"$TASK")"
curl --silent --show-error --fail --max-time 900 \
-o keycap-obj.zip "$(jq -r '.model_urls.obj_zip' <<<"$TASK")"
echo "Done: keycap.glb + keycap-obj.zip"