deliverables/ — print-ready PNGs in every matching ratio (2x3, 3x4, 4x5, ISO-A) and size
an AI-generated Etsy listing (title, description, tags) when enabled
DPI choice
300 DPI is standard print quality but most files exceed Etsy's 20MB upload cap (fine when Dropbox hosts your bundle). 150 DPI keeps every file under the cap for direct Etsy attachment.
Package ZIPs download automatically when generation finishes; your print files are also cached on the Deliverables page per your plan's retention.
Bulk Mockup Generator
The orange ⚡ Bulk button in the header toolbar runs the whole seller flow hands-off:
Select multiple artwork files.
Step through mockup categories — use all, none, or hand-pick thumbnails. Generate & Push to Etsy is available at every step.
Each image automatically uses only the selected scenes that fit its aspect ratio.
Per image: package + AI listing generated → full bundle uploaded to your Dropbox (if connected) → Etsy draft listing created.
When it finishes you get links to your Deliverables and your Etsy drafts. Nothing goes live until you activate a draft in Etsy.
Etsyfree
Publishes packages as draft listings in your shop: mockups become the photos, print files attach as the digital product, AI text fills title/description/tags.
Quickest path: generate mockups, edit them to taste, then hit the orange 🏪 Etsy button on any card — every mockup of that artwork joins the same listing as photos (the clicked card is the cover, max 10), the AI describes it, print files attach, and one draft appears in your shop.
One-time setup
At etsy.com/developers, Etsy offers two app types — choose "Create a seller app" (NOT "personal app"): seller apps are for your own shop and are approved within minutes, while personal apps go through a much longer review you don't need. Note: Etsy allows one app per account, so the button is hidden if your account already has an app — reuse that existing app's keys instead.
On the app page, note the Keystring and the Shared Secret — you need both.
In the app's settings add the callback URL (exactly): https://scenehatch.com/etsy/callback — multiple URLs can be registered at once if you also use the app elsewhere. Use the Callback URL(s) field, not "Application URL".
In Mockup Generator: user menu → Integrations → Etsy → paste both values → Save Keys.
Click Connect Etsy Shop → authorize on Etsy → wait for the ✓ page.
Where things land
Drafts: Shop Manager → Listings → Drafts. Review and activate there (Etsy charges its $0.20 listing fee on activation, not on draft creation).
"Only the app owner may authorize a seller app": Etsy personal apps can only be authorized by the Etsy account that created them. If you see this, the keys saved in Integrations belong to someone else's app — create your own personal app (steps above, using your Etsy account) and save its keys before clicking Connect.
Dropboxfree
Etsy caps digital files at 5 files × 20MB. With Dropbox connected, every published listing gets its own private full-resolution bundle uploaded to your Dropbox (Apps/<app>/Etsy Bundles/), and buyers receive the download link in a PDF attached to the listing.
Dropbox hosting is pre-configured by the Scenehatch team — if the Connect button says "not available", contact support.
No Dropbox? Delivering the full bundle manually
Without Dropbox connected, publishing still attaches every print file that fits Etsy's limits (5 files, 20MB each — generate at 150 DPI and usually all of them fit). To also deliver the full high-resolution bundle by hand:
Get your files. The package ZIP downloads automatically when generation finishes; print files are also kept on the Deliverables page. Unzip it — the deliverables/ folder holds every size.
Host them on any cloud storage. For example Google Drive: drive.google.com → New → Folder upload → after upload, right-click the folder → Share → change access to "Anyone with the link" → Copy link. (Dropbox's website, OneDrive or similar work the same way.)
Make a link document for buyers. Create a one-page PDF in any word processor: "Thank you for your purchase — download your full-resolution files here: [paste link]", plus a line that no account is needed. Export/print it as PDF.
Attach it on Etsy. Shop Manager → Listings → Drafts → open your listing → Digital files → upload the PDF alongside the attached print files → Save.
Test like a buyer. Open your link in a private/incognito window — it must download without asking you to log in.
Keep the link alive for as long as the listing sells; deleting the hosted files breaks past buyers' downloads.
Connecting your account
User menu → Integrations → Dropbox → Connect Dropbox.
Authorize on the Dropbox page → ✓ page → done.
From then on it's automatic: leave the "download link" prompt empty when publishing and the bundle uploads itself. Pasting a link manually always overrides. Mind your Dropbox storage quota — bundles run 50–500MB each.
Buyer access: the generated links are "anyone with the link" — buyers need no Dropbox account. The links are unguessable, so nobody can browse your other bundles. Exception: on Dropbox Business/team accounts an admin policy can restrict links to team members, which breaks buyer downloads — personal accounts are unaffected.
Google Drivefree
The alternative to Dropbox for hosting full-resolution bundles — with a much roomier 15GB free tier (Dropbox: 2GB). When Dropbox isn't connected, published listings upload their bundle to your Google Drive instead and buyers get the download link the same way. The app uses Google's most restrictive Drive permission (drive.file): it can only see the "Etsy Bundles" folder it creates itself — never your other files, photos or documents.
Important: being logged into Google in your browser does not connect Google Drive to this app. The connection only exists after you click Connect Google Drive in Integrations and complete Google's consent screen — and that button only works after the one-time app registration below.
Google Drive support is pre-configured by the Scenehatch team.
For sellers (everyone who isn't the operator)
You never touch Google Cloud or .env — the walkthrough above is done once by whoever runs the server. Your part is two clicks: user menu → Integrations → Connect Google Drive → choose your Google account → Allow. Done — bundles upload to your own Drive automatically when you publish. (While the platform's Google app is unverified, your Gmail must be on the operator's test-user list — ask them to add you if Google shows "access_denied".)
How it's used
Publishing prefers Dropbox when it's connected; Google Drive is the fallback. Connect only Drive if you want everything there.
Bundles land in a folder named Etsy Bundles at the top of "My Drive".
Buyer links are "anyone with the link" direct downloads — no Google account needed, unguessable URLs.
Watch your 15GB quota (shared with Gmail/Photos): bundles run 50–500MB each. Deleting a hosted bundle breaks past buyers' download links.
Printifyfree
Sell physical canvas prints: one click creates a Printify product with the popular sizes matching your art's aspect ratio, retail prices set automatically from print cost + your profit margin (default 30% after Etsy fees; change with PRINT_PROFIT_MARGIN in .env). Low-resolution art is auto-upscaled to 300 DPI, and sizes that would still print below 250 DPI are dropped.
One-time setup
Connect your Etsy shop to Printify first (needed for publishing): Printify → Manage my stores → Add new store → Etsy → authorize. If Printify says the Etsy shop is "already linked to your Printify store", the link lives in another Printify account or a disconnected store — use Reconnect on the existing store, or revoke Printify from Etsy (Shop Manager → Settings → Integrations) and connect again.
Get a token from the SAME Printify account that owns the Etsy-connected store: avatar (top right) → Connections → API → Generate. A token from a different Printify account cannot see this store — the classic symptom is "shop is not connected to sales channel" errors even though the dashboard shows it connected.
Integrations → Printify → paste the token (Shop ID optional — the Etsy-connected shop is picked automatically) → Connect Printify.
After each push — adding your room mockups
Printify products start with its default flat previews. To use your generated room mockups as the listing photos:
In the success dialog, click ⬇ Save the mockups to download them.
Open the Mockup Library link for the product.
Click My Uploads → upload the mockup images (max 15).
Click Save, then Save selection to attach them to the product.
Products are created as drafts in Printify; publish from there when photos and prices look right. Publishing creates a separate physical Etsy listing (Etsy can't mix digital and physical in one listing) and Etsy's $0.20 listing fee applies. If a freshly published listing lands as inactive/archived on Etsy, activate it in Shop Manager → Listings.
Canvas side printing defaults to off (white edges); set PRINTIFY_PRINT_ON_SIDE=regular in .env for wrap-around art.
Printfulfree
Same idea as Printify, on Printful's catalog.
One-time setup
Create an API store. Go to printful.com/dashboard/store → click "Connect via API" → name your store. (Printful's API can only create products in API-platform stores — marketplace-connected stores like Etsy or Shopify are rejected.)
Create a token. On the developer site (developers.printful.com) open the Tokens page → fill in a token name and expiration date → set access level to "Account (all stores)" → tick all scopes → create, then copy the API key (and note the store ID).
Access level matters: a token scoped to a single marketplace store cannot see your API store. "Account (all stores)" avoids that trap. If any form asks for an app/redirect URL, your shop URL or app URL works — it is not used by this integration.
Connect. Integrations → Printful → paste the API key (Store ID optional — the API store is picked automatically over marketplace stores) → Connect Printful.
Printful downloads print files from this server by URL, so pushes only complete when the app runs on a publicly reachable URL — on localhost the product is created but the file fetch fails.
Instagramfree
Posts mockups directly to an Instagram Business/Creator account via the 📸 Gram button on result cards — AI-written caption ending with your Etsy link. Uses Meta's "Instagram API with Instagram login": no Facebook Page required.
For sellers — connecting your account (2 clicks)
You never touch Meta's developer console or any server files — the walkthrough below is done once by whoever runs the server. Your part: user menu → Integrations → Social promotion → Instagram → Connect → log in with your Instagram Business/Creator account → Allow. While the platform's Meta app is unverified, your IG account must be on the operator's tester list — ask them to add you if the connect is refused.
Instagram support is pre-configured by the Scenehatch team. If your connect is refused, ask support to add your IG account to the tester list.
Requirements & behaviour
Instagram account must be Business or Creator (free switch in IG settings).
The app must run on a public HTTPS URL — Instagram fetches the post image by URL. Promo images are automatically resized (≤1440px, aspect padded to IG's 4:5–1.91:1) and hosted via your connected Google Drive/Dropbox for reliable fetching.
Tokens are exchanged for 60-day long-lived tokens automatically; reconnect when expired.
Captions can't contain clickable links (Instagram rule for all apps) — the Etsy link is included as copyable text; use "link in bio" for one-tap access.
TikTokfree
Posts mockup photos to TikTok via the Content Posting API when you hit 📣 Promote on a result card — AI caption with your Etsy link as copyable text.
For sellers — connecting your account (2 clicks)
User menu → Integrations → Social promotion → TikTok → Connect → log in with your TikTok account → Authorize. While the platform's TikTok app is unaudited, your account must be on the operator's target user list (Sandbox) — ask support to add your TikTok username if the connect is refused.
TikTok support is pre-configured by the Scenehatch team.
For operators — creating the TikTok app (once)
Go to developers.tiktok.com → log in (your normal TikTok account works) → Manage apps → Connect an app.
Fill the app basics: name (e.g. Scenehatch), icon, category (Productivity), description, and the two required links —
Terms of Service https://scenehatch.com/terms and Privacy Policy https://scenehatch.com/privacy.
Verify URL ownership for scenehatch.com when prompted (URL properties): TikTok gives you either a signature file to host on the domain or a DNS TXT record — either works.
Add products: Login Kit — set Redirect URI to https://scenehatch.com/social/callback/tiktok — and Content Posting API (enable Direct Post). Request scopes user.info.basic and video.publish.
Copy the Client key and Client secret into .env as TIKTOK_CLIENT_KEY / TIKTOK_CLIENT_SECRET, then restart the server.
For testing before TikTok's audit: keep the app unsubmitted and add up to 10 target users (Sandbox) who can authorize it.
Requirements & behaviour
Images must be publicly fetchable by URL — promo images are hosted via your connected Google Drive/Dropbox automatically (same as Instagram).
Unaudited apps can only post privately (visible to the account owner, SELF_ONLY) — TikTok enforces this for every app until it passes their audit. Submit the app for review to unlock public direct posting.
Captions are limited to 150 characters for photo posts; links aren't clickable — use "link in bio".
Social promotion free
After a listing is on Etsy, the purple 📣 Promote button on its result cards posts the mockup with an AI-written advertising blurb to every connected platform at once — each post linking to the Etsy listing to funnel buyers there.
Pinterest — pins with a direct outbound link; the strongest Etsy traffic driver. App at developers.pinterest.com (scopes: boards + pins read/write; redirect https://scenehatch.com/social/callback/pinterest).
Facebook — photo posts to a Facebook Page you manage (personal profiles can't be posted to by any API). Meta app at developers.facebook.com with Facebook Login; redirect https://scenehatch.com/social/callback/facebook.
Instagram — full step-by-step in the dedicated Instagram section (direct Instagram login, no Facebook Page needed).
TikTok — full step-by-step in the dedicated TikTok section; unaudited apps can only post privately until TikTok's app audit.
Snapchat — Spotlight/Story videos via the Public Profile API. The API is allowlist-only: the operator creates an OAuth app in the Snap Business Dashboard (not the developer portal, redirect https://scenehatch.com/social/callback/snapchat) and a Snap contact must allowlist the client id. Sellers need a Snapchat Public Profile; Spotlight videos must be 5–60 seconds.
Connect platforms in Integrations → Social promotion. Activate the Etsy listing before promoting so the funnel link works for buyers.
What buyers receive
Buyers download from Etsy, never from this server: the order confirmation page and etsy.com/your/purchases.
They get the files attached to the listing: up to 5 files ≤20MB, plus the DOWNLOAD-YOUR-FILES.pdf with the full-bundle link when Dropbox (or a manual link) is used.
The Etsy mobile app cannot download files — the generated description already tells buyers to use a browser.
Keep Dropbox links alive as long as the listing sells — deleting the bundle breaks past buyers' downloads.
Troubleshooting
Etsy: "The requested redirect URL is not permitted"
The callback URL isn't saved in the app's Callback URL(s) field, or differs by a character (https vs http, trailing slash, missing port). Fix, save, wait 2–3 minutes, retry.
Etsy: "The application … is not recognized"
The keystring belongs to a different app than the one you edited, or the app is still pending review. Use one app for everything and check its status.
Etsy: "Shared secret is required in x-api-key header"
Save both the keystring and the shared secret in Integrations — Etsy requires the pair for API calls.
Publish button missing
It appears under "Generate Full Package" only when your Etsy shop is connected and you have completed packages from the last 24 hours.
"None of the selected mockups fit aspect ratio …"
That artwork's shape doesn't match any selected scene's frame (15% tolerance). Select scenes with matching frames or crop the art.
Printful: "This API endpoint applies only to … Manual Order / API platform"
Your connected Printful store is marketplace-connected (Etsy, Shopify…). Create an API store (Dashboard → Stores → Add store → "API") and reconnect Printful in Integrations — the API store is selected automatically.
Files skipped when publishing
Etsy's limits: 5 digital files, 20MB each. Connect Dropbox or Google Drive (recommended) or generate at 150 DPI so more files fit directly.
Printify: "shop … is not connected to sales channel" (code 8254)
Publishing needs the Printify store linked to Etsy — and the API token must come from the same Printify account that owns that store. See the Printify section's setup steps.
Still stuck? The server log (terminal running the app) and etsy_oauth.log usually name the exact problem.
After a listing is on Etsy, the purple 📣 Promote button on its result cards posts the mockup with an AI-written advertising blurb to every connected platform at once — each post linking to the Etsy listing to funnel buyers there.
https://scenehatch.com/social/callback/pinterest).https://scenehatch.com/social/callback/facebook.https://scenehatch.com/social/callback/snapchat) and a Snap contact must allowlist the client id. Sellers need a Snapchat Public Profile; Spotlight videos must be 5–60 seconds.Connect platforms in Integrations → Social promotion. Activate the Etsy listing before promoting so the funnel link works for buyers.