MCP de imagem em camadas para produção de traits de NFT sobre uma base oficial travada.
O modelo é o de um editor de camadas (Krita/Photoshop), não o de um gerador:
- Camada 1 = base oficial, travada (
edit-lockedno.ora, conforme a especificação OpenRaster). Nunca é alterada. - Camada 2 = trait RGBA transparente, gerada pelo agente que chama (Codex, Claude...) com o gerador de imagens dele próprio.
- "Remover a base" = exportar a camada 2 sozinha, byte a byte.
Este MCP não gera imagem nenhuma. Ele cria e controla o documento, coloca, inspeciona, julga e exporta. A camada 2 nunca é limpa, recortada, redimensionada, transladada nem reconstruída depois de colocada.
create_document ──► [agente gera a trait RGBA] ──► place_trait ──► qa
│ │
└──── base visível e travada ───────────────► ocultar base ──► export_trait
(fundo transparente) │
reprovou? gere outra e
repita place_trait
create_document— base na camada 1 (travada), camada 2 vazia. Já gravadocument.ora, que abre em Krita/GIMP/MyPaint.- O agente gera apenas a trait como PNG RGBA transparente exatamente no
tamanho do canvas. A origem/modelo não faz parte deste MCP.
- Prompt tipo: "apenas a jaqueta X, vestível, sem personagem, sem fundo, mesma pose/ângulo da referência, abertura de pescoço e punhos".
place_trait— arquivo copiado byte a byte para a camada 2. Tamanho, padding, deslocamento e modo incorretos são recusados.qa— julga sem tocar em nada: pixels em zona protegida (reprova), cobertura, previews (composição, trait sozinha em xadrez, overlay com violações em vermelho).set_base_layer_visibility(false)— oculta apenas a camada 1 e prova por hash que a camada 2 permaneceu idêntica.export_trait— só passa se o QA passou (ouforce=true): PNG da trait (cópia byte a byte) +.orafinal.
| Ferramenta | O que faz |
|---|---|
create_document |
Base travada na camada 1, camada 2 vazia, .ora criado |
place_trait |
Coloca o PNG RGBA na camada 2, byte a byte |
inspect_document |
Confere modos, tamanhos, hashes, lock e visibilidade |
set_base_layer_visibility |
Mostra/oculta só a base; trait não muda |
qa |
Julga a camada 2; previews; nunca altera pixels |
export_trait |
Camada 2 sozinha (byte a byte) + .ora; bloqueado sem QA |
list_documents |
Lista documentos e estado do QA |
py -3.12 -m pip install -r requirements.txtO .mcp.json do repo registra o servidor automaticamente ao abrir a pasta.
Em ~/.codex/config.toml:
[mcp_servers.trait-workflow]
command = "py"
args = ["-3.12", "C:/Nova pasta/DN/DEV/trait-workflow/server.py"]py -3.12 cli.py create hidden --base base.png
py -3.12 cli.py place hidden --image trait_rgba.png
py -3.12 cli.py qa hidden
py -3.12 cli.py visibility hidden --hidden
py -3.12 cli.py inspect hidden
py -3.12 cli.py export hiddendocuments/<nome>/
document.ora # camada 1 = base (edit-locked), camada 2 = trait
base.png # fonte da camada 1 (nunca alterada)
trait.png # camada 2 atual (pixels do agente, sem retoque)
qa/ # preview.png, trait_alone.png, overlay.png, qa.json
exports/ # <nome>_trait.png + <nome>.ora finais
Referências: OpenRaster spec · edit-locking · Krita e .ora · OpenAI image API (background transparent)