>_
SudoMock
Use Case

Etsy & Shopify Stores

Professional product images sell more. Generate stunning mockups for your Etsy and Shopify listings automatically.

Etsy

Stand out in search with professional mockups. Etsy's algorithm favors listings with high-quality images.

Shopify

Consistent, professional product photography builds trust and increases conversions.

Why Mockups Matter

94%
of buyers judge quality by images
2-3x
higher conversion with pro photos
5+
images recommended per listing

Professional product photography can cost $50-200 per product. Or you can spend hours in Photoshop creating mockups yourself. With SudoMock, generate unlimited professional mockups at $0.002 each—in under 1 second.

Etsy Workflow

Etsy Image Requirements

  • Minimum 2000px on shortest side (we recommend 3000px+)
  • Square or 4:3 aspect ratio works best
  • First image is most important—use your best mockup
  • Include multiple angles and detail shots
Etsy Export Settings
1
// Etsy-optimized export settings
2
{
3
"export_options": {
4
"image_format": "jpg", // Etsy prefers JPG
5
"image_size": 3000, // High resolution
6
"quality": 95 // High quality, reasonable file size
7
}
8
}

Automated Etsy Listing

Use Etsy's API with SudoMock for fully automated listing creation:

Automated Etsy Listing Creation
1
// Complete Etsy automation workflow
2
async function createEtsyListing(design) {
3
// 1. Generate all mockup angles
4
const mockups = await Promise.all([
5
renderMockup(design.url, "tshirt-front"),
6
renderMockup(design.url, "tshirt-back"),
7
renderMockup(design.url, "tshirt-detail"),
8
renderMockup(design.url, "tshirt-flat-lay"),
9
renderMockup(design.url, "tshirt-lifestyle")
10
]);
11
12
// 2. Create Etsy listing with generated images
13
const listing = await etsyAPI.createListing({
14
title: design.title,
15
description: design.description,
16
price: design.price,
17
quantity: 999,
18
taxonomy_id: 1, // Clothing category
19
images: mockups.map(m => m.mockupUrl)
20
});
21
22
return listing;
23
}
24
25
async function renderMockup(designUrl, templateName) {
26
const response = await fetch("https://api.sudomock.com/api/v1/renders", {
27
method: "POST",
28
headers: {
29
"Content-Type": "application/json",
30
"X-API-KEY": process.env.SUDOMOCK_API_KEY
31
},
32
body: JSON.stringify({
33
mockup_uuid: TEMPLATES[templateName].mockup_uuid,
34
smart_objects: [{
35
uuid: TEMPLATES[templateName].smart_object_uuid,
36
asset: { url: designUrl, fit: "cover" }
37
}],
38
export_options: {
39
image_format: "jpg",
40
image_size: 3000,
41
quality: 95
42
}
43
})
44
});
45
46
const data = await response.json();
47
return {
48
templateName,
49
mockupUrl: data.data.print_files[0].export_path
50
};
51
}

Shopify Workflow

Shopify Integration

Connect SudoMock with Shopify for automatic product image generation:

Shopify Webhook Handler
1
// Shopify webhook handler for new products
2
app.post('/webhooks/shopify/product-create', async (req, res) => {
3
const product = req.body;
4
5
// Check if product needs mockups
6
if (product.tags.includes('needs-mockups')) {
7
// Get design URL from metafield
8
const designUrl = product.metafields.find(
9
m => m.key === 'design_url'
10
)?.value;
11
12
if (designUrl) {
13
// Generate mockups
14
const mockups = await generateProductMockups(designUrl, product.product_type);
15
16
// Upload images to Shopify product
17
for (const mockup of mockups) {
18
await shopify.product.createImage(product.id, {
19
src: mockup.url,
20
position: mockup.position
21
});
22
}
23
24
// Remove 'needs-mockups' tag
25
await shopify.product.update(product.id, {
26
tags: product.tags.replace('needs-mockups', 'mockups-generated')
27
});
28
}
29
}
30
31
res.status(200).send('OK');
32
});

Shopify App

Looking for a plug-and-play solution? We're working on a native Shopify app.Join the waitlist

Mockup Strategy

For maximum conversions, include multiple mockup types in each listing:

1. Hero Shot

Clean, professional mockup on white or neutral background. This is your thumbnail—make it count.

2. Lifestyle Shot

Show the product in context. Person wearing the t-shirt, mug on a desk, poster on a wall.

3. Detail Shot

Close-up of the print area. Shows quality and design details.

4. Flat Lay

Product laid flat, often with props. Great for showing full design.

5. Color Variants

Same design on different product colors. Use SudoMock's color overlay or different template PSDs.

6. Size Guide

Include a size chart image. Reduces returns and support questions.

SEO Optimization

Optimize your mockup images for search visibility:

  • File naming: Use descriptive names likevintage-cat-tshirt-black-front.jpg
  • Alt text: Include product name, color, and design description
  • File size: Keep under 1MB for fast loading (WebP helps!)
  • Consistency: Use the same mockup style across your store for brand recognition
SEO File Naming
1
// Generate SEO-optimized file names
2
function generateFileName(product, variant, angle) {
3
const slug = product.title
4
.toLowerCase()
5
.replace(/[^a-z0-9]+/g, '-')
6
.replace(/-+/g, '-')
7
.trim('-');
8
9
return `${slug}-${variant}-${angle}.webp`;
10
// Output: "vintage-cat-design-black-front.webp"
11
}

Bulk Listing Creation

Scale your store by creating hundreds of listings automatically:

Bulk Listing Creation
1
// Bulk process designs from a CSV/spreadsheet
2
const designs = await readDesignsFromSheet();
3
4
for (const design of designs) {
5
console.log(`Processing: ${design.title}`);
6
7
// Generate mockups for all variants
8
const variants = ["white", "black", "navy", "gray"];
9
const mockups = {};
10
11
for (const variant of variants) {
12
mockups[variant] = await Promise.all([
13
renderMockup(design.url, `tshirt-${variant}-front`),
14
renderMockup(design.url, `tshirt-${variant}-back`),
15
renderMockup(design.url, `tshirt-${variant}-lifestyle`)
16
]);
17
}
18
19
// Create listing with all variants and images
20
await createListing({
21
title: design.title,
22
description: design.description,
23
variants: variants.map(v => ({
24
color: v,
25
images: mockups[v]
26
}))
27
});
28
29
// Rate limiting - respect API limits
30
await delay(100);
31
}
32
33
console.log(`Created ${designs.length} listings!`);

Pro Tip

Create a Google Sheet with your designs, then use n8n or Zapier to automatically generate mockups and create listings. Zero code required!

Ready to Level Up Your Store?

Join thousands of Etsy and Shopify sellers using SudoMock.