---
tier: hero
reliability: 4.0  # rodin-i3d .6 + bg-remove 0 + turntable i2v .6 + ffmpeg 0 → 3.2; +0.8 standard public caps
---

# Product Photo → Hero 3D — agent playbook ⭐

> Paste this whole file (with the BRIEF filled in) into Claude cowork, chat, or Code. **This is the Rodin v2.5 showcase.** One product photo → a production-ready 3D model (PBR + HD textures) → a polished turntable reveal video. The pipeline that turns a flat product shot into a rotatable hero asset for a store page, AR, or a game.

## What you'll get

- **One clean product image** (the input — a single hero photo; or up to 5 angles for a sharper mesh)
- **A production 3D model** via **`rodin-i3d`** (Hyper3D Rodin v2.5) — PBR materials + HD textures, hero-quality triangle tier
- **A turntable reveal video** — the mesh's render orbited into a short clip via `seedance-i2v` (or `ltx-q-i2v`)
- **A finished MP4** — `ffmpeg-export` to your target aspect + an optional `ffmpeg-overlay` brand mark + a `music` bed
- Total: ~3–5 min, ~$0.30–$0.60 depending on triangle tier + clip length

## The BRIEF (fill this in)

```
PRODUCT: <what it is, e.g. "a matte-black ceramic pour-over coffee dripper">
INPUT IMAGE: <public URL of the product photo — host a local file with scripts/host-local-file.sh first>
MATERIAL / FINISH: <e.g. "matte ceramic, subtle speckle">
USE: <hero (high tris, seen up close) | game-ready (~100K) | background (low)>
LOOK OF THE REVEAL: <e.g. "slow turntable on a dark plinth, soft rim light, neon accent">
ASPECT: <16:9 | 9:16 | 1:1>
BRAND MARK: <logo URL, optional>
```

## The pipeline (stages)

1. **Clean the input** — if the background is busy, run `create_media(action:"animate"? no → action with model_override:"bg-remove")` on the product image so Rodin sees an isolated subject. Skip if the photo is already on a clean backdrop.
2. **Build the 3D** — `create_media(action:"generate", source_url:<clean image>, model_override:"rodin-i3d")` (3D output → action='generate', source_url = the reference image; Rodin accepts up to 5 via the `image_urls` array, handled server-side). Put the **material + triangle intent in the prompt** ("matte ceramic, hero ~500K tris"). Rodin returns the mesh + PBR/HD textures.
3. **Turntable reveal** — render an orbit clip of the mesh's preview: `create_media(action:"animate", source_url:<mesh preview frame>, model_override:"seedance-i2v", prompt:"<reveal look>, slow 360 turntable", duration:8)`. (seedance gives cinematic motion + audio; `ltx-q-i2v` is the cheaper sibling.)
4. **Finish** — `ffmpeg-export` to the target aspect; `ffmpeg-overlay` the brand mark; add a `music` bed and `ffmpeg-mux` (`audio_fill:"loop"`) so the reveal is scored end-to-end.

## Why Rodin here

Use **`rodin-i3d`** (not tripo) when the mesh is the *deliverable* — store pages, AR try-on, game hero assets — because v2.5 ships **real PBR materials + HD textures** and scales to **2M triangles**. Use `tripo-i3d` / `triposplat` for fast previews or splat-renderer output. See the `rodin-3d` skill for the full picture.

## Tips
- **Isolate the subject** — the single biggest quality lever for image→3D. `bg-remove` first.
- **Name the triangle tier** — "hero ~500K" vs "game-ready ~100K" vs "background" → Rodin honors the budget.
- **Text→3D** — no photo? Swap stage 2 for `rodin-t3d` with `action:"generate"` and a description.
