lowpoly bude vyřazen 30. 10. 2026. Před těmito daty přejděte na jiný model, abyste předešli chybám požadavků. Zobrazit všechna ukončení podpory

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/prototype
  • POST /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.


POST/openapi/creative-lab/keycap/v1/prototype

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

POST
/openapi/creative-lab/keycap/v1/prototype
# 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í. true vrá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 odeslali true. Build vrátí tento obrázek jako process_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í 404 nebo 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.

  • 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.


POST/openapi/creative-lab/keycap/v1/build

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

POST
/openapi/creative-lab/keycap/v1/build
# 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 stavem SUCCEEDED.

    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 10 do 40. 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.9 můž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-head v 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 -5 do 5. 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.

Režimy selhání

  • Name
    400 - Bad Request
    Description

    Požadavek nelze spustit. Například:

    • input_task_id chybí 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_id chybí nebo není obsažen v candidate_ids úlohy prototypu. Odešlete hodnotu z tohoto pole.
    • Některé pole v options je mimo rozsah, nebo base_model není 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_id neodpoví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 ID result z 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.


GET/openapi/creative-lab/keycap/v1/(prototype|build)/:id

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

GET
/openapi/creative-lab/keycap/v1/prototype/019c9a4e-2b31-7f6a-8c44-5d2a87b3c1ef
# 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

    id není platné ID úlohy. Odešlete ID result z 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 /prototype nebo /build podle typu úlohy.

  • Name
    500 - Internal Server Error
    Description

    Meshy nemohlo provést kontrolu duševního vlastnictví. Zkuste požadavek odeslat znovu.


DELETE/openapi/creative-lab/keycap/v1/(prototype|build)/:id

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

DELETE
/openapi/creative-lab/keycap/v1/prototype/019c9a4e-2b31-7f6a-8c44-5d2a87b3c1ef
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í:

    • id není platné ID úlohy. Pošlete ID result z odpovědi na vytvoření.
    • Úloha už má konečný stav (SUCCEEDED, FAILED nebo CANCELED), 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 /prototype nebo /build tak, 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.


GET/openapi/creative-lab/keycap/v1/(prototype|build)/:id/stream

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

GET
/openapi/creative-lab/keycap/v1/build/019c9a52-7d18-7e2b-9f01-6e3b98c4d2af/stream
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.


GET/openapi/creative-lab/keycap/v1/(prototype|build)

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

GET
/openapi/creative-lab/keycap/v1/prototype
# 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, prototype nebo build.

Parametry dotazu

  • Name
    page_num
    Type
    integer
    výchozí 1
    Description

    Stránka, která se má vrátit, od 1 do 255. Hodnota 0 vrátí první stránku. Hodnota mimo rozsah 0 až 255 vrátí 400.

  • Name
    page_size
    Type
    integer
    výchozí 10
    Description

    Počet úloh na stránku, maximálně 100. Hodnota v rozsahu 101 až 255 vrátí 100 úloh a hodnota 0 použije výchozí hodnotu. Hodnota mimo rozsah 0 až 255 vrá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ýsledku
    • SUCCEEDED: finální, s výsledkem
    • FAILED: finální, s důvodem v task_error
    • CANCELED: finální, bez výsledku
  • Name
    progress
    Type
    integer
    Description

    Procento dokončené práce, od 0 do 100. Je 0, dokud úloha nezačne, a 100, 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 po created_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. 1 znamená, že začne jako další. 0 poté, co úloha opustí frontu, a vždy 0 ve výsledcích seznamu.

  • Name
    task_error
    Type
    object
    Description

    Důvod selhání úlohy. null, pokud status není 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 stavu PENDING. 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 v candidate_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čky Authorization. Zůstávají platné až do expires_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 jako candidate_id v 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ýsledek
    • SUCCEEDED: konečný stav, s výsledkem
    • FAILED: konečný stav, s důvodem v task_error
    • CANCELED: konečný stav, bez výsledku
  • Name
    progress
    Type
    integer
    Description

    Procento dokončené práce, od 0 do 100. Je 0, dokud úloha nezačne, a 100, 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 po created_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. 1 znamená, že začne jako další. 0 poté, co úloha opustí frontu, a vždy 0 ve výsledcích seznamu.

  • Name
    task_error
    Type
    object
    Description

    Důvod, proč úloha selhala. null, pokud status není 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 stavu PENDING. 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-head a keycap-base. Když Meshy přejde na záložní výplň vzorem pro základnu, model obsahuje také síť keycap-base-interior pro 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é do expires_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.mtl a texturami PNG, které model.mtl používá. U jednobarevné základny je jedinou texturou keycap-head.png. U vzorované základny obsahuje ZIP soubor navíc keycap-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_urls se jedná o podepsané URL, takže je stahujte bez hlavičky Authorization. Zůstávají platné do expires_at a 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:

  1. Vytvoří úlohu prototypu z fotografie.
  2. Načítá úlohu, dokud její status nemá hodnotu SUCCEEDED.
  3. Vybere kandidáta z candidate_ids.
  4. Vytvoří úlohu sestavení s tímto kandidátem.
  5. Načítá úlohu sestavení, dokud její status nemá hodnotu SUCCEEDED.
  6. 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

POST
/openapi/creative-lab/keycap/v1
#!/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"