Skip to main content

Imager Client

Клиентская библиотека микросервиса Imager для четырёх языков — Python, PHP, TypeScript и Go — с идентичным поведением на всех платформах. Строит пути и URL ассетов (превью, размеры, форматы, retina) и вызывает админ-методы генерации/удаления.

Для работы нужен настроенный и запущенный микросервис Imager.

Основной репозиторий: GitVerse · Зеркало: GitHub

Документация: RU / EN


Почему Imager Client

  • Один API — четыре языка. Все реализации дают побайтово идентичный JSON-результат на едином наборе golden-тестов: можно строить URL на бэкенде (PHP, Python, Go, Node) и на фронтенде (TS) без расхождений.
  • Zero-dependency. Ни одного внешнего пакета: только стандартная библиотека каждого языка (urllib, curl, fetch, net/http).
  • Мгновенно. Клиентские методы — чистые функции конкатенации строк: без HTTP, без валидации, без исключений. Генерация миллиона ассетов — практически мгновенно.
  • Безопасные секреты. В TypeScript админ-методы вынесены в отдельный серверный импорт imager-client/server: токен физически не может попасть в браузерный бандл.
  • Гибкие параметры. Сегмент размера можно передавать строкой, объектом или массивом; dpr — числом или строкой; формат — одним или списком.

Установка

Язык Пакет Команда
Python imager_client (PyPI) pip install imager_client
PHP pkg-ru/imager-client (Composer) composer require pkg-ru/imager-client
TypeScript imager-client (npm) npm install imager-client
Go gitverse.ru/pkg-ru/imager-client go get gitverse.ru/pkg-ru/imager-client

Фреймворк-компоненты

Тонкие обёртки над ядром для популярных фреймворков: вся логика (сегменты, dpr, форматы, srcset) — в ядре, компоненты нормализуют алиасы props (src→source, preset→segment, width/height→сегмент) и рендерят нативные узлы фреймворка.

Пакет Экосистема Компоненты Документация
@pkg-ru/imager-react npm, peer: react ≥17 ImagerPlugin, ImagerProvider, ImagerAssets, ImagerAsset README
@pkg-ru/imager-vue npm, peer: vue ≥3.2 ImagerPlugin, ImagerProvider, ImagerAssets, ImagerAsset README
pkg-ru/imager-twig composer, twig ≥3 функции imager_assets, imager_asset, imager_assets_raw README

Пакеты самодостаточны: ядро встроено в бандл, imager-client — опциональный peerDependency (нужен только для своего инстанса, например ImagerServer с админ-методами).

// React: глобальная инициализация
ImagerPlugin.install({ baseURL: "...", format: "webp", dpr: 2 });

