Problemet: kunden vil se det på sin egen bil
Et folieringsverksted, et vindustoningsverksted eller en montør av lakkbeskyttelsesfilm selger noe kunden ikke kan se før det er ferdig. Porteføljen viser andres biler. Produsentens fargeprøve viser materialet på et flatt kort. Det som avgjør salget, er kundens egen M4 fra 2021 i nøyaktig den satenggrå fargen de nøler med – og noe bilde av det finnes ikke, fordi jobben ikke er gjort ennå.
Det samme hullet dukker opp lenger ned i kjeden. En foliekutter vil ha en ren kontur av støtfangeren foran for en årsmodell mønsterbiblioteket ikke dekker ennå. En konfigurator vil ha en roterende visning av bilen i en grunnfarge designeren kan male over. Alle tre trenger det samme: et studiobilde av et bestemt merke, en bestemt modell og et bestemt år, i en lakk de velger selv, uten noe bak.
Tre måter verksteder bruker renderingene på
Integrasjonene for folie, vindusfilm og lakkbeskyttelsesfilm som bruker API-et i dag, gjør tre ting, noen ganger alle tre samtidig:
- En hvit base, deretter materialet oppå. Render kundens modellår i
color=whitepå en transparent PNG og legg folien, solfilmen eller det trykte designet over i nettleseren. Alfakanalen i PNG-en er bilens omriss. - En lakk etter hex-kode. For en ensfarget folie eller en omlakkering kan du hoppe over sammensetningen:
color=686c70returnerer bilen allerede i den lakken, med glass og felger urørt, som ett kjøretøybilde, akkurat som en forhåndsinnstilling. - En 3D-modell til den roterende visningen.
POST /api/v1/3dbygger en teksturert GLB, USDZ og FBX av kjøretøyet i en valgt farge, én gang per kjøretøy og farge. En publisert modell leveres med en innbyggingskode på to linjer for tilbudssiden og en USDZ kunden kan åpne i AR på en iPhone.
Ett verksted kjører batchene sine gjennom ChatGPT-koblingen i stedet for via kode, noe som er et fjerde mønster som fortjener en egen seksjon nedenfor.
En hvit basisrendering med materialet oppå
En folie erstatter lakken, så start med så lite lakk som mulig. color=white gir det lyseste nøytrale karosseriet med studioskyggene intakt; den rette side-visningen viser mest av flanken og minst perspektivforkortning, og det er det en forhåndsvisning av materialet trenger. Be om png (eller webp) slik at alfakanalen bevares, og den største størrelsen, 1024, slik at forhåndsvisningen kan forstørres.
# 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.pngFor et teksturert materiale er sammensettingen bare noen få linjer canvas-kode: rendringen tegnes én gang som maske, materialet males bare der bilen er, og rendringen tegnes på nytt i multiply-modus slik at skyggene og refleksene kommer tilbake gjennom materialet.
// 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.Matche en lakk- eller foliefarge etter hex-kode
Siden lakk ble en omfarging av én nøytral render, godtar color hvilken som helst sekssifret hex-verdi i tillegg til de 15 forhåndsvalgte navnene: color=686c70 uten prefiks i en URL, "color": "#686c70" i JSON. Slå opp produsentens fargeprøve eller kundens fabrikklakkode, og send den med. Omfargingen brukes bare på lakken, så glass, lykter, lister og felger forblir som de er. Det er nettopp forskjellen mellom en forhåndsvisning av foliering og et tonet foto. Hver hex-verdi er én bufret variant til og ett kjøretøybilde for måneden, så en palett med tjue kandidater for én bil i én visning blir tjue kjøretøybilder.
En 3D-modell for dreieskiven og AR
Når tilbudssiden trenger at bilen kan snurre, bestiller du en modell. POST /api/v1/3d tar kjøretøy-ID-en og en farge, trekker 100 kreditter og bygger en teksturert GLB, en nettleserversjon av den, en USDZ og en FBX, pluss et miniatyrbilde. Den første modellen av et kjøretøy tar 10–20 minutes; hver ytterligere farge på samme kjøretøy legger ny tekstur på samme mesh på 1–2 minutes. Å bestille et kjøretøy og en farge du allerede har, er gratis (billing.already_owned: true), så et verksted kan basere konfiguratoren sin på den samme hvite basen for hver jobb.
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 gir modellen URL-er uten nøkkel på vårt CDN og en innbygging før den i det hele tatt er klar; elementet viser fremdriften til filene er på plass. Sett view til en av de ni kameravinklene for åpningsbildet, spin for dreieskive, backdrop for studiogulvet og ar for å tilby USDZ til iPhone og GLB til Android via nettleserens egen AR-visning. FBX-filen er for designeren: åpne den i Blender eller et verktøy for foliedesign, mal designet på UV-ene, så ser kunden sitt eget design på sin egen bil.
<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>Kjøre en batch fra ChatGPT eller Claude
Ikke alle verksteder har en utvikler, og en av de mest brukte integrasjonene på API-et er en operatør som ber en assistent om renderinger. Legg til https://carimage.dev/api/mcp som en kobling (ChatGPT og Claude logger inn via OAuth; mennesket godkjenner tilgangene på skjermen), så får assistenten de samme verktøyene som et program: resolve_vehicle for å gjøre «2014 Audi S3 cabriolet, grå, fra siden» om til eksakte parametere, get_car_image for én rendering, create_car_image_urls for opptil femti signerte URL-er i ett kall, create_3d_model for dreieskivevisningen.
To ting får en batch fra en assistent til å gå bra:
- Send en
idempotency_keyper batch. Assistenter prøver på nytt. Med en nøkkel spiller et nytt forsøk påcreate_car_image_urlsav det første resultatet (idempotent_replayed: true) og faktureres ikke. - Regn med renderbudsjettet, ikke bare hastighetsgrensen. Kjøretøyvisninger ingen har bedt om før, må klargjøres først, og klargjøringen trekker på kontoens daglige andel av klargjøringskapasiteten (10 % på Pro). En kjøring med noen hundre nye biler i tre visninger kan nå denne grensen. Verktøyet svarer da med et tidspunkt for nytt forsøk og
reset_at, ingenting belastes, og bufrede bilder leveres fortsatt. Fordel kjøringen over en kveld eller to, eller gå over til Business for en større andel.
Oppsett for hver klient og hele verktøylisten finner du på MCP-siden.
CLI, SDK og 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_imageogcreate_car_image_urlsi kjerneverktøysettet,create_3d_model,get_3d_modelogpublish_3d_modelmed?toolset=all; alle bildeverktøy tarvehicleog en hex-farge icolor. - 3D-dokumentasjonen dekker webhooks (én signert POST når en modell er ferdig), filstørrelser og alle embed-attributter; Farger på Images-siden dekker lakkreglene.
Ofte stilte spørsmål
- Koster en egendefinert hex-farge mer enn en forhåndsdefinert?
- Nei. Hver farge er en omfarging av én forberedt visning av kjøretøyet. En forhåndsdefinert farge, en fabrikkode du har slått opp og en fargeprøve fra en folieprodusent teller derfor hver som ett kjøretøybilde. En hex-verdi som er lik fargeprøven til en forhåndsdefinert farge, regnes som den forhåndsdefinerte fargen.
- Er renderingen nøyaktig nok til å skjære folie etter?
- Nei. Rendringer er studiobilder av merke, modell og år, ikke CAD-data eller produsentfotografier: katalogen skiller ikke mellom utstyrsnivåer, og panellinjer kan variere mellom to visninger av samme bil. Bruk dem til å vise kunden bilen sin og til å gi pris på jobben; kutt mønstre fra en mal eller fra selve kjøretøyet.
- Kan vi få bilen uten lakk, eller bare vinduene?
- Det nærmeste du kommer et blankt utgangspunkt er color=white på en transparent PNG, og PNG-ens alfakanal er bilens silhuett. API-et leverer ikke masker per panel eller for glass. For en ensfarget folie kan du la color=<hex> gjøre jobben: den omfarger lakken og lar glass, list og hjul være som de er.
- Hvilke visninger bør et tilbud på solfilm eller PPF bruke?
- De rette visningene: side (eller side-right) for sidevinduene og flankene, front for solskjermstripen på frontruta, panseret og støtfangeren, rear for bakruta. Trekvartsvisningene er de kundene reagerer på, så bruk front-3-4 som hovedbilde og de rette visningene ved siden av linjene i tilbudet.
- Eier vi 3D-modellen?
- Den er lisensiert, som renderingene: betalt én gang per kjøretøy og farge per konto, gratis å bestille igjen, og din å bruke i produktet ditt og beholde på serverne dine, også etter at abonnementet er avsluttet. Hver ekstra farge på et kjøretøy du allerede har, legger ny tekstur på samme mesh, og publisering gir modellen URL-er uten nøkkel og en innbygging uten kostnad.