Um servidor que expõe Qwen-Edit, FLUX.2 e ERNIE numa mesma API HTTP, com hot-swap em memória e playground web. Roda em Docker no DGX Spark.
# gerar uma imagem via API curl -s localhost:8000/generate \ -H "content-type: application/json" \ -d '{"prompt":"raposa no campo","model":"qwen-edit-2511","aspect":"16:9"}'
O inemaimg nasceu da necessidade de gerar centenas de imagens por semana sem pagar chamadas em APIs externas. Com o DGX Spark (GB10) e 119 GB de memória unificada, dava pra rodar tudo local — e ele resolve geração, edição e licenciamento numa só porta.
Uma mesma API expõe 4 modelos com perfis complementares (velocidade, qualidade, licença) e troca entre eles em memória conforme a requisição.
Qwen-Edit-2511 (Apache 2.0) e ERNIE (aberta) pra uso comercial; FLUX.2-klein e FLUX.2-dev (non-commercial) pra iteração rápida e render premium no dev.
Um generateImage(outputPath, prompt, model, aspect) que substitui qualquer outro provider de imagens sem mexer nos call-sites.
O FastAPI gateway recebe a chamada, serializa o acesso à GPU com um asyncio.Lock e, se o modelo pedido não for o que está quente, faz hot-swap no Model Registry antes de gerar.
/health mostra prewarm_status e VRAM. /models lista os 4 modelos. /generate recebe prompt, model e aspect e devolve a imagem.
O Qwen-Edit-2511 é o motor principal e fica em prewarm. O registry é trivialmente extensível pra multi-hot no futuro.
Alvo do projeto é o NVIDIA GB10 (Blackwell, arm64-sbsa), mas roda em qualquer GPU com ≥ 24 GB de VRAM. Você precisa de Docker com acesso à GPU e espaço de disco pro cache dos modelos.
NVIDIA com ≥ 24 GB VRAM, driver 550.x+ (CUDA 12.4) ou 580.x+ (CUDA 13). Confira:
# GPU e driver nvidia-smi
Compose v2 + NVIDIA Container Toolkit. Valide o acesso à GPU dentro de um container:
# testar GPU no Docker docker run --rm --gpus all \ nvcr.io/nvidia/pytorch:26.03-py3 nvidia-smi
~100 GB livres em ~/.cache/huggingface (mín. ~50 GB só com Qwen-Edit + FLUX.2-klein):
# espaço livre df -h ~/.cache/huggingface
A primeira subida baixa e cacheia os pesos; boots seguintes só carregam pra VRAM. Os comandos abaixo são os do README do projeto.
Pegue o repositório e entre na pasta do servidor.
git clone git@github.com:inematds/inemaimg.git cd inemaimg
FLUX.2-klein e FLUX.2-dev são gated. Se você só vai usar Qwen-Edit ou ERNIE (públicos), pule. Caso contrário, aprove os gates e exporte o token:
export HF_TOKEN=$(cat ~/.cache/huggingface/token) # passado ao container pelo compose
Sobe a stack e acompanha os logs. Na primeira vez baixa ~40 GB de pesos do Qwen-Edit via hf_transfer; o /health já responde durante o download.
docker compose up -d --build docker compose logs -f
Pollar o campo prewarm_status até virar ready (estados: running / ready / failed).
watch -n 2 'curl -s localhost:8000/health | python3 -m json.tool'
Health check, lista de modelos e o playground no browser. A UI mostra um badge verde "pronto — qwen-edit-2511".
curl -s localhost:8000/health | python3 -m json.tool # prewarm_status: ready curl -s localhost:8000/models | python3 -m json.tool # lista os 4 modelos # Playground: abra http://localhost:8000/
O servidor cobre desde geração comercial de campanha até iteração rápida e render premium durante o desenvolvimento.
Gerar centenas de imagens por semana com Qwen-Edit-2511 (Apache 2.0, uso comercial) sem custo por chamada — consumido direto pelo timesmkt3.
FLUX.2-klein em 4 steps é o mais rápido do registry: ideal pra testar prompts e variações antes de escolher o render final.
FLUX.2-dev em 4-bit entrega qualidade alta pra hero shots e peças que precisam de acabamento, com hot-swap automático.
Qwen-Edit e FLUX.2-klein aceitam edição (não só text-to-image), permitindo ajustes guiados por prompt sobre imagens existentes.
Status atual: MVP funcional rodando no DGX Spark, com 4 modelos e playground. Os próximos passos seguem a visão registrada em PROJETO.md.