Guia do Programador PlacePix
Referência completa de API e documentação de funcionalidades para o serviço de imagens placeholder auto-hospedado. Inclui implementação Docker, corte inteligente, placeholders de gradiente, geração de SVG, avatares de letra e predefinições de redes sociais.
O que é o PlacePix?
PlacePix é um serviço de imagens placeholder auto-hospedado construído para programadores e equipas de design. Ao contrário dos serviços de placeholder de terceiros que exigem chamadas de rede externas e podem desaparecer, o PlacePix funciona inteiramente na sua própria infraestrutura. Coloque imagens em pastas e obtenha instantaneamente endpoints de URL que servem imagens redimensionadas, filtradas e formatadas.
O serviço é escrito em Python usando FastAPI com processamento de imagem fornecido por Pillow e OpenCV. Suporta implementação Docker e armazenamento de objetos compatível com S3.
Funcionalidades
- Configuração zero — coloque imagens nas pastas e comece
- Corte com reconhecimento facial — OpenCV deteta e centra rostos
- Placeholders de gradiente e SVG — nenhuma imagem necessária
- Predefinições de redes sociais — tamanhos de Instagram, YouTube, TikTok integrados
- Pesquisa por cor — encontre imagens que correspondam à paleta da sua marca
- Avatares de letras — imagens de perfil determinísticas a partir de nomes
Guia de implementação do Docker
A forma mais rápida de executar o PlacePix é com Docker. Um único comando implementa todo o serviço com escaneamento inteligente, extração de cores e o construtor de URL incorporado.
Implementação de uma linha
docker run -d -p 3000:3000 \
-v ./images:/app/images \
riadvice/placepix:latest
Docker Compose (Recomendado)
services:
placepix:
image: riadvice/placepix:latest
ports:
- "3000:3000"
volumes:
- ./images:/app/images
- ./data:/app/data
environment:
- HOST=0.0.0.0:3000
- UPLOAD_ENABLED=true
- WATERMARK_ENABLED=false
restart: unless-stopped
Dados Persistentes e Ambiente
Monte tanto /app/images (a sua biblioteca de imagens) quanto /app/data (cache de escaneamento e metadados) para preservar o estado entre reinícios de contentor. Configure o comportamento via variáveis de ambiente ou um ficheiro .env.
Armazenamento compatível com S3 da OVHcloud
PlacePix suporta qualquer backend compatível com S3. Para OVHcloud Object Storage, defina:
S3_ENABLED=true
S3_ENDPOINT=https://s3.rbx.io.cloud.ovh.net
S3_ACCESS_KEY=your-key
S3_SECRET_KEY=your-secret
S3_BUCKET=your-bucket
S3_REGION=rbx
Corte inteligente com reconhecimento facial
O corte central padrão pode cortar rostos na fotografia de retrato. PlacePix resolve isso com corte inteligente com reconhecimento facial alimentado por cascatas Haar do OpenCV.
Como funciona
Quando uma solicitação inclui ?fit=smart, PlacePix escaneia a imagem por rostos humanos usando OpenCV. Se rostos forem detectados, a janela de corte é deslocada para que o centroide do rosto fique o mais próximo possível dos pontos de interseção da proporção áurea. Se nenhum rosto for encontrado, retorna ao corte central padrão.
Exemplos de API
# Corte com reconhecimento facial (detecta e centraliza rostos)
/400/300/people?fit=smart
# Corte central padrão
/400/300/people?fit=crop
# Preenchimento de capa (pode esticar)
/400/300/people?fit=cover
# Conter (letterboxing)
/400/300/people?fit=contain
Quando usar Smart Crop
- Fotografia de retrato e headshots
- Páginas de equipa onde rostos importam
- Miniaturas de redes sociais
- Qualquer cenário onde o corte geométrico central arruína a composição
API de Placeholder de Gradiente
Gere imagens de gradiente linear e radial instantaneamente sem fazer upload de nenhum recurso. Perfeito para fundos hero, estados de carregamento e mockups de design.
Sintaxe do endpoint
/gradient/{width}/{height}/{from_hex}/{to_hex}
Exemplos
# Gradiente linear simples (de cima para baixo)
/gradient/800/400/3b82f6/10b981
# Gradiente em ângulo de 45 graus
/gradient/800/400/e11d48/f59e0b?angle=45
# Gradiente radial do centro
/gradient/800/400/1e293b/64748b?gradient_type=radial
# Com formato de saída
/gradient/800/400/0ea5e9/ffffff?format=webp&quality=80
Referência de parâmetros
{from_hex}/{to_hex}— cores hex sem o prefixo #?angle=45— ângulo linear em graus (0-360)?gradient_type=radial— muda para gradiente radial?format=webp— saída WebP (tamanho de ficheiro menor)
Gerador de Placeholder SVG
Os SVG placeholders não requerem processamento de imagem do lado do servidor. São gerados como inline SVG com cor de fundo, cor de primeiro plano e etiqueta de texto personalizáveis.
Endpoint
/svg/{width}/{height}?bg={hex}&fg={hex}&text={label}
Exemplos
# Default wireframe placeholder
/svg/400/300
# Custom brand colors
/svg/400/300?bg=1c1917&fg=0ea5e9
# With custom text
/svg/400/300?bg=0ea5e9&fg=ffffff&text=Hero+Section
Por que SVG?
- Tamanho de ficheiro inferior a 500 bytes
- Infinitamente escalável sem perda de qualidade
- Zero overhead de processamento do servidor
- Perfeito para wireframes e protótipos de baixa fidelidade
Predefinições de Redes Sociais
O PlacePix inclui dimensões predefinidas para plataformas sociais populares e tamanhos de ecrã. Use-as para gerar imagens placeholder com tamanhos perfeitos para Instagram, YouTube, TikTok, LinkedIn, X (Twitter) e ecrãs padrão.
/preset/instagram-square/nature # 1080x1080
/preset/instagram-portrait/nature # 1080x1350
/preset/instagram-story/nature # 1080x1920
YouTube
/preset/youtube-thumbnail/nature # 1280x720
/preset/youtube-banner/nature # 2560x423
TikTok
/preset/tiktok-video/nature # 1080x1920 (9:16)
/preset/linkedin-post/nature # 1200x627
X (Twitter)
/preset/twitter-header/nature # 1500x500
Tamanhos de Ecrã
/preset/mobile/nature # 375x812
/preset/tablet/nature # 768x1024
/preset/desktop/nature # 1920x1080
/preset/4k/nature # 3840x2160
Caso de Uso de Cauda Longa: Instagram Story API
Se está a construir uma ferramenta de gestão de redes sociais e necessita de imagens placeholder do tamanho do story do Instagram, use /preset/instagram-story/{category}. Combine com ?fit=smart para fotos de retrato e ?format=webp&quality=70 para entrega otimizada.
API de Pesquisa por Cor
Cada imagem no PlacePix é escaneada para as suas 3 cores dominantes principais. Pode pesquisar toda a biblioteca por cor hex para encontrar imagens que correspondam à paleta da sua marca.
Endpoints
# Obter uma imagem correspondente a uma cor hex específica
/color/0ea5e9/400/300
# Filtrar qualquer endpoint por cor dominante
/400/300/nature?color=d97706
# Listar todas as imagens correspondentes a uma cor
/api/color/3b82f6
Como funciona o escaneamento de cores
No arranque, PlacePix extrai as cores mais frequentes de cada imagem usando clustering k-means no espaço de cor LAB. Isto produz correspondências perceptualmente precisas em vez de médias RGB brutas. A página de paleta (/palette) visualiza estas cores e permite navegar por categoria de matiz.
Filtragem por orientação
Filtre imagens aleatórias pela sua proporção nativa antes da seleção. Isto é útil quando precisa de imagens que se encaixam naturalmente num layout — paisagem para cabeçalhos, retrato para cartões ou quadrado para miniaturas.
Endpoints
# Landscape images (width > height)
/400/300?orientation=landscape
# Portrait images (height > width)
/400/300?orientation=portrait
# Squarish images (within 15% of 1:1 by default)
/400/300?orientation=squarish
# Combined with other filters
/400/300/nature?orientation=landscape&seed=spring
/color/0ea5e9/400/300?orientation=portrait
/api/color/3b82f6?orientation=landscape
Configuração
A tolerância squarish é configurável através da variável de ambiente ORIENTATION_SQUARISH_TOLERANCE (predefinição: 0.15). Um valor de 0.15 significa que imagens com proporção entre 0.85 e 1.15 são consideradas quadradas. Defina como 0.0 para 1:1 exato.
Como funciona
O PlacePix lê as dimensões das imagens dos cabeçalhos dos ficheiros durante a verificação inicial (ficheiros locais) e durante a verificação de metadados em segundo plano (imagens S3). As dimensões são armazenadas na memória e usadas para filtrar o conjunto de candidatos antes da seleção aleatória ou determinística. Se uma orientação for solicitada mas nenhuma imagem corresponder, um 404 é devolvido.
Filtros e Efeitos
Aplique filtros e efeitos em tempo real a qualquer imagem via parâmetros de consulta. Todo o processamento é feito no lado do servidor e cacheado para solicitações subsequentes.
Ajustes de Cor
?grayscale=1 # Preto e branco
?sepia=1 # Tom sépia quente
?tint=0ea5e9 # Sobreposição de cor hex
?brightness=1.3 # 0,0 a 2,0
?contrast=1.2 # 0,0 a 2,0
?saturation=2.0 # 0,0 a 2,0
?invert=true # Inverter cores
?posterize=4 # Níveis de cor (1-8)
?duotone=ff0000,0000ff # Mapa de duas cores
Efeitos de Imagem
?blur=2 # Desfoque gaussiano (1-10)
?sharpen=1.5 # Quantidade de nitidez
?emboss=true # Relevo 3D
?edges=sobel # Deteção de bordas
?edges=canny # Bordas Canny
?halftone=4 # Padrão de pontos
?oil_painting=true # Estilo pintura a óleo
?pencil_sketch=true # Esboço a lápis
?cartoon=true # Efeito de desenho animado
?vignette=0.5 # Escurecer bordas (0-1)
Parâmetros de Sobreposição
?text=Hello+World # Sobreposição de texto
?border=4,ffffff # Largura e cor da borda
?watermark=1 # Aplicar marca de água configurada
?padding=20 # Preenchimento interno
Gerador de Avatares
Gere avatares determinísticos de qualquer nome ou email. PlacePix suporta dois tipos de avatares: Avatar de letra (iniciais coloridas) e Multiavatar (avatares vetoriais multiculturais).
Endpoint
/avatar/{size}/{name}
/avatar/{size}/{name}.{ext}
Parâmetros
type— avatar type:letter(default) ormultiavatarsize— pixel size (e.g.64,128,256)name— any string; used as seed for the avatar
Avatar de letra (type=letter)
circle— crop to a circle shapeborder={width}— adiciona uma bordaborder_color={hex}— cor da bordabg={hex}— override background colorfg={hex}— override text/foreground colorsingle=true— use only the first letteruppercase=false— preserve lowercase letterspalette={name}— choose fromflatui,material,pastel,neon,cool,warm
Multiavatar (type=multiavatar)
env— include environment background (trueby default,falseto omit)part— specific part code (optional, e.g.11)theme— specific theme code (optional, e.g.C)
Exemplos
# Simple 128px letter avatar
/avatar/128/John+Doe
# Circle letter avatar with custom border
/avatar/128/John+Doe?circle=true&border=2&border_color=ffffff
# Single initial, pastel palette
/avatar/64/Alice?single=true&palette=pastel
# SVG letter output (scalable, under 500 bytes)
/avatar/128/John+Doe.svg
# Multiavatar (multicultural vector avatar)
/avatar/128/Binx+Bond?type=multiavatar
# Multiavatar without environment background
/avatar/128/Binx+Bond?type=multiavatar&env=false
# Specific multiavatar version
/avatar/128/Binx+Bond?type=multiavatar&part=11&theme=C
Por que usar avatares de letra?
- Zero dependências externas — sem Gravatar ou serviço de avatar de terceiros
- Determinístico — o mesmo nome sempre produz a mesma cor
- Suporte SVG — infinitamente escalável, perfeito para ecrãs HiDPI
- Seis paletas de cores embutidas para qualquer estética de marca
Por que usar Multiavatar?
- 12 mil milhões de avatares multiculturais únicos
- Determinístico — o mesmo nome sempre produz o mesmo avatar
- Saída SVG pura — tamanho de ficheiro pequeno, infinitamente escalável
- Nenhuma chamada de API externa necessária
Referência Rápida da API REST
Todos os endpoints suportam CORS e retornam imagens com cabeçalhos de cache de longo prazo. Saída JSON Base64 está disponível para miniaturas pequenas.
Endpoints de Imagem
GET /{width}/{height}/{category}— Imagem aleatória da categoriaGET /{width}/{height}— Imagem aleatória de todas as categoriasGET /id/{id}/{width}/{height}— Imagem específica por IDGET /ratio/{ratio}/{width}/{category}— Imagem com proporção de aspetoGET /preset/{preset}/{category}— Preset de mídia socialGET /color/{hex}/{width}/{height}— Imagem com cor correspondenteGET /gradient/{w}/{h}/{from}/{to}— Imagem de gradienteGET /svg/{width}/{height}— Placeholder SVGGET /avatar/{size}/{name}— Avatar de letra (PNG/SVG)
Endpoints de Metadados
GET /api/images— Listar categorias e totaisGET /api/info/id/{id}— Metadados da imagem (dimensões, cores, formato)GET /api/color/{hex}— Imagens correspondentes a uma cor
Endpoints de Saúde
GET /health— Sonda de vivacidade (Docker/K8s)GET /ready— Sonda de prontidão (503 até imagens carregadas)
Perícia e credenciais
- Contribuidores ativos para o ecossistema open source desde 2008
- Todo o código é open source sob a licença MIT e auditável no GitHub
Perguntas Frequentes
Como implemento o PlacePix com Docker?
Execute docker run -d -p 3000:3000 -v ./images:/app/images riadvice/placepix:latest. Monte a sua pasta de imagens e o serviço inicia imediatamente com escaneamento inteligente habilitado.
O que é o corte inteligente com reconhecimento facial?
PlacePix usa cascatas Haar do OpenCV para detetar rostos em imagens. Quando adiciona ?fit=smart a qualquer URL, a região de corte é deslocada para centralizar nos rostos detetados em vez de usar o centro geométrico. Se nenhum rosto for encontrado, retorna ao corte central padrão.
Posso gerar imagens placeholder de gradiente sem fazer upload de fotos?
Sim. O endpoint /gradient/{width}/{height}/{from}/{to} gera imagens de gradiente inteiramente a partir de parâmetros de URL. Nenhuma imagem enviada é necessária. Também pode criar placeholders SVG com /svg/{width}/{height}.
Como gerar imagens placeholder do tamanho do story do Instagram via API?
Use o endpoint de preset: /preset/instagram-story/{category}. Isto retorna uma imagem 1080x1920. Combine com ?format=webp&quality=70 para entrega otimizada e ?fit=smart para corte seguro de retratos.
O PlacePix suporta armazenamento de objetos compatível com S3?
Sim. PlacePix funciona com OVHcloud Object Storage, AWS S3, MinIO e qualquer fornecedor compatível com S3. Configure endpoint, bucket, chave de acesso e chave secreta via variáveis de ambiente.
Quais formatos de saída são suportados?
WebP, AVIF, JPEG, PNG, SVG e JSON base64. Use .webp, .avif ou .png como extensão de ficheiro, ou adicione ?format=webp como parâmetro de consulta. AVIF produz os ficheiros menores; PNG é sem perda.
O PlacePix é gratuito para uso comercial?
Sim. PlacePix é lançado sob a licença MIT e é gratuito tanto para uso pessoal quanto comercial. Por ser auto-hospedado, não há limites de uso, chaves de API ou cobrança por solicitação.