Посібник розробника PlacePix
Повний довідник по API та документація функцій для самостійно розміщеного сервісу зображень placeholder. Охоплює розгортання Docker, розумну обрізку, градієнтні плейсхолдери, генерацію SVG, літерні аватари та пресети для соціальних мереж.
Що таке PlacePix?
PlacePix — це self-hosted сервіс placeholder-зображень, створений для розробників та дизайнерських команд. На відміну від сторонніх placeholder-сервісів, які потребують зовнішніх мережевих викликів і можуть зникнути, PlacePix працює повністю на вашій власній інфраструктурі. Помістіть зображення в папки, і миттєво отримайте URL-ендпоїнти, які обслуговують зображення зі зміненим розміром, відфільтровані та відформатовані.
Сервіс написаний на Python з використанням FastAPI з обробкою зображень на основі Pillow та OpenCV. Він підтримує розгортання Docker та S3-сумісне об'єктне сховище.
Можливості
- Нульова конфігурація — помістіть зображення в папки та йдіть
- Обрізка з розпізнаванням облич — OpenCV виявляє та центрує обличчя
- Gradient та SVG placeholder — зображення не потрібні
- Пресети соціальних мереж — розміри Instagram, YouTube, TikTok вбудовані
- Пошук за кольором — знайдіть зображення, що відповідають палітрі вашого бренду
- Літерні аватари — детерміновані зображення профілю з імен
Посібник з розгортання Docker
Найшвидший спосіб запустити PlacePix — за допомогою Docker. Одна команда розгортає весь сервіс з розумним скануванням, вилученням кольорів та вбудованим URL-білдером.
Розгортання одним рядком
docker run -d -p 3000:3000 \
-v ./images:/app/images \
riadvice/placepix:latest
Docker Compose (Рекомендовано)
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
Постійні дані та середовище
Mount both /app/images (your image library) and /app/data (scan cache and metadata) to preserve state across container restarts. Configure behavior via environment variables or a .env file.
Сховище OVHcloud, сумісне з S3
PlacePix supports any S3-compatible backend. For OVHcloud Object Storage, set:
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
Розумна обрізка з розпізнаванням облич
Стандартне центральне обрізання може розрізати обличчя в портретній фотографії. PlacePix вирішує це за допомогою розумного обрізання з розпізнаванням облич на базі каскадів Хаара OpenCV.
Як це працює
Коли запит включає ?fit=smart, PlacePix сканує зображення на наявність людських облич за допомогою OpenCV. Якщо обличчя виявлено, вікно обрізання зміщується так, щоб центроїд обличчя знаходився якомога ближче до точок перетину золотого перетину. Якщо обличчя не знайдено, відбувається повернення до стандартного центрального обрізання.
Приклади API
# Face-aware crop (detects and centers faces)
/400/300/people?fit=smart
# Standard center crop
/400/300/people?fit=crop
# Cover fill (may stretch)
/400/300/people?fit=cover
# Contain (letterboxing)
/400/300/people?fit=contain
Коли використовувати розумну обрізку
- Портретна фотографія та знімки голови
- Сторінки команд, де обличчя мають значення
- Мініатюри соціальних мереж
- Будь-який сценарій, де геометричне центральне обрізання псує композицію
API градієнтних плейсхолдерів
Generate linear and radial gradient images on the fly without uploading any assets. Perfect for hero backgrounds, loading states, and design mockups.
Синтаксис ендпоінту
/gradient/{width}/{height}/{from_hex}/{to_hex}
Приклади
# Simple linear gradient (top to bottom)
/gradient/800/400/3b82f6/10b981
# 45-degree angled gradient
/gradient/800/400/e11d48/f59e0b?angle=45
# Radial gradient from center
/gradient/800/400/1e293b/64748b?gradient_type=radial
# With output format
/gradient/800/400/0ea5e9/ffffff?format=webp&quality=80
Довідник параметрів
{from_hex}/{to_hex}— hex colors without the # prefix?angle=45— linear angle in degrees (0-360)?gradient_type=radial— switches to radial gradient?format=webp— WebP output (smaller file size)
Генератор SVG-плейсхолдерів
SVG плейсхолдери не вимагають обробки зображень на стороні сервера. Вони генеруються як inline SVG з налаштовуваним кольором фону, кольором переднього плану та текстовою міткою.
Ендпоінт
/svg/{width}/{height}?bg={hex}&fg={hex}&text={label}
Приклади
# 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
Чому SVG?
- Розмір файлу менше 500 байт
- Безмежно масштабований без втрати якості
- Нульові накладні витрати на обробку сервером
- Ідеально для wireframes та low-fidelity прототипів
Пресети для соціальних мереж
PlacePix включає попередньо визначені розміри для популярних соціальних платформ та розмірів екранів. Використовуйте їх для створення зображень плейсхолдерів ідеального розміру для Instagram, YouTube, TikTok, LinkedIn, X (Twitter) та стандартних дисплеїв.
/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
Screen Sizes
/preset/mobile/nature # 375x812
/preset/tablet/nature # 768x1024
/preset/desktop/nature # 1920x1080
/preset/4k/nature # 3840x2160
Додатковий випадок використання: API Instagram Story
Якщо ви створюєте інструмент управління соціальними мережами і потребуєте зображень placeholder розміру Instagram story, використовуйте /preset/instagram-story/{category}. Поєднайте з ?fit=smart для портретних фото та ?format=webp&quality=70 для оптимізованої доставки.
API пошуку за кольором
Кожне зображення в PlacePix сканується на наявність 3 основних кольорів. Ви можете шукати всю бібліотеку за hex кольором, щоб знайти зображення, які відповідають палітрі вашого бренду.
Ендпоінти
# Отримати зображення з конкретним hex кольором
/color/0ea5e9/400/300
# Фільтрувати будь-який ендпоінт за домінантним кольором
/400/300/nature?color=d97706
# Перелік всіх зображень з відповідним кольором
/api/color/3b82f6
Як працює сканування кольорів
При запуску PlacePix витягує найчастіші кольори з кожного зображення за допомогою кластеризації k-means у LAB колірному просторі. Це дає перцептивно точні збіги, а не сирі RGB середні значення. Сторінка палітри (/palette) візуалізує ці кольори та дозволяє переглядати за категоріями відтінків.
Фільтрація за орієнтацією
Фільтруйте випадкові зображення за їхнім вихідним співвідношенням сторін перед вибором. Це корисно, коли вам потрібні зображення, які природно вписуються в макет — альбомна для заголовків, портретна для карток або квадратна для мініатюр.
Кінцеві точки
# 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
Конфігурація
Допуск squarish налаштовується через змінну середовища ORIENTATION_SQUARISH_TOLERANCE (за замовчуванням: 0.15). Значення 0.15 означає, що зображення зі співвідношенням сторін між 0.85 і 1.15 вважаються квадратними. Встановіть 0.0 для точного 1:1.
Як це працює
PlacePix зчитує розміри зображень із заголовків файлів під час початкового сканування (локальні файли) та під час фонового сканування метаданих (зображення S3). Розміри зберігаються в пам'яті та використовуються для фільтрації пула кандидатів перед випадковим або детермінованим вибором. Якщо запитано орієнтацію, але немає відповідних зображень, повертається 404.
Фільтри та ефекти
Застосовуйте фільтри та ефекти в реальному часі до будь-якого зображення через параметри запиту. Вся обробка виконується на стороні сервера та кешується для наступних запитів.
Корекція кольору
?grayscale=1 # Black & white
?sepia=1 # Warm sepia tone
?tint=0ea5e9 # Hex color overlay
?brightness=1.3 # 0.0 to 2.0
?contrast=1.2 # 0.0 to 2.0
?saturation=2.0 # 0.0 to 2.0
?invert=true # Invert colors
?posterize=4 # Color levels (1-8)
?duotone=ff0000,0000ff # Two-color map
Ефекти зображення
?blur=2 # Gaussian blur (1-10)
?sharpen=1.5 # Sharpen amount
?emboss=true # 3D relief
?edges=sobel # Edge detection
?edges=canny # Canny edges
?halftone=4 # Dot pattern
?oil_painting=true # Oil painting style
?pencil_sketch=true # Pencil sketch
?cartoon=true # Cartoon effect
?vignette=0.5 # Darken edges (0-1)
Параметри накладання
?text=Hello+World # Text overlay
?border=4,ffffff # Border width & color
?watermark=1 # Apply configured watermark
?padding=20 # Internal padding
Генератор Аватарів
Створюйте детерміновані аватари з будь-якого імені або email. PlacePix підтримує два типи аватарів: Літерний аватар (кольорові ініціали) та Multiavatar (мультикультурні векторні аватари).
Endpoint
/avatar/{size}/{name}
/avatar/{size}/{name}.{ext}
Параметри
type— avatar type:letter(default) ormultiavatarsize— pixel size (e.g.64,128,256)name— any string; used as seed for the avatar
Літерний аватар (type=letter)
circle— crop to a circle shapeborder={width}— додати рамкуborder_color={hex}— колір рамкиbg={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)
Приклади
# 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
Чому використовувати літерні аватари?
- Нуль зовнішніх залежностей — жодного Gravatar або стороннього сервісу аватарів
- Детермінований — одне й теж саме ім'я завжди дає той самий колір
- Підтримка SVG — нескінченно масштабований, ідеальний для HiDPI-дисплеїв
- Шість вбудованих кольорових палітр для будь-якої естетики бренду
Чому використовувати Multiavatar?
- 12 мільярдів унікальних мультикультурних аватарів
- Детермінований — одне й теж саме ім'я завжди дає той самий аватар
- Чистий SVG-вивід — малий розмір файлу, нескінченно масштабований
- Зовнішні API-виклики не потрібні
Швидкий довідник REST API
Всі ендпоїнти підтримують CORS і повертають зображення з довгостроковими заголовками кешу. Вивід Base64 JSON доступний для малих мініатюр.
Image Endpoints
GET /{width}/{height}/{category}— Випадкове зображення з категоріїGET /{width}/{height}— Випадкове зображення з усіх категорійGET /id/{id}/{width}/{height}— Конкретне зображення за IDGET /ratio/{ratio}/{width}/{category}— Зображення зі співвідношенням сторінGET /preset/{preset}/{category}— Пресет для соціальних мережGET /color/{hex}/{width}/{height}— Зображення з відповідним кольоромGET /gradient/{w}/{h}/{from}/{to}— Градієнтне зображенняGET /svg/{width}/{height}— SVG плейсхолдерGET /avatar/{size}/{name}— Літерний аватар (PNG/SVG)
Metadata Endpoints
GET /api/images— Список категорій та підсумківGET /api/info/id/{id}— Метадані зображення (розміри, кольори, формат)GET /api/color/{hex}— Зображення з відповідним кольором
Health Endpoints
GET /health— Liveness проба (Docker/K8s)GET /ready— Readiness проба (503 поки зображення не завантажені)
Експертиза та рекомендації
- Активні учасники екосистеми open-source з 2008 року
- Увесь код є відкритим під ліцензією MIT і доступний для аудиту на GitHub
Часті запитання
Як розгорнути PlacePix за допомогою Docker?
Запустіть docker run -d -p 3000:3000 -v ./images:/app/images riadvice/placepix:latest. Змонтуйте папку зображень і сервіс запуститься негайно з увімкненим розумним скануванням.
Що таке розумна обрізка з розпізнаванням облич?
PlacePix використовує каскади Хаара OpenCV для виявлення облич на зображеннях. Коли ви додаєте ?fit=smart до будь-якого URL, область обрізки зміщується до центру на виявлених обличах, а не використовує геометричний центр. Якщо облич не знайдено, він повертається до стандартного центрального обрізання.
Чи можу я генерувати градієнтні placeholder-зображення без завантаження фотографій?
Так. Ендпоїнт /gradient/{width}/{height}/{from}/{to} генерує градієнтні зображення повністю з URL-параметрів. Завантажені зображення не потрібні. Ви також можете створити SVG placeholder з /svg/{width}/{height}.
Як я можу генерувати placeholder-зображення розміру Instagram story через API?
Використовуйте preset ендпоїнт: /preset/instagram-story/{category}. Це повертає зображення 1080x1920. Поєднайте з ?format=webp&quality=70 для оптимізованої доставки та ?fit=smart для безпечного портретного обрізання.
Чи підтримує PlacePix сховище об'єктів, сумісне з S3?
Так. PlacePix працює з OVHcloud Object Storage, AWS S3, MinIO та будь-яким S3-сумісним провайдером. Налаштуйте ендпоїнт, бакет, ключ доступу та секретний ключ через змінні середовища.
Які формати виведення підтримуються?
WebP, AVIF, JPEG, PNG, SVG та base64 JSON. Використовуйте .webp, .avif або .png як розширення файлу, або додайте ?format=webp як параметр запиту. AVIF створює найменші файли; PNG є безвтратним.
PlacePix безкоштовний для комерційного використання?
Так. PlacePix випущено під ліцензією MIT і безкоштовно як для особистого, так і для комерційного використання. Оскільки це self-hosted, немає обмежень на використання, немає API-ключів і немає тарифікації за запит.