API Creative Lab Fidget Pixel
Transforme uma fotografia numa placa fidget de pixel art multicolor e imprimível em 3D, em duas fases. Uma tarefa de protótipo transforma a fotografia numa imagem de pixel art. Uma tarefa de construção transforma essa imagem em peças encaixáveis num único ficheiro 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 requerem um plano pago. Um pedido de uma conta com plano gratuito devolve 402.
Criar uma tarefa de protótipo Fidget Pixel
Gera uma imagem em pixel art a partir de uma fotografia. Para construir as peças, passe o ID desta tarefa ao endpoint de build como input_task_id. Para os campos da tarefa, consulte O objeto de tarefa de protótipo Fidget Pixel.
Se 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 fotografia a transformar em pixel art, como um URL público ou um data URI (
data:image/jpeg;base64,<os seus dados de imagem codificados em base64>).A imagem deve ser um ficheiro JPG, JPEG, PNG ou WebP com, no máximo, 20 MB. O Meshy deteta o formato a partir dos dados da imagem, não da extensão do ficheiro no URL. Um URL sem extensão funciona, e o Meshy segue redirecionamentos.
- Name
- type
- Type
- string
- Obrigatório
- Description
O que a fotografia mostra, o que define o estilo da pixel art. Os dois estilos são claramente diferentes. Qualquer outro valor devolve
400.Valores disponíveis:
person: uma pessoa, num retrato ou numa fotografia de corpo inteiro. O Meshy desenha um sprite em pixel art no estilo chibi.other: qualquer outro assunto, por exemplo um animal de estimação, um objeto, uma mascote, um logótipo ou uma paisagem. O Meshy desenha um ícone em pixel art no estilo bead-art.
- Name
- name
- Type
- string
- Description
Um nome para a tarefa, até 100 carateres. É devolvido no campo
nameda tarefa. Um nome mais longo devolve400.
Devolve
O campo result contém o ID da nova tarefa de protótipo. Obtenha a tarefa ou transmita-a em stream até que o status seja SUCCEEDED. Depois, passe o ID ao endpoint de build como input_task_id.
Modos de falha
- Name
400 - Bad Request- Description
O pedido não pode ser executado. Por exemplo:
image_urloutypeestá em falta.typenão épersonnemother.- A imagem não é um ficheiro JPG, JPEG, PNG ou WebP.
- A imagem é demasiado pequena, excede 20 MB ou excede o número máximo de pixéis.
- O Meshy não consegue transferir a imagem, por exemplo porque o URL devolve
404ou atinge o tempo limite. - O data URI não é um base64 válido.
- A imagem foi assinalada como NSFW.
A mensagem de erro indica qual o problema encontrado. Corrija o pedido e envie-o novamente.
- Name
401 - Unauthorized- Description
A chave de API está em falta ou é inválida. Verifique o cabeçalho
Authorization.
- Name
402 - Payment Required- Description
Aplica-se uma destas situações:
- A conta não tem créditos suficientes.
- A chave de API, o espaço de trabalho ou o membro atingiu o seu limite de créditos.
- A conta está no plano gratuito.
Verifique os seus créditos e plano, depois tente novamente.
- Name
403 - Forbidden- Description
A sua equipa tem a Filtragem de IP ativada, e o Meshy assinalou a imagem por propriedade intelectual de terceiros. Envie uma imagem que tenha o direito de utilizar.
- Name
429 - Too Many Requests- Description
Um destes limites foi atingido:
- Enviou mais pedidos do que o seu limite de taxa permite. Aguarde alguns segundos e tente novamente. Consulte Limites de taxa.
- Tem demasiadas tarefas em fila de espera ou em execução. Aguarde que algumas terminem e tente novamente.
- Num plano ilimitado sem créditos restantes, atingiu o número de tarefas que podem ser executadas sem créditos. Aguarde que uma tarefa termine ou adicione créditos.
- Name
500 - Internal Server Error- Description
O Meshy encontrou um erro de servidor, por exemplo porque não conseguiu executar a verificação de propriedade intelectual na imagem. O Meshy não cria a tarefa e reembolsa quaisquer créditos cobrados. Tente novamente o pedido.
Criar uma tarefa de construção Fidget Pixel
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 grelha e reduz-a a, no máximo, color_count cores. Cada célula do sujeito torna-se uma peça interligável, e o fundo não é impresso.
O resultado é um único ficheiro 3MF multicor, pronto a imprimir a cores. Cada peça tem um corpo cinzento e um topo na cor do seu pixel. Para os seus campos, consulte O objeto da tarefa de construção 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 construir. Tem de ser uma tarefa criada pela sua conta com
POST /openapi/creative-lab/fidget-pixel/v1/prototype, com o estadoSUCCEEDED.Um ID que não corresponda a uma das suas tarefas de protótipo Fidget Pixel da API devolve
404, incluindo um protótipo feito na aplicação web.
- Name
- name
- Type
- string
- Description
Um nome para a tarefa, com até 100 carateres. É devolvido no campo
nameda tarefa. Um nome mais longo devolve400.
options
Definições para a forma e o tamanho das peças. Cada campo tem um valor predefinido, pelo que só precisa de enviar os campos que pretende alterar. Um 0 utiliza o valor predefinido do campo. Estas são as mesmas definições existentes na aplicação web Creative Lab. As restantes definições de forma são fixas, e a Meshy define-as a partir de shape e piece_size_mm.
- Name
- shape
- Type
- string
- predefinição square
- Description
O contorno de cada peça. Qualquer outro valor devolve
400.Valores disponíveis:
square: peças quadradas numa grelha quadradahex: peças hexagonais numa grelha hexagonal, compiece_size_mmdefinido como6ou8
- Name
- grid_size
- Type
- integer
- predefinição 32
- Description
O número de células da grelha ao longo de cada lado do tabuleiro,
16ou32. Qualquer outro valor devolve400. Uma grelha de32mantém mais detalhe. Uma grelha de16produz menos peças do mesmo tamanho, pelo que o tabuleiro fica cerca de metade da largura.
- Name
- piece_size_mm
- Type
- integer
- predefinição 8
- Description
O comprimento da aresta de cada peça em milímetros,
6,8ou10. Qualquer outro valor devolve400. Em conjunto comgrid_size, define o tamanho do tabuleiro impresso. Por exemplo, uma grelha de32com peças de 8 mm tem cerca de 26,5 cm por lado.O valor
10não funciona comhexe devolve400, porque a face hexagonal inclinada faz saliência na maioria das impressoras FDM de consumo.
- Name
- color_count
- Type
- integer
- predefinição 8
- Description
O número máximo de cores na paleta de pixel art, de
1a8. Um valor fora do intervalo devolve400. Para imprimir, precisa de atécolor_countmais um filamentos, um por cor e um para os corpos cinzentos.
- Name
- piece_height_mm
- Type
- integer
- predefinição 15
- Description
A altura de cada peça em milímetros, de
10a80. Um valor fora do intervalo devolve400.
output
Definições para o ficheiro de resultado.
- Name
- format
- Type
- string
- predefinição 3mf
- Description
O formato de ficheiro do resultado. Qualquer outro valor devolve
400.Valores disponíveis:
3mf: um único ficheiro multicormodel.3mf, devolvido emmodel_urls.3mf
Retorna
O campo result contém o ID da nova tarefa de construção. Obtenha a tarefa ou transmita-a em fluxo até que status seja SUCCEEDED. Depois, transfira o ficheiro 3MF a partir de model_urls.3mf.
Modos de falha
- Name
400 - Bad Request- Description
O pedido não pode ser executado. Por exemplo:
input_task_idestá em falta ou não é um ID de tarefa válido.- O estado da tarefa de protótipo não é
SUCCEEDED. Se ainda estiver em execução, aguarde e tente novamente. Se tiver falhado ou sido 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. As peças hexagonais só existem em 6 e 8 mm.output.formatnão é3mf.
A mensagem de erro indica qual o problema encontrado.
- Name
401 - Unauthorized- Description
A chave de API está em falta ou é inválida. Verifique o cabeçalho
Authorization.
- Name
402 - Payment Required- Description
Aplica-se uma das seguintes situações:
- A conta não tem créditos suficientes.
- A chave de API, o espaço de trabalho ou o membro atingiu o seu limite de créditos.
- A conta está no plano gratuito.
Verifique os seus créditos e o plano, e tente novamente.
- Name
403 - Forbidden- Description
A sua equipa 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 tenha direitos de utilização.
- Name
404 - Not Found- Description
input_task_idnão corresponde a nenhuma tarefa de protótipo Fidget Pixel criada pela sua conta através da API. Um protótipo feito na aplicação web também devolve404. Envie o IDresultde uma resposta de criação de protótipo.
- Name
429 - Too Many Requests- Description
Foi atingido um dos seguintes limites:
- Enviou mais pedidos do que o seu limite de taxa permite. Aguarde alguns segundos e tente novamente. Consulte Limites de taxa.
- Demasiadas das suas tarefas estão em fila de espera ou em execução. Aguarde que algumas terminem e tente novamente.
- Num plano ilimitado sem créditos restantes, atingiu o número de tarefas que podem ser executadas sem créditos. Aguarde que uma tarefa termine, ou adicione créditos.
- Name
500 - Internal Server Error- Description
A Meshy encontrou um erro de servidor, por exemplo por não ter conseguido 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 que tenha cobrado. Tente o pedido novamente.
Obter uma tarefa Fidget Pixel
Devolve uma tarefa de protótipo ou de construção. O caminho deve corresponder à fase da tarefa. Uma tarefa de construção solicitada através de /prototype/:id devolve 404, e o mesmo acontece com uma tarefa de protótipo solicitada através de /build/:id.
Para os campos, consulte O objeto de tarefa de protótipo Fidget Pixel e O objeto de tarefa de construção 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 da resposta de criação.
Devolve
O objeto de tarefa de protótipo ou o objeto de tarefa de construção, consoante a fase indicada 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
A sua equipa tem a opção IP Filtering ativada, e a Meshy sinalizou a imagem da tarefa de protótipo por direitos de propriedade intelectual de terceiros. As tarefas de construção e as equipas no plano Enterprise não recebem este erro. Crie uma tarefa de protótipo a partir de uma imagem para a qual tenha os direitos de utilização.
- Name
404 - Not Found- Description
Nenhuma tarefa Fidget Pixel com este ID pertence à sua conta, ou a fase da tarefa não corresponde ao caminho. Verifique o ID e utilize
/prototypeou/buildpara corresponder à tarefa.
- Name
500 - Internal Server Error- Description
A Meshy não conseguiu executar a verificação de propriedade intelectual. Repita o pedido.
Eliminar uma tarefa Fidget Pixel
Cancela uma tarefa Fidget Pixel. Cancelar uma tarefa PENDING reembolsa os seus créditos. Uma tarefa IN_PROGRESS é cancelada sem reembolso, porque um worker já a iniciou. Uma tarefa com um estado final (SUCCEEDED, FAILED ou CANCELED) não pode ser cancelada.
O caminho deve corresponder à fase da tarefa. Por exemplo, DELETE em /prototype/:id com o ID de uma tarefa de build devolve 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 do caminho
- Name
- id
- Type
- path
- Description
O ID da tarefa a cancelar.
Retorna
204 No Content com um corpo vazio.
Modos de falha
- Name
400 - Bad Request- Description
Aplica-se uma das seguintes situações:
idnão é um ID de tarefa válido. Envie o IDresultda resposta de criação.- A tarefa já tem um estado final (
SUCCEEDED,FAILEDouCANCELED), pelo que não pode ser cancelada.
- Name
404 - Not Found- Description
Nenhuma tarefa Fidget Pixel com este ID pertence à sua conta, ou a fase da tarefa não corresponde ao caminho. Verifique o ID e utilize
/prototypeou/buildpara corresponder à tarefa.
Transmitir em stream uma tarefa Fidget Pixel
Transmite as atualizações de uma tarefa Fidget Pixel em stream através de Server-Sent Events (SSE). O caminho deve corresponder à fase 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 fecha-se. 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 proveniente da resposta de criação.
Devolve
Um stream de objetos de tarefa prototype ou build. Cada evento contém o objeto de tarefa completo, tal como devolvido por Obter uma tarefa Fidget Pixel. Enquanto a tarefa estiver PENDING ou IN_PROGRESS, os seus campos de saída continuam vazios (null, [] ou {}), e finished_at é 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 um pedido get devolveria.
Listar tarefas Fidget Pixel
Devolve as suas tarefas Fidget Pixel de uma fase, uma página de cada vez. O caminho seleciona a fase. /prototype devolve apenas tarefas de protótipo, e /build devolve apenas tarefas de compilação.
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
A fase a listar,
prototypeoubuild.
Parâmetros de consulta
- Name
- page_num
- Type
- integer
- predefinição 1
- Description
A página a devolver, de
1a255.0devolve a primeira página. Um valor fora do intervalo0a255devolve400.
- Name
- page_size
- Type
- integer
- predefinição 10
- Description
Número de tarefas por página, até
100. Um valor entre101e255devolve 100 tarefas, e0utiliza o valor predefinido. Um valor fora do intervalo0a255devolve400.
- Name
- sort_by
- Type
- string
- predefinição -created_at
- Description
A ordem de ordenação.
Valores disponíveis:
-created_at: mais recente primeiro+created_at: mais antigo primeiro
Devolve
Um array de objetos de tarefa de protótipo ou objetos de tarefa de compilação, consoante a fase indicada no caminho.
O objeto de tarefa de protótipo Fidget Pixel
Uma tarefa de protótipo transforma uma fotografia numa imagem em pixel art. Para transformar a imagem em peças imprimíveis em 3D, passe o ID da tarefa para o build endpoint 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 enviou quando criou a tarefa, ou""se não tiver enviado nenhum.
- Name
- status
- Type
- string
- Description
O estado da tarefa.
Valores disponíveis:
PENDING: a aguardar na filaIN_PROGRESS: a gerar o resultadoSUCCEEDED: final, com o resultadoFAILED: final, com o motivo emtask_errorCANCELED: final, sem resultado
- Name
- progress
- Type
- integer
- Description
Percentagem do trabalho concluído, de
0a100. É0até a tarefa começar e100quando é 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é isso acontecer.
- Name
- finished_at
- Type
- timestamp
- Description
Momento em que a tarefa atingiu um estado final, em milissegundos Unix.
nullaté isso acontecer.
- Name
- expires_at
- Type
- timestamp
- Description
Momento em que o resultado da tarefa expira, em milissegundos Unix. São 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 está
PENDING.1significa que é a próxima a começar.0depois de a tarefa sair 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. Um pedido que devolve um erro não é cobrado. Uma tarefa falhada tem o valor
0, porque a Meshy a reembolsa. Cancelar só reembolsa uma tarefa enquanto esta estiverPENDING. Se a Meshy não conseguir ler a cobrança, uma resposta de obtenção ou de stream omite o campo, e um pedido de listagem devolve500. Nesse caso, repita o pedido.
- Name
- image_urls
- Type
- array of strings
- Description
URLs de transferência para a imagem em pixel art. A matriz tem um URL depois de a tarefa ser bem-sucedida, e está vazia até lá.
Os URLs são assinados, por isso obtenha-os sem um cabeçalho
Authorization. Mantêm-se válidos atéexpires_at. Obter a tarefa novamente antes disso devolve os mesmos URLs, não novos assinados. Um URL expirado não pode ser renovado, por isso transfira e guarde os ficheiros antes disso.
O objeto de tarefa de construção Fidget Pixel
Uma tarefa de construção gera as peças imprimíveis em 3D a partir de uma tarefa de protótipo bem-sucedida. A Meshy mapeia a imagem em pixel art na grelha e devolve as peças num único ficheiro 3MF multicolor.
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 de tarefa, sempre
creative-lab-fidget-pixel-build.
- Name
- name
- Type
- string
- Description
O
nameque enviou ao criar a tarefa, ou""caso não tenha enviado nenhum.
- Name
- status
- Type
- string
- Description
O estado da tarefa.
Valores disponíveis:
PENDING: em espera na filaIN_PROGRESS: a gerar o resultadoSUCCEEDED: final, com o resultadoFAILED: final, com o motivo emtask_errorCANCELED: final, sem resultado
- Name
- progress
- Type
- integer
- Description
Percentagem do trabalho concluído, de
0a100. É0até a tarefa começar e100quando é bem-sucedida.
- Name
- created_at
- Type
- timestamp
- Description
Hora em que a tarefa foi criada, em milissegundos Unix.
- Name
- started_at
- Type
- timestamp
- Description
Hora em que um worker iniciou a tarefa, em milissegundos Unix.
nullaté isso acontecer.
- Name
- finished_at
- Type
- timestamp
- Description
Hora em que a tarefa atingiu um estado final, em milissegundos Unix.
nullaté isso acontecer.
- Name
- expires_at
- Type
- timestamp
- Description
Hora 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 está
PENDING.1significa que é a próxima a começar.0depois de a tarefa sair 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. Um pedido que devolva um erro não é cobrado. Uma tarefa falhada é
0, porque a Meshy reembolsa-a. Cancelar só reembolsa uma tarefa enquanto esta estiverPENDING. Se a Meshy não conseguir ler a cobrança, uma resposta de obtenção ou de stream omite o campo, e um pedido de listagem devolve500. Nesse caso, repita o pedido.
- Name
- model_urls
- Type
- object
- Description
URLs de transferência para o resultado, indexados por formato de ficheiro. O objeto tem uma entrada, para o
output.formatque enviou, e está vazio até a tarefa ser bem-sucedida.As URLs são assinadas, por isso obtenha-as sem um cabeçalho
Authorization. Permanecem válidas atéexpires_at. Obter a tarefa novamente antes disso devolve as mesmas URLs, não umas recém-assinadas. Uma URL expirada não pode ser renovada, por isso transfira e guarde os ficheiros antes disso.- Name
3mf- Type
- string
- Description
URL de transferência para o ficheiro 3MF multicolor. Cada peça tem um corpo cinzento e um topo na cor do respetivo pixel. Presente quando
output.formaté3mf, que é o valor predefinido.
Exemplo completo (ponta a ponta)
Os seguintes scripts cURL e Python executam todo o fluxo. Cada script cria uma tarefa de protótipo a partir de uma fotografia e aguarda que seja concluída com sucesso. Depois, cria uma tarefa de construção, aguarda por essa tarefa e descarrega o ficheiro 3MF a partir de model_urls.3mf.
O script cURL necessita de curl e jq, e o script Python necessita do pacote requests. Para executar um script, siga estes passos:
- Defina
MESHY_API_KEYcom a sua chave de API. - Defina
IMAGE_PATHcom o caminho de uma fotografia local, ouIMAGE_URLcom um URL de imagem público. - Opcional: Para pixelizar um sujeito que não seja uma pessoa, defina
PIXEL_TYPEcomoother. - Execute o script.
Uma tarefa de protótipo normalmente termina em poucos minutos. Uma tarefa de construção normalmente termina em bem menos de um minuto.
Na sua aplicação, mostre a imagem de image_urls ao utilizador antes de criar a tarefa de construção. Se ele não gostar, crie outra tarefa de protótipo em vez disso. Desta forma, gasta créditos de construção apenas numa imagem que ele aprove.
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://...
# 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"