Shopify Product Promo
by @api00
Turn a Shopify (or any e-commerce) product page URL into a 30–45 second 9:16 promo video ready for TikTok / Reels / Shorts. Use when the user shares a produc...
clawhub install revid-shopify-product-promo📖 About This Skill
name: revid-shopify-product-promo description: Turn a Shopify (or any e-commerce) product page URL into a 30–45 second 9:16 promo video ready for TikTok / Reels / Shorts. Use when the user shares a product link and wants a short ad/promo, not a long-form review. metadata: {"openclaw":{"requires":{"config":["REVID_API_KEY"]}}}
Shopify product → promo video
Take a product page URL and produce a vertical promo video that pulls the product image(s), name, key features, and price.
When to use this skill
revid-script-to-video.
revid-product-description-to-ad.Inputs
| Field | Required | Notes |
|---|---|---|
| url | yes | Public product page URL |
| aspectRatio | no | Defaults to 9:16 |
| targetDuration | no | Defaults to 35 (s) |
| voiceId | no | Default voice if omitted |
| webhookUrl | no | Skip polling if you can receive webhooks |
Step-by-step
1. Validate the URL — must start with http(s)://. Reject obvious
non-product paths (/cart, /blog, /collections/all).
2. Optional pre-flight — fetch the URL once with HEAD to confirm it
returns 200. If 4xx, ask the user to confirm the link.
3. Build the payload (see template). Defaults are tuned for product promo:
high density, dynamic animation, captions ON, music ON.
4. POST /api/public/v3/render — capture the returned pid.
5. Poll /status?pid=… with the canonical loop (see Polling section
below) or wait for the webhook.
6. Return { pid, status, videoUrl, thumbnailUrl, durationSeconds, creditsUsed }.
API call template
POST /api/public/v3/render
Host: www.revid.ai
Content-Type: application/json
key: $REVID_API_KEY
{
"workflow": "article-to-video",
"source": {
"url": "{PRODUCT_URL}",
"scrapingPrompt": "Extract the product name, hero image, 3 key features, and price. Ignore reviews, related products, footer, and navigation."
},
"aspectRatio": "9:16",
"voice": { "enabled": true, "stability": 0.55, "speed": 1.05, "language": "en-US" },
"captions": { "enabled": true, "position": "middle", "autoCrop": true },
"music": { "enabled": true, "syncWith": "beats", "trackName": "uplifting-pop" },
"media": {
"type": "stock-video",
"density": "high",
"animation": "dynamic",
"quality": "pro",
"imageModel": "good",
"videoModel": "pro",
"turnImagesIntoVideos": true,
"applyStyleTransfer": false
},
"options": {
"targetDuration": 35,
"summarizationPreference": "summarize",
"hasToGenerateCover": true,
"coverTextType": "product-name",
"soundEffects": true,
"addStickers": false
},
"render": { "resolution": "1080p", "frameRate": 30 }
}
scrapingPrompt is the most important knob — it stops Revid from picking up
header/footer junk. Customize it per storefront if you find a recurring noise
pattern.
Examples
examples/shopify-aeropods.json — payload.examples/run.sh — end-to-end curl.Quick test
URL="https://your-shop.myshopify.com/products/your-product"curl -s https://www.revid.ai/api/public/v3/render \
-H "Content-Type: application/json" \
-H "key: $REVID_API_KEY" \
-d "$(jq --arg url "$URL" '.source.url=$url' \
examples/shopify-aeropods.json)"
Polling
After POST /render, poll until status === "ready":
PID=""
while :; do
R=$(curl -fsSL "https://www.revid.ai/api/public/v3/status?pid=$PID" \
-H "key: $REVID_API_KEY")
S=$(echo "$R" | jq -r .status)
case "$S" in
ready) echo "$R" | jq .; break ;;
failed) echo "FAILED: $R"; exit 1 ;;
*) sleep 5 ;;
esac
done
In production prefer setting webhookUrl in the request body and skip polling.
Failure modes
| Symptom | Fix |
|---|---|
| scrape failed / 403 from the URL | Storefront blocks bots. Open the page in a real browser, copy the title + 3 bullet features + price into a script, and switch to revid-script-to-video. |
| Video shows wrong product image | Storefront serves SSR via JS only. Pass media.useOnlyProvided: true and media.provided: [{ url: " to force the right asset. |
| Voice sounds robotic | Increase voice.stability to 0.7 and pick a specific voice.voiceId. Default voice varies. |
| Duration overshoots target | Set options.summarizationPreference: "summarize" (already in the template) and lower targetDuration. |
| Captions cover product | captions.position: "top" (or "bottom"). |
See also
revid-product-description-to-adrevid-script-with-custom-mediarevid-api-foundations for the contract.💡 Examples
examples/shopify-aeropods.json — payload.examples/run.sh — end-to-end curl.Quick test
URL="https://your-shop.myshopify.com/products/your-product"curl -s https://www.revid.ai/api/public/v3/render \
-H "Content-Type: application/json" \
-H "key: $REVID_API_KEY" \
-d "$(jq --arg url "$URL" '.source.url=$url' \
examples/shopify-aeropods.json)"