El problema: el cliente quiere verlo en su propio vehículo
Un taller de vinilado, de tintado de lunas o un instalador de film de protección de pintura vende algo que el cliente no puede ver hasta que está hecho. El portafolio muestra los coches de otras personas. La muestra del fabricante enseña el material sobre una tarjeta plana. Lo que cierra la venta es el propio M4 de 2021 del cliente en el gris satinado exacto por el que duda, y no existe ninguna foto de eso, porque el trabajo aún no se ha hecho.
La misma carencia aparece más adelante en la cadena. Un cortador de film necesita un contorno limpio del parachoques delantero para un año de modelo que la biblioteca de patrones aún no cubre. Un configurador necesita una vista giratoria de 360° del coche en un color base sobre el que el diseñador pueda pintar. Los tres necesitan lo mismo: una imagen de estudio de una marca, modelo y año concretos, en la pintura que elijan, sin nada detrás.
Tres formas en que los talleres usan los renders
Las integraciones de vinilo, tintado de lunas y film de protección que usan hoy la API hacen tres cosas, a veces las tres a la vez:
- Una base blanca y el material encima. Renderice el año de modelo del cliente en
color=whitesobre un PNG transparente y superponga el vinilo, el polarizado o el diseño impreso en el navegador. El canal alfa del PNG es el contorno del coche. - Una pintura por código hexadecimal. Para un vinilo de color sólido o un repintado, omita la composición:
color=686c70devuelve el coche ya con esa pintura, con los cristales y las llantas intactos, por el mismo crédito que un color predefinido. - Un modelo 3D para la vista giratoria.
POST /api/v1/3dcrea un GLB, un USDZ y un FBX texturizados del vehículo en el color elegido, una vez por vehículo y color. Un modelo publicado incluye un código de inserción de dos líneas para la página de presupuesto y un USDZ que el cliente puede abrir en realidad aumentada en un iPhone.
Un taller procesa sus lotes mediante el conector de ChatGPT en lugar de con código, lo que constituye un cuarto patrón que merece su propia sección más abajo.
Un render base en blanco y el material encima
Un vinilo reemplaza la pintura, así que parta de la menor cantidad de pintura posible. color=white ofrece la carrocería neutra más luminosa con el sombreado de estudio intacto; la vista side recta muestra la mayor parte del lateral con el menor escorzo, que es lo que necesita una vista previa de material. Pida png (o webp) para que se conserve el canal alfa, y el tamaño más grande, 1024, para poder ampliar la vista previa.
# 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.pngPara un material con textura, la composición se resuelve con unas pocas líneas de canvas: el render se dibuja una vez como máscara, el material se pinta solo donde está el coche y el render se vuelve a dibujar en modo multiplicar para que sus sombras y reflejos se vean a través del material.
// 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.Igualar el color de una pintura o un vinilo por código hex
Desde que las pinturas pasaron a ser un recoloreado de un único render neutro, color acepta cualquier hex de seis dígitos además de los 15 nombres de colores predefinidos: color=686c70 tal cual en una URL, "color": "#686c70" en JSON. Busque la muestra del fabricante, o el código de pintura de fábrica del cliente, e indíquelo. El recoloreado se aplica solo a la pintura, así que los cristales, las luces, las molduras y las llantas quedan como están, que es exactamente la diferencia entre una vista previa de un vinilado y una foto teñida. Cada hex es una variante más en caché y un crédito, así que una paleta de veinte candidatos para un coche cuesta veinte créditos, una sola vez.
Un modelo 3D para la vista giratoria y la RA
Cuando la página de presupuesto necesita que el coche gire, encargue un modelo. POST /api/v1/3d recibe el id del vehículo y un color, cobra 100 créditos y genera un GLB texturizado, una versión para navegador, un USDZ y un FBX, además de una miniatura. El primer modelo de un vehículo tarda 10–20 minutes; cada color adicional de ese vehículo retexturiza la misma malla en 1–2 minutes. Encargar un vehículo y un color que ya tiene es gratis (billing.already_owned: true), así que un taller puede basar su configurador en la misma base blanca para cada trabajo.
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 da al modelo URL sin clave en nuestra CDN y un código de inserción incluso antes de que esté listo; el elemento muestra el progreso hasta que llegan los archivos. Establezca view en cualquiera de los ocho ángulos de cámara para la toma inicial, spin para una plataforma giratoria, backdrop para el suelo del estudio y ar para ofrecer el USDZ a los iPhone y el GLB a Android mediante el visor de RA del propio navegador. El FBX es para el diseñador: ábralo en Blender o en una herramienta de diseño de vinilos, pinte el diseño sobre las UV y el cliente verá su propio diseño en su propio coche.
<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>Ejecutar un lote desde ChatGPT o Claude
No todos los negocios cuentan con un desarrollador, y una de las integraciones más activas de la API es la de un operador que pide renders a un asistente. Agregue https://carimage.dev/api/mcp como conector (ChatGPT y Claude inician sesión mediante OAuth; la persona aprueba los permisos en pantalla) y el asistente obtiene las mismas herramientas que tendría un programa: resolve_vehicle para convertir "Audi S3 cabriolet 2014, gris, lateral" en parámetros exactos, get_car_image para un render, create_car_image_urls para hasta cincuenta URL firmadas en una sola llamada y create_3d_model para la vista giratoria.
Dos cosas hacen que un lote generado desde un asistente salga bien:
- Pase una
idempotency_keypor lote. Los asistentes reintentan. Con una clave, uncreate_car_image_urlsreintentado reproduce el primer resultado (idempotent_replayed: true) y no factura nada. - Cuente con el presupuesto de renderizado, no solo con el límite de frecuencia. Los renders de variantes que nadie ha pedido antes consumen la parte diaria de capacidad de generación de la cuenta (10% en Pro). Una tanda de unos cientos de coches nuevos en tres vistas puede alcanzarla; la herramienta responde entonces con un tiempo de reintento y
reset_at, no se cobra nada y las imágenes en caché siguen llegando. Reparta la tanda en una o dos noches, o pase a Business para obtener una parte mayor.
La configuración para cada cliente y la lista completa de herramientas están en la página de MCP.
CLI, SDK y 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_imageycreate_car_image_urlsen el conjunto de herramientas básico;create_3d_model,get_3d_modelypublish_3d_modelcon?toolset=all; todas las herramientas de imagen aceptanvehicley uncolorhexadecimal. - La documentación 3D cubre los webhooks (un POST firmado cuando un modelo termina de generarse), los tamaños de archivo y todos los atributos del embed; Colores, en la página de Imágenes, cubre las reglas de pintura.
Preguntas frecuentes
- ¿Un color hexadecimal personalizado cuesta más que uno predefinido?
- No. Cada color es un recoloreado de un único render neutro de ese vehículo y esa vista, así que un color predefinido, un código de fábrica que haya consultado y la muestra de un fabricante de vinilos cuestan un crédito cada uno. Un valor hex que coincide con la muestra de un color predefinido equivale a ese color predefinido.
- ¿Es el render lo bastante preciso como para cortar la lámina a partir de él?
- No. Los renders son imágenes de estudio de la marca, el modelo y el año, no datos CAD ni fotografía del fabricante: el catálogo no distingue versiones, y las líneas de los paneles pueden variar entre dos vistas del mismo coche. Úselos para mostrar al cliente su coche y presupuestar el trabajo; corte los patrones a partir de una plantilla o del propio vehículo.
- ¿Podemos obtener el coche sin pintura, o solo las ventanillas?
- Lo más parecido a un modelo en blanco es color=white sobre un PNG transparente, y el canal alfa del PNG es la silueta del coche. La API no incluye máscaras por panel ni de cristales. Para un vinilo de color sólido, deje que color=<hex> haga el trabajo: recolorea la pintura y deja los cristales, las molduras y las ruedas tal como están.
- ¿Qué vistas debería usar un presupuesto de polarizado o PPF?
- Las vistas rectas: lateral (o lateral derecha) para los cristales de las puertas y los flancos, frontal para la franja del parabrisas, el capó y el parachoques, y trasera para la luneta. Las vistas de tres cuartos son las que más atraen a los clientes, así que use front-3-4 para la imagen principal y las vistas rectas junto a las partidas del presupuesto.
- ¿El modelo 3D es nuestro?
- Tiene licencia, igual que los renders: se paga una vez por vehículo y color por cuenta, puede volver a pedirse gratis y usted puede usarlo dentro de su producto y conservarlo en sus servidores, incluso después de que finalice el plan. Cada color adicional de un vehículo que ya tiene retexturiza la misma malla, y al publicarlo el modelo obtiene URL sin clave y un código de inserción sin coste.