---
title: "Product Orbit Turntable — packshot to slow 360° reveal for PDP and Amazon"
tier: hero
format: short-form-video
theme: commerce | ecommerce | product | pdp | amazon
persona: ecommerce manager, Amazon seller, DTC brand, product photographer, marketplace ops
duration: "1 SKU → 8–15s orbit clip in ~4–8 min"
budget_usd: "$0.25–$1.20 (packshot generate + one i2v orbit animate; fast tier ~$0.50, balanced ~$0.90)"
caps: ["create_media", "gpt-image", "mai-image-2.5", "flux-dev", "pixverse-i2v", "seedance-mini-i2v", "seedance-i2v", "ffmpeg-export", "ffmpeg-loop"]
skills: ["commercial", "short-form-video"]
showcases: ["/chapters/product-orbit-turntable-example.html"]
status: "live (2026-08-03) — Wave 1 showcase rendered E2E via MCP. See /chapters/product-orbit-turntable-example.html"
reliability: 3.9 # first E2E showcase; curated (≥4.0) deferred until a second successful run
---

# Product Orbit Turntable — packshot to slow 360° reveal

Point this at any product — a supplement bottle, a sneaker, a kitchen gadget — and Livepeer Agent builds a **slow orbit / turntable clip** for your product detail page, Amazon listing, or Shopify hero. One clean packshot on a seamless background, then a single image-to-video pass with an explicit orbit prompt. No lifestyle scene, no model, no voice-over — just the product turning so shoppers see every angle.

This is the **motion primitive every marketplace expects** — the 360° spin that static photography cannot deliver.

## What you'll get

- **One studio packshot** — product centered on white/neutral seamless, soft three-point lighting, square or 1:1 framing
- **An 8–15s orbit clip** — slow 360° or 180° turntable rotation, smooth and loopable
- **Platform-ready exports** — 1:1 (Amazon main), 4:5 (Shopify), or 16:9 (deck embed)
- **Fast iteration path** — quick orbit for A/B testing; balanced tier for the hero listing slot

## Fill in your BRIEF

```yaml
product_name:          # e.g. "HydroFlask 32oz Wide Mouth"
product_description:   # restated in every prompt to prevent drift —
                       # e.g. "matte black stainless steel water bottle, wide mouth,
                       #   powder-coat finish, silver cap"
product_photo_url:     # OPTIONAL — real packshot; skip generation if provided
background: white      # white (DEFAULT) | light-gray | brand-color hex
orbit: full-360        # full-360 | half-180 | quarter-90
quality: fast          # fast (pixverse — ~50s, iteration) | balanced (seedance-mini — higher fidelity)
duration_seconds: 10   # 8–15
output_sizes:          # e.g. ["1:1", "4:5"] — default 1:1 for Amazon
launch_slug:           # kebab-case, e.g. hydroflask-orbit
```

## CONVENTIONS

1. **HITL gates:** at every STOP, ask exactly one specific question with concrete options. Never proceed without an answer.
2. **Cost ceiling:** total < $10. After each stage, print running cost.
3. **Output paths:** write HTML to `public/launches/{launch_slug}-turntable.html`. Print full paths at end.
4. **Brand stickiness:** if brand kit exists, activate it so palette keywords thread into the packshot prompt.
5. **MCP envelope gaps:** direct SDK POST for ffmpeg tools when array params drop.
6. **On capability failure:** retry once after 5s; on second failure, ask retry / skip / abort.
7. **Polling:** poll `get_create_media` every 8–15s until done or failed.
8. **Bearer token:** cowork injects it; SDK curl reads `~/.daydream/credentials`.

## The cap chain (PROVEN recipe)

```
product_name + product_description [+ product_photo_url if provided]
  → create_media action:"generate"           # studio packshot (skip if product_photo_url supplied)
       mai-image-2.5 | gpt-image | flux-dev
       prompt: "studio product photography, {product_description}, centered on {background}
                seamless, soft three-point lighting, no model, no props, no text, no shadow clutter"
       aspect_ratio: "1:1"
  → create_media action:"animate"            # orbit / turntable motion
       quality: fast   → pixverse-i2v        # ~50s p95, great for iteration
       quality: balanced → seedance-mini-i2v  # higher multi-shot fidelity, ~2× slower
       prompt: "slow smooth 360-degree turntable orbit around the product, studio lighting,
                seamless background, product stays centered and sharp, no camera shake"
       duration: 8–15 (string enum per cap)
  → ffmpeg-loop                              # OPTIONAL — seamless loop for PDP autoplay
  → ffmpeg-export                            # crop to output_sizes (1:1, 4:5, 16:9)
```

