Shopify, WooCommerce and Magento themes
Fill a demo store with product images while you build the theme. When the merchant product images finally arrive, you swap the URLs and nothing else in the template changes.
Loomhelix serves real product photos from a plain URL, at whatever size you ask for — not the gray boxes every other placeholder service hands you. Every shop item arrives as a set of angles: front, three-quarter, side, back, hero and detail. A storefront mockup gets a working product gallery instead of the same square repeated six times. No API key, no signup, no attribution.
One seed holds one product. Change angle and you walk around it.
Change anything below and the URL rewrites itself. The preview is the real response from the server, not a mockup of one.
Each category holds shop items photographed from several angles. Every tile below is a live request. Pick one to load placeholder images for those shop items into the builder.
Anywhere an e-commerce layout has to look finished before the merchant has sent a single photo. A shop product image placeholder earns its place only if it looks like something a customer would buy.
Fill a demo store with product images while you build the theme. When the merchant product images finally arrive, you swap the URLs and nothing else in the template changes.
A product grid full of gray boxes reads as unfinished. Real shop item photos let a client judge the layout rather than squint past the placeholders.
A product detail page needs several shots of the same item. One seed holds one product and the angle parameter walks around it, so the gallery hangs together instead of showing six unrelated things.
Point a staging catalog, a Storybook story or a test fixture at a URL. Ids are stable, so the same product turns up on every run and screenshot diffs stay quiet.
<img
src="https://img.loomhelix.com/600x750"
alt="Product photo"
width="600"
height="750"
loading="lazy"
>
Images are served from https://img.loomhelix.com. Every shape below hangs off that host. Widths and heights snap to the nearest 10 pixels, which keeps the cache useful and the service cheap to run.
/600x750 | Any photo from the whole catalog, at 600 × 750. |
|---|---|
/600 | Square shorthand. Same as /600x600. |
/apparel/600x750 | Any photo from one category. |
/id/42/600x750 | One specific photo, forever. |
/product/alloy-wheel/600x750 | Any angle of one product. |
/product/alloy-wheel/3/600x750 | That product's third angle. Counting wraps, so /9 is safe. |
/seed/sku-1024/600x750 | The same product for the same seed. Add ?category= to narrow it and ?angle= to walk around it. |
/600x750.jpg | Any shape takes .webp, .jpg, .png or .avif. WebP is the default. |
| Parameter | Values | What it does |
|---|---|---|
blur | 1–100 | Blurs the photo, in steps of 5. Useful for a loading state behind real imagery. |
grayscale | flag | Drops the color. |
fit | contain, cover, inside | How the photo meets the box. contain is the default and keeps the whole item in frame; cover fills the box and crops from the center. |
bg | hex color | Fills the margins left by contain with a flat color. Without it the margins get a blurred continuation of the photo, which hides the join on any shot. |
q | 10–100 | Encoder quality, in steps of 5. Defaults to 80. |
dpr | 1–3 | Multiplies the pixels without changing your layout size. |
label | flag | Prints the rendered size on the photo. |
angle | 1 and up | Which shot of the product /seed/… returns. Counting wraps around the set. |
category | category id | Narrows /seed/… to one category. |
/api/categories | Every category and how many photos it holds. |
|---|---|
/api/products | Every product with a URL per angle. Takes category. |
/api/products/alloy-wheel | One product and all of its shots. |
/api/images | Every photo. Takes category, limit, offset. |
/api/images/42 | One photo's record. |
/healthz | Liveness, catalog size. |
Yes. There is no API key, no signup and no rate card. Point an img tag at a URL and the image comes back. A per-IP request budget keeps one caller from starving the rest.
Yes. Every image is generated for this catalog rather than pulled from a stock library, so there is no attribution requirement and no license term that expires when a mockup becomes a product you sell.
Any width and height up to 1600 pixels, written straight into the path as 600x750. Sizes snap to the nearest 10 pixels so the cache stays useful. Add a file extension to pick the format: WebP by default, or JPEG, PNG and AVIF on request.
Use a seed: /seed/sku-1024/600x750 returns the same product for the same seed, so a mockup stays put while you iterate. The /id/ form pins one exact photo forever.
Yes, and the same goes for WooCommerce, Magento, BigCommerce or a storefront you wrote yourself. Loomhelix is a plain URL in an img tag, so nothing needs installing and no platform has to know about it. Swap the URL for the merchant photo when it arrives.
Most placeholder and dummy image services return a solid rectangle with the dimensions printed on it, which tells you nothing about how a shop will look. Loomhelix returns real product photography, so a product grid reads the way it will once the merchant sends their own product images.
Yes. Ask for a category in the path, as in /apparel/600x750 or /electronics/600x750, and you get a shop item from that category. The catalog section on this page lists what is available.
Keep the seed fixed and change the angle parameter. One seed holds one product, and angle 1 through 7 walks around it, which is what fills a product gallery on a mock product page.
Every placeholder image here was generated for this catalog, and every one of them is free to use. Put them in a client mockup, a paid theme, a pitch deck or a product you sell. No attribution, no credit line, no stock license to keep track of.
That is a deliberate choice rather than a convenience. Free stock libraries generally forbid compiling their catalogs into a service that hands the photos on, which is exactly what a placeholder image service does. The public-domain corners of the web have a different problem: they give you photographs of real people with no model release attached.
Generated products avoid both. No photographer holds a copyright in them, and no identifiable face appears in the frame.