The AI platform for automotive professionals

One

vehicle.

Decorations

Beautiful background generated by Autoya
Beautiful background generated by Autoya
Beautiful background generated by Autoya

infinite.

Transform any vehicle photo into an ultra-realistic premium visual using generative AI. No studio. No constraints. No compromises.

All types of vehicles

Quick deployment

Cancel anytime

Your vehicle photos are costing you sales. Every day.

Quick snapshots

At the park, between two appointments. Cluttered background, flat lighting, zero consistency between the ads.

Manual retouching

Hours of Photoshop or outsourcing for a result that feels artificial. At stock scale, it's unsustainable.

AI that distort

Existing tools regenerate everything, including your vehicle. Distorted logos, erased license plates, inconsistent reflections. You lose credibility.

One platform. Four products. Zero compromises.

Smart Cutout

Our AI isolates your vehicle with pixel-perfect precision: mirrors, antennas, rims, windows. No artifacts. The vehicle remains intact.

Background Generation

Create your studio to reflect your brand—colors, lighting, brand elements—and deploy it across your entire network with one click.

Custom Studios

AI doesn't choose from a catalog. It generates a unique environment, tailored to the angle, lighting, and reflections of your vehicle. Unlimited.

Automated AI video

Go from photo to video in 30 seconds. Animated ads for marketplaces, social media, and digital advertising.

Designed with precision. Powered by AI.

Key Capabilities

  1. 1

    AI masking engine
    Ultra-precise vehicle detection.

    1

    AI masking engine
    Ultra-precise vehicle detection.
  2. 1

    AI masking engine
    Ultra-precise vehicle detection.
  3. 2

    Generative scene engine
    Custom decorations generated in real time.

    2

    Generative scene engine
    Custom decorations generated in real time.
  4. 2

    Generative scene engine
    Custom decorations generated in real time.
  5. 3

    Light & shadow intelligence
    Light, shadows, and reflections perfectly coherent.

    3

    Light & shadow intelligence
    Light, shadows, and reflections perfectly coherent.
  6. 3

    Light & shadow intelligence
    Light, shadows, and reflections perfectly coherent.
  7. 4

    Context coherence
    Each vehicle naturally integrates into its scene.

    4

    Context coherence
    Each vehicle naturally integrates into its scene.
  8. 4

    Context coherence
    Each vehicle naturally integrates into its scene.
  9. 5

    Ready-to-use results
    Immediately usable visuals everywhere.

    5

    Ready-to-use results
    Immediately usable visuals everywhere.
  10. 5

    Ready-to-use results
    Immediately usable visuals everywhere.
  11. 6

    Autoya API
    Cut out hundreds of vehicles in just a few minutes.

    6

    Autoya API
    Cut out hundreds of vehicles in just a few minutes.
  12. 6

    Autoya API
    Cut out hundreds of vehicles in just a few minutes.
  13. 7

    Bring your vehicles to life*
    Easily turn your photos into videos.

    7

    Bring your vehicles to life*
    Easily turn your photos into videos.
  14. 7

    Bring your vehicles to life*
    Easily turn your photos into videos.
  15. *Service not included in Autoya. Option distributed by The Next Stories.

3 simple steps. Premium results.

Beautiful woman washing her face

Step 1

Take your photos

Take one or more photos of the vehicle. Nothing more.

Step 2

Generation

Autoya understands the vehicle and generates either a free or branded studio setting—it’s up to you to choose.

Step 2

Generation

Autoya understands the vehicle and generates either a free or branded studio setting—it’s up to you to choose.

Femme montrant son visage au soleil

Step 3

Publish and sell

Receive your premium visuals ready to publish and sell.

Femme montrant son visage au soleil

Step 3

Publish and sell

Receive your premium visuals ready to publish and sell.

Your photo studio fits in your pocket.

Designed for automotive professionals. All professionals.

Dealers & Used Vehicle Distributors

More attractive listings, faster inventory turnover, a consistent professional image.

Builder Networks

Brand compliance across the network. One studio, 500 dealerships, zero deviation.

Automotive Marketplaces

Consistent visual quality via API. Integration in just a few lines of code.

Remarketing & Fleet

Industrial batch processing. Hundreds of vehicles per day, automatically.

Autoya's choice for photo or video

  • Logo
  • Logo
  • Logo
  • Logo

Your photo studio fits in your pocket.

Cut out in bulk. Publish instantly.

// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas
// compiled preview • AUTOYA_API 1.0 /* generated for visual effec t – not executed */ const IMG_WIDTH = 8; const FADE_ZONE = 35; con st MAX_PARTICLES = 2500; const TRANSITION = 0.05; function clamp(n , a, b) { return Math.max(a, Math.min(b, n)); } function lerp(a, b , t) { return a + (b - a) * t; } const now = () => performance.now (); function rng(min, max) { return Math.random() * (max - min) + min; } class Particle { constructor(x, y, vx, vy, r, a) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.r = r; this.a = a ; } step(dt) { this.x += this.vx * dt; this.y += this.vy * dt; } } const scanner = { x: Math.floor(window.innerWidth / 2), width: CA R_WIDTH, glow: 3.5, }; function drawParticle(ctx, p) { ctx.globalA lpha = clamp(p.a, 0, 1); ctx.drawImage(gradient, p.x - p.r, p.y - p.r, p.r * 2, p.r * 2); } function tick(t) { const dt = 0.016; } c onst state = { intensity: 1.2, particles: MAX_PARTICLES }; const b ounds = { w: window.innerWidth, h: 300 }; const gradient = documen t.createElement('canvas'); const ctx = gradient.getContext('2d'); ctx.globalCompositeOperation = 'lighter'; const state = { intensit y: 1.2, particles: MAX_PARTICLES }; const bounds = { w: window.inn erWidth, h: 300 }; const gradient = document.createElement('canvas

01

Send

Send your images in batches via REST API, FTP, or direct connector. JPG, PNG, WebP formats accepted.

02

Automatic cropping

Interior/exterior cropping, premium background generated and applied builder templates. Vehicle ready for sale in less than 2 minutes.

03

Direct integration

Cut-out images AND original files automatically synchronized in your VO or DMS software. Zero manual handling.

04

Publish

Your vehicles are online with professional visuals, without manual retouching.

01

Send

Send your images in batches via REST API, FTP, or direct connector. JPG, PNG, WebP formats accepted.

02

Automatic cropping

Interior/exterior cropping, premium background generated and applied builder templates. Vehicle ready for sale in less than 2 minutes.

03

Direct integration

Cut-out images AND original files automatically synchronized in your VO or DMS software. Zero manual handling.

04

Publish

Your vehicles are online with professional visuals, without manual retouching.

Questions? We have the answers.

  • How far can the generation of backgrounds go with Autoya?
  • How does Autoya ensure the integrity of the vehicles?
  • Can AI sometimes produce unexpected results in scenes?
  • Does Autoya replace a traditional photo studio?
  • Is Autoya compatible with automotive DMS?