API Creative Lab Fidget Pixel
Transforme uma foto em uma placa fidget de pixel art multicolorida e imprimível em 3D em duas etapas. Uma tarefa de protótipo transforma a foto em uma imagem de pixel art. Uma tarefa de build transforma essa imagem em peças encaixáveis em um único arquivo 3MF, e utiliza o ID da tarefa de protótipo como input_task_id.
POST /openapi/creative-lab/fidget-pixel/v1/prototypePOST /openapi/creative-lab/fidget-pixel/v1/build
Ambos os endpoints POST exigem um plano pago. Uma requisição feita a partir de uma conta do plano gratuito retorna 402.
Criar uma tarefa de protótipo do Fidget Pixel
Gera uma imagem em pixel art a partir de uma foto. Para criar as peças, passe o ID dessa tarefa para o endpoint de build como input_task_id. Para os campos da tarefa, consulte O objeto de tarefa de protótipo do Fidget Pixel.
Se você não gostar da imagem, crie outra tarefa de protótipo. Cada tarefa é cobrada separadamente.
Request
# Stage 1: pixelize the source photo
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/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>",
"type": "person"
}'
Response
{
"result": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7"
}
Parâmetros
- Name
- image_url
- Type
- string
- Obrigatório
- Description
A foto a ser transformada em pixel art, como uma URL pública ou um Data URI (
data:image/jpeg;base64,<seus dados de imagem codificados em base64>).A imagem deve ser um arquivo JPG, JPEG, PNG ou WebP de no máximo 20 MB. A Meshy detecta o formato a partir dos dados da imagem, não da extensão do arquivo na URL. Uma URL sem extensão funciona, e a Meshy segue redirecionamentos.
- Name
- type
- Type
- string
- Obrigatório
- Description
O que a foto mostra, o que define o estilo da pixel art. Os dois estilos têm uma aparência claramente diferente. Qualquer outro valor retorna
400.Valores disponíveis:
person: uma pessoa, em um retrato ou em uma foto de corpo inteiro. A Meshy desenha um sprite em pixel no estilo chibi.other: qualquer outro assunto, por exemplo um animal de estimação, um objeto, um mascote, um logotipo ou uma paisagem. A Meshy desenha um ícone em pixel no estilo bead-art.
- Name
- name
- Type
- string
- Description
Um nome para a tarefa, com até 100 caracteres. Ele é retornado no campo
nameda tarefa. Um nome mais longo retorna400.
Retornos
O campo result contém o ID da nova tarefa de protótipo. Obtenha a tarefa ou transmita-a em stream até que status seja SUCCEEDED. Em seguida, passe o ID para o endpoint de build como input_task_id.
Modos de falha
- Name
400 - Bad Request- Description
A solicitação não pode ser executada. Por exemplo:
image_urloutypeestá ausente.typenão épersonnemother.- A imagem não é um arquivo JPG, JPEG, PNG ou WebP.
- A imagem é muito pequena, excede 20 MB ou excede a contagem máxima de pixels.
- A Meshy não consegue baixar a imagem, por exemplo porque a URL retorna
404ou expira por tempo limite. - O Data URI não é um base64 válido.
- A imagem foi sinalizada como NSFW.
A mensagem de erro indica qual problema foi encontrado. Corrija a solicitação e envie-a novamente.
- Name
401 - Unauthorized- Description
A chave de API está ausente ou é inválida. Verifique o cabeçalho
Authorization.
- Name
402 - Payment Required- Description
Uma destas situações se aplica:
- A conta não tem créditos suficientes.
- A chave de API, o espaço de trabalho ou o membro atingiu seu limite de créditos.
- A conta está no plano gratuito.
Verifique seus créditos e seu plano e tente novamente.
- Name
403 - Forbidden- Description
Sua equipe está com a Filtragem de IP ativada, e a Meshy sinalizou a imagem por propriedade intelectual de terceiros. Envie uma imagem que você tenha os direitos de uso.
- Name
429 - Too Many Requests- Description
Um destes limites foi atingido:
- Você enviou mais solicitações do que o seu limite de taxa permite. Aguarde alguns segundos e tente novamente. Consulte Limites de taxa.
- Há muitas tarefas suas na fila ou em execução. Aguarde algumas terminarem e tente novamente.
- Em um plano ilimitado sem créditos restantes, você atingiu o número de tarefas que podem ser executadas sem créditos. Aguarde uma tarefa terminar ou adicione créditos.
- Name
500 - Internal Server Error- Description
A Meshy encontrou um erro de servidor, por exemplo porque não conseguiu executar a verificação de propriedade intelectual na imagem. A Meshy não cria a tarefa e reembolsa quaisquer créditos cobrados. Tente a solicitação novamente.
Criar uma tarefa de build do Fidget Pixel
Gera as peças prontas para impressão 3D a partir de uma tarefa de protótipo bem-sucedida. A Meshy amostra a imagem em pixel art na grade e a reduz a no máximo color_count cores. Cada célula do sujeito se torna uma peça encaixável, e o fundo não é impresso.
O resultado é um único arquivo 3MF multicolorido, pronto para impressão colorida. Cada peça tem um corpo cinza e um topo na cor do seu pixel. Para conhecer seus campos, veja O objeto da tarefa de build do Fidget Pixel.
Request
# Stage 2: chain build off a succeeded prototype task
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
"options": {
"shape": "square",
"grid_size": 32,
"piece_size_mm": 8,
"color_count": 8,
"piece_height_mm": 15
},
"output": {
"format": "3mf"
}
}'
Response
{
"result": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98"
}
Parâmetros
- Name
- input_task_id
- Type
- string
- Obrigatório
- Description
O ID da tarefa de protótipo a ser construída. Deve ser uma tarefa criada pela sua conta com
POST /openapi/creative-lab/fidget-pixel/v1/prototype, com o statusSUCCEEDED.Um ID que não corresponde a uma de suas tarefas de protótipo do Fidget Pixel criadas pela API retorna
404, incluindo um protótipo feito no aplicativo web.
- Name
- name
- Type
- string
- Description
Um nome para a tarefa, com até 100 caracteres. Ele retorna no campo
nameda tarefa. Um nome mais longo retorna400.
options
Configurações para o formato e tamanho das peças. Todo campo tem um valor padrão, então envie apenas os campos que deseja alterar. Um 0 usa o padrão do campo. São as mesmas configurações do aplicativo web do Creative Lab. Outras configurações de formato são fixas, e a Meshy as define a partir de shape e piece_size_mm.
- Name
- shape
- Type
- string
- padrão square
- Description
A pegada (footprint) de cada peça. Qualquer outro valor retorna
400.Valores disponíveis:
square: peças quadradas em uma grade quadradahex: peças hexagonais em uma grade hexagonal, compiece_size_mmdefinido como6ou8
- Name
- grid_size
- Type
- integer
- padrão 32
- Description
O número de células da grade ao longo de cada lado do tabuleiro,
16ou32. Qualquer outro valor retorna400. Uma grade32mantém mais detalhes. Uma grade16gera menos peças do mesmo tamanho, então o tabuleiro fica com cerca de metade da largura.
- Name
- piece_size_mm
- Type
- integer
- padrão 8
- Description
O comprimento da aresta de cada peça em milímetros,
6,8ou10. Qualquer outro valor retorna400. Junto comgrid_size, define o tamanho do tabuleiro impresso. Por exemplo, uma grade32com peças de 8 mm tem cerca de 26,5 cm por lado.10não funciona comhexe retorna400, porque a face inclinada do hexágono gera saliências (overhang) na maioria das impressoras FDM para consumidor.
- Name
- color_count
- Type
- integer
- padrão 8
- Description
O número máximo de cores na paleta da pixel art, de
1a8. Um valor fora do intervalo retorna400. Para imprimir, você precisa de atécolor_countmais um filamentos, um por cor e um para os corpos cinzas.
- Name
- piece_height_mm
- Type
- integer
- padrão 15
- Description
A altura de cada peça em milímetros, de
10a80. Um valor fora do intervalo retorna400.
output
Configurações para o arquivo de resultado.
- Name
- format
- Type
- string
- padrão 3mf
- Description
O formato do arquivo do resultado. Qualquer outro valor retorna
400.Valores disponíveis:
3mf: um único arquivomodel.3mfmulticolorido, retornado emmodel_urls.3mf
Retornos
O campo result contém o ID da nova tarefa de build. Obtenha a tarefa ou transmita-a em stream até que status seja SUCCEEDED. Em seguida, baixe o arquivo 3MF a partir de model_urls.3mf.
Modos de falha
- Name
400 - Bad Request- Description
A solicitação não pode ser executada. Por exemplo:
input_task_idestá ausente ou não é um ID de tarefa válido.- O status da tarefa de protótipo não é
SUCCEEDED. Se ainda estiver em execução, aguarde e tente novamente. Se falhou ou foi cancelada, crie uma nova tarefa de protótipo. - A tarefa de protótipo foi bem-sucedida, mas não tem imagem. Crie uma nova tarefa de protótipo.
- Um campo de
optionsestá fora dos valores permitidos, por exemplo, umgrid_sizediferente de16ou32. piece_size_mmé10eshapeéhex. Peças hexagonais vêm apenas em 6 e 8 mm.output.formatnão é3mf.
A mensagem de erro informa qual problema foi encontrado.
- Name
401 - Unauthorized- Description
A chave de API está ausente ou inválida. Verifique o cabeçalho
Authorization.
- Name
402 - Payment Required- Description
Uma destas situações se aplica:
- A conta não tem créditos suficientes.
- A chave de API, o espaço de trabalho ou o membro atingiu seu limite de créditos.
- A conta está no plano gratuito.
Verifique seus créditos e seu plano, depois tente novamente.
- Name
403 - Forbidden- Description
Sua equipe tem a Filtragem de IP ativada, e a Meshy sinalizou a imagem da tarefa de protótipo por propriedade intelectual de terceiros. Crie uma tarefa de protótipo a partir de uma imagem sobre a qual você tem os direitos de uso.
- Name
404 - Not Found- Description
input_task_idnão corresponde a nenhuma tarefa de protótipo do Fidget Pixel criada pela sua conta por meio da API. Um protótipo feito no aplicativo web também retorna404. Envie o IDresultde uma resposta de criação de protótipo.
- Name
429 - Too Many Requests- Description
Um destes limites foi atingido:
- Você enviou mais solicitações do que seu limite de taxa permite. Aguarde alguns segundos e tente novamente. Veja Limites de taxa.
- Há muitas tarefas suas na fila ou em execução. Aguarde algumas terminarem e tente novamente.
- Em um plano ilimitado sem créditos restantes, você atingiu o número de tarefas que podem ser executadas sem créditos. Aguarde uma tarefa terminar ou adicione créditos.
- Name
500 - Internal Server Error- Description
A Meshy encontrou um erro de servidor, por exemplo, porque não conseguiu executar a verificação de propriedade intelectual na imagem da tarefa de protótipo. A Meshy não cria a tarefa e reembolsa quaisquer créditos cobrados. Tente novamente a solicitação.
Obter uma tarefa do Fidget Pixel
Retorna uma tarefa de protótipo ou de build. O caminho deve corresponder ao estágio da tarefa. Uma tarefa de build solicitada por meio de /prototype/:id retorna 404, assim como uma tarefa de protótipo solicitada por meio de /build/:id.
Para os campos, consulte O objeto de tarefa de protótipo do Fidget Pixel e O objeto de tarefa de build do Fidget Pixel.
Request
# Prototype
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
# Build
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Prototype Response
{
"id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
"type": "creative-lab-fidget-pixel-prototype",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001000000,
"started_at": 1757001005000,
"finished_at": 1757001178000,
"expires_at": 1757260378000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 6,
"image_urls": [
"https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
]
}
Build Response
{
"id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
"type": "creative-lab-fidget-pixel-build",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001300000,
"started_at": 1757001304000,
"finished_at": 1757001309000,
"expires_at": 1757260509000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 30,
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
}
}
Parâmetros
- Name
- id
- Type
- path
- Description
O ID da tarefa a partir da resposta de criação.
Retornos
O objeto de tarefa de protótipo ou o objeto de tarefa de build, correspondente ao estágio indicado no caminho.
Modos de falha
- Name
400 - Bad Request- Description
idnão é um ID de tarefa válido. Envie o IDresultda resposta de criação.
- Name
403 - Forbidden- Description
Sua equipe está com a Filtragem de IP ativada, e a Meshy sinalizou a imagem da tarefa de protótipo por propriedade intelectual de terceiros. Tarefas de build e equipes no plano Enterprise não recebem esse erro. Crie uma tarefa de protótipo a partir de uma imagem que você tem o direito de usar.
- Name
404 - Not Found- Description
Nenhuma tarefa do Fidget Pixel com esse ID pertence à sua conta, ou o estágio da tarefa não corresponde ao caminho. Verifique o ID e use
/prototypeou/buildde acordo com a tarefa.
- Name
500 - Internal Server Error- Description
A Meshy não conseguiu executar a verificação de propriedade intelectual. Tente a solicitação novamente.
Excluir uma tarefa do Fidget Pixel
Cancela uma tarefa do Fidget Pixel. Cancelar uma tarefa PENDING reembolsa seus créditos. Uma tarefa IN_PROGRESS é cancelada sem reembolso, porque um worker já a iniciou. Uma tarefa com status final (SUCCEEDED, FAILED ou CANCELED) não pode ser cancelada.
O caminho deve corresponder ao estágio da tarefa. Por exemplo, DELETE em /prototype/:id com o ID de uma tarefa de build retorna 404.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
// Returns 204 No Content on success (empty body).
Parâmetros de caminho
- Name
- id
- Type
- path
- Description
O ID da tarefa a ser cancelada.
Retornos
204 No Content com corpo vazio.
Modos de falha
- Name
400 - Bad Request- Description
Uma destas situações se aplica:
idnão é um ID de tarefa válido. Envie o IDresultda resposta de criação.- A tarefa já possui um status final (
SUCCEEDED,FAILEDouCANCELED), portanto não pode ser cancelada.
- Name
404 - Not Found- Description
Nenhuma tarefa do Fidget Pixel com este ID pertence à sua conta, ou o estágio da tarefa não corresponde ao caminho. Verifique o ID e use
/prototypeou/buildpara corresponder à tarefa.
Transmitir uma tarefa Fidget Pixel por stream
Transmite as atualizações de uma tarefa Fidget Pixel como Server-Sent Events (SSE). O caminho deve corresponder ao estágio da tarefa. Caso contrário, por exemplo, o ID de uma tarefa de build em /prototype/:id/stream, o stream envia um evento error com status_code: 404 e é encerrado. Um id que não seja um ID de tarefa válido tem o mesmo comportamento, com status_code: 400.
Request
curl -N https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/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 for the stage; fields not yet populated are null / empty.
event: message
data: {
"id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
"type": "creative-lab-fidget-pixel-build",
"name": "",
"status": "PENDING",
"progress": 0,
"created_at": 1757001300000,
"started_at": null,
"finished_at": null,
"expires_at": 1757260500000,
"preceding_tasks": 2,
"task_error": null,
"consumed_credits": 30,
"model_urls": {}
}
event: message
data: {
"id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
"type": "creative-lab-fidget-pixel-build",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001300000,
"started_at": 1757001304000,
"finished_at": 1757001309000,
"expires_at": 1757260509000,
"task_error": null,
"consumed_credits": 30,
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
}
}
Parâmetros
- Name
- id
- Type
- path
- Description
O ID da tarefa retornado na resposta de criação.
Retornos
Um stream de objetos de tarefa prototype ou build. Cada evento contém o objeto de tarefa completo, assim como retornado por Obter uma tarefa Fidget Pixel. Enquanto a tarefa estiver PENDING ou IN_PROGRESS, seus campos de saída ainda estarão vazios (null, [] ou {}), e finished_at será null.
Se a Filtragem de IP bloquear o resultado da tarefa, o stream envia um evento error em seu lugar, com o status_code que uma requisição GET retornaria.
Listar tarefas do Fidget Pixel
Retorna suas tarefas do Fidget Pixel de um estágio, uma página por vez. O caminho seleciona o estágio. /prototype retorna apenas tarefas de prototype, e /build retorna apenas tarefas de build.
Request
# List prototype tasks
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
# List build tasks
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response (List Prototype Tasks)
[
{
"id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
"type": "creative-lab-fidget-pixel-prototype",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001000000,
"started_at": 1757001005000,
"finished_at": 1757001178000,
"expires_at": 1757260378000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 6,
"image_urls": [
"https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
]
}
]
Parâmetros de caminho
- Name
- stage
- Type
- path
- Obrigatório
- Description
O estágio a ser listado,
prototypeoubuild.
Parâmetros de consulta
- Name
- page_num
- Type
- integer
- padrão 1
- Description
A página a ser retornada, de
1a255.0retorna a primeira página. Um valor fora de0a255retorna400.
- Name
- page_size
- Type
- integer
- padrão 10
- Description
Número de tarefas por página, até
100. Um valor de101a255retorna 100 tarefas, e0usa o padrão. Um valor fora de0a255retorna400.
- Name
- sort_by
- Type
- string
- padrão -created_at
- Description
A ordem de classificação.
Valores disponíveis:
-created_at: mais recentes primeiro+created_at: mais antigos primeiro
Retorna
Um array de objetos de tarefa de prototype ou objetos de tarefa de build, correspondendo ao estágio no caminho.
O objeto de tarefa de protótipo do Fidget Pixel
Uma tarefa de protótipo transforma uma foto em uma imagem em pixel art. Para transformar a imagem em peças imprimíveis em 3D, passe o ID da tarefa para o endpoint de build como input_task_id.
Propriedades
Example Fidget Pixel Prototype Task Object
{
"id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
"type": "creative-lab-fidget-pixel-prototype",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001000000,
"started_at": 1757001005000,
"finished_at": 1757001178000,
"expires_at": 1757260378000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 6,
"image_urls": [
"https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
]
}
- Name
- id
- Type
- string
- Description
O ID da tarefa. Não dependa do seu formato.
- Name
- type
- Type
- string
- Description
O tipo da tarefa, sempre
creative-lab-fidget-pixel-prototype.
- Name
- name
- Type
- string
- Description
O
nameque você enviou ao criar a tarefa, ou""se não enviou um.
- Name
- status
- Type
- string
- Description
O status da tarefa.
Valores disponíveis:
PENDING: aguardando na filaIN_PROGRESS: gerando o resultadoSUCCEEDED: finalizado, com o resultadoFAILED: finalizado, com o motivo emtask_errorCANCELED: finalizado, sem resultado
- Name
- progress
- Type
- integer
- Description
Porcentagem do trabalho concluído, de
0a100. É0até a tarefa começar e100quando ela é bem-sucedida.
- Name
- created_at
- Type
- timestamp
- Description
Momento em que a tarefa foi criada, em milissegundos Unix.
- Name
- started_at
- Type
- timestamp
- Description
Momento em que um worker iniciou a tarefa, em milissegundos Unix.
nullaté então.
- Name
- finished_at
- Type
- timestamp
- Description
Momento em que a tarefa atingiu um status final, em milissegundos Unix.
nullaté então.
- Name
- expires_at
- Type
- timestamp
- Description
Momento em que o resultado da tarefa expira, em milissegundos Unix. É 3 dias após
finished_at, ou 3 dias apóscreated_ataté a tarefa terminar. Para contas Enterprise, que mantêm os resultados da API indefinidamente, é cerca de 100 anos depois. Consulte Retenção de recursos.
- Name
- preceding_tasks
- Type
- integer
- Description
A posição da tarefa na fila enquanto ela está
PENDING.1significa que ela começa em seguida.0depois que a tarefa sai da fila, e sempre0em resultados de listagem.
- Name
- task_error
- Type
- object
- Description
Motivo pelo qual a tarefa falhou.
nulla menos questatussejaFAILED. Consulte Erros.
- Name
- consumed_credits
- Type
- integer
- Description
Número de créditos cobrados pela tarefa, após qualquer reembolso. Uma requisição que retorna um erro não é cobrada. Uma tarefa que falha é
0, pois a Meshy a reembolsa. Cancelar reembolsa uma tarefa apenas enquanto ela estáPENDING. Se a Meshy não conseguir ler a cobrança, uma resposta de get ou stream deixa o campo de fora, e uma requisição de listagem retorna500. Nesse caso, tente a requisição novamente.
- Name
- image_urls
- Type
- array of strings
- Description
URLs de download para a imagem em pixel art. O array tem uma URL depois que a tarefa é bem-sucedida, e fica vazio até então.
As URLs são assinadas, então busque-as sem um cabeçalho
Authorization. Elas permanecem válidas atéexpires_at. Buscar a tarefa novamente antes disso retorna as mesmas URLs, não URLs recém-assinadas. Uma URL expirada não pode ser renovada, então baixe e armazene os arquivos antes disso.
O objeto de tarefa de build do Fidget Pixel
Uma tarefa de build gera as peças imprimíveis em 3D a partir de uma tarefa de protótipo bem-sucedida. A Meshy amostra a imagem em pixel art na grade e retorna as peças em um único arquivo 3MF multicolorido.
Propriedades
Example Fidget Pixel Build Task Object
{
"id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
"type": "creative-lab-fidget-pixel-build",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001300000,
"started_at": 1757001304000,
"finished_at": 1757001309000,
"expires_at": 1757260509000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 30,
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
}
}
- Name
- id
- Type
- string
- Description
O ID da tarefa. Não dependa do seu formato.
- Name
- type
- Type
- string
- Description
O tipo da tarefa, sempre
creative-lab-fidget-pixel-build.
- Name
- name
- Type
- string
- Description
O
nameque você enviou ao criar a tarefa, ou""se você não enviou um.
- Name
- status
- Type
- string
- Description
O status da tarefa.
Valores disponíveis:
PENDING: aguardando na filaIN_PROGRESS: gerando o resultadoSUCCEEDED: final, com o resultadoFAILED: final, com o motivo emtask_errorCANCELED: final, sem resultado
- Name
- progress
- Type
- integer
- Description
Porcentagem do trabalho concluído, de
0a100. É0até a tarefa começar e100quando ela é bem-sucedida.
- Name
- created_at
- Type
- timestamp
- Description
Horário em que a tarefa foi criada, em milissegundos Unix.
- Name
- started_at
- Type
- timestamp
- Description
Horário em que um worker iniciou a tarefa, em milissegundos Unix.
nullaté então.
- Name
- finished_at
- Type
- timestamp
- Description
Horário em que a tarefa atingiu um status final, em milissegundos Unix.
nullaté então.
- Name
- expires_at
- Type
- timestamp
- Description
Horário em que o resultado da tarefa expira, em milissegundos Unix. É 3 dias após
finished_at, ou 3 dias apóscreated_ataté a tarefa terminar. Para contas Enterprise, que mantêm os resultados da API indefinidamente, é cerca de 100 anos depois. Veja Retenção de recursos.
- Name
- preceding_tasks
- Type
- integer
- Description
A posição da tarefa na fila enquanto ela está
PENDING.1significa que ela começa em seguida.0depois que a tarefa sai da fila, e sempre0em resultados de lista.
- Name
- task_error
- Type
- object
- Description
Por que a tarefa falhou.
nulla menos questatussejaFAILED. Veja Erros.
- Name
- consumed_credits
- Type
- integer
- Description
Número de créditos cobrados pela tarefa, após qualquer reembolso. Uma requisição que retorna um erro não é cobrada. Uma tarefa com falha é
0, pois a Meshy a reembolsa. Cancelar só reembolsa uma tarefa enquanto ela estáPENDING. Se a Meshy não conseguir ler a cobrança, uma resposta de get ou stream omite o campo, e uma requisição de lista retorna500. Nesse caso, tente a requisição novamente.
- Name
- model_urls
- Type
- object
- Description
URLs de download para o resultado, indexadas pelo formato de arquivo. O objeto tem uma entrada, para o
output.formatque você enviou, e fica vazio até a tarefa ser bem-sucedida.As URLs são assinadas, então busque-as sem um cabeçalho
Authorization. Elas permanecem válidas atéexpires_at. Obter a tarefa novamente antes disso retorna as mesmas URLs, não URLs recém-assinadas. Uma URL expirada não pode ser renovada, então baixe e armazene os arquivos antes disso.- Name
3mf- Type
- string
- Description
URL de download para o arquivo 3MF multicolorido. Cada peça tem um corpo cinza e um topo na cor do seu pixel. Presente quando
output.formaté3mf, que é o padrão.
Exemplo completo (end-to-end)
Os scripts cURL e Python a seguir executam todo o fluxo. Cada script cria uma tarefa de prototype a partir de uma foto e aguarda até que ela seja concluída com sucesso. Em seguida, cria uma tarefa de build, aguarda essa tarefa e baixa o arquivo 3MF a partir de model_urls.3mf.
O script cURL precisa do curl e do jq, e o script Python precisa do pacote requests. Para executar um script, siga estes passos:
- Defina
MESHY_API_KEYcom sua chave de API. - Defina
IMAGE_PATHcom o caminho de uma foto local, ouIMAGE_URLcom uma URL de imagem pública. - Opcional: para pixelizar um assunto diferente de uma pessoa, defina
PIXEL_TYPEcomoother. - Execute o script.
Uma tarefa de prototype geralmente é concluída em poucos minutos. Uma tarefa de build geralmente é concluída em bem menos de um minuto.
No seu aplicativo, mostre a imagem de image_urls ao usuário antes de criar a tarefa de build. Se ele não gostar, crie outra tarefa de prototype em vez disso. Dessa forma, você gasta créditos de build apenas em uma imagem que ele aprovou.
Fluxo completo
#!/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://...
# export PIXEL_TYPE=person # or: other
: "${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
PIXEL_TYPE=${PIXEL_TYPE:-person}
BASE="https://api.meshy.ai/openapi/creative-lab/fidget-pixel/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 '{"type":"%s","image_url":"data:%s;base64,' "$PIXEL_TYPE" "$MIME"
base64 <"$IMAGE_PATH" | tr -d '\n'
printf '"}'
} >"$BODY"
else
jq -n --arg t "$PIXEL_TYPE" --arg u "$IMAGE_URL" \
'{type: $t, image_url: $u}' >"$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 pixel-art image (show image_urls[0] to a user in production)
poll prototype "$PROTO_ID"
# 3. Create the build task (defaults: square pieces, 32x32 grid, 8 mm, 8 colors, 15 mm tall)
jq -n --arg p "$PROTO_ID" \
'{input_task_id: $p, options: {shape: "square", grid_size: 32, piece_size_mm: 8, color_count: 8, piece_height_mm: 15}, output: {format: "3mf"}}' >"$BODY"
BUILD_ID=$(api POST "$BASE/build" \
-H 'Content-Type: application/json' --data-binary @"$BODY" | jq -r '.result')
# 4. Wait for the pieces
poll build "$BUILD_ID"
# 5. Download the 3MF. This is a signed URL: no Authorization header,
# and it stays valid for 3 days after the task finishes.
TASK=$(api GET "$BASE/build/$BUILD_ID")
curl --silent --show-error --fail --max-time 900 \
-o fidget-pixel.3mf "$(jq -r '.model_urls["3mf"]' <<<"$TASK")"
echo "Done: fidget-pixel.3mf"