<ImagerAssets src="/test.png" width={200} height={200} dpr={2} format="webp" alt="Фото" />
// Vue: глобальная инициализация через app.use
createApp(App).use(ImagerPlugin, { baseURL: "...", format: "webp", dpr: 2 }).mount("#app");
{# Twig: расширение с imager-сервисом #}
{{ imager_assets('/test.png', {preset: 'thumb', format: 'webp', alt: 'Фото'})|raw }}

Quick Start

Python

from imager import Imager

imager = Imager({"baseURL": "https://imgs.example.com/images/", "format": "webp"})

asset = imager.GetAsset("/test.gif", {"width": 200, "height": 200}, "gif", 2)
url = imager.GetAssetPath("/test.gif", "200x200", "webp")
# https://imgs.example.com/images/test-gif/200x200.webp

PHP

use imagerClient\Imager;

$imager = new Imager(["baseURL" => "https://imgs.example.com/images/", "format" => "webp"]);

$asset = $imager->GetAsset("/test.gif", ["width" => 200, "height" => 200], "gif", 2);
$url = $imager->GetAssetPath("/test.gif", "200x200", "webp");
// https://imgs.example.com/images/test-gif/200x200.webp

TypeScript

// Клиент (браузер) — без admin-методов и токена
import { Imager } from "imager-client";

const imager = new Imager({ baseURL: "https://imgs.example.com/images/", format: "webp" });
const asset = imager.GetAsset("/test.gif", { width: 200, height: 200 }, "gif", 2);
const url = imager.GetAssetPath("/test.gif", "200x200", "webp");
// https://imgs.example.com/images/test-gif/200x200.webp

// Сервер (Node) — только здесь доступны админ-методы
import { ImagerServer } from "imager-client/server";

const server = new ImagerServer({
    baseURL: "https://imgs.example.com/images/",
    token: "secret",
    adminURL: "https://imager.example.com",
});
await server.AdminGenerate("/test.gif", true);

Go

import imager "gitverse.ru/pkg-ru/imager-client/src/imager-go"

i := imager.New(imager.Options{
    BaseURL: "https://imgs.example.com/images/",
    Format:  "webp",
})

asset := i.GetAsset("/test.gif", imager.Size{Width: 200, Height: 200}, "gif", 2)
url := i.GetAssetPath("/test.gif", "200x200", "webp")
// https://imgs.example.com/images/test-gif/200x200.webp

Параметры методов

Метод Сигнатура Результат
GetAsset (source, segment?, format?, dpr?) один AssetType
GetAssets (source, segments?, formats?, dprs?) AssetType[] — декартово произведение segments × formats
GetAssetsHtml (source, segments?, formats?, dprs?, options?) string — HTML <picture>/<img>
GetAssetPath (source, segment?, format?, dpr?) string — URL основного варианта
AdminGenerate (target, wait?) bool — HTTP 200/202 (в TS — только ImagerServer)
AdminDelete (target, wait?) bool — HTTP 200 (в TS — только ImagerServer)

segment — четыре формы записи

"thumb"                       # строка как есть: именованный пресет
"200x200" | "200x" | "x200"   # строка-размер
{"width": 200, "height": 200} # объект; оба поля необязательны
[200, 200]                    # массив [width, height]; оба обязательны
— не задан                    # → "x"

format / formats — строка или список

"webp"                    # один формат
["webp", "gif"]           # список (для GetAssets)
— не задан                # → настройки imager (format / formats) → формат исходника

dpr — число или строка

2        # варианты без суффикса и @2
"3"      # строка-цифра: без суффикса, @2, @3
1        # один вариант с полем dpr: 1
0        # dpr не используется
> 3      # трактуется как 3
— не задан # → настройки imager (dpr)

Примеры разных вариантов вызова

imager.GetAsset("/test.gif")                       # минимальный: сегмент "x", формат исходника
imager.GetAsset("/test.gif", "thumb")              # именованный пресет
imager.GetAsset("/test.gif", {"width": 200})       # объект: только ширина → "200x"
imager.GetAsset("/test.gif", [200, 200])           # массив → "200x200"
imager.GetAsset("/test.gif", "200x200", "webp")    # + формат
imager.GetAsset("/test.gif", "200x200", "webp", 2) # + dpr (варианты без суффикса и @2)

imager.GetAssets("/test.gif", ["200x200", "x400"], ["webp", "gif"], "2")  # 4 ассета
imager.AdminGenerate("/test.gif", True)                   # по source
imager.AdminGenerate(asset)                               # по AssetType
imager.AdminDelete(["/path/a.webp", "/path/b.webp"])      # список готовых путей

Полное описание всех вариантов, структуры AssetType, MIME-таблица и правила формирования URL — в языковых доках: Python, PHP, TypeScript, Go.

Тесты

Единые golden-кейсы в test/fixture.json: все 4 языка дают побайтово идентичный JSON-результат для каждого кейса. Нормализация props фреймворк-компонентов — в test/fixture-components.json.

make test

или по языкам:

python test/test.py
php test/test.php
npm test
go run test/test.go

Фреймворк-пакеты:

make test-react test-vue test-twig

© 2025 Алтухов Владислав Владимирович

Metadata

Release files for imager-client 2.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for imager-client 2.0.3
File Size Uploaded
imager_client-2.0.3.tar.gz 95.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for imager-client 2.0.3
File Interpreter ABI Platform
imager_client-2.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 176.2 kB

Release files / imager_client-2.0.3.tar.gz

Download URL imager_client-2.0.3.tar.gz
Size 95.1 kB
Tags Source
SHA-256 checksum
How to use checksums
bd6267e63e7e5358f3497b0964b1281ea466f01af6c18c10cd94e30f921f76cc
BLAKE2b-256 checksum
How to use checksums
adb1999eb35593ffc8e88072d020ece16dd5b7d5dc11e31af11e8ae59576aeef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release files / imager_client-2.0.3-py3-none-any.whl

Download URL imager_client-2.0.3-py3-none-any.whl
Size 81.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9ba821c507501bc1cc16a00bfda497592db2d9467e9cc2987f137b2f81dcc5e7
BLAKE2b-256 checksum
How to use checksums
97a4bae85ec5a9d949a7ab1dc04b4328fe8c665395c4f58a4dca6e2190e42752
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release history Release notifications | RSS feed

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

This release

2.0.3 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page