## STAGE 0 — Confirm the brief (~0 min, $0)

Restate product, orbit type, quality tier, and target platform. If `product_photo_url` is provided, skip packshot generation. One line: "10s 360° turntable for {product_name}, {quality} tier, ~$0.25–$1.20, ~4–8 min."

**STOP:** "Brief looks right? (approve / edit [field] [new value])"

## STAGE 1 — Packshot (~1–2 min, ~$0.06–$0.12)

Generate (or accept) one studio packshot. Use the photoreal product model when packaging text matters; flux-dev for simple geometry. Explicitly forbid text, props, and models in the prompt.

Show the packshot full-size. Verify silhouette, color, and label zone match the real product.

**STOP:** "Packshot OK? (approve / reshoot [direction — e.g. lower angle, softer shadow])"

## STAGE 2 — Orbit motion (~2–5 min, ~$0.40–$0.90)

Animate the packshot with an explicit turntable prompt. Default to the **fast tier** for first pass; offer balanced upgrade at the gate if the user wants hero PDP quality.

Poll until done. Show the orbit clip.

**STOP:** "Orbit clip OK? (approve / upgrade-HQ / redo-orbit [direction — e.g. slower, wider arc])"

## STAGE 3 — Export sizes (~30s, ~$0.02)

Export to the requested aspect ratios. Optionally loop the clip for seamless PDP autoplay.

**STOP:** "Export sizes correct? (approve / add [size])"

## STAGE 4 — Package deliverable (~30s, $0)

Write showcase HTML to `public/launches/{launch_slug}-turntable.html` with embedded clip(s), product name, and orbit spec.

## Quality bar (definition of done)

- ✅ Product stays **centered and sharp** through the orbit — no wobble, no drift off-frame.
- ✅ Background is clean seamless — no props, no lifestyle context, no text.
- ✅ Rotation speed is slow and premium — ~8–15s for a full or half orbit, not a frantic spin.
- ✅ Silhouette and color match the packshot start frame at the end frame (loop-ready).
- ✅ Exported at the requested aspect ratio(s) without letterboxing.

## Watch-outs

- **Orbit drift is the #1 failure.** i2v can change the product's shape mid-rotation — especially intricate packaging. If drift appears, retry with a slower prompt or switch to balanced tier; if still bad, deliver a 180° half-orbit (less drift surface).
- **Never add lifestyle context.** This playbook is PDP motion, not a brand film. One product, one background, one orbit.
- **Packaging text:** mai-image-2.5 holds label zones best; verify the label isn't smeared after i2v — if smeared, the silhouette still sells on Amazon; note the limitation honestly.
- **Fast vs balanced:** fast tier is for iteration and A/B; balanced tier is for the hero listing slot. Offer HQ upgrade at Stage 2 STOP.
- **Loop seam:** if the first and last frames don't match, use ffmpeg-loop or trim to the cleanest 180° arc.

## FINAL OUTPUT

```
✅ Product turntable: public/launches/{launch_slug}-turntable.html
✅ Orbit MP4 ({duration}s): <URL>
✅ Exports: {sizes list with URLs}
✅ Quality tier: {fast | balanced}

Total spent: $X.XX
Total wall-clock: MM:SS
```

## AFTERCARE

1. **HQ re-render** — same packshot, `quality: balanced` or explicit seedance-i2v for the hero slot.
2. **Lifestyle cut** — take the approved packshot into `luxury-product-ads` or `ecommerce-lookbook` for a styled campaign.
3. **Multi-SKU batch** — same background + lighting, swap `product_description` per SKU; batch orbit passes.
4. **360° viewer embed** — host the loop on your PDP; use the showcase HTML as an internal QA page.

---

## Notes for the agent (only read if a step fails)

**Quality tier mapping:** `quality: fast` → pixverse-i2v; `quality: balanced` → seedance-mini-i2v. Explicit model mention only when user asks for premium (seedance-i2v full).

**Duration param:** seedance caps expect string duration `'8'`–`'15'`. Cast explicitly.

**i2v fallback:** pixverse-i2v → seedance-mini-i2v → ltx-i2v (`resolution:"auto"`) → Ken-Burns slow pan (deterministic, not a true orbit but acceptable for PDP placeholder).
