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
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
1// Etsy-optimized export settings2{3 "export_options": {4 "image_format": "jpg", // Etsy prefers JPG5 "image_size": 3000, // High resolution6 "quality": 95 // High quality, reasonable file size7 }8}Automated Etsy Listing
Use Etsy's API with SudoMock for fully automated listing creation:
1// Complete Etsy automation workflow2async function createEtsyListing(design) {3 // 1. Generate all mockup angles4 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 ]);1112 // 2. Create Etsy listing with generated images13 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 category19 images: mockups.map(m => m.mockupUrl)20 });2122 return listing;23}2425async 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_KEY31 },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: 9542 }43 })44 });4546 const data = await response.json();47 return {48 templateName,49 mockupUrl: data.data.print_files[0].export_path50 };51}Shopify Workflow
Shopify Integration
Connect SudoMock with Shopify for automatic product image generation:
1// Shopify webhook handler for new products2app.post('/webhooks/shopify/product-create', async (req, res) => {3 const product = req.body;4 5 // Check if product needs mockups6 if (product.tags.includes('needs-mockups')) {7 // Get design URL from metafield8 const designUrl = product.metafields.find(9 m => m.key === 'design_url'10 )?.value;11 12 if (designUrl) {13 // Generate mockups14 const mockups = await generateProductMockups(designUrl, product.product_type);15 16 // Upload images to Shopify product17 for (const mockup of mockups) {18 await shopify.product.createImage(product.id, {19 src: mockup.url,20 position: mockup.position21 });22 }23 24 // Remove 'needs-mockups' tag25 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
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 like
vintage-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
1// Generate SEO-optimized file names2function generateFileName(product, variant, angle) {3 const slug = product.title4 .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:
1// Bulk process designs from a CSV/spreadsheet2const designs = await readDesignsFromSheet();34for (const design of designs) {5 console.log(`Processing: ${design.title}`);6 7 // Generate mockups for all variants8 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 images20 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 limits30 await delay(100);31}3233console.log(`Created ${designs.length} listings!`);Pro Tip
Ready to Level Up Your Store?
Join thousands of Etsy and Shopify sellers using SudoMock.