问题:客户想看到在自己车上的效果
改色膜店、窗膜店或漆面保护膜安装商所卖的东西,客户在施工完成前无法看到。作品集展示的是别人的车。厂商的色卡只是把材料贴在一张平面卡片上。真正促成成交的,是客户自己的 2021 款 M4 换上他们正犹豫不决的那款缎面灰——而这样的照片并不存在,因为这项施工还没有进行。
同样的缺口在产业链下游也会出现。膜材切割商需要某个车型年份前保险杠的清晰轮廓,而图样库尚未覆盖该车型年份。配置器需要一个基础色车辆的转台展示,供设计师在其上重新上色。三者需要的是同一样东西:特定品牌、车型和年份的影棚图片,车漆颜色由他们自选,背景空无一物。
门店使用渲染图的三种方式
目前基于该 API 的改色膜、车窗膜和漆面保护膜集成主要做三件事,有时三件事同时进行:
- 先渲染白色底车,再叠加材质。以
color=white渲染客户车辆对应的车型年份,生成透明 PNG,然后在浏览器中将改色膜、车窗膜或印刷设计叠加在上面。PNG 的 Alpha 通道就是车辆轮廓。 - 按十六进制色值指定车漆。对于纯色改色膜或重新喷漆,无需合成:
color=686c70会直接返回已是该车漆颜色的车辆,玻璃和车轮保持不变,与预设颜色一样计为一张车辆图片。 - 用于转台展示的 3D 模型。
POST /api/v1/3d会以所选颜色生成该车辆带纹理的 GLB、USDZ 和 FBX 文件,每种车辆和颜色只需生成一次。已发布的模型附带可嵌入报价页面的两行代码,以及客户可在 iPhone 上以 AR 方式打开的 USDZ 文件。
有一家店铺通过 ChatGPT 连接器而非代码来运行批量任务,这是第四种模式,值得在下文单独介绍。
白色底图渲染,再叠加材料
改色膜会取代原车漆,因此应从尽可能少的车漆出发。color=white 可提供最明亮的中性车身,同时保留影棚光影;正侧面的 side 视角展示的侧身面积最大、透视缩短最少,这正是材质预览所需要的。请请求 png(或 webp)格式以保留 alpha 通道,并选择最大尺寸 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.按十六进制色值匹配车漆或改色膜颜色
自从车漆改为基于同一张中性渲染图重新着色后,color 除了 15 个预设名称外,还接受任意六位十六进制值:在 URL 中直接写 color=686c70,在 JSON 中写 "color": "#686c70"。查到厂商的色样或客户的原厂漆代码,传入即可。重新着色只作用于车漆,玻璃、灯具、饰条和轮毂保持原样,这正是贴膜预览与整体调色照片的区别所在。每个十六进制值都会多一个缓存变体,并计为本月的一张车辆图片,因此为一辆车的一个视角试 20 种候选颜色,就是 20 张车辆图片。
用于转台展示和 AR 的 3D 模型
当报价页面需要让车辆旋转展示时,请订购一个模型。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 会在我们的 CDN 上为模型生成无需密钥的 URL 和嵌入代码,甚至在模型就绪之前即可使用;文件到位前,该元素会显示进度。将 view 设为九个机位角度中的任意一个作为开场镜头,设置 spin 实现转台旋转,backdrop 添加影棚地面,ar 则通过浏览器自带的 AR 查看器向 iPhone 提供 USDZ、向 Android 提供 GLB。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 上最活跃的集成之一,就是运营人员让 AI 助手生成渲染图。将 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 用于生成 360° 转台展示。
要让助手顺利完成批量任务,有两点很重要:
- 每个批次传入一个
idempotency_key。AI 助手会重试。有了该键,重试的create_car_image_urls会重放首次结果(idempotent_replayed: true),且不产生任何费用。 - 要考虑渲染预算,而不只是速率限制。此前无人请求过的车辆视角需要先行准备,而准备会消耗账户每日的准备算力配额(Pro 为 10%)。一次处理数百辆新车、每辆三个视角,就可能触及上限;此时工具会返回重试时间和
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;常见问题
- 自定义十六进制颜色比预设颜色更贵吗?
- 不会。每种颜色都是对该车辆同一个预处理视角的重新着色,因此无论是预设颜色、您查到的原厂色号,还是车衣厂商的色卡,都只计为一张车辆图片。与某个预设色卡相同的十六进制色值即视为该预设颜色。
- 渲染图的精度足以用来裁膜吗?
- 不能。渲染图是该品牌、车型和年份的影棚视觉图,而非 CAD 数据或原厂照片:目录不区分配置版本,同一辆车的两个视角之间,钣金线条也可能存在差异。请将其用于向客户展示他们的车并为施工报价;裁切图样请依据模板或车辆实物。
- 能否获取不带车漆的车辆,或者只获取车窗?
- 最接近空白模板的是透明 PNG 上的 color=white,PNG 的 alpha 通道即车辆轮廓。该 API 不提供按车身面板或车窗玻璃划分的蒙版。如需纯色改色膜效果,请交给 color=<hex> 处理:它会重新为车漆着色,玻璃、饰条和轮毂保持不变。
- 车窗膜或隐形车衣报价应使用哪些视角?
- 使用正视角:side(或 side-right)用于展示车门玻璃和车身侧面,front 用于前挡风玻璃遮阳条、引擎盖和保险杠,rear 用于后挡风玻璃。客户最有反应的是四分之三视角,因此主图使用 front-3-4,各明细项旁边使用正视角。
- 3D 模型归我们所有吗?
- 它与渲染图一样采用授权方式:每个账户按车辆和颜色支付一次,再次订购免费,您可在自己的产品中使用并保存在自己的服务器上,套餐结束后也不例外。您已拥有的车辆每新增一种颜色,都会为同一网格重新贴图;发布后,模型将免费获得无需密钥的 URL 和嵌入代码。