API focada em filas, rastreio e upload

mantis-slicer

O mantis-slicer é um serviço de fatiamento (slicing) para modelos 3D — ele recebe um arquivo (ex.: .3mf), processa no fatiador, extrai métricas e metadados (tempo de impressão, peso, placas, filamentos) e retorna um resultado estruturado. O processamento é enfileirado e executado por workers, garantindo previsibilidade e escalabilidade.

Fila & Worker

As requisições entram como jobs (status QUEUED) e são processadas por workers com FOR UPDATE SKIP LOCKED para evitar concorrência.

Artefatos & Metadados

Suporta upload completo (gcode/3mf) e também modo leve (metadata-only) para publicar apenas thumbnails de placas.

Visão geral

Arquitetura • Fluxo • O que o serviço entrega

O que é o fatiador?

O fatiador transforma um modelo 3D em instruções de impressão (ex.: G-code), além de gerar informações úteis para precificação e logística: peso em gramas, tempo estimado, quantidade de objetos, além dos dados por placa (plates) e thumbnails.

  • Retorna
    Métricas globais (weight, printTime, totalObjects) e dados por placa (plateData).
  • Enfileira
    Jobs são persistidos no Postgres (ex.: slicing_results) e processados por worker.
  • Entrega
    Thumbnails de placas em /metadata e (no modo completo) artefatos como G-code.

Fluxo de alto nível

O fluxo típico quando você chama /slice:

  • 1
    API recebe .3mf + instance e cria um job QUEUED.
  • 2
    Worker “claim” no job (PROCESSING) e executa slicing.
  • 3
    Persistência do resultado (PROCESSED), upload e retorno/callback quando aplicável.
Upload mode: use metadata-only quando quiser reduzir custo/tempo de upload.

Autenticação

Bearer token obrigatório

Cabeçalho Authorization

Para fatiar corretamente, é obrigatório enviar o token no cabeçalho: Authorization: Bearer <TOKEN>.

Authorization: Bearer <SEU_TOKEN>
Recomendação: não exponha o token em logs. Rotacione tokens periodicamente e limite o escopo (se aplicável).

Boas práticas

  • TLS
    Use HTTPS sempre que estiver fora de rede interna.
  • Rate limit
    Controle chamadas para evitar fila infinita e saturação do worker.
  • Idempotência
    Use instance como chave lógica e rastreie status por job.

Endpoints

Referência rápida

API

POST /slice

Enfileira slicing completo. Worker pode subir artefatos (ex.: gcode/3mf) + thumbnails.

POST /slicing-light

Enfileira slicing em modo leve (metadata-only): sobe somente thumbnails das placas em /metadata.

Parâmetros esperados

Os endpoints recebem multipart/form-data:

  • file
    Obrigatório. Arquivo do modelo (ex.: .3mf).
  • instance
    Obrigatório. ID da instância para rastreio e chaves de storage.
  • callback
    Opcional. Quando presente, pode habilitar notificações/callbacks no fluxo.

Resposta (202): retorna um jobId e status QUEUED. O processamento acontece em background via worker.

Exemplo de resposta

Estrutura do slicing result

Resultado (exemplo)

Abaixo um exemplo típico do objeto retornado após slicing (conteúdo simplificado). Campos como plateData podem conter arrays maiores.

{
  "name": "keycaps",
  "weight": 171.01,
  "printTime": 158098,
  "totalObjects": 46,
  "totalUniqueObjects": 2,
  "plateData": [
    { "id": "1", "printTime": 61286, "weight": 61.01, "nozzleDiameter": "0.2" },
    { "id": "2", "printTime": 26416, "weight": 31.13, "nozzleDiameter": "0.2" },
    { "id": "3", "printTime": 70396, "weight": 78.87, "nozzleDiameter": "0.2" }
  ],
  "instance": 12104,
  "status": "PROCESSED",
  "compatibleMachines": [
    "Bambu Lab P1S 0.2 nozzle",
    "Bambu Lab P1P 0.2 nozzle"
  ],
  "result_dir_path": "output/keycaps",
  "durationMs": 22307
}
Compatibilidade: compatibleMachines pode ser usado no backend para mapear impressoras compatíveis e preencher mainCompatibility + outras compatibilidades.