Product Photo to 3D Model with Real-World Scale
Pricing
from $400.00 / 1,000 model delivereds
Product Photo to 3D Model with Real-World Scale
Turns product photos into web-ready GLB models scaled to the real dimensions you give, oriented front-forward, with the pivot on the floor. Ready to drop into Shopify, WooCommerce, Wix or any model-viewer page.
Pricing
from $400.00 / 1,000 model delivereds
Rating
0.0
(0)
Developer
Kostas Skutulas
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Product Photos to 3D Models at Real-World Scale
Turn product photos into GLB models scaled to your exact millimetre dimensions, with the pivot on the floor, ready for Shopify, WooCommerce and Wix.
Introduction
AI can turn a product photo into a 3D mesh in about a minute. What it cannot do is get the size right. Image-to-3D generators normalise their output to roughly a one cubic metre volume and ignore the object's real proportions, so a dining chair comes back the same size as a three-seat sofa. They also drop the origin at the centre of the object rather than at its base.
Both problems have the same consequence: augmented reality stops working. A model with the origin at its centre sinks halfway into the shopper's floor. A model at the wrong scale stands next to a real door frame and is obviously, uselessly wrong. Since "see it in your room" is the entire reason to put 3D on a product page, a model with the wrong scale is worse than no model at all.
This actor fixes both. You already know your products' dimensions, because they are printed on the product page. This actor treats those dimensions as ground truth and forces the generated mesh to match them: exact width, height and depth in millimetres, origin on the floor, centred horizontally, upright.
What comes out is a GLB you can upload straight into Shopify's 3D media slot, where the built-in viewer and AR work with no app at all. The same file works with the free viewer plugins on WooCommerce and Wix, and with model-viewer on any custom site. iOS AR Quick Look is served from that same corrected file, so what a shopper sees on an iPhone is the model you approved.
The output follows the conventions the platforms actually document: glTF's metre unit and +Y up, Shopify's requirement that the origin sits at the product's base, and Google's Scene Viewer guidance on triangle and file size. The defaults deliberately favour AR working everywhere over the smallest possible file.
Tutorial
1. Get a provider key
You bring your own Meshy or Tripo API key. The generated models are then licensed to you directly by the provider, with nobody in between, and you pay generation costs at their list price rather than a marked-up rate.
A paid provider tier is normally required if you intend to sell or redistribute the models. Meshy's free tier licenses output under CC BY 4.0, which requires attribution; its paid tiers grant ownership outright. Tripo grants paid users broad commercial rights, while free accounts assign the rights to Tripo. Read your provider's terms before putting the results on a live storefront.
2. Collect dimensions
For each product you need the real width, height and depth in millimetres. This is the only input the actor cannot guess for you, and it is the input that makes the result worth having.
3. Give it two or three photos
One photo makes the generator invent the back of the object. Two or three angles produce a noticeably better mesh. The first URL you give is treated as the front view.
4. Run and check the preview
Each row of the output table shows the size the model actually measures after processing, next to the size you asked for. If they match, the model is right.
5. Upload
Download the GLB from the link in the output and add it to the product's media. On Shopify that is all: the 3D viewer and mobile AR switch on by themselves.
Pricing
This actor charges per event, and only for work that succeeded.
| Event | When it fires |
|---|---|
run-started | Once per run, whatever it contains |
model-delivered | Once per usable model, never for a failure |
A product that fails to generate costs you nothing here. Provider credits are billed separately by Meshy or Tripo against your own key, and the output table reports how many credits each model consumed so you can see the real per-model cost.
Input and output
Input
{"provider": "meshy","providerApiKey": "your-provider-key","scaleMode": "exact","items": [{"id": "sofa-oslo-3s","imageUrls": ["https://example.com/sofa-front.jpg","https://example.com/sofa-side.jpg"],"widthMm": 2100,"heightMm": 850,"depthMm": 950}]}
Output
{"id": "sofa-oslo-3s","status": "ok","glbUrl": "https://api.apify.com/v2/key-value-stores/.../records/sofa-oslo-3s.glb","requestedSizeMm": [2100, 850, 950],"measuredSizeMm": [2100, 850, 950],"triangles": 38412,"fileSizeBytes": 2841200,"yawApplied": 0,"distortion": 1.06,"dimensionMismatch": 1.06,"creditsConsumed": 30}
measuredSizeMm is measured on the finished file, not assumed. dimensionMismatch is how far the generated mesh was from your dimensions before anything was done about it: 1.0 means they agreed. distortion is how much stretching was actually applied, which is always 1.0 in uniform mode. A high mismatch usually means the model came out facing the wrong way.
Actor recommendations
Set yawDegrees when a model faces the wrong way. Nothing can work out which side of a sofa is the front from geometry alone, and this actor does not pretend otherwise. It will turn a model a quarter turn when that clearly fits your width and depth better, but a front-to-back flip needs one number from you. Look at the preview, add "yawDegrees": 180, run that product again.
Leave Draco compression and WebP textures off unless you know you need them. Both make the file smaller. Both also rely on glTF extensions that Google's Scene Viewer does not list among the two it supports, which means AR on Android can fail. The defaults choose working AR over a smaller download.
Use scaleMode: "uniform" when your dimensions include something the mesh does not. Exact mode stretches the mesh to hit your numbers, which is right when the numbers describe the same object the photos show. If your listed depth includes a headrest the photos do not, uniform mode keeps the generated proportions and fits the model inside your box instead.
Show the model with the right tone mapping, or your own viewer will wash it out. This one costs nothing and is worth more than any setting in this actor. Measured against the original photographs in CIELAB, model-viewer keeps 66% of a sofa's chroma under tone-mapping="neutral" and only 29% under agx — AgX is a filmic mapper and desaturates on purpose. Neutral is already the default in model-viewer 4.x, so the usual mistake is overriding it. Two traps come with it: values outside aces, agx and neutral silently fall back to Neutral rather than erroring, and exposure is quietly multiplied by 1.3 when Neutral runs against the neutral or legacy environment, so exposures are not comparable between tone mappers.
Turn off dynamic render scaling if you use auto-rotate. model-viewer drops to a quarter of the pixels when a frame takes over 60 ms and only restores full resolution once the scene stops moving. A rotating model never stops, so the page stays blurry permanently rather than just while dragging. One line, after the element is defined:
customElements.get('model-viewer').minimumRenderScale = 1;
Its getter returns undefined, so check the render-scale event rather than reading the property back.
Watch the mismatch column. Anything above about 1.3 is telling you something is wrong with that product: bad dimensions, a bad mesh, or a wrong yaw. It is reported in both scale modes, because it describes the disagreement itself rather than what was done about it.
FAQ and support
Do I need a Shopify app to display these? No. Shopify supports GLB natively: upload it to the product's media and the 3D viewer plus mobile AR switch on with no app. WooCommerce and Wix have free viewer plugins already installed on hundreds of thousands of sites.
Why is there no USDZ file for iOS?
Because the one the generators hand back is not the model you approved. It comes at their own arbitrary scale with their own origin, and none of the corrections this actor makes are applied to it. Shipping that next to a correct GLB would put a wrongly sized model in front of every iPhone shopper. Shopify and model-viewer both derive iOS AR from the GLB instead, so the corrected file is what gets used.
Why do I have to supply dimensions? Because that is the whole product. Both providers offer an "auto size" feature that estimates real-world height with AI vision, and an estimate is exactly what makes AR look plausible in isolation and wrong next to a real object.
What if a photo produces a bad mesh? Shiny, transparent and very intricate products are the usual failures. You are not charged for a model that fails, and the output row explains what went wrong.
Where are my files stored, and for how long? In a named Apify key-value store, which is kept indefinitely. Reuse the same storage name across runs to build one library. The download links stay valid as long as the record exists.
Can I sell products using these models? That depends on your provider's terms and your tier there, not on this actor. See the tutorial above.
Report problems through the Issues tab on this actor.