What does your model fail to see?
Most computer vision projects don’t stall on model architecture. They stall on the examples that were never captured — because the condition is rare, seasonal, dangerous, or simply hasn’t happened yet. No amount of faster labelling fixes a photo that doesn’t exist.
→ In a controlled simulation, every one of those gaps is a parameter you set — and reproduce exactly. See exactly when that helps.
INPUT
Problem spec
“My model fails on wet shelves at night.”
BUILD
Controlled 3D scene
Objects, materials, lighting, cameras and physics rebuilt in simulation.
CONTROL
Deliberate variations
Occlusion, scale, rare states, defects, distractors — set as parameters, not left to chance.
RENDER
Synthetic images
Batch generation at the volume your training plan requires.
DELIVER
Structured annotation
Labels derived from the scene graph — exact by construction, traceable to their parameters.
Deliverable formats: COCO · COCO RLE · YOLO · Pascal VOC · semantic masks · instance masks · polygons · depth maps · ego-motion · hyperspectral bands · custom schema
Design-controlled data, not generated images.
Generative models produce images that look plausible. Simulation produces images whose contents you specified — and whose labels you can prove.
Images generated by AI
- A distribution you don’t control and can’t fully describe
- No scene behind the pixels, so ground truth has to be guessed or re-labelled by hand
- Visual artifacts and detail that changes between samples
- Per-sample cost and latency that are hard to predict
- A specific scene cannot be reproduced on demand
- Class balance is approximate — you get what you get
Controlled simulation
- Every parameter is declared — you know exactly what is in the dataset
- Annotations are derived from the scene graph, so they are exact by construction
- Physically consistent lighting, materials and geometry
- Deterministic and reproducible — the same scene renders the same way twice
- Need a new class, camera, physical behaviour or annotation schema? It’s a change, not a retrain
- Class balance is an input, not an outcome
Where simulation wins is not realism. It’s that you can state, precisely, what the dataset contains and why. We chase realism only as far as the model needs it to — the goal was never “look how realistic this render is,” it’s “this scene contains the exact training signal the model needs.” A less photorealistic scene that gets the physics, scale and label right is worth more than a beautiful one that doesn’t.
A tool built around your problem, not a problem fitted to a tool.
There are powerful platforms out there. But any fixed product has a boundary: if what you need sits outside the roadmap, your options narrow quickly.
We build the pipeline. When your problem needs a different camera distribution, a new physical behaviour, a different class definition or an annotation schema that doesn’t exist yet — we change the system, because we wrote it.
Off-the-shelf tools adapt your problem to the tool.
We adapt the tool to your problem.
And you deal with the person building it. No support tier, no product backlog, no waiting on a release cycle to find out whether your requirement is possible.
We also won’t oversell it. Synthetic data is a tool, not a magic solution. If your own real dataset already covers the case well, we’ll tell you that a smaller synthetic pass — or none at all — is the right call, even when it means less work for us.
- Direct access to the engineer — your requirement goes to the person who builds the pipeline. Requirement → engineering change → new dataset.
- We start from your failure modes — which cases is the model getting wrong, under what conditions, and what does your validation set actually cover?
- You never touch the rendering side — you get images and annotations in whatever format your training pipeline already expects. Which engine generated them is our decision, not an integration you manage.
- We stay through training and validation — the right next batch depends on what your model is still getting wrong. Handing over a zip file and leaving isn’t the job.
- Confidentiality by default — no collection of personal data, no GDPR/LGPD exposure, client names confidential unless you say otherwise.
Synthetic training → real validation → targeted refinement.
We don’t sell synthetic data as a religion. It’s a tool for coverage, edge cases and speed; real data stays in your validation set, where it belongs. Sometimes the right answer is a mix — and we’ll say so, even when it means less data for us to generate.
The same logic holds as general-purpose vision models get better at zero-shot tasks, and as AI-assisted tools get better at labelling footage that already exists. Both narrow the labelling problem — and we expect them to keep doing that. Neither touches the capture problem: they still haven’t seen your specific SKU, your specific defect, your specific disease, and no model can label a photo of a condition nobody has recorded yet. That’s the half of this that we expect to still matter in five years, and it’s where we increasingly focus.
We don’t publish client names, data, or project-specific numbers.
Not because we don’t have them. If we’re careful enough with a client’s data to promise confidentiality, the same care applies to their results — publishing one client’s numbers to win the next client’s trust would say the opposite of what we’re claiming. What we can show is exactly how we approach a project and how we measure whether it worked.
The validation set is the one thing we don’t simulate.
01
Validation stays real
Where real labelled data exists, that is what we report against. Measuring F1 on synthetic images would tell you nothing about production behaviour, so we don’t do it.
02
The same set for every strategy
When we compare real-only, synthetic-only and mixed training, they are evaluated on an identical real validation set. Otherwise the comparison is decoration.
03
We’d rather undersell than oversell
If your own real data already gets you most of the way there, we’ll say so — even when a bigger synthetic engagement would be the easier sell. The right amount of synthetic data is sometimes none.
04
The method doesn’t care which model you use
Same-set validation and controlled test conditions work the same whether the model behind the number is one we helped train from scratch or a fine-tuned foundation model. The measurement approach isn’t tied to any one way of building the model.
→ See the kinds of problems we work on.
Common questions.
What exactly is synthetic training data?
Images generated by rendering a 3D scene rather than photographing the real world — together with the annotations that describe that scene. Because the content is constructed rather than sampled, the labels don’t have to be inferred from the pixels: they’re a property of the scene itself. So the product isn’t really “images”. It’s a structured dataset with a known distribution, ready for training.
Does it replace real data?
Often not, and we’ll tell you when. Real data remains the ground truth for validation, and in some projects it is simply the better training signal. Synthetic data expands coverage and manufactures the edge cases real collection can’t supply reliably. In practice: if your own real dataset already covers the case well, adding synthetic pretraining may not move F1 much on its own — the value shows up more in the coverage you’re missing than in beating a baseline you’ve already got right. The engineering question is when a mix is worth it, not whether it always wins.
How is this different from generative AI (Stable Diffusion, GANs)?
Generative models learn a distribution and sample from it, so you get an image you didn’t specify and can’t fully describe. Simulation lets you declare the contents: this object, this material, this light, this camera, this occlusion, this many of each class. That difference matters most for the two things a training dataset needs — reproducible conditions and provable labels.
What formats do you deliver?
COCO and COCO RLE, YOLO, Pascal VOC, semantic and instance segmentation masks, polygons, depth maps, ego-motion trajectories and hyperspectral bands — depending on the task. Custom schemas are common; we define the output against your training pipeline before generation starts.
Why not just use a big synthetic-data platform or open-source tools?
Use them if they cover your case — we mean that. They solve the standard 80% well, and free tools plus a capable team are a legitimate answer. Where we come in is the other 20%: the scene, variation or annotation logic that no fixed product offers, and that is exactly the part your model is failing on. We can build that part because we build the pipeline itself.
What about zero-shot models (SAM, VLMs) and AI-assisted labelling tools?
Split it into two claims. “A general model can label your existing real photos faster” — true, and getting truer every quarter; if you already have footage of the condition, AI-assisted labelling is often the cheaper path and we’ll say so. “A general model can run in production instead of a trained one” — true for prototyping, weaker at scale on cost/latency and on your specific SKU, defect or disease. Neither claim touches the case where the photo was never captured — that gap is what we generate for, and it’s the reason this doesn’t get smaller as labelling models improve.
How do we actually start?
With a diagnosis call about your model, not a data brief. We look at where it fails, what your validation set covers and where the coverage gap is. If simulation is the right answer we scope a small validation batch first, so you can judge the quality before committing to a full dataset. If it isn’t the right answer, we’ll say so.
If data is still the thing limiting your model, we can work on that.
Tell us what your model gets wrong. We’ll map whether simulation is the right path — and what it would take.