Przewodnik dewelopera PlacePix
Kompletna referencja API i dokumentacja funkcji dla samodzielnie hostowanej usługi obrazów placeholder. Obejmuje wdrażanie Docker, inteligentne przycinanie, gradientowe placeholdery, generowanie SVG, awatary literowe i presety mediów społecznościowych.
Co to jest PlacePix?
PlacePix to samodzielnie hostowana usługa obrazów placeholder stworzona dla deweloperów i zespołów projektowych. W przeciwieństwie do usług placeholder stron trzecich, które wymagają zewnętrznych wywołań sieciowych i mogą zniknąć, PlacePix działa całkowicie na własnej infrastrukturze. Upuszczaj obrazy do folderów i natychmiast otrzymuj endpointy URL serwujące przeskalowane, przefiltrowane i sformatowane obrazy.
Usługa jest napisana w Pythonie przy użyciu FastAPI z przetwarzaniem obrazów zasilanym przez Pillow i OpenCV. Obsługuje wdrażanie Docker i kompatybilną z S3 pamięć masową obiektów.
Funkcje
- Konfiguracja zero — upuszczaj obrazy do folderów i działaj
- Inteligentne przycinanie twarzy — OpenCV wykrywa i centruje twarze
- Gradientowe i SVG placeholdery — nie wymagają obrazów
- Presety mediów społecznościowych — wbudowane rozmiary Instagram, YouTube, TikTok
- Wyszukiwanie kolorów — znajdź obrazy pasujące do palety marki
- Awatary literowe — deterministyczne obrazy profilowe z imion
Przewodnik wdrażania Docker
Najszybszym sposobem na uruchomienie PlacePix jest Docker. Jedno polecenie wdraża całą usługę z inteligentnym skanowaniem, ekstrakcją kolorów i wbudowanym konstruktorem URL.
Wdrażanie jednym wierszem
docker run -d -p 3000:3000 \
-v ./images:/app/images \
riadvice/placepix:latest
Docker Compose (Zalecane)
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
Trwałe dane i środowisko
Zamontuj zarówno /app/images (bibliotekę obrazów), jak i /app/data (pamięć podręczną skanowania i metadane), aby zachować stan między ponownymi uruchomieniami kontenera. Skonfiguruj zachowanie za pomocą zmiennych środowiskowych lub pliku .env.
OVHcloud Pamięć masowa zgodna z S3
PlacePix obsługuje dowolny backend zgodny z S3. Dla OVHcloud Object Storage, ustaw:
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
Inteligentne przycinanie z rozpoznawaniem twarzy
Standardowe centralne przycinanie może przeciąć twarze na fotografii portretowej. PlacePix rozwiązuje to za pomocą inteligentnego przycinania z rozpoznawaniem twarzy napędzanego kaskadami Haar OpenCV.
Jak to działa
Gdy żądanie zawiera ?fit=smart, PlacePix skanuje obraz w poszukiwaniu ludzkich twarzy przy użyciu OpenCV. Jeśli twarze zostaną wykryte, okno przycinania jest przesuwane, aby środek ciężkości twarzy znajdował się jak najbliżej punktów przecięcia złotego podziału. Jeśli nie znaleziono twarzy, następuje powrót do standardowego centralnego przycinania.
Przykłady API
# Przycinanie z rozpoznawaniem twarzy (wykrywa i centruje twarze)
/400/300/people?fit=smart
# Standardowe centralne przycinanie
/400/300/people?fit=crop
# Wypełnienie okładki (może rozciągnąć)
/400/300/people?fit=cover
# Zawieranie (letterboxing)
/400/300/people?fit=contain
Kiedy używać inteligentnego przycinania
- Fotografia portretowa i headshoty
- Strony zespołów, gdzie twarze mają znaczenie
- Miniaturki mediów społecznościowych
- Każdy scenariusz, w którym geometryczne centralne przycinanie psuje kompozycję
API placeholder gradientowych
Generuj liniowe i radialne obrazy gradientowe na żywo bez przesyłania zasobów. Idealne dla teł hero, stanów ładowania i makiet projektowych.
Składnia endpointu
/gradient/{width}/{height}/{from_hex}/{to_hex}
Przykłady
# Prosty gradient liniowy (z góry na dół)
/gradient/800/400/3b82f6/10b981
# Gradient pod kątem 45 stopni
/gradient/800/400/e11d48/f59e0b?angle=45
# Gradient radialny ze środka
/gradient/800/400/1e293b/64748b?gradient_type=radial
# Z formatem wyjściowym
/gradient/800/400/0ea5e9/ffffff?format=webp&quality=80
Referencja parametrów
{from_hex}/{to_hex}— kolory hex bez prefiksu #?angle=45— kąt liniowy w stopniach (0-360)?gradient_type=radial— przełącza na gradient radialny?format=webp— wyjście WebP (mniejszy rozmiar pliku)
Generator placeholder SVG
SVG placeholdery nie wymagają przetwarzania obrazów po stronie serwera. Są generowane jako inline SVG z konfigurowalnym kolorem tła, kolorem pierwszego planu i etykietą tekstową.
Endpoint
/svg/{width}/{height}?bg={hex}&fg={hex}&text={label}
Przykłady
# 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
Dlaczego SVG?
- Rozmiar pliku poniżej 500 bajtów
- Nieskończenie skalowalny bez utraty jakości
- Zerowe obciążenie przetwarzania serwera
- Idealny dla wireframe'ów i prototypów low-fidelity
Presety mediów społecznościowych
PlacePix zawiera predefiniowane wymiary dla popularnych platform społecznościowych i rozmiarów ekranów. Użyj ich do generowania perfekcyjnie dopasowanych obrazów placeholder dla Instagrama, YouTube'a, TikToka, LinkedIn, X (Twitter) i standardowych wyświetlaczy.
/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
Rozmiary ekranów
/preset/mobile/nature # 375x812
/preset/tablet/nature # 768x1024
/preset/desktop/nature # 1920x1080
/preset/4k/nature # 3840x2160
Przypadek użycia Long-Tail: Instagram Story API
Jeśli budujesz narzędzie do zarządzania mediami społecznościowymi i potrzebujesz obrazów placeholder o rozmiarze Instagram Story, użyj /preset/instagram-story/{category}. Połącz z ?fit=smart dla zdjęć portretowych i ?format=webp&quality=70 dla zoptymalizowanej dostawy.
API wyszukiwania po kolorze
Każdy obraz w PlacePix jest skanowany pod kątem 3 dominujących kolorów. Możesz przeszukiwać całą bibliotekę według koloru hex, aby znaleźć obrazy pasujące do palety marki.
Endpoints
# Pobierz obraz pasujący do określonego koloru hex
/color/0ea5e9/400/300
# Filtruj dowolny endpoint według koloru dominującego
/400/300/nature?color=d97706
# Wyświetl wszystkie obrazy pasujące do koloru
/api/color/3b82f6
Jak działa skanowanie kolorów
Podczas uruchamiania PlacePix wyodrębnia najczęstsze kolory z każdego obrazu za pomocą klastrowania k-means w przestrzeni kolorów LAB. Daje to percepcyjnie dokładne dopasowania, a nie surowe średnie RGB. Strona palety (/palette) wizualizuje te kolory i pozwala przeglądać według kategorii odcieni.
Filtrowanie według orientacji
Filtruj losowe obrazy według ich natywnego proporcji przed wyborem. Jest to przydatne, gdy potrzebujesz obrazów, które naturalnie pasują do układu — krajobraz dla nagłówków, portret dla kart lub kwadrat dla miniaturek.
Punkty końcowe
# 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
Konfiguracja
Tolerancja squarish jest konfigurowalna przez zmienną środowiskową ORIENTATION_SQUARISH_TOLERANCE (domyślnie: 0.15). Wartość 0.15 oznacza, że obrazy z proporcjami między 0.85 a 1.15 są uznawane za kwadratowe. Ustaw 0.0 dla dokładnego 1:1.
Jak to działa
PlacePix odczytuje wymiary obrazów z nagłówków plików podczas początkowego skanowania (pliki lokalne) oraz podczas skanowania metadanych w tle (obrazy S3). Wymiary są przechowywane w pamięci i używane do filtrowania puli kandydatów przed losowym lub deterministycznym wyborem. Jeśli żądana jest orientacja, ale żaden obraz nie pasuje, zwracany jest 404.
Filtry i efekty
Stosuj filtry i efekty w czasie rzeczywistym do dowolnego obrazu za pomocą parametrów zapytania. Całe przetwarzanie odbywa się po stronie serwera i jest buforowane dla kolejnych żądań.
Korekty kolorów
?grayscale=1 # Czarno-białe
?sepia=1 # Ciepły odcień sepii
?tint=0ea5e9 # Nałożenie koloru hex
?brightness=1.3 # 0,0 do 2,0
?contrast=1.2 # 0,0 do 2,0
?saturation=2.0 # 0,0 do 2,0
?invert=true # Odwróć kolory
?posterize=4 # Poziomy kolorów (1-8)
?duotone=ff0000,0000ff # Dwukolorowa mapa
Efekty obrazu
?blur=2 # Rozmycie gaussowskie (1-10)
?sharpen=1.5 # Ilość wyostrzania
?emboss=true # Płaskorzeźba 3D
?edges=sobel # Wykrywanie krawędzi
?edges=canny # Krawędzie Canny
?halftone=4 # Wzorzec kropek
?oil_painting=true # Styl malowania olejnego
?pencil_sketch=true # Szkic ołówkowy
?cartoon=true # Efekt kreskówkowy
?vignette=0.5 # Przyciemnianie krawędzi (0-1)
Parametry nakładki
?text=Hello+World # Nakładka tekstu
?border=4,ffffff # Szerokość i kolor ramki
?watermark=1 # Zastosuj skonfigurowany znak wodny
?padding=20 # Wewnętrzne wypełnienie
Generator Avatarów
Generuj deterministyczne awatary z dowolnego imienia lub emaila. PlacePix obsługuje dwa typy awatarów: Avatar literowy (kolorowe inicjały) i Multiavatar (multikulturowe awatary wektorowe).
Endpoint
/avatar/{size}/{name}
/avatar/{size}/{name}.{ext}
Parametry
type— avatar type:letter(default) ormultiavatarsize— pixel size (e.g.64,128,256)name— any string; used as seed for the avatar
Avatar literowy (type=letter)
circle— crop to a circle shapeborder={width}— dodaj ramkęborder_color={hex}— kolor ramkibg={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)
Przykłady
# 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
Dlaczego warto używać avatarów literowych?
- Zero zewnętrznych zależności — żadnego Gravatar ani usługi avatarów stron trzecich
- Deterministyczny — to samo imię zawsze daje ten sam kolor
- Wsparcie SVG — nieskończenie skalowalne, idealne dla wyświetlaczy HiDPI
- Sześć wbudowanych palet kolorów dla każdej estetyki marki
Dlaczego warto używać Multiavatara?
- 12 miliardów unikalnych multikulturowych awatarów
- Deterministyczny — to samo imię zawsze daje ten sam awatar
- Czyste wyjście SVG — mały rozmiar pliku, nieskończenie skalowalne
- Nie są wymagane zewnętrzne wywołania API
Szybka referencja REST API
Wszystkie endpointy obsługują CORS i zwracają obrazy z nagłówkami długoterminowej pamięci podręcznej. Wyjście Base64 JSON jest dostępne dla małych miniatur.
Endpointy obrazów
GET /{width}/{height}/{category}— Losowy obraz z kategoriiGET /{width}/{height}— Losowy obraz ze wszystkich kategoriiGET /id/{id}/{width}/{height}— Konkretny obraz po IDGET /ratio/{ratio}/{width}/{category}— Obraz o określonym proporcjiGET /preset/{preset}/{category}— Preset mediów społecznościowychGET /color/{hex}/{width}/{height}— Obraz dopasowany kolorystycznieGET /gradient/{w}/{h}/{from}/{to}— Obraz gradientowyGET /svg/{width}/{height}— Placeholder SVGGET /avatar/{size}/{name}— Awatar literowy (PNG/SVG)
Endpointy metadanych
GET /api/images— Lista kategorii i sumGET /api/info/id/{id}— Metadane obrazu (wymiary, kolory, format)GET /api/color/{hex}— Obrazy pasujące do koloru
Endpointy zdrowia
GET /health— Sonda liveness (Docker/K8s)GET /ready— Sonda readiness (503 do momentu załadowania obrazów)
Wiedza specjalistyczna i referencje
- Aktywni współtwórcy ekosystemu open source od 2008 roku
- Cały kod jest open source na licencji MIT i możliwy do audytu na GitHub
Często zadawane pytania
Jak wdrożyć PlacePix za pomocą Dockera?
Uruchom docker run -d -p 3000:3000 -v ./images:/app/images riadvice/placepix:latest. Zamontuj folder z obrazami, a usługa uruchomi się natychmiast z włączonym inteligentnym skanowaniem.
Czym jest inteligentne przycinanie z rozpoznawaniem twarzy?
PlacePix używa kaskad Haar OpenCV do wykrywania twarzy na obrazach. Gdy dodasz ?fit=smart do dowolnego URL-a, region przycinania jest przesuwany, aby wycentrować wykryte twarze, zamiast używać centrum geometrycznego. Jeśli nie znaleziono twarzy, następuje powrót do standardowego centralnego przycinania.
Czy mogę generować gradientowe obrazy placeholder bez przesyłania zdjęć?
Tak. Endpoint /gradient/{width}/{height}/{from}/{to} generuje obrazy gradientowe całkowicie z parametrów URL. Nie są wymagane przesłane obrazy. Możesz też tworzyć placeholdery SVG za pomocą /svg/{width}/{height}.
Jak wygenerować obrazy placeholder o rozmiarze Instagram Story przez API?
Użyj endpointu preset: /preset/instagram-story/{category}. Zwraca obraz 1080x1920. Połącz z ?format=webp&quality=70 dla zoptymalizowanej dostawy i ?fit=smart dla bezpiecznego przycinania portretowego.
Czy PlacePix obsługuje pamięć masową zgodną z S3?
Tak. PlacePix działa z OVHcloud Object Storage, AWS S3, MinIO i każdym dostawcą zgodnym z S3. Skonfiguruj endpoint, bucket, klucz dostępu i klucz tajny za pomocą zmiennych środowiskowych.
Jakie formaty wyjściowe są obsługiwane?
WebP, AVIF, JPEG, PNG, SVG i base64 JSON. Użyj .webp, .avif lub .png jako rozszerzenie pliku, lub dodaj ?format=webp jako parametr zapytania. AVIF produkuje najmniejsze pliki; PNG jest bezstratny.
Czy PlacePix jest darmowy do użytku komercyjnego?
Tak. PlacePix jest wydany na licencji MIT i jest darmowy zarówno do użytku osobistego, jak i komercyjnego. Ponieważ jest samodzielnie hostowany, nie ma limitów użytkowania, kluczy API ani płatności za żądanie.