Servidor local de imagens · multi-modelo

Geração de imagens local, sem pagar API

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 que é

Um gateway único para quatro modelos de imagem

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.

🖼️ Multi-modelo sob demanda

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.

🖼️ Licenciamento claro

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.

🖼️ Drop-in pra o timesmkt3

Um generateImage(outputPath, prompt, model, aspect) que substitui qualquer outro provider de imagens sem mexer nos call-sites.

Como funciona

Do request ao pixel, passando pelo registry

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.

Request (timesmkt3 / curl / browser) FastAPI gateway asyncio.Lock na GPU Model Registry (hot-swap) NVIDIA GB10 Imagem

Endpoints da API

/health mostra prewarm_status e VRAM. /models lista os 4 modelos. /generate recebe prompt, model e aspect e devolve a imagem.

Um modelo quente por vez

O Qwen-Edit-2511 é o motor principal e fica em prewarm. O registry é trivialmente extensível pra multi-hot no futuro.

Pré-requisitos

O que precisa estar pronto no host

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.

GPU + driver

NVIDIA com ≥ 24 GB VRAM, driver 550.x+ (CUDA 12.4) ou 580.x+ (CUDA 13). Confira:

# GPU e driver
nvidia-smi

Docker com GPU

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

Disco pro cache

~100 GB livres em ~/.cache/huggingface (mín. ~50 GB só com Qwen-Edit + FLUX.2-klein):

# espaço livre
df -h ~/.cache/huggingface
Guia de uso · passo a passo

Do clone ao primeiro pixel

A primeira subida baixa e cacheia os pesos; boots seguintes só carregam pra VRAM. Os comandos abaixo são os do README do projeto.

1

Clonar e entrar no diretório

Pegue o repositório e entre na pasta do servidor.

git clone git@github.com:inematds/inemaimg.git
cd inemaimg
2

(Opcional) Autenticar no HuggingFace

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
3

Primeiro boot (build + download dos pesos)

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
4

Esperar o prewarm ficar pronto

Pollar o campo prewarm_status até virar ready (estados: running / ready / failed).

watch -n 2 'curl -s localhost:8000/health | python3 -m json.tool'
5

Verificar e usar

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/
Exemplos

Casos de uso reais

O servidor cobre desde geração comercial de campanha até iteração rápida e render premium durante o desenvolvimento.

Campanha de marketing

Gerar centenas de imagens por semana com Qwen-Edit-2511 (Apache 2.0, uso comercial) sem custo por chamada — consumido direto pelo timesmkt3.

Iteração rápida no dev

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.

Render premium

FLUX.2-dev em 4-bit entrega qualidade alta pra hero shots e peças que precisam de acabamento, com hot-swap automático.

Edição de imagem

Qwen-Edit e FLUX.2-klein aceitam edição (não só text-to-image), permitindo ajustes guiados por prompt sobre imagens existentes.

Roadmap

Onde está e pra onde vai

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.

Agora
MVP multi-modeloAPI HTTP com /health, /models e /generate, hot-swap em memória, playground web e drop-in no timesmkt3.
Próximo
Mais modelos no registryO registry é trivialmente extensível — adicionar novos loaders sem mudar os call-sites.
Futuro
Multi-hot na GPUManter mais de um modelo quente ao mesmo tempo, aproveitando os 119 GB de memória unificada do GB10.