Design

Systems

About

YDH

Get in touch

Problem and context

Most car dealers aren’t photographers. Cars get shot on messy forecourts, with inconsistent angles and poor lighting — and the resulting images don’t sell.

Existing tools take one of two approaches, each with real limitations:

Background replacement (the standard approach among car-dealer tools) cuts the car out and swaps in a new background. This creates three consistent problems: reflections stay tied to the original environment rather than the new one, camera angle and focal length carry over unchanged even when they don’t match the new background, and the car/background perspective rarely aligns — all of which read as fake immediately.

General-purpose image editing tools (GPT Image, Nano Banana) solve the perspective problem but introduce two new ones: the background isn’t pixel-consistent across a slideshow of the same car, which is an instant tell to anyone browsing a dealer’s website, and scale isn’t consistent between cars — a Mini Cooper can end up looking larger than an SUV.

Background replacement

General purpose image editing tools

Process and approach

1.1

My goal was simple to state, harder to hit: keep the car’s scale accurate and the background pixel-consistent across every angle of the same car. And it had to work at volume — one dealer’s worth of cars a day wasn’t going to be a business.

1.2

Finding the base model. I tested GPT Image, Seedance, and Nano Banana directly. GPT Image gave the best results, but introduced “background pixel drift” — small shifts in background texture (leaves, surfaces) between angles of the same car, breaking the slideshow consistency dealers need.

1.3

So in order to get rid of the pixel drift, I could just simply cut out the car and place it back on the clean backplate that would get re-used for all the angles.

1.4 However doing so we need to bring our shadow back somehow. I tried several fixes: JSON-structured prompting in Nano Banana, hybrid 3D-compositing approaches, and shadow-generation LoRAs. But then I realised if I could just get a shadow on a white background, then I can simply just multiply this back on the image with the cutout car and clean background.

Compositing diagram

Clean background template

+

GPT Image

Multiply / Screen

1.5

The first way I’ve managed this was by using QWEN Image, because it allows you to use controlnets for image generation. This means the car stays exactly in place, and we can use our GPT image as a reference of what the shadow should look like.

1.6 — dead end

~2 min/image. Runs locally on VRAM — can’t parallelize. ~90% success rate at 8 steps — not economically viable at that failure rate.

→ pivot

1.7 So then I realised we have all the information we need. We already have the shadows from GPT, so if we can just bring this back then it’s fixed.

1.8 This new workflow reduced production time per image from 4 minutes to 2 minutes.

4 min → 2 min

1.9

Now the production stage was fixed I landed my first client. However the first time I processed a car it took me 5.5 hours…. I did the compositing manually, I could only run GPT one by one in ComfyUI. I had to change the prompt for each single angle. I had to sort out the input images myself, it was a mess. First step was to automate the production pipeline and drastically speed it up.

1.10 Pipeline automation.

1

Sorting incoming images

Matches input angle to one of 8 fixed output rotations (0°, 30°, 90°, 135°, 180°, 215°, 270°, 330°) chosen for consistent quality rather than mirroring the dealer’s own angles.

2

Running the GPT step

Vision models can’t distinguish direction (30° vs 330°), so all images get fed to GPT Image together so it builds a full understanding of the car before generating each angle — also removes the need for one input image per output angle. A separate Python script (built with Claude Code) makes a vision call to identify car type, height, and which shots are exterior vs interior, storing it all in a JSON file. Then: API-driven parallel generation — all 8 angles run simultaneously instead of one by one.

20 min → 2 min

3

Compositing

Replicated the shadow-recovery process inside ComfyUI with custom nodes (layer styles for divide, levels for crushing whites, a better median filter than ComfyUI’s default), background removal with a commercial-use license, exported via API.

Hours → Seconds

4

Formatting

Automatic PNG→JPG conversion for web, with all ComfyUI node-tree metadata stripped (needed for client delivery, not just convenience).

1.11

Now that all the steps were in place I created a system with Claude Code that automatically manages this process. It looks for images in the source folder, and then starts running the GPT step, once that’s done it automatically does the compositing and so forth. The JSON file contains the details of each car, which background to use, and the system — automatically generates step by step. If one generation doesn’t turn out great, then simply delete the image and the system can generate again.

1.12 Now that the production stage was fully automated, I realised I actually lost a lot of time with admin. Downloading images from email, creating folders etc.

1

Dropbox request link per client

2

Vision model grabs 4 images, identifies car model/make

3

Separate GPT call gets car height

4

Script runs every 10 min checking incoming folders

5

Auto-starts processing if new content found

6

Auto-creates folders/subfolders per date and step

This way there was no time wasted on looking through email, creating folders etc. — without having to build a dedicated UI or login system.

02

Outcomes

<5 min

End-to-end pipeline, client upload to ready-to-publish images (vs. days for traditional photography)

~90%

Success rate on well-lit, reasonably clean input photos

£0.40

Processing cost per car (against £5–15 charged)

0

Training required on the client side; competitors require dealers to learn specific rigs/angles, this only needs photos uploaded to a folder

What generalizes

The core technique — generating without pixel drift, then compositing with consistent scale — isn’t car-specific. It can be applied to any product that needs multi-angle shots on a consistent background, particularly where floors or surfaces are low-detail (it degrades on high-detail textures like grass or sand). Product catalog photography and social content are the most direct adjacent use cases.

Challenges and future direction

Economics

The addressable market is currently independent used-car dealers specifically — larger dealers already employ photographers or have invested in turntable rigs, often have existing vendor contracts (e.g. Spyne), and higher-end dealers have less incentive to risk an AI-generated look at high price points. That leaves a market with thin margins: at £5–15 per car against roughly £0.40 in processing cost, margins are healthy in principle, but only if quality control is fully automated. Currently every image gets a manual check, which erodes the margin the automation was supposed to create. A vision-model QC step is the likely next fix.

Technical accuracy limits. The system preserves visible damage (bumps, scratches) well, but reflection accuracy varies — high-detail reflections (trees, leaves) transfer less reliably than overcast or low-reflectivity conditions. Not yet 100% consistent.

Compliance. AutoTrader’s policy is a genuine grey area: background and lighting edits are explicitly allowed, but editing the car itself is not, and it’s unclear whether this system’s process counts as the latter. I’ve asked AutoTrader directly for clarification and haven’t had a response yet.

Not yet automated. Matching a specific source photo to a specific output angle would require vision models to reliably distinguish close angles like 30° from 330°, which they currently don’t do well enough to keep the pipeline both accurate and fast. Delivery to the client is still manual. The pipeline currently runs from a local terminal with ComfyUI kept open throughout — moving this to a persistent, always-on service is the next infrastructure step.