наживо Медіа-хост для застосунків, вітрин і маркетплейсів
Зображення і відео у кожному потрібному розмірі на вашому домені
Надішліть оригінал одним підписаним запитом. keepix зробить іменовані варіанти, розкладе відео на сходинки якості, зніме метадані й віддасть усе це з вашого піддомену — з вічним кешем і без жодного походу в чужий інтернет.
- 1 ГБ безкоштовно, без картки
- WebP q82 і HLS
- Нуль сторонніх запитів
- 696 423файлів на зберіганні
- 701 714варіантів зібрано
- 40 GBваріантів готові до віддачі
- 424робіт на стоку
- 0сторонніх запитів
наживо Прямо з бази сервісу, перезбирається щогодини — востаннє о 01:25 UTC.
Що відбувається під час приймання
Шість кроків, з яких не вистрибнеш
На сервісі лежать файли, які надіслали люди: фото у відгуках, відеоогляди. Усе нижче написано заради них, а не для годиться.
- 00 Підписаний запит Один POST з оригіналом у тілі й підписом HMAC над методом, шляхом, часом і хешем тіла.
- 01 Тип визначається розбором За вмістом, а не за розширенням і не за словами клієнта. Розширення файлу на виході ставимо ми.
-
02
Перевірка на віруси
Сканер недоступний — приймання відмовляє з
503, а не пропускає файл. - 03 Перекодування Зображення ніколи не віддається таким, яким прийшло. Жоден байт надісланого файлу не йде назовні.
- 04 Метадані знімаються EXIF і GPS не переживають перекодування. Це вбудовано в шлях, а не залишено на того, хто завантажує.
- 05 Адреси у відповіді Адресу оголошує сервіс. Ви її зберігаєте й ніколи не обчислюєте.
SVG не приймається і не віддається. Ніколи.
Ні на вході, ні на виході: це виконувана розмітка, а не картинка. Усередині може жити скрипт, і він виконається в браузері читача від імені вашого домену. Перевірка йде двічі — за типом вмісту і за початком файлу. Як улаштовано приймання.
Що він уміє
Усе, що сервіс робить з вашим файлом
І рівно стільки: ні каталогу товарів, ні відгуків, ні учасників — лише байти, адреси й варіанти.
-
Іменовані варіанти
thumb400,card1000,full1400 — WebP з якістю 82. Варіант просять за ім’ям, а не числом пікселів:?w=473— це і вибух кешу, і безкоштовний спосіб зайняти процесор. -
Відео цілим набором
HLS до трьох сходинок, кадр-обкладинка з початку ролика, беззвучний кліп перших секунд і прогресивний MP4 для старих клієнтів. Входить у платні тарифи.
-
Ваш домен, а не наш
Файли віддаються з
img.вашдомен. Читач бачить вашу адресу і ваш бренд. На безкоштовному тарифі домен спільний. -
Адреса живе разом із файлом
В адресі — хеш вмісту. Кеш тримається вічно, а замінене зображення доходить до читача одразу.
-
Медіатека без жодного коду
Теки, перетягування мишею, пошук за назвою, описом і тегами — прямо в кабінеті.
-
Два ключі, зміна без простою
У ході завжди два ключі підпису. Секрет показується один раз і панелі керування не передається.
-
Витрата видна по днях
Зберігання, трафік віддачі й операції рахуються з початку місяця, а понад пакет рахунок помітровий — до сотих цента. Кабінет малює це графіками, прогнозує кінець місяця й вивантажує кожен день у CSV.
-
Стерти звичайні завантаження людини
Один
eraseза вашимowner_ref— у відповіді число стертих об’єктів. Записи й байти йдуть одразу. Обмеження для стоку. -
Новий розмір без повторного завантаження
Оригінал лежить у холодному дереві й назовні не віддається. Новий варіант через рік збирається з нього.
-
Загубили адресу? Спитайте ще раз
resolveповертає адреси за вашим ключем — їх оголошує сервіс, вгадувати не треба. -
Він не ходить в інтернет
Сервіс не знає жодної сторонньої адреси й не тримає ваших записів: лише орендар, ключ, вид, байти, варіанти.
Один запит
Оригінал заходить. Адреси виходять.
Кожен приватний запит несе чотири заголовки й HMAC-SHA256 над методом, шляхом разом із рядком запиту, часом і хешем тіла. Вікно — 300 секунд; повтор підписується заново.
- Ідемпотентно: ті самі байти під тим самим ключем повертають ті самі адреси
- Відмова приходить з кодом, і в кожного коду одне англійське формулювання
-
reconcileзвіряє тисячу записів за запит
TS=$(date +%s); PATHQ="/api/v1/put?kind=media&key=48120&variants=card,full"
BH=$(sha256sum photo.jpg | cut -d' ' -f1)
SIG=$(printf 'POST\n%s\n%s\n%s' "$PATHQ" "$TS" "$BH" \
| openssl dgst -sha256 -hmac "$KP_SECRET" -hex | sed 's/.*= //')
curl -X POST "https://keepix.cloud$PATHQ" \
-H "X-Media-Tenant: $KP_TENANT" -H "X-Media-Key-Id: $KP_KEYID" \
-H "X-Media-Ts: $TS" -H "X-Media-Sign: $SIG" \
--data-binary @photo.jpg
$path = '/api/v1/put?kind=media&key=48120&variants=card,full';
$body = file_get_contents('photo.jpg');
$ts = (string) time();
$sign = hash_hmac('sha256', "POST\n$path\n$ts\n" . hash('sha256', $body), $secret);
$ch = curl_init('https://keepix.cloud' . $path);
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-Media-Tenant: $tenant", "X-Media-Key-Id: $keyId",
"X-Media-Ts: $ts", "X-Media-Sign: $sign"],
]);
$variants = json_decode(curl_exec($ch), true)['variants'];
import { createHash, createHmac } from 'node:crypto';
import { readFile } from 'node:fs/promises';
const path = '/api/v1/put?kind=media&key=48120&variants=card,full';
const body = await readFile('photo.jpg');
const ts = String(Math.floor(Date.now() / 1000));
const bh = createHash('sha256').update(body).digest('hex');
const sign = createHmac('sha256', secret).update(`POST\n${path}\n${ts}\n${bh}`).digest('hex');
const res = await fetch('https://keepix.cloud' + path, { method: 'POST', body,
headers: { 'X-Media-Tenant': tenant, 'X-Media-Key-Id': keyId, 'X-Media-Ts': ts, 'X-Media-Sign': sign } });
const { variants } = await res.json();
Тарифи
Пакет задає, що входить
Понад нього — помітрова оплата, і лише на платних тарифах. На безкоштовному приймання зупиняється, а не починає тихо витрачати ваші гроші.
Free
- 1 ГБ місця
- 5 ГБ трафіку віддачі
- 500 операцій
- файл до 25 МБ
- без відео
Start
- 10 ГБ місця
- 40 ГБ трафіку віддачі
- 10 000 операцій
- файл до 100 МБ
- відео та HLS
Pro
Популярний- 25 ГБ місця
- 100 ГБ трафіку віддачі
- 100 000 операцій
- файл до 512 МБ
- відео та HLS
Business
- 100 ГБ місця
- 400 ГБ трафіку віддачі
- 1 000 000 операцій
- файл до 2 ГБ
- відео та HLS
Питання
Що питають до першого файлу
Чому не можна попросити довільну ширину на кшталт ?w=473?
Бо кожна окрема ширина — це новий файл, який треба зробити, зберегти й закешувати. Відкритий набір — це і вибух кешу, і безкоштовний спосіб зайняти процесор. Набір іменований і скінченний — thumb, card, full, — і потрібний обирають за ім’ям. Сторінка варіантів показує, який із них потрібен блоку заданої ширини.
Оригінал зберігається?
Так, у холодному дереві, і назовні він не віддається ніколи. Саме для цього його й тримають: коли через рік знадобиться новий варіант, він збирається з оригіналу, і файл не доведеться надсилати знову.
Чи можна віддавати файли з мого домену?
На платних тарифах — так, з піддомену на кшталт img.вашдомен. Читач бачить вашу адресу
і ваш бренд. На безкоштовному тарифі домен віддачі спільний.
Що буде, коли я вийду за пакет?
На платних тарифах надлишок рахується помітрово, до сотих цента за гігабайт і операцію. На безкоштовному приймання просто зупиняється: нічого не починає тихо витрачати ваші гроші.
Як стерти завантаження однієї людини?
Один POST /api/v1/erase з вашим owner_ref. Рядки й байти на диску зникають
одразу, а відповідь називає число стертих об’єктів. Див. Файли і люди. Файли стоку захищені й після зняття з вітрини; див. правило 409.
Надішліть перший файл — адреси прийдуть у відповіді
Безкоштовний тариф: 1 ГБ сховища, картка не потрібна. Решта — коли пакет стане тісним.