Проблема: клиент хочет увидеть результат на своём автомобиле
Студия оклейки, тонировки или установки защитной плёнки продаёт то, что клиент не может увидеть, пока работа не выполнена. В портфолио — чужие машины. Образец производителя показывает материал на плоской карточке. Продажу закрывает собственный M4 2021 года клиента именно в том сатиновом сером цвете, в котором он сомневается, — а такой фотографии не существует, потому что работа ещё не сделана.
Тот же пробел проявляется и дальше по цепочке. Раскройщику плёнки нужен чистый контур переднего бампера для модельного года, которого ещё нет в библиотеке лекал. Конфигуратору нужно вращающееся изображение автомобиля в базовом цвете, поверх которого дизайнер сможет нанести свою окраску. Всем троим нужно одно и то же: студийное изображение конкретной марки, модели и года в выбранном ими цвете и без какого-либо фона.
Три способа использования рендеров в мастерских
Интеграции для оклейки, тонировки и защитной плёнки, уже работающие с API, решают три задачи, иногда все три сразу:
- Белая основа, а поверх — материал. Отрендерите модельный год клиента в
color=whiteна прозрачном PNG и наложите на него плёнку, тонировку или печатный дизайн прямо в браузере. Альфа-канал PNG — это контур автомобиля. - Цвет по hex-коду. Для однотонной оклейки плёнкой или перекраски обойдитесь без наложения слоёв:
color=686c70возвращает автомобиль уже в этом цвете, не затрагивая стёкла и колёса, как одно изображение автомобиля — так же, как пресет. - 3D-модель для вращающегося просмотра.
POST /api/v1/3dсоздаёт текстурированные GLB, USDZ и FBX автомобиля в выбранном цвете — один раз для каждого автомобиля и цвета. К опубликованной модели прилагается код встраивания из двух строк для страницы с расчётом стоимости и USDZ, который клиент может открыть в AR на iPhone.
Одна мастерская запускает свои пакеты через коннектор ChatGPT, а не через код, — это четвёртый сценарий, которому ниже посвящён отдельный раздел.
Белый базовый рендер и материал поверх него
Оклейка заменяет краску, поэтому начинайте с минимума краски. color=white даёт самый светлый нейтральный кузов с сохранённым студийным освещением; прямой вид side показывает максимум боковины при минимальных перспективных искажениях — именно это нужно для предпросмотра материала. Запрашивайте png (или webp), чтобы сохранился альфа-канал, и максимальный размер, 1024, чтобы предпросмотр можно было увеличивать.
# the customer's exact model year, in white: the base every material goes on top of
curl --fail-with-body -H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
"https://carimage.dev/api/v1/images/car?vehicle=veh_0ta0ejj0qad2w&view=side&color=white&w=1024&format=png" \
-o m4-side-white.png
# a solid-color wrap or a factory paint, by hex: the API recolors the paint and leaves glass, trim and wheels alone
curl --fail-with-body -H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
"https://carimage.dev/api/v1/images/car?vehicle=veh_0ta0ejj0qad2w&view=side&color=686c70&w=1024&format=png" \
-o m4-side-nardo.pngДля текстурного материала наложение — это несколько строк кода на canvas: рендер рисуется один раз как маска, материал наносится только там, где есть автомобиль, а затем рендер рисуется ещё раз в режиме multiply, чтобы светотень и отражения проступили сквозь материал.
// A textured material (carbon, chrome, a printed design) goes on in the browser.
// The white render is the mask: paint the material only where the car is, then let
// the render's own shading through.
const car = await loadImage(whiteBaseUrl); // transparent PNG from the API
const ctx = canvas.getContext("2d");
canvas.width = car.width;
canvas.height = car.height;
ctx.drawImage(car, 0, 0);
ctx.globalCompositeOperation = "source-atop"; // keep the car's alpha
ctx.fillStyle = ctx.createPattern(materialSwatch, "repeat");
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.globalCompositeOperation = "multiply"; // shading, reflections and panel lines come back
ctx.drawImage(car, 0, 0);
// The whole silhouette is covered, glass and wheels included: the API ships the car's
// alpha, not per-panel masks. Good enough for a quote; a solid color should use color=<hex> instead.Подбор цвета краски или плёнки по hex-коду
С тех пор как цвета кузова стали перекраской одного нейтрального рендера, color принимает любой шестизначный hex-код наряду с названиями готовых цветов (15): color=686c70 без решётки в URL, "color": "#686c70" в JSON. Найдите образец цвета производителя или заводской код краски клиента и передайте его. Перекраска применяется только к кузову, поэтому стёкла, фары, отделка и колёса остаются как есть — именно этим превью оклейки отличается от тонированной фотографии. Каждый hex-код — это ещё один кэшируемый вариант и одно изображение автомобиля за месяц, так что палитра из двадцати вариантов для одного автомобиля в одном ракурсе — это двадцать изображений автомобилей.
3D-модель для обзора на 360° и AR
Когда на странице с расчётом стоимости автомобиль должен вращаться, закажите модель. POST /api/v1/3d принимает id автомобиля и цвет, списывает 100 кредитов и создаёт текстурированный GLB, его версию для браузера, USDZ и FBX, а также миниатюру. Первая модель автомобиля создаётся за 10–20 minutes; каждый следующий цвет того же автомобиля перетекстурирует ту же сетку за 1–2 minutes. Повторный заказ автомобиля и цвета, которые у вас уже есть, бесплатен (billing.already_owned: true), поэтому мастерская может строить конфигуратор на одной и той же белой основе для каждого заказа.
curl -X POST https://carimage.dev/api/v1/3d \
-H "Authorization: Bearer $CAR_IMAGE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: wrap-quote-4471" \
-d '{"vehicle": "veh_0ta0ejj0qad2w", "color": "white", "publish": true}'{
"data": {
"id": "8c1d6b8e-2b4a-4f6e-9a2e-1f3c5d7e9b01",
"object": "3d_model",
"status": "queued",
"progress": 0,
"vehicle": {
"id": "veh_0ta0ejj0qad2w",
"make": "bmw",
"model": "m4",
"year": 2021
},
"color": "white",
"files": null,
"public": {
"id": "m3d_…",
"url": "https://carimage.dev/api/v1/3d/public/m3d_…",
"files": null,
"embed": {
"script": "https://carimage.dev/embed/3d.js",
"html": "<script src=\"https://carimage.dev/embed/3d.js\" async></script>\n<car-3d model=\"m3d_…\"></car-3d>"
}
}
},
"billing": {
"charged_on": "creation",
"credits_charged": 100,
"credits_remaining": 24900,
"already_owned": false
},
"request_id": "req_01j9y…"
}publish: true даёт модели URL без ключа на нашей CDN и код для встраивания ещё до того, как она будет готова; элемент показывает прогресс, пока файлы не загрузятся. Задайте в view любой из девяти ракурсов камеры для начального кадра, spin — для вращения на поворотном столе, backdrop — для студийного пола, а ar — чтобы предложить USDZ для iPhone и GLB для Android через встроенный в браузер AR-просмотрщик. FBX — для дизайнера: откройте его в Blender или в программе для дизайна оклейки, нанесите рисунок на UV-развёртку, и клиент увидит собственный дизайн на собственном автомобиле.
<script src="https://carimage.dev/embed/3d.js" async></script>
<car-3d model="m3d_…" view="front-3-4" spin backdrop="studio" ar alt="2021 BMW M4 in white"></car-3d>Запуск пакетной обработки из ChatGPT или Claude
Не в каждой мастерской есть разработчик, и одна из самых активных интеграций с API — это оператор, который просит рендеры у ассистента. Добавьте https://carimage.dev/api/mcp как коннектор (ChatGPT и Claude входят через OAuth, а человек подтверждает разрешения на экране), и ассистент получит те же инструменты, что и программа: resolve_vehicle, чтобы превратить «2014 Audi S3 cabriolet, grey, side» в точные параметры, get_car_image для одного рендера, create_car_image_urls для получения до пятидесяти подписанных URL за один вызов и create_3d_model для 3D-модели на поворотном столе.
Чтобы пакетная обработка через ассистента прошла гладко, важны две вещи:
- Передавайте
idempotency_keyдля каждого пакета. Ассистенты повторяют запросы. С ключом повторный вызовcreate_car_image_urlsвоспроизводит первый результат (idempotent_replayed: true) и ничего не списывает. - Учитывайте бюджет рендеринга, а не только ограничение частоты запросов. Ракурсы автомобилей, которые ещё никто не запрашивал, сначала нужно подготовить, и на это расходуется дневная доля мощностей подготовки вашего аккаунта (10% на Pro). Партия из нескольких сотен новых автомобилей в трёх ракурсах может её исчерпать; тогда инструмент ответит временем повтора и
reset_at, плата не взимается, а кэшированные изображения продолжают выдаваться. Растяните партию на вечер-другой или перейдите на Business, чтобы получить большую долю.
Настройка для каждого клиента и полный список инструментов — на странице MCP.
CLI, SDK и MCP
# the white base and a hex paint, straight to files
npx @meterapp/car-image get --vehicle veh_0ta0ejj0qad2w --view side --color white --width 1024 --out m4-side-white.png
npx @meterapp/car-image get --vehicle veh_0ta0ejj0qad2w --view side --color 686c70 --width 1024 --out m4-side-nardo.png
# the 3D model: published at once, polled until ready, every file downloaded
npx @meterapp/car-image 3d create --vehicle veh_0ta0ejj0qad2w --color white --publish --wait --out ./modelsimport { CarImageClient } from "@meterapp/car-image-sdk";
const client = new CarImageClient({ apiKey: process.env.CAR_IMAGE_API_KEY });
// 100 credits the first time. Ordering the same vehicle in the same color again
// answers billing.already_owned: true and charges nothing.
const { data: model } = await client.create3dModel({ vehicle: "veh_0ta0ejj0qad2w" }, { color: "white", publish: true });
const ready = await client.wait3dModel(model.id, { onProgress: (m) => console.log(m.stage, m.progress) });
// FBX for the designer's tool of choice, USDZ for the customer's iPhone, glb_web for the page.
const fbx = await client.download3dModel(ready.id, "fbx");
const embedHtml = ready.public?.embed.html;- MCP:
get_car_imageиcreate_car_image_urlsв основном наборе инструментов,create_3d_model,get_3d_modelиpublish_3d_model— с?toolset=all; каждый инструмент для изображений принимаетvehicleи hex-значениеcolor. - Документация по 3D описывает webhooks (один подписанный POST, когда модель готова), размеры файлов и все атрибуты встраивания; раздел Цвета на странице «Изображения» описывает правила окраски.
Часто задаваемые вопросы
- Стоит ли произвольный цвет в HEX дороже готового?
- Нет. Каждый цвет — это перекраска одного подготовленного ракурса этого автомобиля, поэтому пресет, найденный вами заводской код и образец цвета производителя плёнки засчитываются как одно изображение автомобиля. Hex-код, совпадающий с образцом пресета, и есть этот пресет.
- Достаточно ли точен рендер, чтобы по нему кроить плёнку?
- Нет. Рендеры — это студийные визуализации марки, модели и года, а не данные CAD и не фотографии производителя: каталог не различает комплектации, а линии панелей могут отличаться на двух видах одного и того же автомобиля. Используйте их, чтобы показать клиенту его автомобиль и рассчитать стоимость работ; лекала для раскроя делайте по шаблону или по самому автомобилю.
- Можно ли получить автомобиль без краски или только стёкла?
- Ближе всего к заготовке — color=white на прозрачном PNG, а альфа-канал PNG — это силуэт автомобиля. API не предоставляет маски для отдельных панелей или стёкол. Для однотонной оклейки поручите работу color=<hex>: он перекрашивает кузов, оставляя стёкла, декоративные элементы и колёса без изменений.
- Какие ракурсы использовать для расчёта тонировки или защитной плёнки?
- Прямые ракурсы: side (или side-right) — для боковых стёкол и боковин, front — для полосы на лобовом стекле, капота и бампера, rear — для заднего стекла. Лучше всего клиенты реагируют на ракурсы в три четверти, поэтому используйте front-3-4 для главного изображения, а прямые ракурсы — рядом с позициями сметы.
- Принадлежит ли нам 3D-модель?
- Она лицензируется так же, как рендеры: оплачивается один раз за каждый автомобиль и цвет в рамках аккаунта, повторный заказ бесплатен, её можно использовать в вашем продукте и хранить на своих серверах, в том числе после окончания тарифа. Каждый следующий цвет уже имеющегося у вас автомобиля накладывает новую текстуру на ту же сетку, а публикация бесплатно даёт модели URL без ключа и код для встраивания.